이제 해킹은 그만 ~~~

log 파일을 보면 정말 빈번하게 외부에서 로그인을 시도하고 있다.
그렇다고 외부로 부터의 모든 접속을 차단할 수 도 없다.
이 참에 log 파일에서 인증 실패한 접속 ip 를 모두 차단하기로 작정하고 프로그램을 작성하려고 ms code를 열었다가 혹시나 하는 마음에 아래 키워드로 구글링을 해보았다.

ubuntu auto block ip authentication failure smtp ssh

역시나 이런 생각은 나만이 아니었다. fail2ban 이라는 어플리케이션이 이미 있다.
더구나 설치 예제 사이트로 엄청 많다. 설치도 쉽고 설정도 쉽다.

> sudo apt install fail2ban

이 한문장으로 끝이다. 설정은 구글링하면 너무나 쉽게 나온다. 기본 설정인 jail.conf 는 건드리지 않고 jail.local 를 만들어 내게 필요한 설정을 한다.

아래는 내게 필요한 smtp 관련된 설정과 80과 443을 열고 있으므로 혹시나 해서 이 것도 감시 대상에 추가했다. ssh, ftp, telnet 등은 외부에 개방하지 않았으므로 감시 대상에서 제외하였다.
그리고 너무 많은 감시 대상을 추가하니 fail2ban 이 실행하는 도중에 정지하는 상황이 발생한다. 감시 대상이 많아서 그런지 아니면 설정상 문제가 있는지는 확인하지 않았다. 단지, 내게 필요한 설정 만으로 정상 동작하고 있기 때문이다.

[DEFAULT]
banaction=ufw

bantime = -1
findtime = 6h

[roundcube-auth]
enabled = true

[postfix]
enabled = true

[postfix-rbl]
enabled = true

[sendmail-auth]
enabled = true

[apache-auth]
enabled = true

[apache-badbots]
enabled = true

[apache-noscript]
enabled = true

[apache-overflows]
enabled = true

[postfix-sasl]
enabled = true

"banaction=ufw" 는 방화벽을 ufw를 사용하도록 설정한 것이다. 기본이 iptables 이므로 iptables를 방화벽으로 사용하고 있으면 이 줄은 삭제하면 된다.
"bantime=-1"은 블록킹하는 시간을 의미한다. -1 은 영원히 블록하라는 의미이다.
"findtime=6h" 는 6시간 동안 인증실패가 5회이상 발생하면 블록리스트에 추가하라는 의미이다.
실패횟수는 maxretry로 설정할 수 있다. 기본은 5 회이다.

다른 부분은 내게 필요한 어플리케이션에 대하여 감시할 것인지를 설정하는 것이다. 가능한 어플리케이션의 종류는 jail.conf 에 다 들어 있다. 그 목록에서 내게 필요한 것만 가져와서 jail.local 에 기록하고 “[app-name] ” 만 남기고 다른 설정은 삭제한 후에 "enabled = true" 만 추가한다.

잠깐 사이에 아래와 같이 블록되는 IP 가 나타난다. ^^

root@mail:/etc/fail2ban# fail2ban-client status postfix-sasl
Status for the jail: postfix-sasl
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     10
|  `- File list:        /var/log/mail.log
`- Actions
   |- Currently banned: 3
   |- Total banned:     3
   `- Banned IP list:   45.142.120.84 212.70.149.54 45.142.120.87
root@mail:/etc/fail2ban#

auth.log 를 보면 더이상 인증 실패 로그가 나타나지 않는다. ^^
이제 해킹으로 부터 조금은 더 안전한 사이트가 된 것 같다. ㅎㅎ


주1) fail2ban을 실행 할 때 “roundcube-auth” 에서 계속 실패를 한다. 로그를 보니 roundcube 로그 파일을 찾을 수 없다고 메시지가 표시된다.
“logpath = %(roundcube_errors_log)s” 에 해당하는 정의를 paths-debian.conf 에서 찾아 보니 정의가 없다. 그래서 아래와 같이 추가하고 다시 실행하니 정상적으로 잘 동작한다.

roundcube_errors_log = /var/log/roundcube/errors.log

이렇게 철저하게 방어하다 보니 아차 실수하면 나도 차단되고 만다. 이렇게 내가 차단된 경우에 나를 다시 해제하는 방법이 필요하다.

다음과 같이 한다.

fail2ban-client set <sshd:jail name> unbanip <ip address list>

위에서 jail name은 sshd, roundcube-auth 등과 같이 환성파일에서 설정한 jail의 이름이다. 마지막에 붙는 ip address list 는 jail에서 해제하기 위한 ip address 를 공백을 구분자로 하여 지정한다.

This entry was posted in 리눅스 and tagged , . Bookmark the permalink.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다