iptables를 사용한 MAC 기반 필터링이 포함된 SSH - 권장되나요?

iptables를 사용한 MAC 기반 필터링이 포함된 SSH - 권장되나요?

OpenSSH 공개/개인 키 인증을 사용하여 SSH를 통해 서버에 로그인하는 내부 네트워크(VPN을 통해 로그인)에 서버가 있습니다. 보안 관점에서, 나는 iptables서버를 통해 내가 사용한 세 클라이언트의 MAC 주소를 연결하여 이들 클라이언트만 로그인할 수 있도록 하고 싶습니다.

iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source xx:xx:xx:xx:xx:xx -j ACCEPT
iptables -A INPUT -p tcp --destination-port 22 -j DROP

하지만 이런 식으로 하는 것이 권장됩니까? SSH 로그인을 사용된 클라이언트에 연결하기 위해 사용할 수 있는 다른 (더 나은) 방법은 무엇입니까?

(누군가 2FA를 요청하려는 경우 안타깝게도 2FA는 잠재적인 해결책으로 불가능합니다.)

감사해요.

답변1

나는 SSH 서버가 유효한 사용자 자격 증명을 제공하더라도 신뢰할 수 없는 호스트로부터의 연결을 수락하지 못하도록 하고 싶다고 가정합니다. 맞아?

사용자의 공개 키 인증을 선택된 클라이언트 호스트에 연결하는 가능한 솔루션은 호스트 기반 인증을 이용하는 것입니다. 호스트 기반 인증을 설정하고 다음 중 하나에 AuthenticationMethods매개변수를 정의합니다 /etc/ssh/sshd_config.

AuthenticationMethods hostbased,publickey hostbased,keyboard-interactive hostbased,password

또는:

AuthenticationMethods hostbased,publickey

이는 SSH 데몬에게 사용자의 키나 비밀번호를 확인하기 전에 클라이언트가 연결 중인 호스트를 인증하도록 요청하도록 지시합니다. 전자의 대안은 비밀번호 기반 인증을 허용하는 반면 후자는 공개 키로만 제한합니다. 호스트 기반 인증은 키 쌍을 기반으로 하기 때문에 SSH 서버는 동적 IP 주소로 클라이언트를 인증할 수 있습니다.


다음은 전체 지침을 따릅니다. SSH가 호스트 기반 인증을 수행하는 방법에 대한 문서는ssh(1)맨페이지. SSH가 사용자를 식별하는 방법을 확인하고 귀하의 사례에 적용 가능한지 확인하십시오.

호스트 기반 인증은 다음과 같이 작동합니다. 사용자가 로그인하는 컴퓨터가 원격 컴퓨터에 나열되어 /etc/hosts.equiv있고/etc/ssh/shosts.equiv사용자 이름은 양쪽에서 동일합니다.~/.rhosts또는 파일이 ~/.shosts원격 시스템의 사용자 홈 디렉토리에 존재하고클라이언트 컴퓨터의 이름과 해당 컴퓨터의 사용자 이름이 포함된 줄을 포함합니다., 사용자는 로그인 대상으로 간주됩니다. 또한 로그인이 허용되려면 서버가 클라이언트의 호스트 키를 확인할 수 있어야 합니다. 이 인증 방법은 IP 스푸핑, DNS 스푸핑, 라우팅 스푸핑으로 인한 보안 구멍을 닫습니다. [관리자 참고 사항: /etc/hosts.equiv, ~/.rhosts및 rlogin/rsh 프로토콜은 일반적으로 본질적으로 안전하지 않으므로 보안이 필요한 경우 비활성화해야 합니다.]

OpenSSH에서 호스트 기반 인증을 활성화하려면:

# /etc/ssh/sshd_config

HostbasedAuthentication yes
IgnoreUserKnownHosts yes
IgnoreRhosts yes

# AuthenticationMethods hostbased,publickey hostbased,keyboard-interactive hostbased,password
AuthenticationMethods hostbased,publickey
  • 호스트 기반 인증을 수행하려면 다음 설정을 통해 클라이언트가 제공한 호스트 이름 정보를 신뢰할 수 있습니다 HostbasedUsesNameFromPacketOnly yes./etc/ssh/sshd_config:
# /etc/ssh/sshd_config

HostbasedUsesNameFromPacketOnly yes
  • /etc/hosts또는 네트워크의 DNS 서버에 있는 파일이나 PTR 레코드 에 저장된 정보를 사용하여 클라이언트의 IP 주소를 확인하여 호스트 이름을 식별하도록 SSH 데몬을 구성할 수 있습니다 .
# /etc/ssh/sshd_config

HostbasedUsesNameFromPacketOnly no
UseDNS yes
# /etc/ssh/shosts.equiv

ssh-client-alpha
ssh-client-bravo
ssh-client-charlie
  • /etc/ssh/ssh_known_hosts파일 에 승인된 호스트의 공개 키를 나열합니다 . 그렇게 하는 편리한 방법은 다음과 같습니다.ssh-keyscan:
[root@ssh-server ~]# ssh-keyscan ssh-client-alpha >> /etc/ssh/ssh_known_hosts
[root@ssh-server ~]# ssh-keyscan ssh-client-bravo >> /etc/ssh/ssh_known_hosts
[root@ssh-server ~]# ssh-keyscan ssh-client-charlie >> /etc/ssh/ssh_known_hosts

호스트 기반 인증 요청을 수락하도록 OpenSSH 서버를 구성한 후 클라이언트도 호스트 기반 인증을 요청하도록 구성해야 합니다.

# /etc/ssh/ssh_config

Host *
    HostbasedAuthentication yes
    EnableSSHKeySign yes
  • SUID/SGID 비트가ssh-keysign실행 파일은 호스트의 개인 키 파일에 대한 읽기 권한을 부여합니다.
[root@ssh-client-alpha ~]# find /usr -name ssh-keysign -ls
 16517300    616 -r-xr-sr-x   1  root     ssh_keys   630344 Feb  4 16:01 /usr/libexec/openssh/ssh-keysign

[root@ssh-client-alpha ~]# ls -l /etc/ssh/ssh_host_*key
-rw-r----- 1 root ssh_keys  480 Apr 13 06:51 /etc/ssh/ssh_host_ecdsa_key
-rw-r----- 1 root ssh_keys  387 Apr 13 06:51 /etc/ssh/ssh_host_ed25519_key
-rw-r----- 1 root ssh_keys 2578 Apr 13 06:51 /etc/ssh/ssh_host_rsa_key

관련 정보