sshd 포트 변경이 필요한 이유

in #kr8 years ago (edited)
초보자의 서버 구축 운영기 - 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 사이트 이용)
2018-02-24 (4).png

그럼 이제부터 해야할 일은 방어를 해야 겠죠.

여러가지 방법이 있겠지만, 제가 사용한 방법은 일단 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 를 변경하게 되었습니다.

후기 및 한마디..

혹시라도 저처럼 아무 설정없이 서버를 설치하여 사용중이시다면, 로그를 한번 확인해 보시기 바랍니다.

시스템의 메시지에 관심을 가지자!!!

끝~

Coin Marketplace

STEEM 0.04
TRX 0.33
JST 0.083
BTC 62069.28
ETH 1614.34
USDT 1.00
SBD 0.45