Router mit Firewall

AceX5

Well-Known Member
Nachdem ich einige grundsätzliche Erfahrungen mit FreeBSD 4.7 gesammelt habe, wollt ich mir jetzt einen Router mit Firewall aufsetzen. Ausserdem muss Port 80 für einen Webserver, welcher hinter dem Router steht gemappt werden.
Kann mir jemand Starthilfe geben? Bei Installation, IP Forwarding und dem Zugang über ADSL habe ich keine Probleme. Nur beim Thema Firewall und Portmapping könnte ich Unterstützung brauchen.
 
Servus.

ADSL funktioniert? Gut.
Sprich, das ist im Kernel?:
options NETGRAPH
options NETGRAPH_ETHER
options NETGRAPH_SOCKET
options NETGRAPH_PPPOE

Gut, dann pack noch folgendes dazu:

options IPFIREWALL
options IPDIVERT

Evtl. kannst Du das auch einfach als Module nachladen, ja, das sollte auch gehen.
Schau mal unter Deinen modules nach.

Auch das wäre nicht schlecht in den kernel zu packen:
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=100

So, dann ab in die rc.conf:

firewall_enable="YES"
firewall_script="/etc/firewall/fwrules"

Es wäre sinnvoll, wenn Du nicht selbst an dem Rechner sitzt, folgende Zeile mit aufzunehmen, sonst schiesst Du Dir selbst in das Knie, sprich, Du sperrst alles aus, da als Standard folgende Rule gesetzt wird:

65535 deny ip from any to any

Ja, und das wäre dann unschön, daher, falls es ein entferneter Rechner ist:

firewall_type="OPEN"

in die rc.conf.
Selbstverständlich später wenn die firewall rennt, wieder rausnehmen.

Kurz Erklärung zu:
firewall_script="/etc/firewall/fwrules"
Unter /etc/firewall legst Du eine Datei an die Deine IPFW Rules beinhaltet.
Deine Rules kannst Du anhand der manpage und/oder des FreeBSD handbook erstellen.

Hier mal ein paar Rules:
ipfw add 10 divert natd all from any to any via tun0
# Sollte ganz oben stehen, da wir später NATD als portforwarder nutzen werden.

ipfw add allow ip from any to any via lo0
# erlaubt den Durchgang aller Daten auf localhost und der NIC

ipfw add allow ip from any to any via xl0
# das ist die interne NIC, es wird alles andere für jeden anderen über diese erlaubt

ipfw add allow tcp from any to any out xmit tun0 setup
# Erlaubt alle Verbindungen welche von hier initiiert werden

ipfw add allow tcp from any to any via tun0 established
# wenn die Verbindung mal steht offen halten

ipfw add allow udp from any to 195.20.224.234 53 out xmit tun0
ipfw add allow udp from any to 194.25.2.129 53 out xmit tun0
ipfw add allow udp from any to 217.5.99.105 53 out xmit tun0

ipfw add allow udp from 195.20.224.234 53 to any in recv tun0
ipfw add allow udp from 194.25.2.129 53 to any in recv tun0
ipfw add allow udp from 217.5.99.105 53 to any in recv tun0

# DNS wird an die angegeben DNS Server (T-Online) erlaubt, antworten werden nur von diesen akzeptiert und nicht einem dahergelaufenen.

ipfw add 65534 allow ip from any to any
# zum schluss verbieten wir alles andere.

So, oder so ähnlich sieht das dann in etwa aus. Wobei obige Rules funktionieren. Musst nur die interne NIC (xl0) durch die Deine ersetzen.


Kommen wir zum NAT. Sprich Deinen Webserver der eine interne IP hat, soll von aussen erreichbar sein. Ich mache das hier beispielsweise mit jails. Das hostsystem leitet die Anfragen für FTP, HTTP, SMTP weiter in die jeweiligen jails.

/etc/rc.conf

natd_program="/sbin/natd"
natd_enable="YES"
natd_interface="tun0"
natd_flags="-dynamic -f /etc/firewall/natd.conf"

Das wars, für die rc.conf.

Dann erstellst Du die Datei "natd.conf" unter /etc/firewall/ und trägst dabei folgendes ein:

redirect_port tcp 192.168.0.203:80 80
redirect_port udp 192.168.0.203:80 80

Das heisst, 192.168.0.203 ist die IP des internen Rechners (oder jail) auf die der webserver rennt (port 80). Die alleinstehende "80" ist der port Deines Rechner der die Anfrage dann eben an die interen IP weiterleitet.
Ganz einfach, nicht?

So, das war es dann, sollte so rennen.

Bei Fragen, gerne auch via mail.

grunix
 
Ich habe mal wieder ein bisschen Zeit für meine Box gefunden und das ganze mal ausprobiert. Geht super, vorallem von dem Portmapping bin ich begeistert. Danke nochmal. Dickes Lob! :)
 
kann es sein ...

Tach auch.

Sollte es nicht:

"ipfw add 65534 deny ip from any to any"

statt

"ipfw add 65534 allow ip from any to any
# zum schluss verbieten wir alles andere."

heißen?


hang lost
 
Nee, das hat schon seine Richtigkeit. Schliesslich halte ich die Firewall mit firewall_type="OPEN" offen. Erst wenn ich diese Zeile aus der rc.conf rausnehme, werden die Regeln aus fwrules abgearbeitet. Oder sehe ich das falsch?
 
Re: kann es sein ...

Sollte es nicht:

"ipfw add 65534 deny ip from any to any"

statt

"ipfw add 65534 allow ip from any to any
# zum schluss verbieten wir alles andere."

heißen?

Selbstverständlich. Mein Fehler.
Im Regelbetrieb muss natürlich zum Schluss alles verboten werden was anfangs nicht explizit freigegeben wurde.

Käse, habe eben mal mein Originalposting durchgelesen. Die Regel die ich zuletzt angegeben hatte stimmt schon, da es nicht wirklich die letzte Regel ist. Die letzte Regel hat die Nummer "65535" und ist in meinem Originalposting weiter oben erwähnt. Ich habe die letzte Regel drin, das man sich beim konfigurieren, wenn man nicht an der Kiste sitzt sondern von ausserhalb darauf zugreift, nicht in den eigenen Fuss schiesst.

Also, in der /etc/rc.conf den Kram mit firewall_open raus, dann wird als letzte Regel eine "deny ip any to any" automatisch eingefügt, und die Regel mit der 65534 manuell entfernen.
 
Zuletzt bearbeitet:
Originally posted by AceX5
Nee, das hat schon seine Richtigkeit. Schliesslich halte ich die Firewall mit firewall_type="OPEN" offen. Erst wenn ich diese Zeile aus der rc.conf rausnehme, werden die Regeln aus fwrules abgearbeitet. Oder sehe ich das falsch?

Wenn Du "firewall_type="OPEN" hast, dann macht die letzte Regel die ich gepostet hatte, noch weniger Sinn (das ich alles freigebe), mein Fehler.
Wenn Du "firewall_type="OPEN" rausnimmst, dann werden Deine Regeln in /etc/firewall/fwrules abgearbeitet, vorausgesetzt Du verweist in der rc.conf auf diese.
Wie dem auch sei, die letzte Regel sollte alles verbieten was davor nicht explizit freigegeben wurde.
 
Zurück
Oben