ssh 서버
Last updated
Last updated
원격지 연결에 사용하는 텔넷(telnet) 이나 rlogin 프로토콜은 오래되었고 보안상 취약한 프로토콜로 이제는 사용하면 안 됩니다.
ssh 는 암호화를 사용하여 세션을 보호하고 암호, 공개키, 챌린지 응답등 다양한 인증 방식을 제공하고 있으며 포트 포워딩을 제공하므로 X-Windows가 필요해도 ssh 포트만 열어도 사용할 수 있습니다.
많은 리눅스 배포판들이 오래전부터 텔넷 서버를 제거하고 ssh 서버를 기본 원격 로그인 서버로 사용했습니다.
그러면 sshd를 더 안전하게 사용할 수 있는 방법을 알아 봅시다.
ssh의 기본 포트인 22 번 포트는 모든 IP에 대해서 열지 말고 허용된 곳에서만 연결을 허용하도록 해야 합니다.
다음은 192.168.10 대역에서 ssh 연결을 허용하는 iptables 의 설정 예제입니다.
Brute force Attack을 막기 위해 일정 횟수용 이상 접근을 시도한 IP 는 을 사용하여 차단할 수 있습니다.
fail2ban은 침입 방지 시스템(IPS; Intrusion prevention system) 으로 /var/log/auth.log 나 /var/log/apache/access.log 를 모니터링하여 로그인을 시도한 IP 를 차단합니다.
다른 솔루션과 차이점은 iptables 같은 커널 레벨의 방화벽을 사용하여 로우 레벨에서 차단하는 점이며 ssh외에 http 나 기타 프로토콜에도 사용할 수 있습니다.
id와 비밀번호같은 지식 기반의 인증은 인증 정보가 유출되면 무력화되므로 사용자가 인증 요소를 소유하고 있어야 하는 소유 기반의 인증(공개키, OTP, 보안 카드등)을 사용하는 것이 좋습니다.
비밀번호 인증을 사용하지 않으려면 /etc/ssh/sshd_config 에 다음 항목을 설정하고 service sshd restart 를 실행하면 됩니다.
암호 인증을 중지하기전에 공개키나 2단계 인증을 설정해 두어야 합니다.
공개키 방식의 인증은 키 쌍을 보유하고 있어야 하므로 암호 방식보다 안전합니다. /etc/ssh/sshd_config 에 다음과 같이 설정되어 있으면 공개키 인증이 가능합니다.(기본 설정)
접근이 허용된 공개키는 원격 사이트의 ~/.ssh/authorized_keys 에 저장되어 있습니다.
ssh-copy-id 명령어를 사용하면 원격지에 사용할 공개키를 등록할 수 있습니다.
myloginid 는 로그인하려는 id 이고 myhost.com은 로그인하려는 서버의 주소입니다.
공개키 방식의 인증도 키쌍이 유출되면 다른 이가 접근 가능하며 더욱 견고하게 하려면 ~/.ssh/authorized_keys 에 다음과 같이 from 키워드에 해당 공개키로 접근 가능한 client IP를 기술해 주면 됩니다.
2단계 인증(2 factor authentication)을 사용하면 OTP(One Time Password)같이 추가 인증 수단을 통해 ssh 로 로그인할 수 있으므로 더욱 안전합니다.
Bastion 호스트는 보호된 네트워크에서 유일하게 외부에 노출되는 내외부 네트워크의 연결 호스트를 의미합니다.
운영등의 이유로 외부에서 내부 서버에 ssh 로 연결해야 할 필요가 있을 경우 바로 들어갈 수 있도록 하지 말고 베스천 호스트를 구성한 후에 이 서버를 통해서만 내부에 접근할 수 있도록 구성해야 합니다.
특히 AWS 등의 크라우드를 사용하는 경우 베스천 호스트를 통해 private network 에 위치한 서버에 연결하는 것을 권장합니다.
제일 쉽게 사용할 수 있는 OTP는 이며 ssh 서버에 설치한 후에 스마트 폰에 app을 설치하여 휴대폰에서 생성된 1회용 비밀번호로 원격지에 로그인할 수 있습니다.
더 자세한 내용은 을 참고하세요.