iptables-Regeln für localhost

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
bumer
Beiträge: 238
Registriert: 02.07.2014 12:29:15

iptables-Regeln für localhost

Beitrag von bumer » 18.06.2015 15:18:45

Hallo,

ich kenne mich mit Routing noch nicht gut aus und mir ist auch klar, dass wenn ich über einen Router zum Internet verbunden bin ich keine Firewall brauche. Ich experimentiere nur ein wenig mit iptables herum und verstehe nicht, wieso die folgenden Regeln zu einem Ausfall des Netzwerkes meiner Lokalen Maschine führen:

Code: Alles auswählen

# erstmal alles löschen:
iptables -F
# alles auf DROP setzen:
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
# über Looback alles erlauben:
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# testweise nur HTTP und HTTPS erlauben:
iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --sport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --sport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
Jetzt müsste es doch eine eigentlich eine HTTP(s)-Verbindung zustande kommen, tut es aber nicht.

Oder muss ich erst einmal den Port zum Router herausfinden und diesen freischalten? Wenn ja, wie finde ich diesen heraus?

Es wäre nett, wenn mich jemand kurz aufklären könnte.

eggy
Beiträge: 3334
Registriert: 10.05.2008 11:23:50

Re: iptables-Regeln für localhost

Beitrag von eggy » 18.06.2015 15:39:12

DNS vergessen?

bumer
Beiträge: 238
Registriert: 02.07.2014 12:29:15

Re: iptables-Regeln für localhost

Beitrag von bumer » 18.06.2015 15:49:19

eggy hat geschrieben:DNS vergessen?
Ja, Danke, jetzt funktioniert's.

Code: Alles auswählen

iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --sport 53 -j ACCEPT

gbotti
Beiträge: 846
Registriert: 16.07.2010 14:24:43
Wohnort: München

Re: iptables-Regeln für localhost

Beitrag von gbotti » 18.06.2015 15:53:40

Offtopic:
Ich würde das "NEW" bei den INPUT-Rules wegnehmen und dafür ein RELATED hinzufügen, damit keine neuen Verbindungen sondern maximal RELATED oder ESTABLISHED connections zugelassen sind.
Georg
RTFM, LMGTFY, Orakel... Ach... Warum muss man suchen...
Schrödingers Backup --- "Der Zustand eines Backups ist unbekannt, solange man es nicht wiederherstellt" --- Quelle: Nixcraft

bumer
Beiträge: 238
Registriert: 02.07.2014 12:29:15

Re: iptables-Regeln für localhost

Beitrag von bumer » 18.06.2015 16:59:56

gbotti hat geschrieben:Offtopic:
Ich würde das "NEW" bei den INPUT-Rules wegnehmen und dafür ein RELATED hinzufügen, damit keine neuen Verbindungen sondern maximal RELATED oder ESTABLISHED connections zugelassen sind.
Hab ich gemacht.

Jetzt habe ich ein anderes Problemchen, ich kann CUPS über 631 nicht freigeben,der Drucker reagiert einfach nicht - habe alles ausprobiert:

Code: Alles auswählen

$iptables -A OUTPUT -p udp -m udp --dport 631 -j ACCEPT
$iptables -A OUTPUT -p tcp -m tcp --dport 631 -j ACCEPT
$iptables -A INPUT -p udp -m udp --sport 631 -j ACCEPT
$iptables -A INPUT -p tcp -m tcp --sport 631 -j ACCEPT
Gerade habe ich gelesen, dass CUPS über `lo` läuft, welches bei mir auf ACCEPT gesetzt ist. Komisch, dass es trotz dessen nicht funkt.

gbotti
Beiträge: 846
Registriert: 16.07.2010 14:24:43
Wohnort: München

Re: iptables-Regeln für localhost

Beitrag von gbotti » 19.06.2015 10:21:47

