사이트 내 전체검색
Fail2ban은 주기적으로 정규 표현식을 사용하여 의심스러운 IP 자동으로 차단
로빈아빠
https://cmd.kr/server/714 URL이 복사되었습니다.

본문

 

Fail2ban

Server 관리자가 늘 항상 Log를 검사하여 일일이 의심되는 IP를 찾아 Firewall에 Rule을 추가하는 일은 상당히 귀찮은 일이 될 수 있습니다.

Fail2ban은 주기적으로 정규 표현식을 사용하여 Log에서 의심스러운 IP를 검출해 내어, 해당 IP를 Firewall에 등록하여 접근을 자동으로 차단합니다.

관리자 입장에서는 의심스러운 행동을 검출할 수 있는 정규 표현식만 잘 만들어 놓으면, 자동으로 나머지 동작은 Fail2ban이 알아서 하기 때문에 좀 더 편리하게 Server의 보안을 유지할 수 있습니다.

NOTE: 역으로 생각하면, 정규 표현식이 잘못되었거나 Cracker의 접근 Pattern이 변경되어 Log가 이전과는 다르게 적혀있다면, Fail2ban을 사용해도 접근을 차단할 수 없다는 것을 알 수 있습니다.

때문에 Fail2ban을 사용한다 할 지라도, 관리자의 주기적인 Log 검사나, Filter Update가 필요하다는 것을 유의하기 바랍니다.

4.1. Install

Fail2ban을 설치하기 위해서 다음과 같이 Terminal에서 입력합니다.

1
2
3
4
5
6
7
8
9
10
sudo apt-get install fail2ban

sudo vi /etc/fail2ban/jail.conf

[DEFAULT]
ignoreip = 127.0.0.1/8 192.168.0.1/24
bantime = 2592000
maxretry = 3

sudo service fail2ban restart

위에서 jail.conf는 Fail2ban의 설정 File입니다. 이 File에서 Fail2ban의 기본 동작과 여러가지 Filter를 설정할 수 있습니다.

DEFAULT Section의 3개의 Option은 다음과 같은 의미를 가집니다.

  • ignoreip: 의심스러운 접근으로 검출되었다 할 지라도 무시해야 할 IP와 Network을 설정할 수 있습니다. 위의 설정은 Loopback과 Private Network을 무시합니다.
  • bantime: 검출된 IP를 Firewall에 등록하여 접속을 차단할 기간을 초 단위로 설정합니다. 위의 설정은 1달(30일)을 설정한 것입니다.
  • maxretry: 정규 표현식으로 검사했을 때, maxretry에 설정한 횟수만큼 Matching 되면 해당 IP를 검출합니다.

4.2. Test

Cracker의 의심스러운 동작을 검출하기 위한 정규 표현식을 저장해 놓은 것을 Fail2ban에서는 Filter라고 이야기합니다.

jail.conf에 이 Filter를 사용할 지에 대한 설정을 지정할 수 있고, 원한다면 관리자가 직접 Filter를 만들어서 사용할 수도 있습니다.

Filter를 새로 만들었거나 기존에 존재하는 Filter를 적용하기 전에, 관련된 Log를 검사하여 해당 Filter를 적용할 지 여부를 결정할 필요가 있습니다.

다음과 같이 입력하면 Filter를 사용했을 때, Matching되는 IP를 보여줍니다. (ssh 접근 Log가 기록되어 있는 auth.log를 sshd Filter로 검사하는 예)

1
sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf

4.3. Filter

이제 Filter를 활성화하여, Cracker의 의심스러운 접근을 방어해 봅시다. 굳이 Log에서 의심스러운 내용이 검출되지 않더라도, Server에서 제공하는 Service와 관련된 Filter가 아래에 소개하는 것들 중에 있다면 가급적 활성화하는 것이 좋습니다.

4.3.1. sshd

sshd Filter는 SSH 설정에서 언급한 Brute-force Attack과 같은 접근을 차단하는 Filter입니다.

이 Filter를 사용하면 /var/log/auth.log에서 아래와 유사한 문장이 나오면 IP를 검출하여 접속을 차단합니다.

1
Jul 22 06:56:50 foo sshd[14984]: Failed password for invalid user a from xxx.xxx.xxx.xxx port 55452 ssh2

sshd Filter를 설정하려면 Terminal에서 다음과 같이 입력합니다.

1
2
3
4
5
6
7
8
9
10
11
sudo vi /etc/fail2ban/jail.conf

[ssh]

enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 3

sudo service fail2ban restart
4.3.2. ssh-ddos

ssh-ddos Filter는 SSH Service를 Scanning하거나 telnet으로 접속할 떄 발생하는 Message를 검사해서 해당 IP의 접근을 차단합니다.

/var/log/auth.log의 Message는 다음과 같습니다.

1
Jul 23 13:16:25 foo sshd[21989]: Did not receive identification string from xxx.xxx.xxx.xxx

설정을 위해서 다음과 같이 입력합니다.

1
2
3
4
5
6
7
8
9
10
11
sudo vi /etc/fail2ban/jail.conf

[ssh-ddos]

enabled  = true
port     = ssh
filter   = sshd-ddos
logpath  = /var/log/auth.log
maxretry = 3

sudo service fail2ban restart
4.3.3. apache-badbots

apache-badbots Filter는 Cracker가 자신이 만든 Program으로 HTTP, HTTPS Protocol을 통해 Server에 접근하려 했을 경우에 발생하는 Message를 검출하여 해당 IP를 차단합니다.

/var/log/apache2/access.log의 Message는 다음과 같습니다.

1
xxx.xxx.xxx.xxx - - [12/Jul/2013:01:21:37 +0900] "GET /manager/html HTTP/1.1" 302 520 "-" "Mozilla/3.0 (compatible; Indy Library)"

Filter를 사용하려면 다음과 같이 입력합니다.

1
2
3
4
5
6
7
8
9
10
sudo vi /etc/fail2ban/jail.conf

[apache-badbots]
enabled  = true
port     = http,https
filter   = apache-badbots
logpath  = /var/log/apache*/*access.log
maxretry = 0

sudo service fail2ban restart
4.3.4. apache-proxy

apache-proxy Filter는 Cracker가 Server를 Proxy를 사용하듯이 Server를 경유하여 다른 Server로 접근하려는 시도를 검출하여 해당 IP를 차단합니다.3

/var/log/apache2/access.log의 Message는 다음과 같습니다.

1
xxx.xxx.xxx.xxx - - [20/Jul/2013:13:53:46 +0900] "GET http://www.baidu.com/ HTTP/1.1" 302 499 "-" "-"

apache-proxy Filter는 기본적으로 설치되어 있지 않기 때문에 새로 만들어야 합니다. 다음과 같이 Terminal에서 입력합니다.

1
2
3
4
5
sudo vi /etc/fail2ban/filter.d/apache-proxy.conf

[Definition]
failregex = ^(?:(?![0-9\.]* - .*? \[.*\] "([A-Z]* /.* HTTP/1\.[0-9]|-)")<HOST>)
ignoreregex =

생성한 Filter를 활성화하기 위해서 다음과 같이 입력하면 설정이 완료됩니다.

1
2
3
4
5
6
7
8
9
10
sudo vi /etc/fail2ban/jail.conf

[apache-proxy]
enabled = 

댓글목록

등록된 댓글이 없습니다.

1,139 (2/23P)

Search

Copyright © Cmd 명령어 3.145.38.67