Seite 1 von 1
iptables, Masquerade, Ausnahme für drop
Verfasst: 02.05.2018 13:46:41
von Exxter
Hallo,
ich habe ein frisch installiertes Raspbian Stretch als Router eingerichtet. eth0 ist WAN, eth1 LAN:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
funktioniert (an eth1 angeschlosse Geräte bekommen per DHCP eine IP zugewiesen und können ins Internet, eth0 ist als DHCP-Client eingerichtet). Jetzt wollte ich erstmal alles blocken, was von eth1 LAN kommt:
iptables -I FORWARD -o eth1 -j DROP
funktioniert auch. Aber jetzt komme ich nicht weiter, ich möchte einige Ports freigeben, damit bestimmte Dienste aus dem LAN wieder darüber ins Internet kommen. Ich habe:
iptables -A FORWARD -p tcp --dport 53 -s 0/0 -d 0/0 -j ACCEPT
iptables -A FORWARD -p tcp --dport 123 -s 0/0 -d 0/0 -j ACCEPT
iptables -A FORWARD -p tcp --dport 1194 -s 0/0 -d 0/0 -j ACCEPT
probiert, die Ports waren aber nicht offen. Vermutlich habe ich hier noch einen Denkfehler, aber ich komme nicht drauf. Jemand eine Idee?
Re: iptables, Masquerade, Ausnahme für drop
Verfasst: 02.05.2018 14:03:06
von Gunman1982
Exxter hat geschrieben: 
02.05.2018 13:46:41
funktioniert (an eth1 angeschlosse Geräte bekommen per DHCP eine IP zugewiesen und können ins Internet, eth0 ist als DHCP-Client eingerichtet). Jetzt wollte ich erstmal alles blocken, was von eth1 LAN kommt:
iptables -I FORWARD -o eth1 -j DROP
-o = output
Finde den Fehler.
Was du aber wahrscheinlich eher möchtest ist nicht das die erste Regel alles wegwirft sondern das wenn keine andere Regel zutrifft alles weggeworfen wird. Also die Default Regel DROP ist, dafür gibt es -p = policy
Exxter hat geschrieben: 
02.05.2018 13:46:41
funktioniert auch. Aber jetzt komme ich nicht weiter, ich möchte einige Ports freigeben, damit bestimmte Dienste aus dem LAN wieder darüber ins Internet kommen. Ich habe:
iptables -A FORWARD -p tcp --dport 53 -s 0/0 -d 0/0 -j ACCEPT
iptables -A FORWARD -p tcp --dport 123 -s 0/0 -d 0/0 -j ACCEPT
iptables -A FORWARD -p tcp --dport 1194 -s 0/0 -d 0/0 -j ACCEPT
probiert, die Ports waren aber nicht offen. Vermutlich habe ich hier noch einen Denkfehler, aber ich komme nicht drauf. Jemand eine Idee?
1. Du solltest es begrenzen auf -i eth1 und -s 192.168.0.0/16 oder 10.0.0.0/8 oder was du auch immer hast
2. iptables geht die Regeln der Reihe nach durch und nimmt sich den ersten Treffer, nicht den besten. Deine erste Regel war? (Finde den Fehler)
3. Wenn du die policy DROP nutzt bedenke das du beide Kommunikationswege öffnen musst, die Anfrage und die Antwort, kann man sich erleichtern indem man als 1. Regel dies nutzt:
Code: Alles auswählen
iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
Re: iptables, Masquerade, Ausnahme für drop
Verfasst: 02.05.2018 14:43:02
von mat6937
Exxter hat geschrieben: 
02.05.2018 13:46:41
Ich habe:
Code: Alles auswählen
iptables -A FORWARD -p tcp --dport 53 -s 0/0 -d 0/0 -j ACCEPT
iptables -A FORWARD -p tcp --dport 123 -s 0/0 -d 0/0 -j ACCEPT
iptables -A FORWARD -p tcp --dport 1194 -s 0/0 -d 0/0 -j ACCEPT
probiert, die Ports waren aber nicht offen.
Die tcp-Ports schon, aber auf diesen Ports wird i. d. R. udp benutzt. Wie hast Du getestet?
?
Re: iptables, Masquerade, Ausnahme für drop
Verfasst: 03.05.2018 08:38:54
von Exxter
Gunman1982 hat geschrieben: 
02.05.2018 14:03:06
Was du aber wahrscheinlich eher möchtest ist nicht das die erste Regel alles wegwirft sondern das wenn keine andere Regel zutrifft alles weggeworfen wird. Also die Default Regel DROP ist, dafür gibt es -p = policy
Stimmt, funktioniert.
Gunman1982 hat geschrieben: 
02.05.2018 14:03:06
1. Du solltest es begrenzen auf -i eth1 und -s 192.168.0.0/16 oder 10.0.0.0/8 oder was du auch immer hast
2. iptables geht die Regeln der Reihe nach durch und nimmt sich den ersten Treffer, nicht den besten. Deine erste Regel war? (Finde den Fehler)
3. Wenn du die policy DROP nutzt bedenke das du beide Kommunikationswege öffnen musst, die Anfrage und die Antwort, kann man sich erleichtern indem man als 1. Regel dies nutzt:
Code: Alles auswählen
iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
1. und 2. habe ich verstanden und umgesetzt. Zu 3. habe ich noch eine Frage: wenn ich nur:
Code: Alles auswählen
iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -P FORWARD DROP
setze, müsste erstmal alles gesperrt sein, weil ich keinen Port explizit freigegeben habe, oder? Ist aber nicht so, das Gerät dahinter kommt trotzdem mit allen Diensten online. Dachte daran, eventuell war die Verbindung dieses Gerätes schon da als die Regel gesetzt wurde. Habe deswegen den Router auf dem die Firewall läuft neu gestartet. Ist aber das gleiche. Woran liegt das?
Edit: ach, musste das Gerät dahinter rebooten, jetzt klappt das.
mat6937 hat geschrieben: 
02.05.2018 14:43:02
Die tcp-Ports schon, aber auf diesen Ports wird i. d. R. udp benutzt. Wie hast Du getestet?
Du hast Recht, das war auch noch ein Fehler. Ich hatte mit nmap gescannt, aber wie du richtig schreibst, es muss udp freigegeben werden, nicht tcp.
Re: iptables, Masquerade, Ausnahme für drop
Verfasst: 03.05.2018 09:16:07
von mat6937
Exxter hat geschrieben: 
03.05.2018 08:38:54
..., es muss udp freigegeben werden, nicht tcp.
Naja, für den Port 53 (DNS) muss beides (udp und tcp) freigegeben werden.
Re: iptables, Masquerade, Ausnahme für drop
Verfasst: 03.05.2018 13:28:16
von Exxter
mat6937 hat geschrieben: 
03.05.2018 09:16:07
Exxter hat geschrieben: 
03.05.2018 08:38:54
..., es muss udp freigegeben werden, nicht tcp.
Naja, für den Port 53 (DNS) muss beides (udp und tcp) freigegeben werden.
Sicher? Ich habe mal mit softflowd geschaut, welche Pakete wo hin gehen:
Code: Alles auswählen
root@pi:/# nfdump -R /var/cache/nfdump/
Date first seen Duration Proto Src IP Addr:Port Dst IP Addr:Port Packets Bytes Flows
2018-05-03 10:16:50.454 0.438 TCP xxx.ccc.vvv.42:443 -> 192.168.44.87:45951 10 4340 1
2018-05-03 10:16:50.454 0.438 TCP 192.168.44.87:45951 -> xxx.ccc.vvv.42:443 15 2002 1
2018-05-03 10:16:50.441 0.001 UDP 192.168.44.1:53 -> 192.168.44.87:42733 1 73 1
2018-05-03 10:16:50.441 0.001 UDP 192.168.44.87:42733 -> 192.168.44.1:53 1 57 1
die xxx.. ist eine öffentliche IP. Habe es auch getestet, wird nur udp benutzt. Wann wäre tcp nötig?
Generell ist mein Problem aber gelöst, vielen vielen Dank euch!