Ich habe das grade mal in einer Vagrant-VM nachgespielt, da ich mir nicht vorstellen konnte, dass es nicht funktioniert. Und da funktioniert es ohne Probleme.

Wie sieht denn die CUPS-Configuration aus (NoPaste bitte)?
Hast du CUPS nach dem initialisieren der Firewall neu gestartet?
Läuft CUPS auch auch Port 631 (netstat -tapen)

EDIT: Was gibtst du im Browser als URL an?
Georg
RTFM, LMGTFY, Orakel... Ach... Warum muss man suchen...
Schrödingers Backup --- "Der Zustand eines Backups ist unbekannt, solange man es nicht wiederherstellt" --- Quelle: Nixcraft

Benutzeravatar
heisenberg
Beiträge: 4146
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: iptables-Regeln für localhost

Beitrag von heisenberg » 19.06.2015 11:38:10

Das NEW,ESTABLISHED würde ich ganz weglassen. Welche anderen States möchtest Du denn da verbieten?

Ansonsten erlauben Deine Regeln zwar z. B. Per HTTP die Verbindungsaufnahme des Clients zum Webserver, doch die Antwort des Webservers an den Client wird geblockt.

Dazu braucht es noch eine Regel state=ESTABLISHED,RELATED / ACCEPT

EDITH: Habe jetzt erst verstanden, was Du machst, mit den States. Das passt grundsätzlich. Nur --sport und --dport sind genau falsch herum. Der --dport muss bei der INPUT Chain auf 80 sein und der --sport bei der OUTPUT Chain. (Der Client nimmt mit dem Zielport(--dport) 80 Verbindung zum Server auf, was durch die Regel in der INPUT Chain erlaubt wird. Der Server antwortet mit Quellport(--sport) 80 auf die Anfrage des Client, was durch die Regel in der OUTPUT Chain erlaubt wird.).

Ich frage mich allerdings ob das initiale Rückantwortpaket des Servers bereits als ESTABLISHED(lt. Manpage von iptables nicht: Da sind keine Pakete in beide Richtungen geflossen) gilt, oder doch eher als NEW?

bumer
Beiträge: 238
Registriert: 02.07.2014 12:29:15

Re: iptables-Regeln für localhost

Beitrag von bumer » 21.06.2015 09:21:47

gbotti hat geschrieben:Ich habe das grade mal in einer Vagrant-VM nachgespielt, da ich mir nicht vorstellen konnte, dass es nicht funktioniert. Und da funktioniert es ohne Probleme.

Wie sieht denn die CUPS-Configuration aus (NoPaste bitte)?
Hast du CUPS nach dem initialisieren der Firewall neu gestartet?
Läuft CUPS auch auch Port 631 (netstat -tapen)

EDIT: Was gibtst du im Browser als URL an?
Ich habe nichts an der CUPS-Konfi geändert, es handelt sich um Standardeinstellungen. Cups läuft auf 631 (laut netstat, laut cups_conf, laut localhost:631). Ein Neustarten des Cups-deamons bringt auch nichts.

Es funktioniert nicht, egal was ich in iptables eingebe, der Drucker reagiert nicht. Erst wenn ich wieder alles auf ACCEPT setze, druckt er wieder.

Das komische ist, whois über Port 43 funktioniert auch nicht (läuft laut netstat definitiv auf 43).

Hier ist die Einstellung (die auskommentierten Teile wurden bereits erfolglos getestet, sowohl INPUT/OUTPUT, also auch --s/dport, habe schon alle möglichen Variation für Cups und Whois ausprobiert - die beiden wollen einfach nicht):

Code: Alles auswählen

