내 상황은 다음과 같습니다. SSH 클라이언트(192.168.0.11) -> SSH 서버 및 설정 포트 전달이 있는 공용 클라우드 VM(139.90.90.90)(CentOS7.9) -> 내부 SSH 서버 1개(10.24 .24.24)(CentOS 7.9) )). 내부 SSH 서버 중 하나에 액세스하기 위해 포트 전달을 만들었고 특정 포트가 있는 퍼블릭 클라우드 VM을 통해 액세스할 수 있습니다.
ssh -L *:10100:10.24.24.24:10100 -N -f [email protected]
내 노트북 SSH 클라이언트가 139.90.90.90:10100에 성공적으로 액세스할 수 있습니다.
그런데 최근에 문제를 발견했습니다. 인터넷에서 포트를 열었기 때문에 잘못된 SSH 로그인 요청이 많아 서버가 추가 리소스를 소비하는 경우가 있었습니다. 안전하면 안 되기 때문에 firewalld-cmd
일부 소스 IP를 거부하곤 했습니다.
내 질문은 이러한 소스 IP를 감지하는 방법입니다. 내부 SSH 서버에 있으므로 퍼블릭 클라우드 IP 주소 139.90.90.90만 표시됩니다. 예를 들어 내부 Linux 서버( /var/log/secure
)에서는 다음과 같습니다.
May 10 23:48:46 z1 sshd[17066]: input_userauth_request: invalid user nano [preauth] May 10 23:48:46 z1 sshd[17066]: pam_unix(sshd:auth): check pass; user unknown May 10 23:48:46 z1 sshd[17066]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=139.90.90.90 May 10 23:48:48 z1 sshd[17066]: Failed password for invalid user nano from 139.90.90.90 port 40800 ssh2
소스 IP를 찾는 방법을 알고 방화벽을 통해 퍼블릭 클라우드 서버에서 차단할 수 있습니다.
고마워요, 유진
답변1
어쨌든 정확하게 식별할 수 있는 방법은 찾지 못했습니다. 그런데 이러한 공격자(해커)를 막는 데 도움이 될 수 있는 가능성을 발견했습니다. SSH 구성 파일을 "LogLevel DEBUG1"로 변경하면 "server_request_direct_tcpip: Originator 128.199.32.98 port 48498, target 211.95.84.14"와 같은 많은 항목이 표시됩니다. 이 시점에서 이러한 IP가 유효한지 확인할 수 있습니다. 그런 다음 IP가 유효하지 않은지 확인하고 연결을 차단하는 스크립트를 작성할 수 있습니다.
firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=$IP reject"
유효한 연결을 허용하는 화이트리스트를 생성할 수도 있습니다.