Ich bin drihinn!!! (Router mit shorewall)

Gemeinsam ins Internet mit Firewall und Proxy.
Antworten
guennid

Ich bin drihinn!!! (Router mit shorewall)

Beitrag von guennid » 20.12.2011 21:27:21

Irgendwie ist es mir gelungen, einen uralten Schleppi mit squeeze ansatzweise als Router mit shorewall als (hoffentlich funktionierender) Firewall einzurichten. So recht weiß ich zwar immer noch nicht, was da eigentlich abgeht, deswegen dieser Post. Falls sich hier Sicherheitslöcher auftun, bitte ich um Hinweise. So, und das habe ich gemacht:

Aufgabe: Einrichtung eines Routers mit squeeze ohne X und mit Debianshorewall als Firewall. Internet-Verbindung über DSL-Modem. Keine DMZ (ent-/demilitarisierte Zone), kein DHCP.
Die korrekte Modem-Einrichtung beschreibe ich hier nicht, das ist schon zu lange her, so dass ich das nur sehr ungenügend erinnere. Irgendwas war mit Bridge-Modus, das habe ich noch im Kopf, weil das an dieser Stelle vorher hartnäckig schief ging.

1. Die als Router vorgesehene Maschine muss über mindestens zwei Ethernet-Netzwerkkarten (NICs) verfügen. Im System werden die als eth0 und eth1 geführt.
Zunächst wird squeeze-Grundsystem installiert. Benötigt wird auch das Paket Debianiptables, wird aber, wenn ich recht erinnere, beim Grundsystem automatisch mitinstalliert.
Debianpppoe muss installiert werden. Debianpppoeconf muss nicht, sollte aber installiert werden, da sich damit die Anbindung der Router-Maschine ans Modem bedeutend einfacher bewerkstelligen lässt.
Das Paket Debianopenssh-server muss installiert werden, wenn man den Router von den/einer anderen Maschine(n) im LAN aus administrieren will.

Wenn das alles drauf ist, kann man die Netzwerkkarten einrichten. Ich habe in der /etc/network/interfaces eingetragen für die NIC (bi mir eth0, man kann dafür genau so gut die als eth1 geführte nehmen), die ins interne LAN führt:

Code: Alles auswählen

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet static
        address 192.168.100.251
        netmask 255.255.255.0
        network 192.168.100.0
        broadcast 192.168.100.255
pppoeconf:
Die Einrichtung der zweiten NIC (bei mir eth1), die ins Internet führt, überlässt man pppoeconf. pppoeconf fragt (wenn ich mal wieder recht erinnere) bei der Einrichtung, ob die Internetverbindung beim Booten automatisch gestartet werden soll. Da mir das für einen Router ganz praktisch erschien, habe ich das bejaht. Weiterhin wurde gefragt, ob der Nameserver des Providers benutzt werden soll. Das habe ich auf Anraten von Forumsmitgliedern verneint. In diesem Falle muss dann nach Beendigung von pppoeconf ein Nameserver in /etc/resolv.conf eingetragen werden. Ich habe den vom Chaos Computer Club empfohlenen eingetragen. Für eth1 hat pppoeconf dann in /etc/network/interfaces eingetragen:

Code: Alles auswählen

auto dsl-provider
iface dsl-provider inet ppp
pre-up /sbin/ifconfig eth1 up # line maintained by pppoeconf
provider dsl-provider

auto eth1
iface eth1 inet manual
Danach habe ich in /etc/sysctl.conf die Zeile ipv4.ip_forward=1 aktiviert, indem ich dass davorstehende Kommentarzeichen (Raute) entfernt habe.

shorewall-Konfiguration:
Ich habe die Beispiel-Konfig-Dateien aus /usr/share/doc/shorewall/examples/two-interfaces (zwei NICs!) nach /etc/shorewall kopiert. In der Datei interfaces muss man schauen, ob eth0 und eth1 richtig zugeordnet sind (bei mir eth0 für loc, eth1 für net [=internet]) außerdem musste ich den Eintrag DHCP entfernen.

Weiterhin habe ich datei masq so abgeändert:

Code: Alles auswählen

#INTERFACE              SOURCE          ADDRESS         PROTO   PORT(S) IPSEC  $
ppp0                    192.168.100.0/255
Was das 0/255 am Ende der IP bedeutet, weiß ich nicht. Für Aufklärung wäre ich dankbar.

In /etc/shorewall/shorewall.conf habe ich geändert/eingetragen:

