Navigation
Artikel
Stuff
RSS Feeds
|
Tutorials - Iptables TutorialSprachenübersicht/Betriebssysteme/Linux/Internet & Netzwerk Keywords: iptables, forwarding, NAT, prerouting, routing Inhaltsverzeichnis
Einführung Top
Das Grundgerüst Top
Code: #!/bin/sh # # iptables firewall script v1.0 # # http://www.online-tutorials.net/ # case $1 in start) $0 stop #Defines the INPUT rules #Defines the OUTPUT rules #Defines the NAT rules echo "Firewall & Routing activated" ;; stop) $IPTABLES -t filter -F INPUT $IPTABLES -t filter -F OUTPUT $IPTABLES -t filter -F FORWARD $IPTABLES -t nat -F POSTROUTING ;; restart) $0 start ;; *) echo "Usage: $0 {startwd|stop|restart}" ;; esac
Code: # Siehe: ifconfig oder ip addr # Die Devices in meinem Fall: # - läuft das VPN zum Internet Provider über eth1 # - heißt das VPN devices ppp0 # - interne Netzwerk in das ich routen will eth0 EXT_NET_DEV=eth1 EXT_DEV=ppp0 INT_DEV=eth0 #Das interne Netzwerk allgemein INT_NET=192.168.0.0/16 #Der sichere Bereich, mit den sicheren Clients INT_NET_SECURE=192.168.100.0/24 #Das Netz in das unsichere Clients aus dem internen Netzwerk kommen INT_NET_TESTING=192.168.0.0/24 # Das VPN für die VPN-Clients vom Internet, die in's interne Netz wollen VPN_NET=10.0.100.0/24 VPN_DEV=tap0 #Der Pfad zur iptables IPTABLES=/sbin/iptables #Wollen wir die Verbindung zurückweisen oder droppen? (DROP/REJECT) NEGATIV=DROP
Alles ist erlaubt was nicht verboten ist oder - alles ist verboten was nicht erlaubt ist Top
Code: start) $0 stop
Code: #Deny everything except what we want $IPTABLES -t filter -P INPUT DROP $IPTABLES -t filter -P OUTPUT DROP $IPTABLES -t filter -P FORWARD DROP
Erklärung: Diese Parameter sagen iptables, das es die Policies INPUT, OUTPUT, und FORWARD mit der Standardeinstellung DROP starten sollen.
Code: #Wenn wir NAT forwarding machen wollen, müssen wir es hier aktivieren echo 1 > /proc/sys/net/ipv4/ip_forward
Sicherheitseinstellungen Top
Code: #Verlangsamt ICMP bei zu vielen Paketen echo "5" >/proc/sys/net/ipv4/icmp_ratelimit #Killt Packete mit der source route option echo "0">/proc/sys/net/ipv4/conf/$EXT_DEV/accept_source_route #Killt ICMP Weiterleitung echo "0">/proc/sys/net/ipv4/conf/$EXT_DEV/accept_redirects #Defragmentiert IP-Packete immer echo "1">/proc/sys/net/ipv4/conf/$EXT_DEV/ip_always_defrag #Killt gespoofte Pakete echo "1" > /proc/sys/net/ipv4/conf/$EXT_DEV/rp_filter #Killt Pakete aus dem Adressraum 0.X.X.X echo "0" > /proc/sys/net/ipv4/conf/eth0/bootp_relay # TCP-FIN-Timeout zum Schutz vor DoS-Attacken setzen echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout #Maximal 3 Antworten auf ein TCP-SYN echo 3 > /proc/sys/net/ipv4/tcp_retries1 #TCP-Pakete maximal 15x wiederholen echo 15 > /proc/sys/net/ipv4/tcp_retries2 #Dropt defekte Pakete, wer das Modul dazu hat kann es auskommentieren #$IPTABLES -A FORWARD -m unclean -j DROP #$IPTABLES -A INPUT -m unclean -j DROP #Als Nächstes droppen wir Pakete aus dem externen Netzwerk, die eine interne Adresse haben $IPTABLES -t nat -A PREROUTING -i $EXT_DEV -s 192.168.0.0/16 -j DROP $IPTABLES -t nat -A PREROUTING -i $EXT_DEV -s 10.0.0.0/8 -j DROP $IPTABLES -t nat -A PREROUTING -i $EXT_DEV -s 172.16.0.0/12 -j DROP $IPTABLES -t nat -A PREROUTING -i $EXT_DEV -s 127.0.0.0/8 -j DROP
Erklärung: Diese Befehle sagen iptables, dass es all jene Pakete droppen soll, die von einer externen Adresse in das interne Netzwerk geroutet werden sollen.
ICMP wird nicht geblockt Top
Ports definieren Top
Code: NAT_FORWARDING_TCP_PORT="21,25,80,110,143,443,993,5190,5222,6667,6668,1863"
Code: #Diese Ports werden von mir für SSH (22), und OpenVPN (443, Standard für HTTPS) verwendet INPUT_INTERNET_TCP_PORT="443,22"
Input Regeln definieren Top
Code: #vpn $IPTABLES -t filter -A INPUT -i $EXT_NET_DEV -j ACCEPT
Code: #Accept each lo connection $IPTABLES -t filter -A INPUT -i lo -j ACCEPT
Code: #icmp $IPTABLES -t filter -A INPUT -p icmp -j ACCEPT ICMP wird akzeptiert
Code: $IPTABLES -t filter -A INPUT -s 0.0.0.0/0 -p tcp -m multiport --dport $INPUT_INTERNET_TCP_PORT -j ACCEPT
Code: $IPTABLES -t filter -A INPUT -p tcp ! --syn -j ACCEPT #syn packages
Code: #Intern #$IPTABLES -t filter -A INPUT -i $INT_DEV -s $INT_NET -p udp -m multiport --dport $INPUT_INTERN_UDP_PORT -j ACCEPT
Code: #Internet $IPTABLES -t filter -A INPUT -i $EXT_DEV -s 195.58.160.0/16 -p udp -j ACCEPT #Nameserver $IPTABLES -t filter -A INPUT -i $EXT_DEV -s 195.58.161.0/16 -p udp -j ACCEPT #Nameserver $IPTABLES -t filter -A INPUT -i $EXT_DEV -p udp --dport 53 -j ACCEPT
Output Regeln definieren Top
Code: #vpn $IPTABLES -t filter -A OUTPUT -o $EXT_NET_DEV -j ACCEPT #icmp $IPTABLES -t filter -A OUTPUT -p icmp -j ACCEPT #Accept each lo connection $IPTABLES -t filter -A OUTPUT -o lo -j ACCEPT
Code: #intern #$IPTABLES -t filter -A OUTPUT -o $INT_DEV -d $INT_NET -m multiport -p tcp --dport $OUTPUT_INTERN_TCP_PORT -j ACCEPT
Code: #internet $IPTABLES -t filter -A OUTPUT -o $EXT_DEV -d 0.0.0.0/0 -p tcp -m multiport --dport $NAT_FORWARDING_TCP_PORT -j ACCEPT #Outgoing ftp $IPTABLES -t filter -A OUTPUT -p tcp ! --syn -j ACCEPT #syn packages
NAT Top
Code: $IPTABLES -A POSTROUTING -t nat -p tcp -o $EXT_DEV -s $INT_NET -j MASQUERADE //Wenn UDP weitergeleitet werden soll #$IPTABLES -A POSTROUTING -t nat -p udp -o $EXT_DEV -s $INT_NET -j MASQUERADE $IPTABLES -A POSTROUTING -t nat -p icmp -o $EXT_DEV -s $INT_NET -j MASQUERADE
Code: $IPTABLES -A FORWARD -p tcp ! --syn -j ACCEPT #Wollen wir nicht, schlechte Erfahrung #Wir machen REJECT, damit der Browser nicht lange für die Antwort braucht $IPTABLES -t filter -A FORWARD -p tcp -d hausaufgaben.de -j REJECT
Code: #tcp $IPTABLES -A FORWARD -i $INT_DEV -o $EXT_DEV -s $INT_NET -p tcp -m multiport --dport $NAT_FORWARDING_TCP_PORT -j ACCEPT $IPTABLES -A FORWARD -i $INT_DEV -o $EXT_DEV -s $INT_NET -d www.example.com -p tcp --dport 442 -j ACCEPT
Code: #icmp $IPTABLES -A FORWARD -m state --state NEW -p icmp -j ACCEPT $IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
Code: #Log other outgoing connections (internet) $IPTABLES -A FORWARD -i $INT_DEV -o $EXT_DEV -s $INT_NET -p tcp -j LOG --log-prefix "~~FILTER~~ FORWARD TCP! " --log-ip-options $IPTABLES -A FORWARD -i $INT_DEV -o $EXT_DEV -s $INT_NET -p udp -j LOG --log-prefix "~~FILTER~~ FORWARD UDP! " --log-ip-options
Code: #VPN $IPTABLES -A FORWARD -i $VPN_DEV -o $INT_DEV -s $VPN_NET -j ACCEPT $IPTABLES -A FORWARD -i $INT_DEV -o $VPN_DEV -s $INT_NET -j ACCEPT
Code: $IPTABLES -t nat -A PREROUTING -p tcp --dport 6667 -j REDIRECT --to-ports 13 $IPTABLES -t nat -A PREROUTING -p tcp --dport 6668 -j REDIRECT --to-ports 14
Code: #Forwarden $IPTABLES -t nat -A PREROUTING -i $EXT_DEV -p tcp --dport 80 -j DNAT --to 192.168.0.1 #Verbindung die geforwardet wird erlauben $IPTABLES -A FORWARD -i $EXT_DEV -o $INT_DEV -p tcp --dport 80 -j ACCEPT
Code: $IPTABLES -A FORWARD -i $INT_DEV -o $EXT_DEV -d $INT_NET_TESTING -p tcp -j ACCEPT $IPTABLES -A FORWARD -i $INT_DEV -o $EXT_DEV -d $INT_NET_TESTING -p udp -j ACCEPT
Schlusswort Top
Gibt es noch irgendwelche Fragen, oder wollen Sie über den Artikel diskutieren? Sprachenübersicht/Betriebssysteme/Linux/Internet & Netzwerk/Iptables Tutorial |