iptables, Rechner in Blacklist für 1 Stunde blocken

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
Benutzeravatar
feldmaus
Beiträge: 1308
Registriert: 14.06.2005 23:13:22
Lizenz eigener Beiträge: GNU General Public License
Wohnort: Deutschland

iptables, Rechner in Blacklist für 1 Stunde blocken

Beitrag von feldmaus » 05.05.2010 13:53:31

Hi Alle,

für meinen Debian Lenny Server (iptables 1.4.2-6, Kernel 2.6.32.11) überlege ich mir gerade neue iptable Regeln. Die Idee ist folgende:

Wenn eine Rechner aus dem Internet auch nur einmal eine neue Verbindung aufbaut, mit gesetztem SYN Flag, zu einem Port der nicht 80 oder 443 ist, dann setzte diesen Rechner auf eine Blacklist für eine Stunde. Pakete von Rechnern in der Blacklist werden sofort fallen gelassen.

Hat da Jemand von Euch einen Ansatz wie man das machen kann?

Grüße Markus

Benutzeravatar
feldmaus
Beiträge: 1308
Registriert: 14.06.2005 23:13:22
Lizenz eigener Beiträge: GNU General Public License
Wohnort: Deutschland

Re: iptables, Rechner in Blacklist für 1 Stunde blocken

Beitrag von feldmaus » 05.05.2010 23:55:03

So habe im Netz endlich was interessantes gefunden http://www.linux-magazin.de/Heft-Abo/Au ... Hausverbot und weiß nun endlich wofür man das recent Modul von iptables braucht. :-)

Code: Alles auswählen

iptables -A INPUT -i $DSLIF -m recent --name blacklist --update --seconds 3600 -j DROP
iptables -A INPUT -i $DSLIF -p tcp -m mport --dport 1:79,81:442,444:65535 -m recent --name blacklist --set --syn -j DROP
Die erste Regel blockt IP-Adressen die schon in der Blacklist enthalten sind und aktualisiert den Zeitstempel, wann diese IP-Adresse das letzte mal gesehen wurde. IP-Adressen die in der Blacklist stehen wird der komplette Zugang zu allen Ports für 3600 Sekunden (1Stunde) verwehrt.
Die zweite Regel blockt alles tcp Pakete, die einen Verbindungsaufbau unternehmen wollen und nicht als Ziel-Port 80 (http) oder 443 (https) haben. Falls diese Pakete noch nicht in der Blackliste stehen, werden diese in die Blacklist eingetragen.

Laut dem Beitrag vom linux-magazin.de hat das recent modul auch Nachteile. ein Angreifer könnte eine gespoofte Adresse Nutzen um, somit vertrauenswürdige Rechner zu blocken.

Stellen die anderen Protokolle udp, icmp auch Probleme dar? Ja. Ich schaue mir nochmal Snort an.

Hier noch ein paar Links zu recent:
http://snowman.net/projects/ipt_recent/
http://linux.die.net/man/8/iptables
Grüße Markus
Zuletzt geändert von feldmaus am 07.05.2010 23:49:43, insgesamt 1-mal geändert.

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: iptables, Rechner in Blacklist für 1 Stunde blocken

Beitrag von Duff » 06.05.2010 09:39:12

Wir hatten so ein ähnliches Thema mal hier diskutiert.
Oh, yeah!

Benutzeravatar
feldmaus
Beiträge: 1308
Registriert: 14.06.2005 23:13:22
Lizenz eigener Beiträge: GNU General Public License
Wohnort: Deutschland

Re: iptables, Rechner in Blacklist für 1 Stunde blocken

Beitrag von feldmaus » 07.05.2010 22:13:29

Duff hat geschrieben:Wir hatten so ein ähnliches Thema mal hier diskutiert.
Danke Duff,

habe Heute gemerkt dass ich auf meine Homepage nicht mehr drauf komme, entweder weil Jemand zu häufig auf meinen 443 Port gegangen ist, oder ich einen Fehler gemacht habe. Ich werde das mit hashlimit mal ausprobieren, obwohl ich es noch nicht ganz verstehe.

Hashlimit kann also für jede Source-IP einen seperaten Bucket erstellen? Zur Zeit nutze ich limit, wo alle Source-IP's nur ein Bucket haben pro Port. Und das ist bei hashlimit anders?

mistersixt hatte das Modul -m tcp in seinem Beispiel viewtopic.php?f=30&t=113342&hilit=iptables#p718460 geladen. Warum? Für die Angabe des Protokolls muss man doch keine Erweiterung laden?
Ich nehme mal an, dass noch eine DROP Regel folgen muss, wie in diesem Beispiel http://dentaku.wazong.de/tag/linux/. Vielleicht ist es für mich schon ein bisschen spät, aber ich sehe gerade nicht den Vorteil gegenüber dem recent Modul?

Grüße Markus

Benutzeravatar
feldmaus
Beiträge: 1308
Registriert: 14.06.2005 23:13:22
Lizenz eigener Beiträge: GNU General Public License
Wohnort: Deutschland

Re: iptables, Rechner in Blacklist für 1 Stunde blocken

Beitrag von feldmaus » 08.05.2010 11:46:29

Also ich poste einen Ausschnitt meiner aktuellen Firewall:

Code: Alles auswählen

