- 접속 로그 분석 기반의 동적 IP 차단 시스템 구현.
- 시스템 업데이트 중 설정 손실을 방지하기 위해 .local 설정 파일을 사용합니다.
- SSH, 웹 서버, 데이터베이스, FTP와 같은 중요 서비스를 위한 다중 채널 보호 기능을 제공합니다.
- fail2ban-client 명령줄 도구를 사용하여 차단 및 차단 해제를 실시간으로 관리합니다.

리눅스 서버를 네트워크에 노출하는 것은 봇을 끌어들이는 자석을 내놓는 것과 같습니다. 보안 조치를 전혀 설정하지 않았다면 이미 로그에 수천 건의 로그인 실패 시도가 기록되어 있을 가능성이 높습니다. 자동화된 시스템들이 무차별 대입 공격을 통해 서버를 장악하기 위해 끊임없이 사용자 이름과 비밀번호 조합을 시도하고 있기 때문입니다.
바로 이럴 때 Fail2ban이 유용하게 사용됩니다. Fail2ban은 마치 지칠 줄 모르는 감시견처럼 시스템을 감시합니다. 엄밀히 말하면 방화벽은 아니지만, 시스템 로그를 분석하여 무단 침입 시도를 감지하면 iptables나 nftables 같은 도구를 사용하여 해당 IP 주소를 차단합니다. 서버를 더욱 안전하게 만들기 위해 Fail2ban을 어떻게 설정하는지 살펴보겠습니다.
Fail2ban은 정확히 무엇이며 어떻게 작동하나요?
간단히 말해, Fail2ban은 서비스의 로그 파일을 지속적으로 모니터링하는 데몬입니다. 미리 정의된 규칙( 필터) 과 일치하는 의심스러운 패턴을 발견하면 실패 횟수를 계산하기 시작합니다. 특정 시간 내에 IP 주소의 시도 횟수가 허용된 횟수에 도달하면, 프로그램은 해당 IP 주소를 방화벽의 블랙리스트에 추가하는 등의 조치를 취합니다.
이러한 설정은 '자치구(jail)' 라고 하는 단위로 구성됩니다 . 자치는 기본적으로 특정 서비스(예: SSH, Apache, MySQL)에 적용되는 규칙 집합입니다. 이를 통해 원격 접속에는 매우 엄격한 정책을 적용하고 웹 서버에는 보다 관대한 정책을 적용하여, 5분마다 로그를 수동으로 확인하지 않고도 침입자를 자동으로 차단할 수 있습니다.

리눅스 배포판에 따른 설치
사용하는 시스템에 따라 설치 명령어가 약간씩 다를 수 있지만, 일반적으로 거의 모든 공식 저장소에서 구할 수 있습니다.
- 우분투 및 데비안에서: 아주 간단해요, 그냥 실행하면 돼요.
sudo apt update뒤이어sudo apt install fail2ban. - Rocky Linux 또는 AlmaLinux에서: 이러한 배포판은 엔터프라이즈 버전이므로 먼저 EPEL 저장소를 활성화해야 합니다.
sudo dnf install epel-release그런 다음 다음 명령어로 패키지를 설치하세요.sudo dnf install fail2ban fail2ban-firewalld. - Alpine Linux에서: APK 관리자를 사용하세요
sudo apk add fail2ban또한 OpenRC를 사용하므로 다음 명령어를 사용하여 활성화해야 합니다.sudo rc-update add fail2ban default그리고 ~로 시작하세요sudo rc-service fail2ban start.

마스터 설정: .local 파일의 비밀 정보
가장 흔한 실수 중 하나는 파일을 직접 편집하는 것입니다. jail.conf그러지 마세요! 시스템 업데이트 시 해당 파일이 덮어쓰여질 수 있습니다. 가장 중요한 규칙은 원본 파일의 복사본을 만들어 두는 것입니다. jail.local두 번째 파일에 추가하는 모든 매개변수는 원본보다 우선 적용되며, 변경 사항은 덮어쓰여집니다. 업데이트로부터 안전함.
먼저, 다음 방법으로 원본 파일을 복제할 수 있습니다. sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local 그런 다음 nano나 vim과 같은 원하는 편집기로 엽니다. 해당 섹션에서 [태만] 여기서 시스템의 전반적인 동작 방식을 정의합니다.
- 금지 시간: 악성 IP 주소가 차단된 상태로 유지되는 시간입니다. 초 단위로 입력하거나 'm'을 사용하여 분 단위로 입력할 수 있습니다(예: 10m).
- 파인드타임: Fail2ban이 오류를 확인하는 시간 간격입니다. 만약 누군가가 한 시간 안에 5번 실패하더라도 findtime이 10분이라면, 해당 사용자는 차단되지 않습니다.
- 최대 재시도 횟수: 시스템에서 오류가 발생하기 전에 허용되는 실패 시도 횟수 이제 그만하고 IP를 차단하세요..
- IP 주소 무시: 본인 계정 정지를 방지하려면 필수 사항입니다. 여기에 계정을 입력해야 합니다. 공개 IP 주소 또는 VPN 범위입니다.

