MAC 필터링과 함께 SSH에 iptables 사용 - 권장됩니까?

MAC 필터링과 함께 SSH에 iptables 사용 - 권장됩니까?

내부 네트워크(VPN을 통해 로그인)에 서버가 있고 거기에서 OpenSSH 공개/개인 키 인증을 사용하여 SSH를 통해 서버에 로그인합니다. 보안 관점에서 저는 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

관련 정보