Fail2Ban은 지속해서 잘못된 패스워드를 입력한 IP 주소들을 방화벽 규칙에 추가해서 차단(Ban)한다. sshd(SSH 서버) 이외에도 Apache Web Server(아파치 웹 서버) 등 여러 서버의 로그를 읽어 차단할 수 있지만, 이 글에서는 간단하게 SSH 서버 설정만 다룬다.


모든 명령을 root 계정으로 실행했으며 해당 서버의 배포판과 버전은 CentOS Linux release 7.6.1810 (Core), 패키지들의 버전은 Fail2Ban v0.9.7, firewalld v0.5.3, iptables v1.4.21이다.



1. Python 3.4, EPEL 저장소 설치


Fail2ban 0.9.x 버전은 Python 2.6 버전 이상 혹은 Python 3.2 버전 이상을 필요로 한다.


# yum -y install python34



EPEL 패키지 저장소 설치


# yum -y install epel-release



2. Fail2Ban 설치


yum -y install fail2ban



3. Fail2Ban 구성


firewalld 서비스를 이용하는 CentOS에서는 아래와 같이 해당 파일을 설정해야 한다.



# vim /etc/fail2ban/jail.conf


※ 필수

87번 줄의 "backend = auto"를 "backend = systemd"로 변경한다.

161번 줄의 "banaction = iptables-multiport"를 "banaction = firewallcmd-new"로 변경한다.

224번 줄의 "[sshd]" 아래에 "enabled = true"를 추가한다.


선택

59번 줄의 bantime : 차단 기간 (초 단위)

63번 줄의 findtime : 설정된 findtime 내에 maxretry 만큼 실패하면 차단 (초 단위)

66번 줄의 maxretry : 설정된 숫자만큼 실패하면 차단



/etc/fail2ban/fail2ban.conf 파일은 굳이 건드리지 않아도 서비스가 작동하지만 간단하게 설명하자면…


loglevel – 기록될 로그의 최소 레벨. 설정 가능한 레벨은 다음과 같다.

CRITICAL, ERROR, WARNING, NOTICE, INFO, DEBUG


logtarget – 로그가 기록될 파일 경로. 기본 설정은 /var/log/fail2ban.log이며 다음 네 가지 값 중 하나를 설정할 수 있다.

STDOUT, STDERR, SYSLOG, File (예 /var/log/fail2ban.log)


socket – socket 파일이 위치할 디렉터리

pidfile – pid 파일의 위치


설정을 편집했으면 fail2ban.conf, jail.conf의 설정을 각각 fail2ban.local, jail.local로 복사해둔다.

서비스 시작 시 .conf파일부터 먼저 읽고 그 다음 .local의 설정을 읽는데,

fail2ban을 업데이트하면 .conf파일이 초기화되기 때문


# cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

# ls /etc/fail2ban/



4. Fail2Ban 서비스 시작 및 자동 실행 등록


# systemctl start fail2ban.service

# systemctl enable fail2ban.service

# systemctl status fail2ban.service



5. 로그 및 차단 현황 보기


# tail -30 /var/log/fail2ban.log



# fail2ban-client status sshd



# iptables -L f2b-sshd





태그 : 리눅스, Linux, CentOS, 서버, Server, 보안, SSH, sshd, Fail2Ban, Firewalld, Firewall, 방화벽, iptables

'Linux > CentOS' 카테고리의 다른 글

(CentOS 7) Strongswan을 이용한 IKEv2 VPN 서버 구축하기  (7) 2019.02.24

+ Recent posts