hosts.deny에 특정 아이피를 등록하여 ssh 서비스에 접근을 거부하는 방법을 설명합니다.

대상 NAS: 디스크스테이션 ds-106e(다른 모델도 같을 거라 생각됩니다)

오늘 일찍 퇴근해서 집에 왔는데 디스크스테이션(ds-106e)의 LAN LED가 깜박이고 있길래 접속해서 현재 연결을 확인해보았습니다.

fs> netstat -nat
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 192.168.0.3:22        202.108.218.19:4603        ESTABLISHED

ssh 접속은 저만 하는데 모르는 아이피(202.108.218.19)가 연결되어 있더군요..

로그(/var/log/messages)를 확인해보니 아래와 같이 brute-force attack을 시도하고 있더군요..

Nov 26 19:41:29 sshd[13942]: Failed password for invalid user www from 202.108.218.19 port 50055 ssh2
Nov 26 19:41:29 sshd[13942]: Received disconnect from 202.108.218.19: 11: Bye Bye
Nov 26 19:41:30 sshd[13943]: Invalid user apache from 202.108.218.19
Nov 26 19:41:30 sshd[13943]: input_userauth_request: invalid user apache
Nov 26 19:41:30 sshd[13943]: Failed password for invalid user apache from 202.108.218.19 port 50133 ssh2
Nov 26 19:41:30 sshd[13943]: Received disconnect from 202.108.218.19: 11: Bye Bye
Nov 26 19:41:31 sshd[13944]: Invalid user apache from 202.108.218.19
Nov 26 19:41:31 sshd[13944]: input_userauth_request: invalid user apache
Nov 26 19:41:31 sshd[13944]: Failed password for invalid user apache from 202.108.218.19 port 50166 ssh2
Nov 26 19:41:31 sshd[13944]: Received disconnect from 202.108.218.19: 11: Bye Bye
Nov 26 19:41:32 sshd[13945]: Invalid user apache from 202.108.218.19
Nov 26 19:41:32 sshd[13945]: input_userauth_request: invalid user apache
Nov 26 19:41:32 sshd[13945]: Failed password for invalid user apache from 202.108.218.19 port 50638 ssh2
Nov 26 19:41:32 sshd[13945]: Received disconnect from 202.108.218.19: 11: Bye Bye
Nov 26 19:41:33 sshd[13946]: Invalid user oracle from 202.108.218.19
Nov 26 19:41:33 sshd[13946]: input_userauth_request: invalid user oracle
Nov 26 19:41:33 sshd[13946]: Failed password for invalid user oracle from 202.108.218.19 port 50675 ssh2
Nov 26 19:41:33 sshd[13946]: Received disconnect from 202.108.218.19: 11: Bye Bye

그래서, hosts.deny에 해당 아이피를 등록하여 차단하고자 했으나 안되더군요..
검색 결과 standalone 모드에서는 hosts.deny를 사용하지 않는다는군요..
inetd 모드로 구동해야 된다네요..

/etc/inetd.conf에 다음과 같이 설정합니다.

#ssh     stream  tcp     nowait  root    /usr/sbin/tcpd     /opt/sbin/sshd -i
ssh     stream  tcp     nowait  root    /usr/sbin/tcpd     /usr/syno/sbin/sshd -i

/usr/sbin/tcpd가 없으면 구해서 넣어야 됩니다.

sshd의 포트를 변경하려면 /etc/services 파일에서 ssh 부분을 아래와 같이 22번에서 다른 포트로 변경합니다.(변경하지 않아도 되지만 기본 포트인 22에서 다른 포트로 변경하면 공격이 많이 줄어듭니다)

ssh             2525/tcp                                # SSH Remote Login Protocol
ssh             2525/udp                                # SSH Remote Login Protocol

변경된 내용을 저장한 후 inetd 데몬을 재시작합니다.

악성(공격자)의 아이피 주소를 저장할 파일을 하나 생성합니다.

fs> touch /etc/hosts.evil

/etc/hosts.deny에 아래와 같이 한 줄 추가합니다.

ALL: /etc/hosts.evil

sshd만 차단하려면 ALL: 대신 sshd:로 수정합니다.

이제 /etc/hsots.evil에 아래와 같이 접속을 차단시킬 아이피 주소만 넣어주면 됩니다.

202.108.218.19
87.30.0.161
200.207.27.23
200.78.251.60

다음엔 DenyHosts를 사용하여 공격자의 아이피를 자동으로 /etc/hsots.evil에 추가하는 팁을 올려보겠습니다.

용어 설명:
TCP Wrapper