sshd 포트 변경이 필요한 이유
초보자의 서버 구축 운영기 - sshd 포트 변경이 필요한 이유
개인공부를 위해 windows 10에 virtualbox를 이용하여 centos 7을 설치하고, 외부에서 접근이 가능하도록 구축을 하였습니다.
그리고 몇일 후 root 계정으로 로그인을 해보니 다음과 같은 로그 메시지가...
[anhm@localhost ~] su - root
암 호:
마지막 로그인 : 목 2월 15 15:30:38 KST 2018 일시 pts/2
마지막 로그인 실패: 토 2월 24 18:07:02 KST 2018 42.7.26.85에서 시작 일시 ssh:no tty
마지막 로그인 후 122869 번의 로그인 시도가 실패하였습니다.
순간 허걱... 엄청난 로그인 시도가 존재하였고, 아마도 로그인에 성공은 못한것으로 보여지더군요.
일단 아래와 같이 ssh의 서비스를 종료하고,
[root@localhost ~]# systemctl start sshd
ssh 로그를 확인해본 결과
[root@localhost ~]# cat /var/log/secure
...
Feb 24 18:17:43 localhost sshd[19071]: pam_succeed_if(sshd:auth): requirement "uid >= 1000" not met by user "root"
Feb 24 18:17:46 localhost sshd[19071]: Failed password for root from 42.7.26.85 port 9346 ssh2
Feb 24 18:17:47 localhost unix_chkpwd[19074]: password check failed for user (root)
Feb 24 18:17:47 localhost sshd[19071]: pam_succeed_if(sshd:auth): requirement "uid >= 1000" not met by user "root"
Feb 24 18:17:49 localhost sshd[19071]: Failed password for root from 42.7.26.85 port 9346 ssh2
Feb 24 18:17:49 localhost unix_chkpwd[19075]: password check failed for user (root)
Feb 24 18:17:49 localhost sshd[19071]: pam_succeed_if(sshd:auth): requirement "uid >= 1000" not met by user "root"
Feb 24 18:17:51 localhost sshd[19071]: Failed password for root from 42.7.26.85 port 9346 ssh2
Feb 24 18:17:52 localhost unix_chkpwd[19076]: password check failed for user (root)
Feb 24 18:17:52 localhost sshd[19071]: pam_succeed_if(sshd:auth): requirement "uid >= 1000" not met by user "root"
Feb 24 18:17:53 localhost sshd[19071]: Failed password for root from 42.7.26.85 port 9346 ssh2
Feb 24 18:17:54 localhost unix_chkpwd[19079]: password check failed for user (root)
Feb 24 18:17:54 localhost sshd[19071]: pam_succeed_if(sshd:auth): requirement "uid >= 1000" not met by user "root"
Feb 24 18:17:56 localhost sshd[19071]: Failed password for root from 42.7.26.85 port 9346 ssh2
Feb 24 18:17:57 localhost unix_chkpwd[19080]: password check failed for user (root)
Feb 24 18:17:57 localhost sshd[19071]: pam_succeed_if(sshd:auth): requirement "uid >= 1000" not met by user "root"
Feb 24 18:17:59 localhost sshd[19071]: Failed password for root from 42.7.26.85 port 9346 ssh2
Feb 24 18:17:59 localhost sshd[19071]: error: maximum authentication attempts exceeded for root from 42.7.26.85 port 9346 ssh2 [preauth]
Feb 24 18:17:59 localhost sshd[19071]: Disconnecting: Too many authentication failures [preauth]
Feb 24 18:17:59 localhost sshd[19071]: PAM 5 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=42.7.26.85 user=root
Feb 24 18:17:59 localhost sshd[19071]: PAM service(sshd) ignoring max retries; 6 > 3
Feb 24 18:18:01 localhost unix_chkpwd[19083]: password check failed for user (root)
Feb 24 18:18:01 localhost sshd[19081]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=42.7.26.85 user=root
Feb 24 18:18:01 localhost sshd[19081]: pam_succeed_if(sshd:auth): requirement "uid >= 1000" not met by user "root"
의 무한 로그가 출력되었죠. 이런 상황까지 오니깐, 도대체 얼마나 로그인을 하고 있던건지 궁금해서 필약같의 필터링을 해보니
cat /var/log/secure | grep fail | grep root | grep password
...
Feb 24 18:20:59 localhost unix_chkpwd[19183]: password check failed for user (root)
Feb 24 18:21:02 localhost unix_chkpwd[19185]: password check failed for user (root)
Feb 24 18:21:04 localhost unix_chkpwd[19186]: password check failed for user (root)
Feb 24 18:21:06 localhost unix_chkpwd[19187]: password check failed for user (root)
Feb 24 18:21:09 localhost unix_chkpwd[19188]: password check failed for user (root)
Feb 24 18:26:08 localhost unix_chkpwd[19279]: password check failed for user (root)
Feb 24 18:40:09 localhost unix_chkpwd[19500]: password check failed for user (root)
약 3초 간격으로 무한 시도중... (이 독한것들...)
다음으로 궁금해지는건, 어디에서인지인데, 중국 ip로 확인이 됬습니다.
(http://www.findip.kr/where.php 사이트 이용)
그럼 이제부터 해야할 일은 방어를 해야 겠죠.
여러가지 방법이 있겠지만, 제가 사용한 방법은 일단 ssh의 포트를 변경했습니다.
sshd 포토 변경하기
설정값 변경하기
처음에 해야할 일은 sshd의 설정값을 변경하는 작업이죠
[root@localhost ~]# vi /etc/ssh/sshd_config
의 #Port 부분의 주석(#) 제거 및 원하는 port로 변경후 저장을 합니다.
아래의 해당 포스팅에서는 2222로 했습니다. (전 실제 이 포트를 사용하지 않았지만요 ^^)
Port 2222
sshd 재시작
sshd를 재시작 합니다.
[root@localhost ~]# systemctl restart sshd
Job for sshd.service failed because the control process exited with error code. See "systemctl status sshd.service" and "journalctl -xe" for details.
재시작 하는데 에러 발생...
해당 로그만 봐서는 정확히 알수는 없었지만, 검색등을 해본결과 selinux일 가능성이 높다는 판단을 하고,
실제 sshd_config 파일일을 잘 읽어보면 selinux에 관한 써있었죠 (이래서 설정 파일은 꼭 읽어 봐야 한다는...)
# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
Port 2222
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
selinux 포트 설정값
처음에는 설정 파일에 나와 있는것처럼 명령어를 사용 했습니다.
[root@localhost ~]# semanage port -a -t ssh_port_t -p tcp 2222
-bash: semanage: command not found
semanage 명령어가 없다. 설마 selinux가 설치가 안되어 있나 생각하고 쭉 검색을 해보니 semanage는 따로 설치를 해야 한다는걸 알게 되고 설치를 진행
[root@localhost ~]# yum install policycoreutils-python
설치이후 semanage 설정 및 sshd를 재시작 하니 큰 문제 없이 동작을 했습니다.
firewall 설정
끝났다 생각하고 putty로 접속을 시도해본 결과 접속이 안되.. ㅠ
확인결과 firewall의 port를 등록해야 한다는걸 알게 되었죠. 아래와 같이 설정한 이후 putty를 통해 ssh에 접속을 해본 결과 성공!!!!
[root@localhost ~]# firewall-cmd --permanent --zone=public --add-port=2222/tcp
[root@localhost ~]# firewall-cmd --reload
이렇게 sshd 의 port 를 변경하게 되었습니다.
후기 및 한마디..
혹시라도 저처럼 아무 설정없이 서버를 설치하여 사용중이시다면, 로그를 한번 확인해 보시기 바랍니다.
시스템의 메시지에 관심을 가지자!!!
끝~