echo -e "\nBruteforce,Port-Scans,DoS,SYN-Flood attacks"
iptables -N attacks
iptables -A INPUT -i "$DSLIF" -p tcp -j attacks
iptables -A FORWARD -i "$DSLIF" -p tcp -j attacks
iptables -A attacks -m state --state ESTABLISHED,RELATED -j RETURN
iptables -A attacks -m recent --update --seconds 600 -j DROP
iptables -A attacks -p tcp -m state --state NEW -m multiport --dport 1:79,81:442,444:65535 -m recent --set -j DROP
iptables -A attacks -p tcp -m state --state NEW -m hashlimit --hashlimit-name http --hashlimit-upto 6/hour --hashlimit-burst 6 --hashlimit-mode srcip --dport 80 -j RETURN
iptables -A attacks -p tcp -m state --state NEW -m hashlimit --hashlimit-name https --hashlimit-upto 6/hour --hashlimit-burst 6 --hashlimit-mode srcip --dport 443 -j RETURN
iptables -A attacks -m limit --limit 3/s --limit-burst 3 -j LOG --log-level info --log-prefix "Attacks-Rule: "
iptables -A attacks -j DROP

echo -e "\nUnaufgeforderte und ungueltige Verbindungsaufbauten"
iptables -N states              # Ungueltige und unaufgeforderte Pakete
iptables -A INPUT -i "$DSLIF" -j states
iptables -A FORWARD -i "$DSLIF" -j states
iptables -A states -p icmp --icmp-type 8 -j RETURN # Sollen weiter verarbeitet werden, daher RETURN
iptables -A states -m state --state NEW,INVALID -m limit --limit 3/s --limit-burst 3 -j LOG --log-level info --log-prefix "State-Rule: "
iptables -A states -m state --state NEW,INVALID -j DROP
iptables -A states -j RETURN    # Ruecksprung, falls noch nicht verworfen
Beides sind eigene Chains, die noch nicht ganz harmonisieren, bzw. redundant sind. In der states Chain werden Alle Regeln bearbeitet, also tcp,udp icmp u.s.w. und in der attacks Chain halt nur tcp. Vielleicht sollte ich das doch lieber so lassen? Wie leicht ist es möglich die Regeln mit der Status-Abfrage Established,Related zu überlisten?

Grüße Markus

Benutzeravatar
feldmaus
Beiträge: 1308
Registriert: 14.06.2005 23:13:22
Lizenz eigener Beiträge: GNU General Public License
Wohnort: Deutschland

Re: iptables, Rechner in Blacklist für 1 Stunde blocken

Beitrag von feldmaus » 11.05.2010 20:24:30

Ich wollte hier nochmal meine Änderung posten, die auch sehr gut funktioniert:

Code: Alles auswählen

        echo -e "\nBruteforce,Port-Scans,DoS,SYN-Flood attacks"
        iptables -N attacksinput
        iptables -A INPUT -i "$DSLIF" -j attacksinput
        iptables -A attacksinput -m state --state ESTABLISHED,RELATED -j RETURN
        iptables -A attacksinput -m recent --update --seconds 600 -j DROP
        iptables -A attacksinput -p tcp -m state --state NEW -m multiport --dport 1:79,81:442,444:65535 -m recent --set
        iptables -A attacksinput -p tcp -m state --state NEW -m hashlimit --hashlimit-name http --hashlimit-upto 6/hour --hashlimit-burst 6 --hashlimit-mode srcip --dport 80 -j RETURN
        iptables -A attacksinput -p tcp -m state --state NEW -m hashlimit --hashlimit-name https --hashlimit-upto 6/hour --hashlimit-burst 6 --hashlimit-mode srcip --dport 443 -j RETURN
        iptables -A attacksinput -p icmp --icmp-type 8 -j RETURN # Sollen weiter verarbeitet werden, daher RETURN
        iptables -A attacksinput -m state --state NEW,INVALID -m limit --limit 3/s --limit-burst 3 -j LOG --log-level info --log-prefix "attacksinput(NEW,INVALID): "
        iptables -A attacksinput -m state --state NEW,INVALID -m recent --set -j DROP
        iptables -A attacksinput -m limit --limit 3/s --limit-burst 3 -j LOG --log-level info --log-prefix "attacksinput: "
        iptables -A attacksinput -m recent --set -j DROP

        iptables -N attacksforward
        iptables -A FORWARD -i "$DSLIF" -j attacksforward
        iptables -A attacksforward -m state --state ESTABLISHED,RELATED -j RETURN
        iptables -A attacksforward -m recent --update --seconds 600 -j DROP
        iptables -A attacksforward -m state --state NEW,INVALID -m limit --limit 3/s --limit-burst 3 -j LOG --log-level info --log-prefix "attacksforward(NEW,INVALID): "
        iptables -A attacksforward -m state --state NEW,INVALID -m recent --set -j DROP
        iptables -A attacksforward -m limit --limit 3/s --limit-burst 3 -j LOG --log-level info --log-prefix "attacksforward: "
        iptables -A attacksforward -m recent --set -j DROP
Ich habe jetzt 2 eigene Chains erstellt, die im Prinzip alle feindliche Angriffe abwehren sollen. Die Chain attacksinput ist für Pakete die vom internet in meinen Server wollen und die Chain attacksforward ist für Pakete die aus dem Internet durch meinen Server in mein lokales Netz wollen. Es werden nur bekannte Sachen durchgelassen, oder Sachen die schon eine aufgebaute Verbindung vorweisen können. Eine Blacklist habe ich auch hinzugefügt. Alle Pakete die nicht zu Port 80 oder 443 wollen kommen sofort in die Liste und werden für 10min. fallen gelassen. Meine Regeln decken alle Protokolle ab.

Ich nutze hier vorwiegend RETURN. Die Pakete gehen so wieder zurück zur Haupt Chain und werden dort weiter verarbeitet.

Grüße Markus

Antworten