서버 운영을 시작하면 수많은 외부 공격에 직면하게 됩니다. SSH 브루트포스 공격, 웹 애플리케이션을 겨냥한 무차별 로그인 시도, 포트 스캐닝 등은 일상적인 위협입니다. 이러한 위협을 방치하면 결국 시스템 침투로 이어질 수 있습니다. Fail2Ban은 이러한 문제를 해결해주는, 가볍고 강력한 리눅스 기반 침입 방지 솔루션입니다.
Fail2Ban은 의심스러운 IP를 자동으로 탐지하여 차단해줍니다. 이를 통해 관리자는 별다른 수고 없이도 서버를 보호할 수 있습니다.
Fail2Ban 설치 방법
Fail2Ban은 대부분의 리눅스 배포판에서 패키지로 제공되고 있어 설치가 매우 간단합니다.
Ubuntu/Debian 계열
sudo apt update
sudo apt install fail2ban
설치가 완료되면 서비스 시작 및 부팅 시 자동 시작 설정을 합니다.
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
Fail2Ban 기본 설정 방법
Fail2Ban은 /etc/fail2ban/jail.conf
파일을 기본 설정 파일로 사용하지만, 이 파일을 직접 수정하지 않고 /etc/fail2ban/jail.local
파일을 생성하여 커스터마이징하는 것이 권장됩니다.
jail.local 파일 생성:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
주요 설정 항목: - bantime: 차단 기간 (초 단위) - findtime: 공격 시도로 간주할 시간 범위 (초 단위) - maxretry: 허용되는 최대 실패 시도 수
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
실제 적용 사례 예시
1. SSH 브루트포스 차단
위와 같이 [sshd]
jail을 설정하면, 로그인 실패가 5회 이상 발생하면 해당 IP가 1시간 동안 차단됩니다.
2. Apache 로그인 공격 차단
[apache-auth]
enabled = true
filter = apache-auth
logpath = /var/log/apache2/error.log
maxretry = 3
웹서버에 대한 인증 실패가 3번 발생하면 차단합니다.
Fail2Ban 모니터링 방법
Fail2Ban이 제대로 작동하고 있는지 모니터링하는 방법은 여러 가지가 있습니다.
1. fail2ban-client를 통한 상태 확인
특정 jail (예: sshd)의 상태를 확인할 수 있습니다.
sudo fail2ban-client status sshd
출력 예시:
Status for the jail: sshd
|- Filter
| |- Currently failed: 2
| |- Total failed: 15
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 1
|- Total banned: 3
`- Banned IP list: 192.168.1.100
2. 로그 파일 모니터링
Fail2Ban의 동작 내역은 /var/log/fail2ban.log
파일에 기록됩니다.
tail -f /var/log/fail2ban.log
이를 통해 실시간으로 차단 및 해제 이벤트를 모니터링할 수 있습니다.
Fail2Ban 작동 원리
-
로그 모니터링: Fail2Ban은 설정된 로그 파일을 지속적으로 감시합니다. (예:
/var/log/auth.log
,/var/log/apache2/error.log
) -
필터 적용: 특정 패턴(로그인 실패, 인증 오류 등)을 필터로 감지합니다.
-
조치 실행: 설정된
maxretry
를 초과하면, 해당 IP에 대해 iptables를 통해 차단하거나, firewall-cmd, nftables 같은 방화벽 명령어를 실행합니다. -
자동 해제:
bantime
이 경과하면 차단을 자동으로 해제합니다.
Fail2Ban은 모듈화된 구조로 다양한 서비스(jail)별로 독립적인 감시 및 차단 설정이 가능해, 단순한 SSH 보호를 넘어 다양한 서비스에 대한 보안을 강화할 수 있습니다.
SSH 공격에 대한 영구 차단 설정 방법
SSH 공격자는 단호하게 다루는 것이 중요합니다. Fail2Ban에서는 bantime
을 -1
로 설정하면 영구적으로 차단할 수 있습니다.
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
bantime = -1
findtime = 600
maxretry = 5
이렇게 설정하면, SSH 인증 실패가 5번 이상 발생한 IP는 영구적으로 차단되어 서버 접근이 불가능해집니다.
[고급 팁] Fail2Ban의 기본 차단 동작 이해하기
Fail2Ban에서는 action
을 별도로 정의하지 않아도 기본적으로 작동합니다. 그 이유는 기본 설정이 iptables를 이용하는 차단 명령어를 포함하고 있기 때문입니다.
- 별도로
action
을 지정하지 않으면,[DEFAULT]
섹션의action = %(action_)s
설정이 적용됩니다. %(action_)s
는 내부적으로iptables
명령어를 사용하여 악성 IP를 차단하는 동작을 수행합니다.- 따라서
action
을 따로 작성하지 않아도 iptables에 의해 IP 차단이 이루어집니다.
기본 차단 명령 예시 (action_.conf 참조)
iptables -I INPUT -s <ip> -j REJECT
즉, Fail2Ban이 자동으로 iptables를 제어하여 공격 IP를 차단하게 되는 것입니다.
주의:
- 만약 UFW, firewalld 등 다른 방화벽 도구를 사용하고 싶다면, action
을 명시적으로 설정해야 합니다.
- 또한, 차단 규칙은 서버가 재부팅되면 사라질 수 있으므로, 부팅 시 Fail2Ban 서비스가 자동으로 시작되도록 설정해두는 것이 좋습니다.
추가로 다양한 필터를 직접 만들어 적용하거나, email 경고 설정 등 고급 설정도 가능합니다.
서버를 인터넷 세상에 노출한 순간부터 보안은 결코 선택이 아니라 필수입니다.
한순간의 방심이 치명적인 결과를 초래할 수 있습니다.
Fail2Ban은 그러한 위협을 미리 차단하는 든든한 방패가 되어 줄 것입니다.
지금 이 순간에도 누군가는 당신의 서버를 노리고 있다는 사실을 잊지 마십시오.
Add a New Comment