====== Netfilter / Iptables ======
Netfilter ist eine [[security:Firewall]] innerhalb des [[wpde>Linux-Kernel|Linux-Kernels]].
Einstellungen ausgeben:
/sbin/iptables -L -n -v
===== Konfigurationswerkzeuge =====
[[http://www.fwbuilder.org/|Firewallbuilder]] | [[http://kris.koehntopp.de/artikel/fwbuilder/|Anleitung]]
[[software:bastille]]
===== Links =====
* [[http://www.netadmintools.com/art216.html|Block IP Addresses With IPtables]]
* [[http://www.hermann-uwe.de/files/fw_laptop|A firewall script intended to be used on workstations / laptops]]
* [[http://www.linuxguruz.com/iptables/|IPTABLES Firewall]]: Regeln und Skripts für Iptables
* [[http://www.netfilter.org/documentation/HOWTO/de/packet-filtering-HOWTO-7.html]]
* [[http://www.linux-magazin.de/Artikel/ausgabe/2000/06/IPTables/iptables.html]]
* [[http://www.fz-juelich.de/zam/docs/printable/tki/tki-0402.pdf]]
* [[http://www.linuxfaqs.de/howto/iptableshowto.php]]
* [[http://cipherdyne.org/blog/2007/07/oscon-2007-talk-slides-iptables-attack-visualization.html|Iptables Attack Visualization]]
* [[http://www.64-bit.de/dokumentationen/netzwerk/e/002/DE-IPTABLES-HOWTO-3.html|Linux IPTABLES HOWTO: iptables-Grundlagen]]
===== Tools =====
Wenn das Modul ip_conntrack geladen ist (wenn nicht: nachholen mit ''sudo modprobe ip_conntrack'' ) kann man die aktuelle Verbindungstabelle mit [[http://www.phildev.net/iptstate/|iptstate]] ausgeben:
sudo iptstate
(benötigt CONFIG_NF_CT_NETLINK in [[linux:Kernel]] Config).
===== Portumleitung auf Standardports =====
Regeln erstellen, z.B. Port 80 -> 8080 und 443 -> 8443.
sudo iptables -A PREROUTING -t nat -p tcp --dport 80 -j REDIRECT --to-port 8080
sudo iptables -A PREROUTING -t nat -p tcp --dport 443 -j REDIRECT --to-port 8443
===== Iptables-Regeln dauerhaft sichern =====
Damit die aktuell gültigen Regeln einen reboot überleben:
Skript ablegen in:
* /etc/network/if-up.d
* /etc/network/if-down.d
Alternativ gibt es unter Debian/Ubuntu das Paket ''iptables-persistent'':
apt install iptables-persistent
Regel permanent speichern:
iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6
Restore sofort:
iptables-restore < /etc/iptables/rules.v4
ip6tables-restore < /etc/iptables/rules.v6
Der folgende systemd-service sorgt für einen restore beim reboot:
systemctl status netfilter-persistent
[[https://www.thomas-krenn.com/de/wiki/Iptables_Firewall_Regeln_dauerhaft_speichern|Alternative Doku und Anleitung für Redhat-basiertes Systeme]]
===== Iptables-Regeln auflisten und löschen =====
Auflistung aktuell gültiger Regeln (v4): iptables -L -n --line-numbers
bzw v6: ip6tables -L -n --line-numbers
löschen: iptables -D $CHAIN 1
===== Simples Firewallscript =====
Blockieren einer einzigen IP-Adresse (hier im Beispiel "1.2.3.4"):
iptables -A INPUT -p all -s 1.2.3.4 -j REJECT
Als Ausgangsbasis für eine umfangreichere Firewall:
#!/bin/bash
IPTABLES="/sbin/iptables"
function firewall_start()
{
# echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# default policy = Drop
# uncomment
#$IPTABLES -P INPUT DROP
#$IPTABLES -P OUTPUT DROP
#$IPTABLES -P FORWARD DROP
# example: Drop all packets from host 120.166.10.211
$IPTABLES -I INPUT -s 120.166.10.211 -j DROP
$IPTABLES -I INPUT -s 120.166.10.211 -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level debug --log-prefix "IPT 120.166.10.211 blocked: "
}
function firewall_stop()
{
# forwarding off?
# echo "0" > /proc/sys/net/ipv4/ip_forward
#
# reset the default policies in the filter table.
#
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -P OUTPUT ACCEPT
#
# reset the default policies in the nat table.
#
$IPTABLES -t nat -P PREROUTING ACCEPT
$IPTABLES -t nat -P POSTROUTING ACCEPT
$IPTABLES -t nat -P OUTPUT ACCEPT
#
# reset the default policies in the mangle table.
#
$IPTABLES -t mangle -P PREROUTING ACCEPT
$IPTABLES -t mangle -P OUTPUT ACCEPT
#
# flush all the rules in the filter and nat tables.
#
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F
#
# erase all chains that's not default in filter and nat table.
#
$IPTABLES -X
$IPTABLES -t nat -X
$IPTABLES -t mangle -X
}
case "$1" in
start)
echo "starting firewall..."
firewall_start
;;
stop)
echo "stopping firewall..."
firewall_stop
;;
restart)
echo "restarting firewall..."
firewall_stop
firewall_start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
;;
esac