FreeBSD firewall problem

From: Michael Rasmussen (none@michael.r--grafisk.dk.lh.bsd-dk.dk)
Date: Tue 30 Jan 2001 - 00:11:14 CET


Date: Tue, 30 Jan 2001 00:11:14 +0100
From: Michael Rasmussen <none@michael.r--grafisk.dk.lh.bsd-dk.dk>
To: "bsd-dk@bsd-dk.dk" <none@bsd-dk--bsd-dk.dk.lh.bsd-dk.dk>
Subject: FreeBSD firewall problem

Kære BSD brugere,

Jeg har netop brugt min weekend på at installere FreeBSD 4.2, og det gik
ganske fint. Den blev installeret via ftp, og jeg valgte selv de pakker
jeg ville have installeret. Hvilket, så vidt jeg husker, var bin, user,
developer og kern-developer.

Men jeg har lidt problemer med at få maskinen til at kører som firewall,
selv om jeg har læst diverse vejledninger vil det ikke rigtig virke.

Jeg har læst en, efter min mening, god artikel om firewall+FreeBSD 4.0
på <http://www.rootprompt.net>, men selv om jeg følger denne vejledning
grundigt vil det ikke virke som ønsket. Se evt. førnævnte artikel, da
det der fremgår hvilke ting jeg har rettet/tilføjet.

Herunder vil jeg opremse det, jeg selv mener er vigtigt i denne forbindelse.

For det første:

Jeg har bl.a. tilføjet følgende til "/etc/rc.conf":

firewall_enabled="yes"
firewall_script="/etc/rc.firewall"
firewall_type="custom"

Og jeg har så angivet en "custom" regel i rc.firewall, nøjagtig som
ovenstående vejl. beskriver. Desuden har jeg bygget en ny kerne, med
bl.a. følgende options:

options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=10
options IPDIVERT
options IPFIREWALL_FORWARD
options IPSEC
options IPSEC_ESP

Men alligevel ignorerer FreeBSD fuldstændig filen "/etc/rc.firewall"
under opstart, hvilket jeg ikke forstår.
Burde man ikke kunne se resultatet via "ipfw list" kommandoen, når
maskinen er startet? (der vises ingen fejl under opstarten, så vidt jeg
kan se).

For det andet:

Da ovenstående, ellers smarte, metode ikke virkede, oprettede jeg et
shellscript med de forskellige ipfw angivelser direkte, som jeg så kører
under opstart. Så langt så godt, nu kan resultatet fint ses i "ipfw
list", men det virker ikke helt som det er beskrevet i tidligere vejledning.

Her er indholdet af omtalte shellscript, der er placeret i
"/usr/local/etc/rc.d/firewall.sh" (alle linier starter med ipfw el. #):

#!/bin/sh
#
# Mit firewall script (20010128)
# vr0 = lokalnet og vr1 = router -> internet
##########################################################################

# Stop Spoofing
ipfw add 110 deny all from 192.168.0.0:255.255.255.0 to any in via vr1
ipfw add 110 deny all from <internet-ip>:255.255.255.248 to any in via vr0

# Stop RFC1918 nets on the outside interface
ipfw add 120 deny log all from 192.168.0.0:255.255.0.0 to any in recv vr1
ipfw add 120 deny log all from 172.16.0.0:255.240.0.0 to any in recv vr1
ipfw add 120 deny log all from 10.0.0.0:255.0.0.0 to any in recv vr1

# Allow any ip (tcp and udp) packets to go out the outside interface
ipfw add 130 pass all from any to any out xmit vr1
# Allow any ip (tcp and udp) packets to pass on the inside interface
ipfw add 140 pass all from any to any via vr0
# Allow established tcp connections from outside interface
ipfw add 150 pass tcp from any to any in recv vr1 established

# Deny and log setup of tcp connections from outside interface
ipfw add 400 deny log tcp from any to any in recv vr1 setup

# Allow replies to DNS queries from outside interface
ipfw add 410 pass udp from 194.239.134.83 53 to any 1024-65535 in recv vr1
ipfw add 420 pass udp from 193.162.153.164 53 to any 1024-65535 in recv vr1
ipfw add 430 pass tcp from any 53 to 192.168.0.0:255.255.255.0
ipfw add 430 pass udp from any 53 to 192.168.0.0:255.255.255.0

# Allow any ICMP packets to pass on inside interface
ipfw add 1000 pass icmp from any to any via vr0
# Allow outbound pings
ipfw add 1010 pass icmp from any to any in recv vr1 icmptypes 0
ipfw add 1010 pass icmp from any to any out xmit vr1 icmptypes 8

# Allow outbound traceroutes
ipfw add 1020 pass icmp from any to any in recv vr1 icmptypes 3
ipfw add 1020 pass icmp from any to any in recv vr1 icmptypes 11

# Everything else is denied by default
ipfw add 65532 deny udp from any to any
ipfw add 65533 deny icmp from any to any
ipfw add 65534 deny log ip from any to any
##########################################################################

Ovenstående skulle gøre, at alt må gå ud, og intet må komme ind. Men når
det er slået til, kan jeg f.eks. ikke få kontakt med min lokale named
server, der kører som cache og hoster et par intranet domæner. Hvis jeg
derimod manuelt kører en:

"ipfw add 100 allow all from any to any via vr0"

Så virker min interne nameserver fint (og desuden også ping og
traceroute, som giver permission denied uden ovenstående), altså må
problemet ligge i ovenstående shellscript. Men jeg kan ikke lige se mig
ud af det, og ovenstående regel burde ikke være nødvendig i.flg. siden
(den er nok heller ikke helt skudsikker) :-/

Serverens IP nummer er: 192.168.0.10 (255.255.255.0).

<internet-ip> er min faste ip adresse fra TeleDK på vr1 netkortet, hvor
Internetforbindelsen er tilsluttet via en ISDN router (der er koblet på
maskinen via et cross-over kabel). Internetforbindelsen viker fint, hvis
jeg manuelt indtaster ovenstående ipfw regel, så det burde være i orden.
Jeg kan dog ikke få de andre maskiner på mit netværk til at finde
igennem maskinen, og videre ud på Internettet, men det håber jeg I kan
hjælpe med senere, hvis jeg ikke selv finder ud af dette inden.

Denne e-mail er nemlig alt for lang allerede, men jeg håber I kan
overskue mit problem, og komme med lidt forslag til en løsning. Jeg skal
gerne indrømme at jeg, efter at have fået FreeBSD på en noget hurtigere
maskine, er utrolig glad for systemet (har kørt Linux i godt og vel 3
år).
Derfor ville det også være dejligt, hvis jeg kunne få det til at virke
som ønsket, og det er jo sikkert blot en lille bagatel jeg har overset.

Det skal siges at jeg har søgt flere forskellige steder efter hjælp, men
det er desværre ikke lykkes at finde noget relevant ang. netop disse
problemer, så jeg håber derfor at I vil være behjælpelige med et par
gode idéer.

Spørg endelig, hvis der er noget jeg har glemt at oplyse.

På forhånd mange tak.

-- 
Med venlig hilsen
 Michael Rasmussen <none@michael.r--grafisk.dk.lh.bsd-dk.dk>



This archive was generated by hypermail 2b30 : Wed 15 Nov 2006 - 18:24:04 CET