Last failed login: Mon Aug 20 10:22:27 KST 2018 from 118.24.166.46 on ssh:notty
There were 72 failed login attempts since the last successful login.

 

잠깐 사이에 72번의 로그인 실패 시도가 있었다.

비밀번호를 맞추는게 쉽지는 않겠으나, 다음과 같은 조치를 취할 수도 있겠다.

 

1. fail2ban

설정된 값을 기준으로 로그인 시도가 있을 때 차단해주는 유틸 프로그램이다.

라이센스는 GPLv2 였나? 아무튼 무료로 사용가능하다.

> wget https://github.com/fail2ban/fail2ban/archive/0.9.3.tar.gz
> tar zxvf 0.9.3.tar.gz
> cd fail2ban-0.9.3
> python setup.py install
> cp files/redhat-initd /etc/init.d/fail2ban
> chkconfig --add fail2ban
> chkconfig fail2ban on
> fail2ban-client start

 

참고로,

설치 후 상세설정을 하기 위해서는 vim /etc/fail2ban/jail.conf 파일을 수정하면 된다.

yum update 등의 이유로 왠만하면 사용자 설정파일로 수정하는 것이 더 좋다고 한다. 

사용자 설정파일은 vim /etc/fail2ban/jail.d/local.conf 여기서 확인할 수 있다.

[DEFAULT]

# 차단하지 않을 IP
ignoreip = 127.0.0.1/8 192.168.10.0/24

# 3시간 차단
bantime  = 10800

# 아래 시간동안 amxretry 만큼 실패시 차단
findtime  = 300

# 최대 허용 횟수
maxretry = 5

# 메일 수신자, 다중 수신자는 지원 안 함
destemail = sysadmin@example.com

# 메일 보낸 사람
sender = fail2ban@my-server.com

# 메일 전송 프로그램
mta = sendmail

# 차단시 whois 정보와 관련 로그를 첨부하여 메일 전송
action = %(action_mwl)s

# sshd 서비스 차단
[sshd]
enabled = true
port = ssh, 10022

확인은, 다음 명령어를 사용해서 할 수 있다.

> fail2ban-client status

 

※ 문제해결

fail2ban 서비스 시작시, 다음과 같은 에러가 발생한다면?

> systemctl status fail2ban
...
fail2ban[24614]: Starting fail2ban: ERROR  No file(s) found for glob /var/log/auth.log
fail2ban[24614]: ERROR  Failed during configuration: Have not found any log file for sshd jail
...

에러 메시지에 나와있듯이 해당 경로에 로그파일이 없어서 나오는 에러이기 때문에, 다음 명령어를 작성해서 해당 경로에 로그파일을 만들어주면 해결된다.

> touch /var/log/auth.log

 

2. 중국 IP를 막는 방법

SSH 공격을 시도 중인 IP들을 살펴보면, 위치가 대부분 중국이다.

따라서 중국 IP들을 차단시킨다면, SSH 공격 방어에 어느정도 효과를 볼 수 있다.


[23-03-22 추가]

아래 링크로 접속해보니 웹 사이트 접속이 안 된다.

알아보니, 이 정보는 MaxMind에서 제공되고 있는데, 유료화로 개편되면서 이제 다른 형태로 제공되는 것 같다.

GeoLite2 라고 되어있는 것이 무료로 사용가능한 버전인 것 같은데, 유료 버전보다는 정확도가 떨어진다고 한다.

 

사실 정확도가 떨어지더라도 사용 가능한 형태이면 좋겠으나, 기존에 하나의 파일(GeoIPCountryWhois.csv)에서 정보를 제공하던 것에서, GeoLite2-Country-Blocks-IPv4.csv 파일과 GeoLite2-Country-Locations-zh-CN.csv 파일을 제공받을 수 있으며, 2개 파일을 매핑해야지 어느 것이 중국 아이피인지 알 수 있게 바뀐 것 같다.

그래서 기존에 사용하던 파일을 첨부한다.

GeoIPCountryWhois.csv
6.49MB

"옛날에 업로드(무려 9년전)된 파일이라 신뢰성이 다소 떨어질 수 있으나, 혹시나 필요한 사람이 있으면 가져다 쓰세요!"

 

먼저 👉 다음 링크로 접속해서 GeoIPCountryWhois.csv 를 다운로드 (CSV/IP) 하자.

 

리눅스 서버에서 다운로드 받은 .csv 파일을 적당한 위치에 이동하자.

(pwd 명령어를 사용해서 어디에 저장했는지 폴더 위치는 알아놓도록 하자. 아래 스크립트 작성에 필요하다.)

 

drop-china.sh 파일을 만들어서 중국 IP를 차단하는 기능을 하는 스크립트를 작성하자.

> vim drop-china.sh
#!/bin/bash

DATA=/root/geoip/GeoIPCountryWhois.scv

for IPRANGE in `egrep "China" $DATA | cut -d, -f1,2 | sed -e 's/"//g' | sed -e 's/,/-/g'`
do
        $IPT -A INPUT -p all -m iprange --src-range $IPRANGE -j DROP
done

이제 실행만 하면 끝!

> chmod +x drop-china.sh
> ./drop-china.sh			# 시간이 좀 걸림
> iptables -L				# 적용되었는지 확인