Code: Alles auswählen

STARTUP_ENABLED=Yes
IP_FORWARDING=On
In /etc/default/shorewall habe ich geändert/eingetragen:

Code: Alles auswählen

startup=1
In den "normalen" Maschinen im LAN benutze ich wicd und dort ist der gleiche nameserver wie auf dem Router eingetragen. Wenn man keinen Networkmanager verwendet, muss wohl ein solcher Nameserver als neue Zeile in /etc/network/interfaces in dem für das LAN zuständigen Abschnitt der NIC (bei mir eth0) eingetragen werden.

So, in diesem Stadium, konnte ich mich von einer "normalen" Maschine aus zwar auf dem Router als root einloggen und auch Internetadressen anpingen, sowohl via IP, als auch per Namen, aber im Browser ging gar nichts. Dann habe ich noch diese beiden Zeilen in /etc/rc.local auf dem Router vor der Zeile "exit 0"eingetragen:

Code: Alles auswählen

iptables --table nat --append POSTROUTING -o ppp0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o ppp0 -j ACCEPT
und dann konnte ich surfen.


Falls sich jemand die Mühe gemacht hat, bis hierher lesend duchzuhalten, würden mich Antworten auf folgende Fragen interessieren:

Ist die Firewall (shorewall) überhaupt aktiv? Alles, was ich vor der shorewall-Konfiguration, mit dem Nameserver und nachher mit /etc/rc.local gemacht habe, hätte mich auch ohne shorewall ins Internet gebracht (das hatte ich schon vorher getestet).

Gibt's an dieser Konfiguration Dopplungen/Überflüssiges?

Sollte ich zwecks genauerer Untersuchung die Inhalte der anderen configs unter /etc/shorewall mal posten?

Grüße, Günther
Zuletzt geändert von guennid am 20.12.2011 22:10:49, insgesamt 2-mal geändert.

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Ich bin drihinn!!! (Router mit shorewall)

Beitrag von Cae » 20.12.2011 21:43:55

guennid hat geschrieben:

Code: Alles auswählen

#INTERFACE              SOURCE          ADDRESS         PROTO   PORT(S) IPSEC  $
ppp0                    192.168.100.0/255
Was das 0/255 am Ende der IP bedeutet, weiß ich nicht. Für Aufklärung wäre ich dankbar.
Normalerweise sollte es die Subnetzmaske sein, vereinfacht ausgedrückt, wie viel von den 32 Bit IPv4-Adresse zum Netz gehört (z.B. a.b.c.x/24, wobei 0<x<255). Warum das 255 ist? Keine Ahnung, spezielle Syntax, die bestimmt in der Manpage steht. Ich würde /32 erwarten (genau dieser Rechner) oder /24 (genau dieses Klasse-C-Netz).
Oder es hat gar nix mit Subnetzmaske zu tun und ist einfach als .0-255 zu lesen (- (Minus) wäre in einem FQDN gültig).
guennid hat geschrieben:Ist die Firewall überhaupt aktiv?
Das ist deine Firewall:
guennid hat geschrieben:

Code: Alles auswählen

iptables --table nat --append POSTROUTING -o ppp0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o ppp0 -j ACCEPT
In diesem Fall ein NAT. Vereinfacht gesagt verhindert es, dass Anfragen von Außen eines der inneren Systeme erreichen kann, sofern dieses nicht mit der Kommunikation begonnen hat.

Du solltest nochmal mit

Code: Alles auswählen

# iptables-save
nachschauen, was für Regeln tatsächlich aktiv sind. Vor allem die Policy ist von Bedeutung, die bei dir aber schon auf DROP stehen müsste, da du erst nach der NAT-Einrichtung durch kamst. Die Policy ist die letzte Regel, also was passiert, wenn keine anderen Regeln gegriffen haben.

Etwas suspekt an der Sache ist für mich, dass die Firewall-Software von sich aus kein NAT eingerichtet hat (sicher?) und du sie möglicherweise mit der manuellen Einrichtung umgehst.

Gruß Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

guennid

Re: Ich bin drihinn!!! (Router mit shorewall)

Beitrag von guennid » 20.12.2011 22:01:19

Ich kann dir leider so gut wie nicht folgen.

Was ist denn eine "Subnetzmaske"?

Meine firewall ist ein NAT? Ist das was zum Essen? :wink:
Cae hat geschrieben:Etwas suspekt an der Sache ist für mich, dass [...] du ( die Firewall) möglicherweise mit der manuellen Einrichtung umgehst.
Genau das befürchte ich auch.

