DarkSilver
Anmeldungsdatum: 27. Mai 2009
Beiträge: 166
Wohnort: Koblenz
|
Guten Morgen Community, ich bin in iptables leider nicht sonderlich fit und habe daher eine Frage hierzu. Ich verwalte unsere Server mit Hilfe von Puppetmaster und Puppet. Vor geraumer Zeit hatten wir
uns ein Template erstellt, welches auf allen Rechnern eine lokale Firewall einrichtet. Mit Hilfe bestimmter Puppet Variablen kann ich nun auf einem Server den Zugriff einer
anderen Maschine auf einen bestimmten Port erlauben, also z. B. dass Rechner B auf Rechner A auf den Port 3306 zugreifen kann, um dort die MySQL Datenbank zu öffnen. Das Ergebnis in den iptables sieht dann bspw. so aus: | -A INPUT -p tcp -s 192.168.123.15 --dport 3306 -j ACCEPT
|
In der Regel reicht das auch für unsere Anforderungen. Jetzt habe ich zum ersten Mal die Anfrage für ein Testsystem in unserem Haus, wo ein Rechner A generellen Zugriff auf Rechner B erhalten soll,
also ohne die Einschränkung eines Ports. Wie genau würde sowas denn in den IP Tables aussehen? Einfach den Port weglassen? Also z. B. so: | -A INPUT -p tcp -s 192.168.123.15 -j ACCEPT
|
Oder gibt es da ein Schlüsselwort? Ich blick bei den IP Tables Regeln irgendwie nicht durch, das ist so gar nicht meine Welt und leider hat mein Kollege, der sich sonst um die Firewallregeln gekümmert hat, uns letzten Monat verlassen. Muss mich jetzt nach und nach in die Lücken einarbeiten, die er hinterlassen hat.
|
lubux
Anmeldungsdatum: 21. November 2012
Beiträge: 13938
|
DarkSilver schrieb: ... dass Rechner B auf Rechner A ... ... ein Rechner A generellen Zugriff auf Rechner B erhalten soll,
Auf welchem Rechner befindet sich die iptables-Regel, A oder B? Wie ist die default policy der INPUT chain?
sudo iptables -nvx -L INPUT | grep -i policy
|
DarkSilver
(Themenstarter)
Anmeldungsdatum: 27. Mai 2009
Beiträge: 166
Wohnort: Koblenz
|
Die iptables befinden sich auf Rechner B. Default policy:
| Chain INPUT (policy ACCEPT 3175 packets, 824666 bytes)
|
|
lubux
Anmeldungsdatum: 21. November 2012
Beiträge: 13938
|
DarkSilver schrieb: Die iptables befinden sich auf Rechner B. Default policy:
Chain INPUT (policy ACCEPT 3175 packets, 824666 bytes)
Wenn Du den Zugriff von Rechner A nur für das tcp-Protokoll erlauben willst und 192.168.123.15 die IP-Adresse von Rechner A ist, dann ist diese Regel (... allerdings nicht an letzter Stelle in der INPUT chain, denn dort musst Du eine Regel mit dem target DROP oder REJECT haben, wegen der ACCEPT default policy) OK.
iptables -I INPUT 1 -p tcp -s 192.168.123.15 -j ACCEPT EDIT: Bitte beachte, dass Du dich nicht "aussperrst" mit iptables.
|
DarkSilver
(Themenstarter)
Anmeldungsdatum: 27. Mai 2009
Beiträge: 166
Wohnort: Koblenz
|
Hi, unsere Standard iptables Regeln sehen so aus: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 | 1 *filter
2
3 # Standard-Policy - Alle Pakete verwerfen
4 :INPUT DROP
5 :FORWARD DROP
6 :OUTPUT DROP
7
8 # Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
9 -A INPUT -i lo -j ACCEPT
10 -A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
11
12 # Accepts all established inbound connections
13 -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
14
15 # Allows all outbound traffic
16 # You could modify this to only allow certain traffic
17 -A OUTPUT -j ACCEPT
18
19
20
21 ### An dieser Stelle würden die variablen Einträge rein kommen, also in diesem Fall:
22 ### iptables -I INPUT 1 -p tcp -s 192.168.123.15 -j ACCEPT
23
24
25 # Allows SSH connections
26 # Alle
27 -A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
28
29 # Allow Simpana
30 -A INPUT -p tcp -s 192.168.123.52 -m state --state NEW -m multiport --dports 8400:8420 -j ACCEPT
31
32 # Allow ping
33 -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
34
35 # Allow Nagios NRPE
36 -A INPUT -p tcp -s 192.168.123.20 --dport 5666 -j ACCEPT
37
38 # log iptables denied calls
39 -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables: " --log-level 7
40
41 # Drop Netbios
42 -A INPUT -p udp --match multiport --dports 137,138 -j DROP
43
44 # Reject all other inbound - default deny unless explicitly allowed policy:
45 -A INPUT -j REJECT
46 -A FORWARD -j REJECT
47 COMMIT
|
Also soweit ich das verstanden habe, soll alles prinzipiell weg geworfen werden, was nicht explizit erlaubt wird, wie z. B. unsere SSH Verbindungen oder das Nagios Monitoring.
In den Zeilen 21/22 (ggf. auch ff.) stehen dann die über den Puppetmaster eingetragenen Variablen drin. Also z. B. | -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
|
Wenn auf der Maschine ein Webserver läuft und daher Port 80 und 443 generell offen sein sollen oder | -A INPUT -p tcp -s 192.168.123.34 --dport 3306 -j ACCEPT
|
Wenn der Server 192.168.123.34 auf die MySQL Datenbank dieses Servers Zugriff haben soll etc.
Im Prinzip soll halt in diesem Fall ebenfalls nur eine bestimmte IP auf den Rechner zugreifen können, jedoch unabhängig vom verwendeten Port.
Wenn die von Dir genannte Regel | -I INPUT 1 -p tcp -s 192.168.123.15 -j ACCEPT
|
genau das leistet, bin ich schon glücklich. Muss dann nur nochmal die Firewallklasse in unserem Puppetmaster erweitern, um diesen Fall abdecken zu können.
|
Creease
Anmeldungsdatum: 18. Mai 2010
Beiträge: 58
|
DarkSilver schrieb: Hi, unsere Standard iptables Regeln sehen so aus: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 | 1 *filter
2
3 # Standard-Policy - Alle Pakete verwerfen
4 :INPUT DROP
5 :FORWARD DROP
6 :OUTPUT DROP
7
8 # Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
9 -A INPUT -i lo -j ACCEPT
10 -A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
11
12 # Accepts all established inbound connections
13 -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
14
15 # Allows all outbound traffic
16 # You could modify this to only allow certain traffic
17 -A OUTPUT -j ACCEPT
18
19
20
21 ### An dieser Stelle würden die variablen Einträge rein kommen, also in diesem Fall:
22 ### iptables -I INPUT 1 -p tcp -s 192.168.123.15 -j ACCEPT
23
24
25 # Allows SSH connections
26 # Alle
27 -A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
28
29 # Allow Simpana
30 -A INPUT -p tcp -s 192.168.123.52 -m state --state NEW -m multiport --dports 8400:8420 -j ACCEPT
31
32 # Allow ping
33 -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
34
35 # Allow Nagios NRPE
36 -A INPUT -p tcp -s 192.168.123.20 --dport 5666 -j ACCEPT
37
38 # log iptables denied calls
39 -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables: " --log-level 7
40
41 # Drop Netbios
42 -A INPUT -p udp --match multiport --dports 137,138 -j DROP
43
44 # Reject all other inbound - default deny unless explicitly allowed policy:
45 -A INPUT -j REJECT
46 -A FORWARD -j REJECT
47 COMMIT
|
Also soweit ich das verstanden habe, soll alles prinzipiell weg geworfen werden, was nicht explizit erlaubt wird, wie z. B. unsere SSH Verbindungen oder das Nagios Monitoring.
Korrekt.
In den Zeilen 21/22 (ggf. auch ff.) stehen dann die über den Puppetmaster eingetragenen Variablen drin. Also z. B. | -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
|
Auf Basis der vorliegenden Konfiguration wäre sinnvoller: | -A INPUT -p tcp -m multiport --dports 80,443 -m state --state NEW -j ACCEPT
|
Wenn auf der Maschine ein Webserver läuft und daher Port 80 und 443 generell offen sein sollen oder | -A INPUT -p tcp -s 192.168.123.34 --dport 3306 -j ACCEPT
|
Auch hier wieder: | -A INPUT -s 192.168.123.34 -p tcp --dport 3306 -m state --state NEW -j ACCEPT
|
Wenn der Server 192.168.123.34 auf die MySQL Datenbank dieses Servers Zugriff haben soll etc.
Im Prinzip soll halt in diesem Fall ebenfalls nur eine bestimmte IP auf den Rechner zugreifen können, jedoch unabhängig vom verwendeten Port.
Wenn die von Dir genannte Regel | -I INPUT 1 -p tcp -s 192.168.123.15 -j ACCEPT
|
genau das leistet, bin ich schon glücklich.
Diese Regel gibt jeden Port über TCP frei:
| -A INPUT -s 192.168.123.15 -p tcp -m state --state NEW -j ACCEPT
|
|
DarkSilver
(Themenstarter)
Anmeldungsdatum: 27. Mai 2009
Beiträge: 166
Wohnort: Koblenz
|
Danke für die Antwort.
Ich habe aber noch eine kurze Nachfrage hierzu. Inwiefern unterscheiden sich denn die von Dir geposteten Regeln von meinen? Also was genau ist daran besser/sicherer?
|
Creease
Anmeldungsdatum: 18. Mai 2010
Beiträge: 58
|
Deine Firewall hat bereits folgende Regel: | -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
|
Diese Regel lässt alle eingenden Pakete durch, die einer bereits existierenden Datenverbindungen zugeordnet werden können (http://de.m.wikipedia.org/wiki/Stateful_Packet_Inspection). Daher macht es wenig Sinn, im Anschluss wieder Pakete jedes Zustands anzunehmen, was du mit folgender Regel getan hast (im Beispiel für HTTP und HTTPS): | -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
|
Was du möchtest, sind NEUE Verbindungen zuzulassen, also NEW, und nicht RELATED bzw. ESTABLISHED Packete. Daher ist die korrekte Regel: | -A INPUT -p tcp -m multiport --dports 80,443 -m state --state NEW -j ACCEPT
|
Das erste eingehende Paket geht nun über die letzte Regel (NEW), dann antwortet dein Server, die nachfolgenden eingehenden Pakete werden ab jetzt von der established Regel zugelassen. Vorteil: Du kannst die Regel für neue Verbindungen nun nach belieben ausbauen, zum Beispiel zu: | -A INPUT -p tcp --syn -m multiport --dports 80,443 -m limit --limit 25/s -m state --state NEW -j ACCEPT
|
Du prüft hierbei z.B. zusätzlich, das es sich um einen korrekten Verbindungsaufbau handelt und lässt maximal 25 neue Verbindungen pro Sekunde zu. Iptables ist unglaublich mächtig, es lohnt sich, die ein oder andere Minute Zeit zu investieren ☺ Viele Grüße
|
DarkSilver
(Themenstarter)
Anmeldungsdatum: 27. Mai 2009
Beiträge: 166
Wohnort: Koblenz
|
Herzlichen Dank für die Mühe und die ausführliche Erklärung! Ich werde das Template gleich am Montag entsprechend anpassen. 👍
|
Creease
Anmeldungsdatum: 18. Mai 2010
Beiträge: 58
|
Gerne. Eventuell musst du die 25 je sekunde maximale Anfragen an deine Bedürfnisse anpassen. Wartet dein Browser z.B. ewig auf das Laden einiger Ressourcen, könnte dies ein Indiz dafür sein, dass der Wert zu niedrig eingestellt ist. Browser öffnen oftmals parallel je Ressource (Bilder, css, js, ...) eine neue Verbindung. Da kann es mit 25 Anfragen je Sekunde schnell eng werden.
|
DarkSilver
(Themenstarter)
Anmeldungsdatum: 27. Mai 2009
Beiträge: 166
Wohnort: Koblenz
|
Ich könnte die Limit Option aber auch einfach weg lassen, oder? So wahnsinnig viel ist auf unseren Servern eh nicht los. Der dickste Service müsste unsere Moodle Instanz mit etwas mehr als 40.000 Benutzern sein.
|
Creease
Anmeldungsdatum: 18. Mai 2010
Beiträge: 58
|
Ja. Klingt nach einem Uni-Server?
|
DarkSilver
(Themenstarter)
Anmeldungsdatum: 27. Mai 2009
Beiträge: 166
Wohnort: Koblenz
|
Nicht ganz. Landesbehörde mit Bildungsauftrag und generellem, pädagogsichen Hintergrund 😉
|