FreeBSD Logo               

Skąd pobrać FreeBSD? Wybierz serwer ftp:
 

 


Dokumentacja
 
manuale  
  faq 
 
handbook

Jak to zrobić?
  Instalacja
  Komendy
  Usługi
  Upgrade
  NFS
  Jądro
  SDI-PPP
  Identyfikacja
  Quota
  OpenSSH
  TelnetSSL 
  Agenci MTA
  POP3 i SMTP
  Autoryzacja
  Serwer WWW
  Serwer NEWS
  Serwer Nazw
  ProFTPD
  IPv6
  Squid
  Samba
  DHCP
  Dummynet
  Ipfilter
  PF
  Polonizacja
  VMvare
  Udostępnianie
  Mały Router
 
Terminal
  Linux2FreeBSD

Niusy
  pl.comp.os.bsd

Po polsku
  bsdzine.org
  freebsd.pl
  www.bsd4u.org
  www.bsdguru.org
  bofh.vt.pl

Po innemu
  bsdvault.net
  freebsdhowtos.com
  freebsd-howto.com

Linkownia



Studio reklamowe

Usługi informatyczne MAC



 

 

Konfiguracja ipfilter pod FreeBSD


Artykuł będzie podzielony na dwie części : podstawową i rozszerzoną.
W części podstawowej stworzymy bardzo prosty firewall o minimalnej funkcjonalności, natomiast w części drugiej postaramy się stworzyć coś bardziej przydatnego.

Oto nasz przykładowy serwer:

Interfejsy:
rl0 - 217.97.175.97 - interfejs podłączony do internetu
xl0 - 169.255.0.1 - interfejs podłączony do sieci lokalnej
Uslugi:
Dla sieci lokalnej ma być wszystko dostępne.
Dla internetu natomiast:
apache - port 80
ssh - port 22
dns - port 53
smtp - port 25
pop3 - port 110


Częsć pierwsza:

1. Konfiguracja rc.conf

ipfilter_enable="YES"
ipfilter_flags=""

Jeśli chcemy używać ipf skompilowanego jako modułu to nie trzeba nic więcej w tym miejscu robić. Jeśli jednak chcemy wkompilować obsługę ipfilter w kernel'a to musimy dodać następującą opcję do naszego jądra:

options IPFILTER

2. Konfiguracja /etc/ipf.rules

Standardowo reguły firwall'a dla ipfilter umieszcza się w /etc/ipf.rules. My również tak postąpimy. A o to nasz przykładowy plik konfiguracyjny:

# Puszczamy cały ruch wychodzący na rl0 dla tcp, udp oraz icmp
pass out quick on rl0 proto tcp from any to any keep state
pass out quick on rl0 proto udp from any to any keep state
pass out quick on rl0 proto icmp from any to any keep state
block out quick on rl0 all

# Puszczamy usługi dla interfesju zewnętrznego, które wcześniej ustaliliśmy
pass in quick on rl0 proto tcp from any to 217.97.175.97 port = ssh flags S keep state keep frags
pass in quick on rl0 proto tcp from any to 217.97.175.97 port = smtp flags S keep state keep frags
pass in quick on rl0 proto tcp from any to 217.97.175.97 port = domain flags S keep state keep frags
pass in quick on rl0 proto udp from any to 217.97.175.97 port = domain keep state keep frags
pass in quick on rl0 proto tcp from any to 217.97.175.97 port = http flags S keep state keep frags
pass in quick on rl0 proto tcp from any to 217.97.175.97 port = pop3 flags S keep state keep frags

# Blokujemy całą resztę
block in quick on rl0 all

# Puszczamy cały ruch wyjściowy na interfejsie wewnętrznym xl0
pass out quick on xl0 proto tcp from any to any keep state
pass out quick on xl0 proto udp from any to any keep state
pass out quick on xl0 proto icmp from any to any keep state
block out quick on xl0 all

# Puszczamy cały ruch wejściowy na interfejsie wewnętrznym xl0
pass in quick on ep0 proto tcp from any to any keep state
pass in quick on ep0 proto udp from any to any keep state
pass in quick on ep0 proto icmp from any to any keep state
block in quick on ep0 all

# Na koniec puszczamy wszystko na interfejsie pętli zwrotnej czyli lo0
pass in quick on lo0 all
pass out quick on lo0 all

Teraz tylko reboot i mamy już naszego pierwszego firewall'a.

Cześć druga:

W tej części zajmiemy się czymś bardziej rozbudowanym:
- stworzymy szczelniejsze reguły firewall'a
- uaktywnimy logowanie
- utrudnimy skanowanie portów na naszym serwerze
- dołączymy do tego jeszcze translacje adresów sieci lokalnej, czyli ipnat

1. Początek

Na początek proponuje siąść do lektury i przeczytać sobie następujące rzeczy:
- man 8 ipf
- man 5 ipf
- man 8 ipnat
- man 5 ipnat