iptables-save kenne ich auch nicht, aber mal schauen.

Grüße, Günther

[edit:]
Ausgabe von iptables-save

Code: Alles auswählen

# iptables-save
# Generated by iptables-save v1.4.8 on Tue Dec 20 21:58:46 2011
*raw
:PREROUTING ACCEPT [32407:7819915]
:OUTPUT ACCEPT [1650:366007]
COMMIT
# Completed on Tue Dec 20 21:58:46 2011
# Generated by iptables-save v1.4.8 on Tue Dec 20 21:58:46 2011
*nat
:PREROUTING ACCEPT [11113:504798]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -o ppp0 -j MASQUERADE 
COMMIT
# Completed on Tue Dec 20 21:58:46 2011
# Generated by iptables-save v1.4.8 on Tue Dec 20 21:58:46 2011
*filter
:INPUT ACCEPT [1481:111564]
:FORWARD ACCEPT [15407:6774764]
:OUTPUT ACCEPT [1229:315722]
-A FORWARD -i eth0 -o ppp0 -j ACCEPT 
COMMIT
# Completed on Tue Dec 20 21:58:46 2011
# Generated by iptables-save v1.4.8 on Tue Dec 20 21:58:46 2011
*mangle
:PREROUTING ACCEPT [32413:7820227]
:INPUT ACCEPT [2122:167638]
:FORWARD ACCEPT [30291:7652589]
:OUTPUT ACCEPT [1656:367263]
:POSTROUTING ACCEPT [31947:8019852]
-A FORWARD -o ppp0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1400:65495 -j TCPMSS --clamp-mss-to-pmtu 
COMMIT

Benutzeravatar
habakug
Moderator
Beiträge: 4313
Registriert: 23.10.2004 13:08:41
Lizenz eigener Beiträge: MIT Lizenz

Re: Ich bin drihinn!!! (Router mit shorewall)

Beitrag von habakug » 20.12.2011 22:46:16

Hallo!
cae hat geschrieben:Warum das 255 ist? Keine Ahnung, spezielle Syntax, die bestimmt in der Manpage steht.
Die "255" passt da nicht hin, das wird wohl als "25" ausgewertet (192.168.100.1 - 192.168.100.126). Wenn das so gewollt ist...
Wie @cae schon darlegte, wäre "192.168.100.0/24" vielleicht die bessere Wahl [1].
Die Einstellung betrifft das SNAT, könnte auch leer gelassen werden ("-").

Gruß, habakug

[1] http://www.shorewall.net/manpages/shorewall-masq.html
( # = root | $ = user | !! = mod ) (Vor der PN) (Debianforum-Wiki) (NoPaste)

guennid

Re: Ich bin drihinn!!! (Router mit shorewall)

Beitrag von guennid » 21.12.2011 07:35:34

Danke für den Hinweis. Die Thematik ist ziemlich komplex und mein Englisch für die von habakug verlinkte Seite zu schlecht, will sagen, da das für mich äuerst mühsam wäre, das bei meinem geringen Verständnis nachzuverfolgen, lass ich das.

Nach weiterem googlen glaube ich jetzt zu wissen, dass der Eintrag 192.168.100.0/24 bedeutet: 192.168.100.1 - 192.168.100.255
oder im speziellen Fall (/etc/shorewall/masq): Dass shorewall angewiesen wird, IPs in diesem Bereich nach außen zu verändern (maskieren), was wohl auch als NAT bezeichnet wird. Das wäre dann bei mir auch genau das Richtige.
Habe ich das soweit richtig verstanden?

Als mein Hauptproblem betrachte ich aber, dass ich nach wie vor die beiden o.a. Einträge in /etc/rc.local benötige, um im Internet zu surfen. Gehe ich nicht recht in der Annahme, dass die das ganze shorewall-Gedöns komplett wieder aushebeln?

Ohne diese Einträge komme ich zwar per ssh als root remote auf den Router und kann dort ins Internet pingen, aber ein Browser kriegt keinerlei Verbindung.

Hier mal eine ping-Meldung für debianforum.de:

Code: Alles auswählen

# ping debianforum.de
PING debianforum.de (78.47.201.130) 56(84) bytes of data.
64 bytes from leela.debianforum.de (78.47.201.130): icmp_req=1 ttl=58 time=63.5 ms
Grüße, Günther

Antworten