Linux:Iptables: Unterschied zwischen den Versionen
Admin (Diskussion | Beiträge) |
Admin (Diskussion | Beiträge) |
||
(7 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
== Standardregeln == | |||
=== FTP-Server === | |||
<source lang="bash"> | |||
-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT | |||
</source> | |||
=== Samba Server === | |||
<source lang="bash"> | |||
-A INPUT -p udp -m state --state NEW -m udp --dport 137 -j ACCEPT | |||
-A INPUT -p udp -m state --state NEW -m udp --dport 138 -j ACCEPT | |||
-A INPUT -p tcp -m state --state NEW -m tcp --dport 139 -j ACCEPT | |||
-A INPUT -p tcp -m state --state NEW -m tcp --dport 445 -j ACCEPT | |||
</source> | |||
=== Webserver === | |||
<source lang="bash"> | |||
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT | |||
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT | |||
</source> | |||
=== Mailserver === | |||
<source lang="bash"> | |||
-A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT | |||
-A INPUT -p tcp -m state --state NEW -m tcp --dport 110 -j ACCEPT | |||
-A INPUT -p tcp -m state --state NEW -m tcp --dport 995 -j ACCEPT | |||
-A INPUT -p tcp -m state --state NEW -m tcp --dport 143 -j ACCEPT | |||
-A INPUT -p tcp -m state --state NEW -m tcp --dport 993 -j ACCEPT | |||
</source> | |||
=== DNS Server === | |||
<source lang="bash"> | |||
-A INPUT -p tcp -m state --state NEW -m tcp --dport 53 -j ACCEPT | |||
-A INPUT -p udp -m state --state NEW -m udp --dport 53 -j ACCEPT | |||
</source> | |||
=== DHCP-Server === | |||
<source lang="bash"> | |||
-A INPUT -p tcp -m state --state NEW -m tcp --dport 68 -j ACCEPT | |||
</source> | |||
=== TFTP-Server === | |||
<source lang="bash"> | |||
-A INPUT -p udp -m state --state NEW -m udp --dport 69 -j ACCEPT | |||
</source> | |||
=== NTP-Server === | |||
<source lang="bash"> | |||
-A INPUT -p udp -m state --state NEW -m udp --dport 123 -j ACCEPT | |||
</source> | |||
=== Druckserver === | |||
<source lang="bash"> | |||
-A INPUT -p tcp -m tcp --dport 631 -j ACCEPT | |||
-A INPUT -p udp -m udp --dport 631 -j ACCEPT | |||
</source> | |||
=== Rsync-Server === | |||
<source lang="bash"> | |||
-A INPUT -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT | |||
</source> | |||
=== OpenVPN-Server === | |||
<source lang="bash"> | |||
-A INPUT -p udp -m state --state NEW -m udp --dport 1194 -j ACCEPT #Konfiguration OpenVPN beachten! | |||
</source> | |||
=== TightVNC-Server === | |||
<source lang="bash"> | |||
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5901 -j ACCEPT #jeder Desktop erhöht die Portnummer! | |||
</source> | |||
== Raspberry Pi == | == Raspberry Pi == | ||
Zeile 7: | Zeile 76: | ||
</source> | </source> | ||
Nun werden die Regeln eingefügt: | Nun werden die Regeln eingefügt (ohne die Zeilennummern): | ||
<source lang="bash"> | <source line="true" start=1 lang="bash"> | ||
*filter | *filter | ||
:INPUT DROP [159:12505] | :INPUT DROP [159:12505] | ||
Zeile 20: | Zeile 89: | ||
COMMIT | COMMIT | ||
</source> | </source> | ||
* Zeile 5: erlaubt alle Zugriffe über die Loopback-Schnittstelle ''lo''. Dies können nur Zugriffe vom eigenen Linux-System sein. | |||
* Zeile 6: erlaubt ICMP-Anfragen (z.B. ping) | |||
* Zeile 7: erlaubt bereits aufgebaute eingehende Verbindungen generell | |||
* Zeile 8: erlaubt Zugriffe auf den TCP-Port 22 (ssh-Daemon) | |||
* Zeile 9: alles verwerfen, was bis hierher gekommen ist (also die vorherigen Regeln nicht gegriffen haben) | |||
Die Regeln laden und anzeigen: | |||
<source lang="bash"> | |||
sudo iptables-restore /etc/network/iptables | |||
sudo iptables -L | |||
</source> | |||
Die Anzeige dürfte dann so aussehen: | |||
<source lang="bash"> | |||
Chain INPUT (policy DROP) | |||
target prot opt source destination | |||
ACCEPT all -- anywhere anywhere | |||
ACCEPT icmp -- anywhere anywhere | |||
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED | |||
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh | |||
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited | |||
Chain FORWARD (policy ACCEPT) | |||
target prot opt source destination | |||
Chain OUTPUT (policy ACCEPT) | |||
target prot opt source destination | |||
</source> | |||
Damit die Firewall-Regeln bei einem Neustart des Systems oder des Netzwerkdienstes automatisch geladen werden, muss noch ein Pre-Up Skript erstellen. | |||
<source lang="bash"> | |||
sudo vi /etc/network/if-pre-up.d/iptables | |||
</source> | |||
In der Datei ''/etc/network/if-pre-up.d/iptables'' die folgenden Zeilen einfügen: | |||
<source lang="bash"> | |||
#!/bin/sh | |||
/sbin/iptables-restore /etc/network/iptables | |||
</source> | |||
Damit das Skript ausgeführt werden kann müssen die Zugriffsrechte entsprechend anpassen werden: | |||
<source lang="bash"> | |||
sudo chmod +x /etc/network/if-pre-up.d/iptables | |||
</source> | |||
== Informationen == | |||
<source line=1 start=1 lang="bash"> | |||
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT | |||
-A INPUT -s 192.168.10.0/24 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT | |||
-A INPUT -i eth0 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT | |||
</source> | |||
Zeile 1: Der "Originalebefehl" | |||
Zeile 2: Begrenzung auf ein Netzwerk | |||
Zeile 3: Begrenzung auf eine Schnittstelle (z.B. LAN und WLAN) | |||
== SSH Brute Force reglementieren == | |||
<source line=1 start=1 lang="bash"> | |||
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name SSH --rsource | |||
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -m recent --rcheck --seconds 30 --hitcount 4 --rttl --name SSH --rsource -j REJECT --reject-with tcp-reset | |||
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -m recent --rcheck --seconds 30 --hitcount 3 --rttl --name SSH --rsource -j LOG --log-prefix "SSH brute force " | |||
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -m recent --update --seconds 30 --hitcount 3 --rttl --name SSH --rsource -j REJECT --reject-with tcp-reset | |||
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT | |||
</source> | |||
:Regel Nummer 1: Pakete, die eine SSH-Verbindung öffnen wollen, sollen als ''SSH'' markiert werden. | |||
:Regel Nummer 2: Das 4. Eröffnunspaket von einer Quelle innerhalb von 30 Sekunden soll verworfen werden (Verhindert Mehrfacheinträge in der Logdatei). | |||
:Regel Nummer 3: Das 3. Eröffnunspaket von einer Quelle innerhalb von 30 Sekunden soll gelogt werden. | |||
:Regel Nummer 4: Das 3. Eröffnunspaket von einer Quelle innerhalb von 30 Sekunden soll verworfen werden. | |||
:Regel Nummer 5: Was bis hierher gekommen ist (SSH), soll akzeptiert werden. |
Aktuelle Version vom 6. Februar 2015, 11:14 Uhr
Standardregeln
FTP-Server
-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
Samba Server
-A INPUT -p udp -m state --state NEW -m udp --dport 137 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 138 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 139 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 445 -j ACCEPT
Webserver
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
Mailserver
-A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 110 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 995 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 143 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 993 -j ACCEPT
DNS Server
-A INPUT -p tcp -m state --state NEW -m tcp --dport 53 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 53 -j ACCEPT
DHCP-Server
-A INPUT -p tcp -m state --state NEW -m tcp --dport 68 -j ACCEPT
TFTP-Server
-A INPUT -p udp -m state --state NEW -m udp --dport 69 -j ACCEPT
NTP-Server
-A INPUT -p udp -m state --state NEW -m udp --dport 123 -j ACCEPT
Druckserver
-A INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A INPUT -p udp -m udp --dport 631 -j ACCEPT
Rsync-Server
-A INPUT -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT
OpenVPN-Server
-A INPUT -p udp -m state --state NEW -m udp --dport 1194 -j ACCEPT #Konfiguration OpenVPN beachten!
TightVNC-Server
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5901 -j ACCEPT #jeder Desktop erhöht die Portnummer!
Raspberry Pi
Standardmäßig gibt es im aktuellen Raspbian Image noch keine Konfigurationsdatei für die Firewall-Regeln. Daher erstellen einer Datei /etc/network/iptables mit einem Editor.
sudo nano /etc/network/iptables
Nun werden die Regeln eingefügt (ohne die Zeilennummern):
*filter
:INPUT DROP [159:12505]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [140:13492]
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
- Zeile 5: erlaubt alle Zugriffe über die Loopback-Schnittstelle lo. Dies können nur Zugriffe vom eigenen Linux-System sein.
- Zeile 6: erlaubt ICMP-Anfragen (z.B. ping)
- Zeile 7: erlaubt bereits aufgebaute eingehende Verbindungen generell
- Zeile 8: erlaubt Zugriffe auf den TCP-Port 22 (ssh-Daemon)
- Zeile 9: alles verwerfen, was bis hierher gekommen ist (also die vorherigen Regeln nicht gegriffen haben)
Die Regeln laden und anzeigen:
sudo iptables-restore /etc/network/iptables
sudo iptables -L
Die Anzeige dürfte dann so aussehen:
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT icmp -- anywhere anywhere
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Damit die Firewall-Regeln bei einem Neustart des Systems oder des Netzwerkdienstes automatisch geladen werden, muss noch ein Pre-Up Skript erstellen.
sudo vi /etc/network/if-pre-up.d/iptables
In der Datei /etc/network/if-pre-up.d/iptables die folgenden Zeilen einfügen:
#!/bin/sh
/sbin/iptables-restore /etc/network/iptables
Damit das Skript ausgeführt werden kann müssen die Zugriffsrechte entsprechend anpassen werden:
sudo chmod +x /etc/network/if-pre-up.d/iptables
Informationen
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -s 192.168.10.0/24 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -i eth0 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
Zeile 1: Der "Originalebefehl" Zeile 2: Begrenzung auf ein Netzwerk Zeile 3: Begrenzung auf eine Schnittstelle (z.B. LAN und WLAN)
SSH Brute Force reglementieren
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name SSH --rsource
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -m recent --rcheck --seconds 30 --hitcount 4 --rttl --name SSH --rsource -j REJECT --reject-with tcp-reset
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -m recent --rcheck --seconds 30 --hitcount 3 --rttl --name SSH --rsource -j LOG --log-prefix "SSH brute force "
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -m recent --update --seconds 30 --hitcount 3 --rttl --name SSH --rsource -j REJECT --reject-with tcp-reset
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
- Regel Nummer 1: Pakete, die eine SSH-Verbindung öffnen wollen, sollen als SSH markiert werden.
- Regel Nummer 2: Das 4. Eröffnunspaket von einer Quelle innerhalb von 30 Sekunden soll verworfen werden (Verhindert Mehrfacheinträge in der Logdatei).
- Regel Nummer 3: Das 3. Eröffnunspaket von einer Quelle innerhalb von 30 Sekunden soll gelogt werden.
- Regel Nummer 4: Das 3. Eröffnunspaket von einer Quelle innerhalb von 30 Sekunden soll verworfen werden.
- Regel Nummer 5: Was bis hierher gekommen ist (SSH), soll akzeptiert werden.