私は 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 を許可するルールの後に読み取られます。