iptables, Masquerade, Ausnahme für drop

Alles rund um sicherheitsrelevante Fragen und Probleme.
Antworten
Exxter
Beiträge: 383
Registriert: 10.01.2003 00:15:15
Lizenz eigener Beiträge: GNU General Public License

iptables, Masquerade, Ausnahme für drop

Beitrag von Exxter » 02.05.2018 13:46:41

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?

Gunman1982
Beiträge: 923
Registriert: 09.07.2008 11:50:57
Lizenz eigener Beiträge: MIT Lizenz

Re: iptables, Masquerade, Ausnahme für drop

Beitrag von Gunman1982 » 02.05.2018 14:03:06

Exxter hat geschrieben: ↑ zum Beitrag ↑
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

Code: Alles auswählen

iptables -P FORWARD DROP
Exxter hat geschrieben: ↑ zum Beitrag ↑
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

mat6937
Beiträge: 2953
Registriert: 09.12.2014 10:44:00

Re: iptables, Masquerade, Ausnahme für drop

Beitrag von mat6937 » 02.05.2018 14:43:02

Exxter hat geschrieben: ↑ zum Beitrag ↑
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?

Code: Alles auswählen

nc -zv 1.1.1.1 53
?

Exxter
Beiträge: 383
Registriert: 10.01.2003 00:15:15
Lizenz eigener Beiträge: GNU General Public License

Re: iptables, Masquerade, Ausnahme für drop

Beitrag von Exxter » 03.05.2018 08:38:54

Gunman1982 hat geschrieben: ↑ zum Beitrag ↑
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

Code: Alles auswählen

iptables -P FORWARD DROP
Stimmt, funktioniert.
Gunman1982 hat geschrieben: ↑ zum Beitrag ↑
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: ↑ zum Beitrag ↑
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.

mat6937
Beiträge: 2953
Registriert: 09.12.2014 10:44:00

Re: iptables, Masquerade, Ausnahme für drop

Beitrag von mat6937 » 03.05.2018 09:16:07

Exxter hat geschrieben: ↑ zum Beitrag ↑
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.

Exxter
Beiträge: 383
Registriert: 10.01.2003 00:15:15
Lizenz eigener Beiträge: GNU General Public License

Re: iptables, Masquerade, Ausnahme für drop

Beitrag von Exxter » 03.05.2018 13:28:16

mat6937 hat geschrieben: ↑ zum Beitrag ↑
03.05.2018 09:16:07
Exxter hat geschrieben: ↑ zum Beitrag ↑
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! :D 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
Zuletzt geändert von Exxter am 03.05.2018 13:58:27, insgesamt 1-mal geändert.

mat6937
Beiträge: 2953
Registriert: 09.12.2014 10:44:00

Re: iptables, Masquerade, Ausnahme für drop

Beitrag von mat6937 » 03.05.2018 13:36:37

Exxter hat geschrieben: ↑ zum Beitrag ↑
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

Exxter
Beiträge: 383
Registriert: 10.01.2003 00:15:15
Lizenz eigener Beiträge: GNU General Public License

Re: iptables, Masquerade, Ausnahme für drop

Beitrag von Exxter » 03.05.2018 14:00:33

Interessant, vielen Dank für die Info, das muss ich berücksichtigen.

Antworten