![Fail2ban 및 iptables 규칙의 범람(대역폭 부족 발생)](https://linux55.com/image/188855/Fail2ban%20%EB%B0%8F%20iptables%20%EA%B7%9C%EC%B9%99%EC%9D%98%20%EB%B2%94%EB%9E%8C(%EB%8C%80%EC%97%AD%ED%8F%AD%20%EB%B6%80%EC%A1%B1%20%EB%B0%9C%EC%83%9D).png)
지난 6개월 동안 내 서버에서 이 패턴이 여러 번 발생하는 것을 확인했습니다.
첫째,
fail2ban
봇의 많은 SSH 시도가 감지되어 성공적으로 차단되었습니다. 실제로/etc/fail2ban/jail.conf
나는 다음을 가지고 있습니다:[ssh] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 3 findtime = 86400 bantime = 2678400
그러다가 결과적으로
iptables
는매우 많은규칙은 내가 아는 한,~ 4000 규칙이와 같이:-D fail2ban-ssh -s 1.2.3.4/32 -j DROP -D fail2ban-ssh -s 5.6.7.8/32 -j DROP ...
마지막으로 서버의 전체 인터넷 연결은 다음과 같습니다.아주 느린(SFTP를 사용하여 로컬 컴퓨터에 파일을 다운로드하는 동안 대역폭이 최대 160KB/초에 불과하다는 것을 알았습니다.) 아마도 이러한 모든 규칙 때문일 것입니다.
일시적으로 해결되었습니다.
iptables -S |grep DROP| sed 's/-A/-D/' >rules
cat rules | while read line; do iptables $line; done
iptables -S |wc -l # ~100 rules (instead of ~4000), good, back to normal!
이 작업을 수행한 후 몇 초 후에 로컬 컴퓨터에 대한 대역폭이 다시 정상으로 돌아옵니다. 즉, 5MB/초 이상이면 괜찮습니다.
하지만 그런 일이 여러 번 일어났기 때문에 몇 주 후에 다시 일어날 것입니다.
이 장기적인 문제를 피하는 방법은 무엇입니까?
답변1
ipset
이 문제를 해결하는 것을 목표로 합니다. IP 또는 서브넷 세트를 생성할 수 있습니다.
ipset create bannedv4 hash:net family ipv4 comment
ipset create bannedv6 hash:net family ipv6 comment
다음과 같이 iptables 규칙을 추가합니다.
iptables -A INPUT -m set --match-set bannedv4 src -j DROP
ip6tables -A INPUT -m set --match-set bannedv6 src -j DROP
그런 다음 금지된 세트에 많은 항목을 추가할 수 있습니다. 그것을 사용하기 위해 Fail2ban을 구성하는 방법을 모르겠습니다. 나에게는 ipset 작업이 이미 정의되어 있지만 /etc/fail2ban/action.d
배포판에 따라 다를 수 있습니다.
ipset add bannedv4 1.2.3.4/16 comment "SSH bot"
ipset add bannedv6 64:ff9b::1.2.3.4/112 comment "SSH bot"
만료된 항목이 있을 수도 있습니다. 그룹을 만들 때 timeout 604800
일주일 동안만 차단하는 옵션을 추가하기만 하면 됩니다. 동일한 옵션을 에 전달하여 이 기본 시간 제한을 무시할 수 있습니다 ipset add
. iptables 규칙을 저장하는 것처럼 초기화 스크립트에 설정을 저장할 수도 있습니다. iptables 규칙의 이전 설정을 복원해야 합니다.
ipset save > /var/lib/firewall/ipset
ipset restore < /var/lib/firewall/ipset
답변2
올바르게 지적했듯이 ipset
큰 목록에 더 적합합니다. 모든 감옥에 대한 기본 동작을 지정
하도록 구성(fail2ban >= v.0.10)할 수 있습니다 :jail.local
[DEFAULT]
banaction = iptables-ipset-proto6
banaction_allports = iptables-ipset-proto6-allports
2678400(31일?!) 의 경우 bantime
단 3번의 실패 후에 오랫동안 금지하는 것은 너무 부담스럽기 때문에 적어도 권장되지는 않습니다.
Fail2ban v.0.11이 있는 경우 증분 금지 기능을 사용할 수 있습니다. - 참조https://stackoverflow.com/a/66443690/7161854예를 들어.