나는 iptables와 fall2ban을 사용한 경험이 있습니다. 둘 다 제대로 작동하지만 IP 및 포트 검색이 발생할 때 패킷이 "삭제"되는 방식을 최적화하고 싶습니다.
Fail2Ban은 다양한 포트(예: SSH, MySQL 등)에 액세스하려는 IP를 효과적으로 차단하고 있습니다.
그러나 특정 포트(예: SSH의 경우 포트 22)에서 IP가 차단되면 Fail2Ban이 iptables에 "DROP - all" 조건을 추가한 경우에도 ICMP를 통해 HOST에 계속 연결할 수 있습니다.
제가 틀렸을 수도 있지만, iptables가 Fail2Ban CHAIN을 읽는 순서와 관련이 있는 것 같습니다.
공개되는 내용은 다음과 같습니다 iptables -L
(IP와 DNS가 교체됨).
user@ SERVER > iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
fail2ban-SSH tcp -- anywhere anywhere tcp dpt:ssh
ACCEPT all -- 10.10.10.1/25 anywhere
fail2ban-SSH all -- anywhere anywhere
RH-Firewall-1-INPUT all -- anywhere anywhere
Chain FORWARD (policy ACCEPT)
target prot opt source destination
fail2ban-SSH all -- anywhere anywhere
RH-Firewall-1-INPUT all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain RH-Firewall-1-INPUT (2 references)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT icmp -- anywhere anywhere icmp any
ACCEPT esp -- anywhere anywhere
ACCEPT ah -- anywhere anywhere
ACCEPT udp -- anywhere 224.0.0.251 udp dpt:mdns
ACCEPT udp -- anywhere anywhere udp dpt:ipp
ACCEPT tcp -- anywhere anywhere tcp dpt:ipp
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ftp
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:http
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain fail2ban-SSH (3 references)
target prot opt source destination
DROP all -- badip.baddomain.org anywhere
DROP all -- 299.299.299.11 anywhere
DROP all -- prober.hackers.com anywhere
RETURN all -- anywhere anywhere
그리고 iptables
참고용으로 제 파일을 올려두겠습니다.:
# Firewall configuration written by system-config-securitylevel
# Manual customization of this file is not recommended.
*filter
:fail2ban-SSH - [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
#
#
#
-A INPUT -j fail2ban-SSH
-A FORWARD -j fail2ban-SSH
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -i eth0 -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p esp -j ACCEPT
-A RH-Firewall-1-INPUT -p ah -j ACCEPT
-A RH-Firewall-1-INPUT -d 224.0.0.251 -p udp -m udp --dport 5353 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
보시다시피 ICMP를 허용하는 줄이 있습니다.
ACCEPT icmp -- anywhere anywhere icmp any
이는 합법적인 사용자가 특정 서버에 핑을 보낼 수 있어야 하기 때문에 의도적으로 수행됩니다.
내 iptables 파일에서 볼 수 있듯이 다른 모든 규칙보다 먼저 읽힐 수 있기를 바라면서 "fail2ban-SSH" 체인을 다른 규칙보다 먼저 추가했지만 작동하지 않았습니다.
내 목표는 ICMP 요청을 포함하여 어떤 이유로든 Fail2Ban이 차단한 IP의 모든 요청을 삭제하는 것입니다.
다른 모든 체인 및 규칙보다 먼저 Fail2Ban 규칙을 읽도록 iptables를 구성하여 모든 포트 및 프로토콜에서 실제로 차단 및 IP를 수행할 수 있는 방법이 있습니까?
답변1
귀하의 질문을 올바르게 이해했다면 SSH 감옥의 IP는 시스템의 모든 포트에서 차단되어야 하며 귀하에게 핑을 보낼 수 없어야 합니다. 다른 모든 IP는 ping이 가능해야 합니다.
모든 포트에서 IP를 금지하려면 iptables-allports 작업 구성을 사용하도록 SSH 감옥을 설정해야 합니다. /etc/fail2ban/action.d/iptables-blocktype.conf에서 DROP, REJECT 등의 사용 여부를 구성할 수 있습니다.
[sshd]
enabled = true
action = iptables-allports[name=sshd]
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
findtime = 300
bantime = 7200
SSH 감옥에 있지 않은 다른 사람이 핑을 수행하도록 허용하면서 이 특정 IP가 자신에게 핑을 보내는 것을 방지하려면 SSH 감옥에 다른 작업을 추가해야 합니다.
- iptables-allports.conf 및 iptables-blocktype.conf의 복사본을 만듭니다.
- iptables-blockping.conf 및 iptables-blocktype-ping.conf와 같이 파일에 새 이름을 지정합니다.
- iptables-blockping.conf를 열고 iptables-blocktype-ping.conf를 가리키도록 [INCLUDES] 섹션을 업데이트합니다.
- iptables-blocktype-ping.conf를 열고 블록 유형을
REJECT --reject-with icmp-host-prohibited
.
감옥에는 여러 작업이 있을 수 있으므로 iptables-allports[name=sshd] 바로 아래에 새 작업 구성 파일인 iptables-blockping.conf의 이름을 나열하세요.
이는 귀하의 목적에 맞게 작동해야 합니다. SSH 감옥의 IP에는 ping 요청을 거부하기 위한 iptables의 특정 항목이 있습니다. 이러한 규칙은 핑을 허용하는 규칙 다음에 읽혀집니다.