Ändern Sie die Reihenfolge, in der eine IPTABLE-KETTE gelesen wird (mit Fail2Ban).

Ändern Sie die Reihenfolge, in der eine IPTABLE-KETTE gelesen wird (mit Fail2Ban).

Ich habe einige Erfahrung mit der Verwendung von iptables und fail2ban. Beide funktionieren wie sie sollen, aber ich möchte die Art und Weise optimieren, wie Pakete „VERLOREN“ werden, wenn IP- und Port-Prüfungen stattfinden.

Fail2Ban blockiert erfolgreich IPs, die versuchen, auf verschiedene Ports zuzugreifen (z. B. SSH, MySQL usw.).

Wenn jedoch eine IP auf einem bestimmten Port blockiert ist (z. B. Port 22 für SSH), ist der HOST weiterhin über ICMP erreichbar, obwohl Fail2Ban iptables eine „DROP - all“-Bedingung hinzugefügt hat.

Ich kann mich irren, aber ich glaube, es hat mit der Reihenfolge zu tun, in der iptables die Fail2Ban-KETTE liest.

Folgendes wird iptables -Lenthüllt (IPs und DNSs wurden ersetzt):

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

Hier ist auch meine iptablesDatei als Referenz:

# 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

Wie Sie sehen, gibt es eine Zeile, die ICMP ERLAUBT:

ACCEPT     icmp --  anywhere             anywhere            icmp any

Dies geschieht mit Absicht, da ich es benötige, dass legitime Benutzer bestimmte Server anpingen können.

Sie können in meiner iptables-Datei sehen, dass ich die KETTE „fail2ban-SSH“ vor den anderen hinzugefügt habe, in der Hoffnung, dass sie vor allen anderen Regeln gelesen wird, aber das hat nicht funktioniert.

Mein Ziel wäre es, JEDE Anfrage von einer IP zu LÖSCHEN, die Fail2Ban aus irgendeinem Grund blockiert hat, einschließlich ICMP-Anfragen.

Gibt es eine Möglichkeit, iptables so zu konfigurieren, dass die Fail2Ban-Regeln vor allen anderen KETTEN und Regeln gelesen werden, sodass ich wirklich alle Ports und Protokolle blockieren und IPs verwenden kann?

Antwort1

Wenn ich Ihre Frage richtig verstehe, sollten IPs in Ihrem SSH-Jail von allen Ports des Systems blockiert sein und Sie nicht anpingen können. Alle anderen IPs sollten anpingen können.

Um eine IP von allen Ports zu verbannen, müssen Sie Ihr SSH-Jail so einrichten, dass die Aktionskonfiguration iptables-allports verwendet wird. Sie können in /etc/fail2ban/action.d/iptables-blocktype.conf konfigurieren, ob DROP, REJECT usw. verwendet werden soll.

[sshd]
enabled  = true
action   = iptables-allports[name=sshd]
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 5
findtime = 300
bantime  = 7200

Wenn Sie außerdem verhindern möchten, dass diese bestimmte IP Sie anpingt, während Sie allen anderen, die sich nicht im SSH-Jail befinden, das Anpingen erlauben, müssen Sie Ihrem SSH-Jail eine weitere Aktion hinzufügen.

  • Erstellen Sie Kopien von iptables-allports.conf und iptables-blocktype.conf.
  • Geben Sie den Dateien neue Namen, beispielsweise: iptables-blockping.conf und iptables-blocktype-ping.conf.
  • Öffnen Sie iptables-blockping.conf und aktualisieren Sie den Abschnitt [INCLUDES], sodass er auf iptables-blocktype-ping.conf verweist.
  • Öffnen Sie iptables-blocktype-ping.conf und ändern Sie den Blocktyp in REJECT --reject-with icmp-host-prohibited.

Jails können mehrere Aktionen haben. Listen Sie daher direkt unter iptables-allports[name=sshd] den Namen Ihrer neuen Aktionskonfigurationsdatei iptables-blockping.conf auf.

Dies sollte für Ihre Zwecke funktionieren – IPs in Ihrem SSH-Jail haben bestimmte Einträge in iptables, um Ping-Anfragen abzulehnen. Diese Regeln werden nach Ihrer Regel gelesen, um Pings zuzulassen.

verwandte Informationen