IPTABLES: So begrenzen Sie pro IP im ausgewählten Netzwerk den Zugriff auf Port 25 in einer Zeiteinheit

IPTABLES: So begrenzen Sie pro IP im ausgewählten Netzwerk den Zugriff auf Port 25 in einer Zeiteinheit

Ich habe einen Mailserver und einen Benutzer mit der schlechten Angewohnheit, der gerne innerhalb einer Sekunde gleichzeitig auf die Schaltflächen „Senden“ und „Empfangen“ klickt, wodurch das Protokoll mit unnötigen Informationen überflutet wird.

Ich versuche, jede IP-Adresse in meinem Netzwerk (interne IP-Adresse) so zu beschränken, dass alle 30 Sekunden eine Verbindung zum Mailserver hergestellt werden kann. Dies sollte jedoch nicht auf externe IP-Adressen angewendet werden, da der Mailserver manchmal weitergeleitete E-Mails von einem anderen zugelassenen Mailserver erhält.

Ich habe die Manpage von iptables gelesen und festgestellt, --connlimit-above Ndass dort nur die Verbindung und nicht die Zeiteinheit begrenzt wird.

Kann mir jemand zeigen, wie das mit iptables oder ufw geht?

Antwort1

Dies ist ein Standardfall der Ratenbegrenzung:

iptables -I INPUT -p tcp --dport 25 -i eth0 -s 192.168.0.0/24 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 25 -i eth0 -s 192.168.0.0/24 -m state --state NEW -m recent --update --seconds 30 --hitcount 2 -j DROP

Hier bin ich davon ausgegangen, dass Ihr LAN192.168.0.0/24und Ihre Schnittstelle isteth0, wenn nicht, ändern Sie es bitte entsprechend.

Die erste Regel erkennt alleNEUPakete kommen vorbeieth0aus Ihrem LAN und an TCP-Port 25 gerichtet, und fügt die IP-Adresse demjüngsteListe; der zweite Befehl, nach Erhalt einerNEUPaket auf dem gleichen Port, prüft diejüngsteListe (--aktualisieren) und, falls die Adresse weniger als--Sekunden 30vor , verwirft das Paket, wenn die angegebene Anzahl von--Trefferzahlen 2wurde erreicht.

Bitte beachten Sie, dass dies nur gilt fürNEUPakete: Wenn Sie ein legitimes Gespräch führen, möchten Sie es nicht stören, sondern nur den Aufbau eines weiteren Gesprächs blockieren. In diesem Punkt unterscheidet sich meine Antwort völlig von der von Angelo

Antwort2

Ok, ich habe das NICHT getestet, also entschuldige ich mich im Voraus, wenn es nicht funktioniert (aber hoffentlich hilft Ihnen das weiter genug, um es herauszufinden):

iptables -A INPUT -s 192.168.0.0/24 -p tcp -m state --state ESTABLISHED --tcp-flags FIN,ACK FIN,ACK --dport 25 -m recent --name smtplimit --set
iptables -A INPUT -s 192.168.0.0/24 -p tcp -m state --state ESTABLISHED --tcp-flags RST RST --dport 25 -m recent --name smtplimit --set
iptables -A INPUT -s 192.168.0.0/24 -m recent --name smtplimit --rcheck --seconds 30 --hitcount 1 -m limit --limit 1/minute -j LOG --log-prefix 'SMTP limit:'
iptables -A INPUT -s 192.168.0.0/24 -m recent --name smtplimit --rcheck --seconds 30 --hitcount 1 -j DROP

verwandte Informationen