[FreeBSD] Ipfilter installeren op een Co-located server
Hoi‚ hierbij een beschrijving van het bouwen van een firewall op een FreeBSD machine (co-located webserver)
In dit geval beschrijf ik een firewall die opgezet is/word op een machine met slechts 1 NIC‚ dit om het simpel te houden. mocht je meerdere nics in je systeem willen hebben dan zul je zelf even verder moeten kijken‚ maar nadat je dit verhaal heb gelezen weet je een aantal handige ipf commando’s om onverschrokken aan het testen te gaan‚ Ook op co-located machines !!!
[pagebreak]
Ik ga ervanuit dat je ssh gebruikt mocht je nog met telnet werken zoek dan eerst een howto om over te stappen naar ssh.
Firewall in de kernel bakken.
Shell:
| # cp /usr/local/sys/i386/conf/GENERIC /usr/local/sys/i386/conf/FIREWALL |
Vervolgens edit je de file /usr/local/sys/i386/conf/FIREWALL
en zet je overal waar GENERIC staat FIREWALL neer.
vervolgens zoek je dit blok op en zorg je dat er het volgende komt te staan.
Uiteraard moet je zelf de goede cpu instellen door de rest af te #-en
Shell:
| machine i386 #cpu I386_CPU #cpu I486_CPU cpu I586_CPU #cpu I686_CPU ident FIREWALL maxusers 32 #makeoptions DEBUG=-g #Build kernel with gdb(1) debug symbols options MATH_EMULATE #Support for x87 emulation |
LET OP dat je een # zet voor de laatste regel !!(in bovestaand stuk)
Anders kun je straks niet meer bij de co-located bak!
vervolgens compileer je de kernel.
Shell:
| # cd /usr/src # make clean # make buildkernel KERNCONF=FIREWALL |
controleer nu of het bestand /etc/ipf.rules bestaat‚ deze mag NIET bestaan als er een staat verwijder deze dan (zorg wel voor een backup)
Shell:
| # cd /usr/src/ # make installkernel KERNCONF=FIREWALL |
Shell:
| # reboot |
nu maar bidden dat de machine weer overeind komt. zoniet‚ sorry je zult naar de machine toe moeten om te booten met de oude kernel (zie andere howto’s)
We gaan er dus even vanuit dat de machine weer goed overeind komt.
zet nu de volgende firewall rules in ipf.rules.test
Shell:
| # Outside interface: rl0 -> rl0 # Outside ipno 193.173.210.132 # Netmask 255.255.255.192 # # Default Policies block in log all pass out all # accept packets comming on the loopback interface # deny illegal packets from the outside # deny packets that should never be inbound # block the draft-manning-dsua091.txt nets on outside interface # Allow some types of ICMP (mogelijk nog een type toestaan) ### # Allow connections to SSH # Allow connections to apache # Allow connections to sendmail # Allow replies to requests of bind # Prevent outside machines from initiating TCP connections to this machine # Allow return packets from connections we initiated # REJECT ident request (don’t just drop them) |
nu gaan we overschakelen naar deze ruleset maar om er zeker van te zijn dat we niet buiten gesloten worden doen we dat met volgend commando
Shell:
| # ipf -FA -f /etc/ipf.rules.test && sleep 180 && ipf -FA |
je hebt dan 3 minuten tijd om te zien of je met ssh nog naar de machine kunt connecten. (doe dat met een 2e ssh client scherm).
indien een mail/httpd server erg belangrijk is test je deze ook meteen‚ mag deze wel even offline zijn dan test je dat nog niet.
wacht de 3 minuten even af voor de zekerheid.
nu kopieren we de firewall ruleset naar ipf.rules en activeren we de rules
Shell:
| # cp /etc/ipf.rules.test /etc/ipf.rules.test /etc/ipf.rules # ipf -FA -f /etc/ipf.rules |
Ok je bent nog steeds op de machine en je firewall draait!!
nu ga ik je nog kort uitleggen hoe je nou veilig nog meer nieuwe rules kunt testen op een colocated machine.
Breng de gewenste veranderingen aan in /etc/ipf.rules.test
vervolgens gaan we vanaf de huidige ruleset gedurende een minuut ruleset ipf.rules.test draaien en daarna weer terug naar de goede oude vertrouwde set. Dit om er zeker van te zijn dat we niet buiten gesloten worden door de nieuwe set.
Switchen van de huige rulset naar de extra set doe je met -s daarin laden we de test set en vervolgens wachten we een minuut‚ dan switchen we terug naar de originele set.
Shell:
| ipf -s -Fa -f /myrules && sleep 60 && ipf -s |
Je hebt nu 1 minuut om te testen of je ruleset doet wat jij wilt.
Ben je tevreden over de ruleset dan kopieer je de ruleset naar /etc/ipf.rules en vertel je ipf om alles te flushen (= leeggooien -FA) en de nieuwe set te laden vanuit file /etc/ipf.rules ( -f /etc/ipf.rules)
Shell:
| #ipf -FA -f /etc/ipf.rules |
Ok nog een paar korte aantekeningen
ipf -s (= switchen van ruleset‚ er kunnen 2 rulesets in het geheugen!)
ipf -FA (= Flush All‚ dat is het leeggooien van het ipf geheugen‚ je draait nu helemaal geen rules!)
ipf -FA -f /file (= -FA‚ fushen‚ en -f geeft aan vanuit welke file hij een ruleset in moet lezen.)
nu nog een laatste toegift.
)
Op het moment dat er geen ruleset geladen is is ALLES toegestaan. we hebben namelijk bij het compileren van de kernel
de regel
Shell:
| #options IPFILTER_DEFAULT_BLOCK #block by default |
als commentaar neergezet.
bij het opstarten zijn er een aantal secondes dat ipf wel geladen is maar de ruleset nog niet ! Ook als de machine om een of andere reden /etc/ipf.rules niet kan lezen dan is alles toegestaan. dit erg handig (je kunt namelijk nog bij de machine met ssh) maar tevens onveilig!
als je het # voor de regel weghaald en de kernel opnieuw compileerd en installeerd weet je zeker dat je firewall dicht zit als er geen rules in het geheugen zitten.
Ik ga hier nu niet verder op in omdat het een erg gevaarlijke optie is. als je veel ervaring hebt met FreeBSD kun je deze regel meecompileren op eigen risico‚ doe dit echter pas als er een goede ipf.rules bestaat !!!!
Veel success.
XychiX