Wen es interessiert, hier noch das komplette Firewall-Script:
Code: Alles auswählen
#!/bin/bash
case "$1" in
start)
echo -n "starte Firewall"
# routing
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -P FORWARD DROP
iptables -A FORWARD -i eth1 -p udp --dport 53 -s 0/0 -d 0/0 -j ACCEPT
iptables -A FORWARD -i eth1 -p udp --dport 123 -s 0/0 -d 0/0 -j ACCEPT
iptables -A FORWARD -i eth1 -p tcp --dport 443 -s 0/0 -d 0/0 -j ACCEPT
iptables -A FORWARD -i eth1 -p udp --dport 1194 -s 0/0 -d 0/0 -j ACCEPT
iptables -A FORWARD -p icmp --icmp-type any -j ACCEPT
echo "... fertig."
;;
stop)
echo -n "stoppe Firewall "
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -F
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
echo "... fertig."
;;
*)
echo "probier: ./firewall.sh {start|stop}"
exit 1
;;
esac
exit 0
Re: iptables, Masquerade, Ausnahme für drop
Verfasst: 03.05.2018 13:36:37
von mat6937
Exxter hat geschrieben: 
03.05.2018 13:28:16
Sicher? ... Wann wäre tcp nötig?
Ja, sicher. Wenn z. B. die Größe der Anfrage bzw. der Antwort > 4096 bytes (früher waren es 512 bytes) ist. Die dns-Server lauschen ja nicht umsonst auch auf dem tcp-Port 53.
Code: Alles auswählen
:~$ nc -zv 8.8.8.8 53
Connection to 8.8.8.8 53 port [tcp/domain] succeeded!
Code: Alles auswählen
:~$ host -t A -T heise.de 1.1.1.1
Using domain server:
Name: 1.1.1.1
Address: 1.1.1.1#53
Aliases:
heise.de has address 193.99.144.80
Re: iptables, Masquerade, Ausnahme für drop
Verfasst: 03.05.2018 14:00:33
von Exxter
Interessant, vielen Dank für die Info, das muss ich berücksichtigen.