CentOS 서버(7.0)를 실행 중이고 sshd를 통해 루트가 아닌 사용자로 로그인하고 싶습니다. 그래서 PermitRootLogin no
구성 파일에 설정하고 su -
로그인 후에 설정했습니다. 해킹 활동이 많이 일어나고 있어서 sshd를 통해 한 명의 사용자만 로그인하도록 허용하기로 결정했습니다. 사용자 이름은 내 실명이 아니거나 일반적인 이름이 아니기 때문에 그것으로 충분하다고 생각했습니다. "hkbjhsqj"라고 가정해 보겠습니다.
nixCraft에 설명된 두 가지 방법을 모두 시도했습니다.sshd_config에서 허용된 사용자또는PAM의 pam_listfile.so. 나에게 유일한 문제는 다른 사람들이 여전히 비밀번호를 입력하고 /var/log/secure에 로그인을 남길 기회가 있다는 것입니다. 이러한 작업은 암호 확인 및 기타 작업을 실행하기 위해 서버 리소스를 소비한다고 가정합니다.
사용자 이름 "admin"을 사용하여 로그인을 시도한다고 가정해 보겠습니다.
www$ ssh [email protected]
[email protected]'s password:
Permission denied, please try again.
[email protected]'s password:
Permission denied, please try again.
[email protected]'s password:
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
그리고 보안 로그에서:
Aug 8 08:28:40 www sshd[30497]: pam_unix(sshd:auth): check pass; user unknown
Aug 8 08:28:40 www sshd[30497]: pam_listfile(sshd:auth): Refused user admin for service sshd
Aug 8 08:28:43 www sshd[30497]: Failed password for invalid user admin from 192.168.0.1 port 52382 ssh2
Aug 8 08:28:47 www sshd[30497]: pam_unix(sshd:auth): check pass; user unknown
Aug 8 08:28:47 www sshd[30497]: pam_listfile(sshd:auth): Refused user admin for service sshd
Aug 8 08:28:50 www sshd[30497]: Failed password for invalid user admin from 192.168.0.1 port 52382 ssh2
Aug 8 08:28:52 www sshd[30497]: pam_unix(sshd:auth): check pass; user unknown
Aug 8 08:28:52 www sshd[30497]: pam_listfile(sshd:auth): Refused user admin for service sshd
Aug 8 08:28:55 www sshd[30497]: Failed password for invalid user admin from 192.168.0.1 port 52382 ssh2
Aug 8 08:28:55 www sshd[30497]: Connection closed by 192.168.0.1 [preauth]
Aug 8 08:28:55 www sshd[30497]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.0.1
/etc/hosts.deny에 IP를 추가하면 이런 일이 발생하지 않습니다.
www$ ssh [email protected]
ssh_exchange_identification: Connection closed by remote host
그리고 보안 로그에서:
Aug 8 08:35:11 www sshd[30629]: refused connect from 192.168.0.1 (192.168.0.1)
Aug 8 08:35:30 www sshd[30638]: refused connect from 192.168.0.1 (192.168.0.1)
그래서 내 질문은, 비밀번호를 확인하지 않고 어디에서든 관련되지 않은 모든 사용자의 ssh 요청을 거부할 수 있는 방법이 있습니까? 예를 들어 호스트 거부 목록에 넣는 것처럼요? 그러나 동시에 사용자 이름 "hkbjhsqj"를 사용하여 어디서나 모든 SSH 요청을 허용한 다음 비밀번호를 확인해야 합니다.
답변1
나는 당신이 요구하는 것을 하는 것이 불가능하다고 생각합니다. 가능하다면 누군가가 귀하의 서버에서 유효한 사용자 이름을 "무차별 대입"하여 찾을 수 있습니다. 또한 사용자 이름과 비밀번호가 클라이언트에 의해 동시에 전송된다고 확신합니다. 암호화되지 않은 SSH 연결에서 Wireshark를 사용하여 패킷을 캡처하여 이를 확인할 수 있습니다.
"해킹"이란 암호에 대한 무차별 대입 시도에 대해 이야기하고 있다고 가정합니다. 이로부터 자신을 보호하는 방법은 여러 가지가 있으며 가장 일반적인 방법을 설명하겠습니다.
루트 로그인 비활성화 SSH를 사용하여 루트 로그인을 거부함으로써 공격자는 유효한 사용자 이름을 알고 있거나 추측해야 합니다. 대부분의 자동화된 무차별 대입 공격은 루트로만 로그인을 시도합니다.
인증 실패 시 IP 차단 fall2ban 및 sshguard와 같은 데몬은 로그 파일을 모니터링하여 로그인 실패를 감지합니다. 여러 번의 로그인 시도 실패 후 로그인을 시도하는 IP 주소를 차단하도록 구성할 수 있습니다. 귀하의 상황에 대해 이것이 제가 제안하는 것입니다. 이렇게 하면 이 IP의 모든 패킷이 sshd 데몬에 도달하기 전에 차단되므로 로그 스팸과 서버 스트레스가 줄어듭니다. 예를 들어, 지난 5분 동안 3번의 로그인 실패가 있었던 IP를 60분 동안 차단하도록 Fail2ban을 설정할 수 있습니다. 최악의 시나리오에서는 공격자가 포기하지 않고 계속 진행한다고 가정하면 60분마다 로그에 3개의 실패한 로그인이 표시됩니다.
공개키 인증
비밀번호 인증을 완전히 비활성화하고 특정 키를 가진 클라이언트만 허용할 수 있습니다. 이는 일반적으로 가장 안전한 솔루션으로 간주됩니다(클라이언트가 키를 안전하고 암호화된 상태로 유지한다고 가정). 비밀번호 인증을 비활성화하려면 공개 키를 서버에 추가 하고 ~/.ssh/authorized_keys
sshd_config 에서 설정 PasswordAuthentication
하세요 no
. 이를 달성하는 데 도움이 되는 많은 튜토리얼과 도구가 있습니다.
답변2
유일한 관심사가 로깅 양이라면 sshd_config의 LogLevel 설정을 사용하여 로깅 양을 줄일 수 있습니다.
SSH 서버에 대한 과도한 변조를 피하려면, 특정 횟수만큼 시도가 실패한 후에는 fall2ban과 같은 도구를 사용하여 IP 주소를 차단할 수 있습니다.