# Ausgehende SSH-Verbindungen:
$iptables -A OUTPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
$iptables -A INPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
#
# Ausgehende HTTP- und HTTPS-Verbindungen:
$iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
$iptables -A INPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
$iptables -A OUTPUT -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
$iptables -A INPUT -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
#
# IMAP und IMAPS erlauben:
$iptables -A OUTPUT -p tcp --dport 143 -m state --state NEW,ESTABLISHED -j ACCEPT
$iptables -A INPUT -p tcp --sport 143 -m state --state ESTABLISHED -j ACCEPT
$iptables -A OUTPUT -p tcp --dport 993 -m state --state NEW,ESTABLISHED -j ACCEPT
$iptables -A INPUT -p tcp --sport 993 -m state --state ESTABLISHED -j ACCEPT
#
# STMPS ausgehend (Postausgangsserver):
$iptables -A OUTPUT -p tcp --dport 465 -m state --state NEW,ESTABLISHED -j ACCEPT
$iptables -A INPUT -p tcp --sport 465 -m state --state ESTABLISHED -j ACCEPT
#
# WHOIS:
#$iptables -A OUTPUT -p tcp --dport 43 -m state --state NEW,ESTABLISHED -j ACCEPT
#$iptables -A INPUT -p tcp --dport 43 -m state --state ESTABLISHED -j ACCEPT
#$iptables -A OUTPUT -p tcp --dport 43 -j ACCEPT
#$iptables -A OUTPUT -p udp --dport 43 -j ACCEPT
#
# CUPS:
#$iptables -A OUTPUT -p udp -m udp --dport 631 -j ACCEPT
#$iptables -A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 631 -j ACCEPT
#$iptables -A OUTPUT -p udp -m udp --dport 631 -j ACCEPT
#$iptables -A INPUT -p udp -m udp --sport 631 -j ACCEPT
#$iptables -A OUTPUT -p tcp -m tcp --dport 631 -j ACCEPT
#$iptables -A INPUT -p tcp -m tcp --sport 631 -j ACCEPT
#$iptables -A OUTPUT -p tcp -m tcp --dport 631 -j ACCEPT
#$iptables -A OUTPUT -p udp -m udp --dport 631 -j ACCEPT
#
# Ausgehende DNS-Verbindungen:
$iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
$iptables -A INPUT -p udp --sport 53 -j ACCEPT
Alles andere funktioniert wunderbar.

Wenn es eine lokale Maschine ist, dann kann es doch nur das sein, oder:

Code: Alles auswählen

$iptables -A OUTPUT -p tcp -m tcp --dport 631 -j ACCEPT
$iptables -A OUTPUT -p udp -m udp --dport 631 -j ACCEPT
Hier noch die netstat-Ausgabe:

Code: Alles auswählen

tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      0          640197      15878/cupsd     
tcp        0      1 192.168.0.12:59828      199.7.74.74:43          SYN_SENT    1000       713504      19394/whois     
udp        0      0 0.0.0.0:631             0.0.0.0:*                           0          640200      15878/cupsd

gbotti
Beiträge: 846
Registriert: 16.07.2010 14:24:43
Wohnort: München

Re: iptables-Regeln für localhost

Beitrag von gbotti » 22.06.2015 08:57:38

Wie wird denn der Drucker angesprochen? Hängt der direkt an dem Rechner per USB oder Parallel oder im Netzwerk?

Ich habe gerade einen USB-Drucker von HP in meine VM durchgereicht und habe folgende Firewallregeln ausprobiert:

Code: Alles auswählen

# erstmal alles löschen:
iptables -F
# alles auf DROP setzen:
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
# über Looback alles erlauben:
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# testweise nur HTTP und HTTPS erlauben:
iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --sport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --sport 443 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --sport 53 -j ACCEPT

Und in konnte Problemlos drucken. Steht in den Logfiles etwas?
Georg
RTFM, LMGTFY, Orakel... Ach... Warum muss man suchen...
Schrödingers Backup --- "Der Zustand eines Backups ist unbekannt, solange man es nicht wiederherstellt" --- Quelle: Nixcraft

bumer
Beiträge: 238
Registriert: 02.07.2014 12:29:15

Re: iptables-Regeln für localhost