December 17th, 2001
Zeer goede howto
Zal mijn ipf ruleset ook ff posten:
[shell]###########
# Outside Interface
###########
#—————————————————————-
# Allow out all TCP, UDP, and ICMP traffic & keep state on it
# so that it’s allowed back in.
#—————————————————————-
pass out quick on fxp0 proto tcp from any to any keep state
pass out quick on fxp0 proto udp from any to any keep state
pass out quick on fxp0 proto icmp from any to any keep state
block out quick on fxp0 all
# loopback pakets left unmolested
pass in quick on lo0 all
pass out quick on lo0 all
# nooit dicht zetten deze!!!
pass in quick on fxp0 proto tcp from any to any port = 22 flags S keep state
#dns server
pass in quick on fxp0 proto udp from any to 213.239.132.24/32 port = 53 keep state
pass in quick on fxp0 proto tcp from any to 213.239.132.24/32 port = 53 flags S keep state
# Apache Webserver
pass in quick on fxp0 proto tcp from any to any port = 80
# Pop3 server
pass in quick on fxp0 proto tcp from any to any port = 110
pass in quick on fxp0 proto tcp from any to any port = 995 flags S keep state
# SMTP
pass in quick on fxp0 proto tcp from any to any port = 25
# FTP Server
pass in quick proto tcp from any to x.x.x.x/32 port = 21 flags S keep state
pass out proto tcp all keep state
# To receive traceroute replies
#pass in quick on fxp0 proto icmp from any to any icmp-type timex keep state
#pass in quick on fxp0 proto icmp from any to 213.239.132.24/24 icmp-type 0
#pass in quick on fxp0 proto icmp from any to 213.239.132.24/24 icmp-type 11
#pass in quick on fxp0 proto icmp from any to 213.239.132.32/24 icmp-type echo
#pass in quick on fxp0 proto icmp from any to 213.239.132.32/24 icmp-type echorep
# Outbound traffic from our own IPs is allowed
# Could be made more strict for icmp
pass out quick on fxp0 proto tcp/udp from X.X.X.X/32 to any keep state
pass out quick on fxp0 proto icmp from X.X.X.X/32 to any keep state
# Block and log all remaining traffic coming into the firewall
# – Block TCP with a RST (to make it appear as if the service
# isn’t listening)
# – Block UDP with an ICMP Port Unreachable (to make it appear
# as if the service isn’t listening)
# – Block all remaining traffic the good ‘ol fashioned way
#—————————————————————-
block in quick on fxp0 from any to any port 134 >< 140
block in quick on fxp0 from 213.239.132.255/32 to any
block in quick on fxp0 from 213.239.131.255/32 to any
block in quick on fxp0 from any to 213.239.132.255/32
block in quick on fxp0 from any to 213.239.131.255/32
block in quick on fxp0 from any to 224.0.0.1/32
block return-rst in log quick on fxp0 proto tcp from any to any
block return-icmp-as-dest(port-unr) in log quick on fxp0 proto udp from any to any
block in log on fxp0 all
January 11th, 2002
Voor de mensen die samba draaien:
pass in quick on fxp0 proto udp from any to any port = 137 keep state
pass in quick on fxp0 proto udp from any to any port = 138 keep state
January 11th, 2002
grapjas…
February 12th, 2002
Ik heb de rules van inferno over genomen.
Inloggen op ftp lukt, maar zodra ik iets wil gaan uploaden:
ftp: connect: Connection refused
En toen ?
March 6th, 2002
probeer je ftpclient eens in passive mode te zetten dat zou het moeten doen !
August 6th, 2002
Heb je onder FreeBSD niet zoiets als ftp_conntrack zoals onder linux? Dan heb je geen Passive nodig, sommige FTP srever negeren dat namelijk
September 4th, 2002
>>Heb je onder FreeBSD niet zoiets als ftp_conntrack zoals onder linux? Dan heb je geen Passive nodig‚ sommige FTP srever negeren dat namelijk
Ja, kan je instellen in je ipnat.rules. Zie ook deze howto: http://www.bsdfreaks.nl/index.php/front_howto/53/740
en de IPFilter documentatie/manpages.
November 11th, 2002
vraag: hoe werken die ipranges???
October 22nd, 2003
Als reply op Laagje:
Zet poort 20 ook open, dit is ftp-data, voorkomt een hoop gezeik. (zie /etc/services)
November 4th, 2003
How can i get the English Version of this site
November 21st, 2003
Kijk hier voor poorten.
http://www.si.hhs.nl/~wijnandr/cs22/literatuur/poort.html
November 21st, 2003
a English site about IP Filter :
http://coombs.anu.edu.au/~avalon/
November 26th, 2003
thx Zaleo,
Can you give me a Detailed Howto Co-located Servers which cover each and ever thing….
thx in advance… mail me : f4fahmed@hotmail.com
February 29th, 2004
February 4th, 2005
hoe activeert je firewall?