IPTABLE CHAIN을 읽는 순서 변경 (Fail2Ban 사용)

IPTABLE CHAIN을 읽는 순서 변경 (Fail2Ban 사용)

나는 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의 특정 항목이 있습니다. 이러한 규칙은 핑을 허용하는 규칙 다음에 읽혀집니다.

관련 정보