특정 서비스를 단계별로 보호하는 방법
일반 설정이 완료되면 가장 중요한 서비스에 대한 격리 기능을 활성화할 차례입니다. 보호 기능이 제대로 작동하려면 다음 설정을 해야 합니다. enabled = true 해당 섹션 내에서 jail.local.
SSH 접속 (가장 중요한 부분)
포트 22가 가장 중요한 목표입니다. 안정적인 구성은 다음과 같이 정의됩니다. maxretry = 3 및 bantime = 3600 (1시간). Fail2ban이 파일을 읽습니다. /var/log/auth.log (데비안/우분투에서) 또는 / var / log / secure (CentOS/RHEL 환경에서) 인증 실패를 감지하고 공격자의 접근을 차단합니다.
웹 서버(아파치 및 엔진스)
웹사이트나 온라인 쇼핑몰을 운영하는 경우, 봇은 다음과 같은 민감한 경로에 접근하려고 시도할 것입니다. /wp-admin o /login.php사용자 지정 필터를 만들 수 있습니다. /etc/fail2ban/filter.d/ 이러한 패턴을 감지하기 위해. 예를 들어, WordPress를 보호하세요403 오류 또는 실패한 시도는 모니터링됩니다. wp-login.phpApache 또는 Nginx jail에 설정된 제한을 초과하는 경우 IP 주소를 차단합니다.
데이터베이스 및 FTP
MySQL의 경우 오류 로그에서 해당 문구를 확인할 수 있습니다. 사용자 접근이 거부되었습니다FTP(예: ProFTPD)의 경우, 다음 사항을 반드시 확인해야 합니다. logpath Fail2ban이 로그 파일을 찾을 수 없으면 보호 기능이 작동하지 않으므로 로그 파일의 실제 경로와 일치해야 합니다.
fail2ban-client를 사용한 고급 관리
빠른 변경을 위해 항상 파일을 편집하고 서비스를 재시작할 필요는 없습니다. 명령어를 사용하면 됩니다. fail2ban-client 콘솔에서 시스템을 실시간으로 관리할 수 있게 해줍니다.
활성화된 감옥과 차단된 IP 주소를 확인하려면 다음을 사용하세요. sudo fail2ban-client statusSSH와 같은 서비스에 대해 더 자세히 알아보려면 다음 명령어를 실행하세요. sudo fail2ban-client status sshd게다가 실수로라도 동료를 차단했습니다. 또는 명령어를 사용하여 IP 주소를 직접 빠르게 해제할 수도 있습니다. sudo fail2ban-client set sshd unbanip IP_A_DESBLOQUEAR.
문제 해결을 위한 해결 방법
Fail2ban이 제대로 차단하지 못하는 것을 발견했다면, 가장 먼저 해당 도구의 로그 파일을 확인해 보세요. /var/log/fail2ban.log. 사용 tail -f 누가 어떤 이유로 차단당하는지 실시간으로 확인할 수 있습니다.
Fail2ban은 잠금 상태를 SQLite 데이터베이스에 저장한다는 점을 기억하세요. /var/lib/fail2ban/fail2ban.sqlite3따라서 서버를 재시작하면 차단되었던 IP 주소들이 차단 해제됩니다. 차단된 상태로 유지됩니다. 벌칙 기간이 만료될 때까지. 구성 파일을 변경할 때마다 변경 사항을 적용하는 것을 잊지 마세요. sudo systemctl restart fail2ban.
이 도구를 구현하면 서버가 손쉬운 공격 대상에서 자동화된 요새로 변모하여 네트워크 계층에서 악성 트래픽을 차단함으로써 CPU 부하를 줄이고 봇이 무차별 대입 공격으로 침입할 수 없다는 사실에 안심하고 편안하게 잠을 잘 수 있습니다. .local 파일 사용, 특정 jail 관리, 그리고 지속적인 로그 모니터링을 결합하여 모든 Linux 시스템 관리자에게 필수적인 심층 방어 시스템을 구축할 수 있습니다.