보안 · 5 min read · Dec 03, 2025
Mandriva 2008.1에서 Fail2ban으로 무차별 대입 공격 방지하기
Mandriva 2008.1에서 Fail2ban으로 무차별 대입 공격 방지하기
버전 1.0
저자: Falko Timme
이 기사에서는 Mandriva 2008.1 시스템에 fail2ban을 설치하고 구성하는 방법을 보여줍니다. Fail2ban은 SSH, FTP, SMTP, Apache 등 다양한 서비스에 대한 로그인 시도를 관찰하는 도구로, 동일한 IP 주소 또는 호스트에서 반복적으로 로그인 실패 시도를 발견하면 fail2ban은 해당 IP 주소/호스트에서의 추가 로그인 시도를 iptables 방화벽 규칙으로 차단합니다.
이 문서는 어떤 종류의 보증 없이 제공됩니다! 이러한 시스템을 설정하는 방법은 이것이 유일한 방법이 아님을 말씀드리고 싶습니다. 이 목표를 달성하는 방법은 여러 가지가 있지만, 이것이 제가 선택한 방법입니다. 이것이 여러분에게도 작동할 것이라는 보증을 하지 않습니다!
1 사전 참고
Fail2ban은 제가 이 튜토리얼에서 다룬 DenyHosts와 유사합니다: https://www.howtoforge.com/preventing_ssh_dictionary_attacks_with_denyhosts, 그러나 SSH에 중점을 둔 DenyHosts와 달리 fail2ban은 로그인 시도를 로그 파일에 기록하는 모든 서비스를 모니터링하도록 구성할 수 있으며, IP 주소/호스트를 차단하기 위해 /etc/hosts.deny만 사용하는 대신 fail2ban은 iptables와 /etc/hosts.deny를 사용할 수 있습니다.
이 예제에서는 fail2ban을 SSH 서버, Proftpd 서버, .htaccess/.htpasswd로 보호된 웹 사이트에 대한 로그인 시도, Courier POP3 및 Courier IMAP, 그리고 SASL(이메일 전송용)에 대한 로그인 시도를 모니터링하도록 구성합니다. Mandriva 2008.1에 사용할 수 있는 fail2ban 패키지를 설치할 것입니다. 기본 구성으로 제공되지만, 불행히도 그 구성은 대부분의 앞서 언급한 서비스에 대해 제대로 작동하지 않습니다. 따라서 제가 테스트하고 저에게 효과가 있는 맞춤형 fail2ban 구성을 만들 것입니다.
2 fail2ban 설치하기
패키지를 설치하기 전에 main, main_updates, contrib 및 contrib_updates 리포지토리를 활성화해야 합니다. http://easyurpmi.zarb.org/로 가면 이러한 리포지토리를 활성화하기 위해 실행해야 할 명령어를 제공받을 수 있습니다. 제 경우에는 다음과 같이 실행했습니다.
urpmi.addmedia contrib ftp://distrib-coffee.ipsl.jussieu.fr/pub/linux/MandrivaLinux/official/2008.1/i586/media/contrib/release with media_info/hdlist.czurpmi.addmedia --update contrib_updates ftp://distrib-coffee.ipsl.jussieu.fr/pub/linux/MandrivaLinux/official/2008.1/i586/media/contrib/updates with media_info/hdlist.czurpmi.addmedia main ftp://distrib-coffee.ipsl.jussieu.fr/pub/linux/MandrivaLinux/official/2008.1/i586/media/main/release with media_info/hdlist.czurpmi.addmedia --update main_updates ftp://distrib-coffee.ipsl.jussieu.fr/pub/linux/MandrivaLinux/official/2008.1/i586/media/main/updates with media_info/hdlist.czFail2ban은 다음과 같이 설치할 수 있습니다:
urpmi fail2ban그런 다음 fail2ban을 시작합니다:
/etc/init.d/fail2ban start모든 fail2ban 구성 파일은 /etc/fail2ban 디렉토리에 있습니다.
3 fail2ban 구성하기
fail2ban의 기본 동작은 /etc/fail2ban/jail.conf 파일에 구성되어 있습니다. 그것을 살펴보세요, 이해하기 어렵지 않습니다. 기본 옵션이 다른 섹션에서 재정의되지 않는 한 모든 다른 섹션에 적용되는 [DEFAULT] 섹션이 있습니다.
여기에서 몇 가지 구성 옵션을 설명합니다:
- ignoreip: fail2ban에 의해 차단될 수 없는 IP 주소의 공백으로 구분된 목록입니다. 예를 들어, 서버에 연결하는 컴퓨터가 정적 IP 주소를 가지고 있다면, 여기에서 나열할 수 있습니다.
- bantime: fail2ban에 의해 차단된 호스트가 차단되는 시간(초)입니다(600초 = 10분).
- maxretry: fail2ban에 의해 호스트가 차단되기 전에 허용되는 최대 로그인 실패 시도 횟수입니다.
- filter: /etc/fail2ban/filter.d의 적절한 필터 파일을 참조합니다.
- action: /etc/fail2ban/action.d의 적절한 액션 파일을 참조합니다.
- logpath: fail2ban이 로그인 실패 시도를 확인하는 로그 파일입니다.
제 /etc/fail2ban/jail.conf 파일은 다음과 같습니다:
vi /etc/fail2ban/jail.conf| # Fail2Ban 구성 파일 # # 저자: Cyril Jaquier # # $Revision: 617 $ # # DEFAULT는 옵션의 전역 정의를 허용합니다. 이후 각 감옥에서 재정의할 수 있습니다. [DEFAULT] # "ignoreip"는 IP 주소, CIDR 마스크 또는 DNS 호스트일 수 있습니다. Fail2ban은 이 목록의 주소와 일치하는 호스트를 차단하지 않습니다. 여러 주소는 공백으로 구분하여 정의할 수 있습니다. ignoreip = 127.0.0.1 192.168.0.99 # "bantime"은 호스트가 차단되는 초 수입니다. bantime = 600 # 호스트가 "maxretry"를 생성한 경우 차단됩니다. findtime = 600 # "maxretry"는 호스트가 차단되기 전의 실패 횟수입니다. maxretry = 3 # "backend"는 파일 수정을 가져오는 데 사용되는 백엔드를 지정합니다. 사용 가능한 옵션은 "gamin", "polling" 및 "auto"입니다. 이 옵션은 각 감옥에서도 재정의할 수 있습니다(하나는 "gamin"을 사용하고 다른 하나는 "polling"을 사용). # # gamin: Gamin(파일 변경 모니터)이 설치되어 있어야 합니다. Gamin이 설치되어 있지 않으면 Fail2ban은 polling을 사용합니다. # polling: 외부 라이브러리가 필요하지 않은 폴링 알고리즘을 사용합니다. # auto: 사용 가능한 경우 Gamin을 선택하고 그렇지 않으면 polling을 선택합니다. backend = auto # 이 감옥은 Fail2ban 0.6의 표준 구성에 해당합니다. # mail-whois 액션은 본문에 whois 요청이 포함된 알림 이메일을 보냅니다. [ssh-iptables] enabled = true filter = sshd action = iptables[name=SSH, port=ssh, protocol=tcp] sendmail-whois[name=SSH, [email protected], [email protected]] logpath = /var/log/auth.log maxretry = 5 [proftpd-iptables] enabled = true filter = proftpd action = iptables[name=ProFTPD, port=ftp, protocol=tcp] sendmail-whois[name=ProFTPD, [email protected]] logpath = /var/log/proftpd/proftpd.log maxretry = 6 [sasl-iptables] enabled = true filter = sasl backend = polling action = iptables[name=sasl, port=smtp, protocol=tcp] sendmail-whois[name=sasl, [email protected]] logpath = /var/log/mail/info.log [apache-tcpwrapper] enabled = true filter = apache-auth action = hostsdeny logpath = /var/log/httpd/*error_log maxretry = 6 [postfix-tcpwrapper] enabled = true filter = postfix action = hostsdeny sendmail[name=Postfix, [email protected]] logpath = /var/log/mail/info.log bantime = 300 [courierpop3] enabled = true port = pop3 filter = courierlogin action = iptables[name=%(__name__)s, port=%(port)s] logpath = /var/log/mail/info.log maxretry = 5 [courierimap] enabled = true port = imap2 filter = courierlogin action = iptables[name=%(__name__)s, port=%(port)s] logpath = /var/log/mail/info.log maxretry = 5 [ssh-tcpwrapper] enabled = false filter = sshd action = hostsdeny sendmail-whois[name=SSH, [email protected]] ignoreregex = for myuser from logpath = /var/log/auth.log [vsftpd-notification] enabled = false filter = vsftpd action = sendmail-whois[name=VSFTPD, [email protected]] logpath = /var/log/vsftpd.log maxretry = 5 bantime = 1800 [vsftpd-iptables] enabled = false filter = vsftpd action = iptables[name=VSFTPD, port=ftp, protocol=tcp] sendmail-whois[name=VSFTPD, [email protected]] logpath = /var/log/vsftpd.log maxretry = 5 bantime = 1800 [apache-badbots] enabled = false filter = apache-badbots action = iptables-multiport[name=BadBots, port="http,https"] sendmail-buffered[name=BadBots, lines=5, [email protected]] logpath = /var/www/*/logs/access_log bantime = 172800 maxretry = 1 [apache-shorewall] enabled = false filter = apache-noscript action = shorewall sendmail[name=Postfix, [email protected]] logpath = /var/log/apache2/error_log [ssh-ipfw] enabled = false filter = sshd action = ipfw[localhost=192.168.0.1] sendmail-whois[name="SSH,IPFW", [email protected]] logpath = /var/log/auth.log ignoreip = 168.192.0.1 [named-refused-udp] enabled = false filter = named-refused action = iptables-multiport[name=Named, port="domain,953", protocol=udp] sendmail-whois[name=Named, [email protected]] logpath = /var/log/named/security.log ignoreip = 168.192.0.1 [named-refused-tcp] enabled = false filter = named-refused action = iptables-multiport[name=Named, port="domain,953", protocol=tcp] sendmail-whois[name=Named, [email protected]] logpath = /var/log/named/security.log ignoreip = 168.192.0.1 |
제 클라이언트 컴퓨터의 정적 IP 주소는 192.168.0.99이며, 잠기지 않도록 하기 위해 이를 ignoreip 목록에 추가했습니다.
SSH, Apache, Proftpd, Courier-POP3, Courier-IMAP 및 Sasl에 대한 로그인 시도를 제어하고 싶으므로 이러한 서비스에 대해 enabled를 true로 설정하고 나머지 서비스에 대해서는 false로 설정했습니다. SSH와 같은 일부 서비스는 iptables 또는 TCPWrappers(/etc/hosts.deny)로 차단할 수 있습니다. 어떤 방법을 선호하는지는 스스로 결정하세요.
fail2ban에 의해 차단될 때 알림을 받기 위해 이메일 주소 [email protected]를 자신의 이메일 주소로 바꾸는 것을 잊지 마세요.
파일을 기본 /etc/fail2ban/jail.conf와 비교하면 Mandriva 2008.1에 대해 기본 /etc/fail2ban/jail.conf의 로그 파일이 올바르지 않기 때문에 일부 로그 파일을 변경했음을 알 수 있습니다.
fail2ban 구성을 수정할 때마다 fail2ban을 재시작해야 하므로, 지금부터 그렇게 하겠습니다:
/etc/init.d/fail2ban restart이제 끝입니다. Fail2ban은 /var/log/fail2ban.log에 로그를 기록하므로, 어떤 호스트가 차단되었는지 확인하려면 해당 파일을 확인할 수 있습니다. 호스트가 fail2ban에 의해 차단되면 다음과 같이 표시됩니다:
2008-08-12 17:49:09,466 fail2ban.actions: WARNING [apache-tcpwrapper] Ban 1.2.3.4
2008-08-12 18:08:33,213 fail2ban.actions: WARNING [sasl-iptables] Ban 1.2.3.4
2008-08-12 18:26:37,769 fail2ban.actions: WARNING [courierlogin] Ban 1.2.3.4
2008-08-12 18:39:06,765 fail2ban.actions: WARNING [courierimap] Ban 1.2.3.4현재 차단된 호스트가 있는지 확인하려면 방화벽을 확인할 수도 있습니다. 간단히 다음을 실행하세요:
iptables -LTCPWrappers를 사용하여 호스트를 차단하는 서비스의 경우 /etc/hosts.deny를 확인하세요.
링크
- Fail2ban: http://www.fail2ban.org
- Mandriva: http://www.mandriva.com
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.