Beitrag von bumer » 22.06.2015 10:43:41

Hi gbotti,
danke für die Antwort.

Es handelt sich um einen Netzwerkdrucker. Bin über wlan0 mit dem Router verbunden und der Drucker hängt per eth am Router.

Wie konntest du mit diesen Einstellungen denn drucken? Der Port 631 ist ja nirgends erwähnt.

In den Logfiles steht leider nichts.

gbotti
Beiträge: 846
Registriert: 16.07.2010 14:24:43
Wohnort: München

Re: iptables-Regeln für localhost

Beitrag von gbotti » 22.06.2015 12:53:05

EDIT: Genauer formuliert

Cups ist auf Localhost installiert und Localhost ist freigegeben. Der USB-Drucker ist direkt an der VM, also muss ich da nicht nochmal über das Netzwerk.

Naja... Du erwähnst auch nirgends, dass über WLAN0 nach außen gefunkt werden darf zum Netzwerkdrucker... Der Druckerport kann Beispielsweise Port 9100 sein :), je nachdem wie es in der Druckerdoku / in dessen Einstellungen festgelegt ist.
Georg
RTFM, LMGTFY, Orakel... Ach... Warum muss man suchen...
Schrödingers Backup --- "Der Zustand eines Backups ist unbekannt, solange man es nicht wiederherstellt" --- Quelle: Nixcraft

bumer
Beiträge: 238
Registriert: 02.07.2014 12:29:15

Re: iptables-Regeln für localhost

Beitrag von bumer » 23.06.2015 11:50:17

gbotti hat geschrieben:Naja... Du erwähnst auch nirgends, dass über WLAN0 nach außen gefunkt werden darf zum Netzwerkdrucker... Der Druckerport kann Beispielsweise Port 9100 sein :), je nachdem wie es in der Druckerdoku / in dessen Einstellungen festgelegt ist.
DANKE, es war Port 9100 :)



Eine letzte Sache ist mir aber total unverständlich. Es geht um ausgehende Emails (ssmtp) und RSYNC über SSH (Server-Backup, Port 22). Diese Verbindungen funktionieren ja nur, wenn auch eingehender Verkehr (established, related) erlaubt ist.

Folgendes funktioniert NICHT:

Code: Alles auswählen

$iptables -A OUTPUT -p tcp --dport 22 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
$iptables -A INPUT -p tcp --sport 22 -m state --state RELATED,ESTABLISHED -j ACCEPT

$iptables -A OUTPUT -p tcp --dport 465 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
$iptables -A INPUT -p tcp --sport 465 -m state --state RELATED,ESTABLISHED -j ACCEPT
Folgendes funktioniert WOHL:

Code: Alles auswählen

$iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

$iptables -A OUTPUT -p tcp --dport 22 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
$iptables -A OUTPUT -p tcp --dport 465 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
Schieß mich tot, aber wo liegt der Unterschied zwischen den beiden? Das Protokoll bleibt das gleiche, also kann ich es angeben - der einzige Unterschied, den ich sehe, ist, dass ich den Port einschränke. Aber wieso soll das falsch sein? Ich kanns mir echt nicht erklären.

gbotti
Beiträge: 846
Registriert: 16.07.2010 14:24:43
Wohnort: München

Re: iptables-Regeln für localhost

Beitrag von gbotti » 23.06.2015 12:12:07

Manche Programme bauen eine Verbindung über / zu einem weiteren Port auf. Die Verbindung muss nicht zwingend über Beispielsweise Port 22 wieder reinkommen.

Schneide mal den Netzwerkverkehr mit tcpdump oder Wireshark mit und beobachte was passiert.
Georg
RTFM, LMGTFY, Orakel... Ach... Warum muss man suchen...
Schrödingers Backup --- "Der Zustand eines Backups ist unbekannt, solange man es nicht wiederherstellt" --- Quelle: Nixcraft

Antworten