반응형
외부 ip들의 공격을 방어하기 위해 자동으로 ban list를 만들어주는 fail2ban을 설치해 보겠다.
아래 내용들은 메뉴얼 페이지를 기반으로 정리한 것이다.
 

1. 요구사항

공식 홈페이지에 따르면 0.8 버젼 이상에서는 Python 2.4 버전 이상을 요구하고 있다.
하지만 2.4버전은 SYSLOG 소켓에 문제가 있어, SYSLOG를 사용하고 싶으면 2.5버젼 이상을 권장한다.

2. 설치

apt-get, aptitude를 사용하여 설치한다.

aptitude install fail2ban


3. 정의

filter: log-in fail과 관련된 정규표현식
action: 행동한 command들
jail: filter와 action의 조합, jail2ban은 여러 조합을 동시에 처리한다.


4. 설정

fail2ban-server와 fail2ban-client로 구성되며 server는 socket을 감시하는 역할을 하고
client는 세팅 및 소통을 하는 역할로 보면 될 것 같다.

기본 설정파일은 /etc/fail2ban에 존재하며
변경은 fail2ban-client -c <DIR> 을 통해 변경 가능하다.

fail2ban.conf  - Logging level, client/server socket 등과 같은 전체 세팅을 하는 파일이다.
                      일단 우리에게 중요하지 않아 신경을 쓰지 않는다.

jail.conf - 가장 중요한 파일이다. 아래에서 자세한 세팅 예시를 살펴보자
[ssh-iptables]  // Section 이름
#enabled  = false
enabled  = true // Section Enable 여부
filter   = sshd // Filter로 Filter.d/sshd.conf 파일을  사용한다
action   = iptables[name=SSH, port=ssh, protocol=tcp] // filter가 true일 경우 action.d/iptables.conf 를 action으로 사용한다.
#          mail-whois[name=SSH, dest=yourmail@mail.com]
#logpath  = /var/log/sshd.log
logpath  = /var/log/auth.log  // Filter가 감시할 Log파일의 위치를 표시해 준다.
maxretry = 5 //Action을 하게 만드는 Match의 회수 ex)5번 filter에 걸리면 action 실행
findtime = 600 // (단위 sec) 해당 시간 동안 fail이 없으면 Counter(maxretry관련)를 초기화 한다. 
bantime = 600 // (단위 sec) 해당 시간 동안 IP를 BAN한다 값이 마이너스이면 영원히 BAN한다.
Section당 Filter는 한개만 가능하지만 Action는 여러개 등록이 가능하며 순차적으로 실행된다.

filter.d/*.conf - 필터에 관련된 regex 파일이다. Python Base Regex으로 작성하면 된다.
failregex = Authentication failure for .* from <HOST>
            Failed [-/\w]+ for .* from <HOST>
            ROOT LOGIN REFUSED .* FROM <HOST>
            [iI](?:llegal|nvalid) user .* from <HOST>
Multline으로 작성이 가능하며 한 라인 한 라인이 Regex이다.
매줄에는 IP에 해당하는 <HOST> 가 반드시 존재해야 하고 아니면 오류를 보여준다.
<HOST>는 IPv4에 해당하는 alias이다. = (?:::f{4,6}:)?(?P<host>\S+)

직접 작성한 conf를 테스트 하고 싶으면 아래와 같은 명령을 통해 테스트 할 수 있을 것이다.
fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/test.conf
action.d/*.conf - Action과 관련된 Command 명령어이다


5. 나의 MBL 설정

현재 나는 MBL을 Torrent 머신으로 사용중이다. 주로 용도는 ssh, ftp, samba등을 통한 접속 이 될것이다.
MBL에서는 커널상의 문제로 iptable을 사용하지 않기 때문에 직접 /etc/hosts.deny에 deny 리스트로 ip를 추가하는 방법을 사용하였다. 전체 접근 제한은 3번이고 ftp와 apach도 추가하여 주었다.

[DEFAULT]
ignoreip = 127.0.0.1/8 findtime = 600
bantime = -1
maxretry = 3
backend = auto
action = hostsdeny[]
protocol = tcp

[ssh]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/sshd.log

[ssh-ddos]
enabled = true
port = ssh
filter = sshd-ddos
logpath = /var/log/sshd.log

[apache]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/apache*/*error.log

[vsftpd]
enabled = true
port = ftp,ftp-data,ftps,ftps-data
filter = vsftpd
logpath = /var/log/vsftpd.log


반응형

+ Recent posts