2. Logowanie

1) Kernel
Jeśli korzystamy z modułu to nie musi w tym miejscu nic zmieniać. Natomiast gdy mamy ipfilter wkompilowane w jądro to musimy dodać jeszcze opcję:

options IPFILTER_LOG

2) /etc/rc.conf
Dodajemy następujące opcję, co zapewni nam logowanie przy użyciu syslogd.
ipmon_enable="YES"
ipmon_flags="-Dsvn"

3) /etc/syslog.conf
local0.* /var/log/firewall/firewall_logs
W ten sposób logowane pakiety pojawią się w tym pliku.

4) /etc/newsyslog.conf
/var/log/firewall/firewall_logs 600 14 1000 * Z

3. /etc/ipf.rules
Nasze regułki będą już miały teraz więcej linijek:

# Puszczamy ruch wychodzący na rl0
pass out quick on rl0 proto tcp from any to any keep state
pass out quick on rl0 proto udp from any to any keep state
pass out quick on rl0 proto icmp from any to any keep state
block out quick on rl0 all

# Blokujemy adresy IP, które nie powinny się u nas pojawić
block in quick on rl0 from 192.168.0.0/16 to any #RFC 1918 private IP
block in quick on rl0 from 172.16.0.0/12 to any #RFC 1918 private IP
block in quick on rl0 from 10.0.0.0/8 to any #RFC 1918 private IP
block in quick on rl0 from 127.0.0.0/8 to any #loopback
block in quick on rl0 from 0.0.0.0/8 to any #loopback
block in quick on rl0 from 169.254.0.0/16 to any #DHCP auto- config
block in quick on rl0 from 192.0.2.0/24 to any #reserved for doc's
block in quick on rl0 from 204.152.64.0/23 to any #Sun cluster interconnect
block in quick on rl0 from 224.0.0.0/3 to any #Class D & E multicast

# Puszczamy interesujące nasz usługi
pass in quick on rl0 proto tcp from any to 217.97.175.97 port = ssh flags S keep state keep frags
pass in quick on rl0 proto tcp from any to 217.97.175.97 port = smtp flags S keep state keep frags
pass in quick on rl0 proto tcp from any to 217.97.175.97 port = domain flags S keep state keep frags
pass in quick on rl0 proto udp from any to 217.97.175.97 port = domain keep state keep frags
pass in quick on rl0 proto tcp from any to 217.97.175.97 port = http flags S keep state keep frags
pass in quick on rl0 proto tcp from any to 217.97.175.97 port = pop3 flags S keep state keep frags

# Dla pozostałych połaczeń tcp zwracamy RST i loguje ten fakt
block return-rst in log quick on rl0 proto tcp from any to any
# Dla udp zwracamy komunikat o nieosiągalności portu i logujemy
block return-icmp-as-dest(port-unr) in log quick on rl0 proto udp from any to any
# Reszcze blokujemy i logujemy
block in log quick on rl0 all

# Puszczamy cały ruch na interfejsie wewnętrznym
pass out quick on xl0 proto tcp from any to any keep state
pass out quick on xl0 proto udp from any to any keep state
pass out quick on xl0 proto icmp from any to any keep state
block out quick on xl0 all

pass in quick on xl0 proto tcp from any to any keep state
pass in quick on xl0 proto udp from any to any keep state
pass in quick on xl0 proto icmp from any to any keep state
block in quick on xl0 all

# Oraz na interfejsie pętli zwrotnej
pass in quick on lo0 all
pass out quick on lo0 all

4. Dodatkowe zabezpieczenia
Do /etc/sysctl.conf dorzucamy następujące linijki:
net.inet.tcp.blackhole=2
net.inet.udp.blackhole=1
Spowoduje to znaczące spowolnienie skanowania portów.

5. Ipnat
I na koniec została nam translacja adresów dla sieci lokalnej żeby można było korzystać z internetu.

Do /etc/rc.conf dodajemy więc:
ipnat_enable="YES"

A do /etc/ipnat.rules :
map rl0 169.255.0.0/16 -> 217.97.175.97/32

I już użytkownicy sieci lokalnej będą mieli dostęp do internetu.

No i oczywiście jeszcze trzeba zrobić reboot, no chyba że ktoś korzysta z modułu i poczytał manuale.

I to by było na tyle.
Wszelkie sugestie, zapytania, znalezione błędy :) proszę kierować pod adres:
msciciel@darkzone.ma.cx

Materiały źródłowe:
http://www.schlacter.dyndns.org/public/FreeBSD-STABLE_and_IPFILTER.html
man 8 ipf
man 5 ipf
man 8 ipnat
man 5 ipnat


 


Autor: (c) Krzysztof Pawłowski

WWW : http://darkzone.ma.cx


Gudzień 2002





Kontakt  

© 2001-2009 FreeBSD Projekt
Wszelkie Prawa Zastrzeżone.