Iptables

Iptables ist ein Programm mit dem man den mächtigen kernelbasierenden Filter konfigurieren kann. Es lassen sich damit unzählige Dinge wie NAT, Portforwarding uvm. einrichten. Hier ein kleines Skript, was man nutzen kann, um sich einen einfachen Router zu bauen.

 

#!/bin/bash

# Alle Tables löschen/flushen (netfilter zurücksetzen)
iptables -t filter -F
iptables -t nat -F
iptables -t mangle -F
iptables -t raw -F
iptables -t security -F

# User definierte CHAINs löschen
iptables -X
# --------------------------------------------------------
# Das Forwarding aktivieren.
echo "1" > /proc/sys/net/ipv4/ip_forward
# Anweisung, dass die eintreffende IP durch die Router-IP
# ersetzt wird. eth0 ist der Schnittstellenname.
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# Ein Beispiel für ein Portforwarding Port 80 auf die IP 10.0.0.1
iptables -t nat -A PREROUTING -o eth0 -p tcp --dport 80 -j DNAT --to 10.0.0.1
# Den Router anweisen seine eigene IP als Quelle einzusetzen für Port 21
# auf der LAN-Schnittstelle. Das ist interessant, wenn man vom LAN über
# den Router auf ein LAN-Gerät zugreifen will. Somit kann man die IP
# oder Domain (von außen betrachtet) nutzen wie bsp. www.brainworld.lpic
iptables -A POSTROUTING -t nat -o eth0 -p tcp --dport 21 -j MASQUERADE
 
 
Alle Ports schließen, die nicht gebraucht werden:
 
#!/bin/sh

IPT="/sbin/iptables"

# Alte Regeln loeschen
$IPT --flush
$IPT --delete-chain

$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT

# Erlaubte ungeregelte Interfaces
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
$IPT -A INPUT -i eth0:1 -j ACCEPT
$IPT -A OUTPUT -o eth0:1 -j ACCEPT

# TCP Pakete ohne SYN verwerfen
$IPT -A INPUT -p tcp ! --syn -m state --state NEW -s 0.0.0.0/0 -j DROP

# Geoeffnete erlaubte Ports
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -p tcp --dport 22 -m state --state NEW -s 0.0.0.0/0 -j ACCEPT
$IPT -A INPUT -p tcp --dport 80 -m state --state NEW -s 0.0.0.0/0 -j ACCEPT
$IPT -A INPUT -p tcp --dport 443 -m state --state NEW -s 0.0.0.0/0 -j ACCEPT

# Ping erlauben
$IPT -A INPUT -p ICMP --icmp-type 8 -s 0.0.0.0/0 -j ACCEPT