IPTABLE CHAIN の読み取り順序を変更する (Fail2Ban を使用)

IPTABLE CHAIN の読み取り順序を変更する (Fail2Ban を使用)

私は iptables と fail2ban の使用経験があります。どちらも正常に動作していますが、IP とポートのプローブが発生したときにパケットが「ドロップ」される方法を最適化したいと考えています。

Fail2Ban は、さまざまなポート (SSH、MySQL など) にアクセスしようとしている IP をブロックするのに優れています。

ただし、特定のポート (SSH の場合はポート 22) で IP がブロックされると、Fail2Ban が iptables に「DROP - all」条件を追加したとしても、HOST は ICMP 経由で引き続きアクセスできます。

間違っているかもしれませんが、これは 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

これは、正当なユーザーが特定のサーバーに ping を実行できるようにする必要があるため、意図的に行われます。

私の iptables ファイルを見ると、他のすべてのルールの前に読み込まれることを期待して、「fail2ban-SSH」チェーンを他のチェーンより前に追加しましたが、うまくいきませんでした。

私の目標は、ICMP 要求を含む、Fail2Ban が何らかの理由でブロックした IP からのすべての要求をドロップすることです。

すべてのポートとプロトコルで IP を完全にブロックできるように、他のすべての CHAINS とルールの前に Fail2Ban ルールを読み取るように iptables を構成する方法はありますか?

答え1

質問を正しく理解していれば、SSH jail 内の IP はシステム上のすべてのポートからブロックされ、ping できないはずです。その他のすべての IP は ping できるはずです。

すべてのポートからIPを禁止するには、iptables-allportsアクション設定を使用するようにSSH jailを設定する必要があります。/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 jail 内にいない他のユーザーからの ping を許可しながら、この特定の IP からの ping を防止したい場合は、SSH jail に別のアクションを追加する必要があります。

  • iptables-allports.conf と iptables-blocktype.conf の両方のコピーを作成します。
  • ファイルに新しい名前を付けます (例: iptables-blockping.conf、iptables-blocktype-ping.conf)。
  • iptables-blockping.conf を開き、[INCLUDES] セクションを更新して iptables-blocktype-ping.conf を指すようにします。
  • iptables-blocktype-ping.conf を開き、ブロックタイプを に変更しますREJECT --reject-with icmp-host-prohibited

jail には複数のアクションがある場合があるため、iptables-allports[name=sshd] のすぐ下に、新しいアクション設定ファイルの名前 iptables-blockping.conf をリストします。

これはあなたの目的にかなうはずです - SSH jail 内の IP には、ping 要求を拒否するための iptables 内の特定のエントリがあります。これらのルールは、ping を許可するルールの後に読み取られます。

関連情報