Hrvatska akademska i istraživačka mreža
  NASLOVNICA MAPA WEBA TRAŽILICA KONTAKTI CARNET WEB
Hrvatska akademska i istraživačka mreža
 
menu 4
Sigurnost
menu 4
Distribucija
menu 4
Pomoć
menu 4
Dokumenti
menu 4
menu 4

 

 

20-09-04 10:03
Podesite firewall na svom poslužitelju

piše SAŠA DRNJEVIĆ

Svoj poslužitelj na kojem imate CARNetovu distribuciju Debian Linuxa možete učiniti sigurnijim ako podesite pravila za filtriranje paketa. Savjeti koje ovdje dajemo vrijede u cijelosti samo ako imate instalirane pakete kernel-cn i iptables-cn. U tom slučaju sve što vam treba već je ugrađeno u kernel. Treba još samo podesiti Netfilter/Iptables, koji filtrira IPv4, IPv6 i DECNet pakete.

Ako još ne koristite filtriranje IP paketa, razmislite o postavljanju minimalne zaštite u tablicu filter pomoću skripte s kraja teksta. U koracima to izgleda ovako:

1)  copy & paste skripte s kraja teksta u root-ov home (nasigurnije mjesto :-)

2)  pazite da skripta nakon spremanja ima vlasništvo root:root i dozvole 0700.

3)  dok je tablica filter još prazna, izvršite sljedeću naredbu (objašnjenje slijedi kasnije):

 # /etc/init.d/iptables save inactive

4)  nakon što ste u skripti (koju ćemo u primjeru zvati: "iptables.conf.sh") podesili potrebne varijable i IP adrese u nekim pravilima prema Vašoj mreži, možete ju pokrenuti:

 # ./iptables.conf.sh

Time ste tablicu filter napunili željenim pravilima.

5) Sada trebate osigurati da se pravila podižu pri pokretanju poslužitelja, pa ćete ih spremiti u datoteku /var/lib/iptables/active, koristeći naredbu:

 # /etc/init.d/iptables save active

Startup skripta /etc/init.d/iptables kod bootanja puni tablicu pravilima iz navedene datoteke.

6)  Naredba iz 3. koraka je napravila datoteku pod imenom "inactive" (bez iptables pravila) u /var/lib/iptables direktoriju. Kod odlaska poslužitelja u reboot/reset/poweroff/single_user_mode (odnosno runlevel 0, 1 i 6) učitaju se "inactive" pravila. Može nam poslužiti i da na brzinu ispraznimo tablicu filter kada debugiramo pravila, i to ovako:

 # /etc/init.d/iptables load inactive

7) Za svaki slučaj aktivna pravila možete spremiti i pod drugim imenom kako biste imali rezervnu kopiju:

 # /etc/init.d/iptables save active.backup-20040915-01

8) Za restore željenih pravila je onda dovoljno:

 # /etc/init.d/iptables load active.backup-20040915-01

9) Ako želite preko sysloga logirati odbijene pakete, dovoljno je prije pravila koje odbija neki promet, postaviti isto takvo pravilo, samo ga umjesto target DROP, usmjerite na target LOG. Obavezno broj zapisa u log ograničite s npr. "--limit 1/s", što će dozvoliti upisivanje jedne poruke u sekundi. Tako ćete izbjeći mogući DoS napad (navedeni primjer se nalazi u skripti s komentarom "# -----Linije za privremene zabrane")

10) Kako biste lakše uočili zapise u logovima iz 9. koraka, svakoj liniji u logu možete dati proizvoljan prefiks, što se također vidi u skripti pod komentarom "# -----Linije za privremene zabrane"

11) Liniju za privremene zabrane možete koristiti po potrebi kada Vas npr. skeniraju s neke mreže

13) Da biste vidjeli aktivna pravila otipkajte sljedeće:

 # iptables -nL

14) Ako želite dobiti aktivna pravila s DNS imenima i imenima protokola (umjesto numerički), otipkajte sljedeće (traje duže zbog DNS lookupa):

 # iptables -L

15) sljedeća naredba nam daje vrlo koristan izvještaj koji uključuje brojače (counters) propuštenih i odbijenih paketa:

 # iptables -nL -v

Naveli smo samo djelić onoga što se može učiniti kako biste što bolje zaštitili svoj poslužitelj od "nepozvanih gostiju", a više o iptablesima možete saznati iz opširne man stranice ili s http://www.netfilter.org.

 

#------ Skripta za konfiguraciju iptables pravila

#------ Sasa Drnjevic, Srce, 2004-09-20

#!/bin/sh

set -e

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# -----IP adresa servera: Ovdje upišite adresu svog servera
IP="192.168.100.1"

# -----Ethernet interface
ETH="eth0"

# -----Postavljanje IPtables Default Policy-a za default tablicu filter
#
# -----INPUT chain politika - dozvoljeno je sve sto nije zabranjeno
iptables -P INPUT ACCEPT
#
# -----FORWARD chain politika - ako ne koristimo posluzitelj za FORWARD paketa, mozemo sve zabraniti
iptables -P FORWARD DROP
#
# -----OUTPUT chain politika - dozvoljeno je sve sto nije zabranjeno
iptables -P OUTPUT ACCEPT

# -----Ciscenje svih pravila iz default filter tablice kod svakog pokretanja skripte
iptables -F
# -----Ciscenje svih pravila iz opcionalnih user-defined chain-ova kod svakog pokretanja skripte
iptables -X

# -----Dozvola PC-u s kojeg se vrsi administracija (na vrhu tablice da sprijeci "samozakljucavanje")
iptables -A INPUT -i $ETH -s 192.168.100.2 -d $IP -j ACCEPT

# -----Zabrana svim paketima koji dolaze na eth0 i imaju source adresu privatne mreze ili mreze posebne namjene
iptables -A INPUT -i $ETH -s 0.0.0.0/8 -j DROP
iptables -A INPUT -i $ETH -s 10.0.0.0/8 -j DROP
iptables -A INPUT -i $ETH -s 108.0.0.0/8 -j DROP
iptables -A INPUT -i $ETH -s 127.0.0.0/8 -j DROP
iptables -A INPUT -i $ETH -s 169.254.0.0/16 -j DROP
iptables -A INPUT -i $ETH -s 172.16.0.0/12 -j DROP
iptables -A INPUT -i $ETH -s 192.0.2.0/24 -j DROP
iptables -A INPUT -i $ETH -s 192.168.0.0/16 -j DROP
iptables -A INPUT -i $ETH -s 204.152.64.0/23 -j DROP

# -----Restrikcije i zabrane nekih tipova ICMP paketa
#
# -----Slijedi opis pojedinih tipova nepotrebnih/nepozeljnih ICMP paketa
#
# -----Ogranicena dozvola ( 1/sec ) za obican ICMP echo-request, sprecava moguci ping floding DoS, a ipak propusta pozeljni tip paketa
iptables -A INPUT -i $ETH -p icmp -s 0/0 -d 0/0 -m icmp --icmp-type 8 -m limit --limit 1/sec -j ACCEPT
#
# -----Svi ICMP echo-request-i preko jednog u sekundi su odbaceni
iptables -A INPUT -i $ETH -p icmp -s 0/0 -d 0/0 -m icmp --icmp-type 8 -j DROP
#
# -----Odbacivanje ICMP timestamp-request-a
iptables -A INPUT -i $ETH -p icmp -s 0/0 -d 0/0 -m icmp --icmp-type 13 -j DROP
#
# -----Odbacivanje ICMP fragmentation-needed zahtjeva
iptables -A INPUT -i $ETH -p icmp -s 0/0 -d 0/0 -m icmp --icmp-type 3/4 -j DROP
#
# -----Odbacivanje ICMP host-precedence-violation tipa
iptables -A INPUT -i $ETH -p icmp -s 0/0 -d 0/0 -m icmp --icmp-type 3/14 -j DROP
#
# -----Odbacivanje ICMP precedence-cutoff tipa
iptables -A INPUT -i $ETH -p icmp -s 0/0 -d 0/0 -m icmp --icmp-type 3/15 -j DROP
#
# -----Odbacivanje ICMP source-quench tipa
iptables -A INPUT -i $ETH -p icmp -s 0/0 -d 0/0 -m icmp --icmp-type 4 -j DROP
#
# -----Odbacivanje ICMP redirect-a
iptables -A INPUT -i $ETH -p icmp -s 0/0 -d 0/0 -m icmp --icmp-type 5 -j DROP
#
# -----Odbacivanje ICMP network-redirect-a
iptables -A INPUT -i $ETH -p icmp -s 0/0 -d 0/0 -m icmp --icmp-type 5/0 -j DROP
#
# -----Odbacivanje ICMP host-redirect-a
iptables -A INPUT -i $ETH -p icmp -s 0/0 -d 0/0 -m icmp --icmp-type 5/1 -j DROP
#
# -----Odbacivanje ICMP TOS-network-redirect-a
iptables -A INPUT -i $ETH -p icmp -s 0/0 -d 0/0 -m icmp --icmp-type 5/2 -j DROP
#
# -----Odbacivanje ICMP TOS-host-redirect-a
iptables -A INPUT -i $ETH -p icmp -s 0/0 -d 0/0 -m icmp --icmp-type 5/3 -j DROP
#
# -----Odbacivanje ICMP router-advertisement-a
iptables -A INPUT -i $ETH -p icmp -s 0/0 -d 0/0 -m icmp --icmp-type 9 -j DROP
#
# -----Odbacivanje ICMP router-solicitation-a
iptables -A INPUT -i $ETH -p icmp -s 0/0 -d 0/0 -m icmp --icmp-type 10 -j DROP
#
# -----Odbacivanje ICMP address-mask-request-a
iptables -A INPUT -i $ETH -p icmp -s 0/0 -d 0/0 -m icmp --icmp-type 17 -j DROP
#
# -----Odbacivanje ICMP address-mask-reply-a
iptables -A INPUT -i $ETH -p icmp -s 0/0 -d 0/0 -m icmp --icmp-type 18 -j DROP
#
# -----Odbacivanje ICMP timestamp-reply-a
iptables -A INPUT -i $ETH -p icmp -s 0/0 -d 0/0 -m icmp --icmp-type 14 -j DROP
#
# -----Dozvola preostalim tipovima ICMP paketa
iptables -A INPUT -i $ETH -p icmp -s 0/0 -d 0/0 -j ACCEPT

# -----Zabrana neregularnih paketa (s nepravilno postavljenim flag-ovima)
#
# -----Slijedi opis pojedinih nepravilnosti
#
# -----Paket bez ijednog postavljenog flag-a (NONE)
iptables -A INPUT -i $ETH -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
#
# -----Paket s istovremeno postavljenim SYN i FIN flag-ovima
iptables -A INPUT -i $ETH -p tcp -m tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
#
# -----Paket s istovremeno postavljenim SYN i RST flag-ovima
iptables -A INPUT -i $ETH -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP
#
# -----Paket s istovremeno postavljenim FIN i RST flag-ovima
iptables -A INPUT -i $ETH -p tcp -m tcp --tcp-flags FIN,RST FIN,RST -j DROP
#
# -----Paket koji ima postavljen samo FIN flag, bez ocekivano pridruzenog ACK flag-a
iptables -A INPUT -i $ETH -p tcp -m tcp --tcp-flags ACK,FIN FIN -j DROP
#
# -----Paket koji ima postavljen samo PSH flag, bez ocekivano pridruzenog ACK flag-a
iptables -A INPUT -i $ETH -p tcp -m tcp --tcp-flags ACK,PSH PSH -j DROP
#
# -----Paket koji ima postavljen samo URG flag, bez ocekivano pridruzenog ACK flag-a
iptables -A INPUT -i $ETH -p tcp -m tcp --tcp-flags ACK,URG URG -j DROP

# -----Stateful firewall pravilo koje prati pripadnost svakog paketa postojecoj konekciji, te ga u protivnom odbija
iptables -A INPUT -i $ETH -s 0/0 -m state --state INVALID -j DROP

# -----Stealth modul cini da se portovi na kojima nema nicega ne javljaju (npr. na sken), odnosno ne vracaju RST (reset)
iptables -A INPUT -i $ETH -p tcp -s 0/0 -m stealth -j DROP
iptables -A INPUT -i $ETH -p udp -s 0/0 -m stealth -j DROP

# -----Dozvole za NTP samo CARNetovim NTP serverima i lokalnoj mrezi ustanove i zabrana svima ostalima
iptables -A INPUT -i $ETH -p udp -s 161.53.2.108/32 -d $IP --destination-port 123 -j ACCEPT
iptables -A INPUT -i $ETH -p udp -s 161.53.40.3/32 -d $IP --destination-port 123 -j ACCEPT
iptables -A INPUT -i $ETH -p udp -s 161.53.160.4/32 -d $IP --destination-port 123 -j ACCEPT
iptables -A INPUT -i $ETH -p udp -s 161.53.30.3/32 -d $IP --destination-port 123 -j ACCEPT
iptables -A INPUT -i $ETH -p udp -s 161.53.30.80/32 -d $IP --destination-port 123 -j ACCEPT
iptables -A INPUT -i $ETH -p udp -s 192.168.100.0/24 -d $IP --destination-port 123 -j ACCEPT
iptables -A INPUT -i $ETH -p udp -s 0/0 -d $IP --destination-port 123 -j DROP

# -----Dozvole CMU i StuDom radius autentikaciju   i zabrana svima ostalima
iptables -A INPUT -i $ETH -p udp -s 161.53.2.202/32 -d $IP --destination-port 1812 -j ACCEPT
iptables -A INPUT -i $ETH -p udp -s 161.53.114.135/32 -d $IP --destination-port 1812 -j ACCEPT
iptables -A INPUT -i $ETH -p udp -s 161.53.114.145/32 -d $IP --destination-port 1812 -j ACCEPT
iptables -A INPUT -i $ETH -p udp -s 161.53.2.202/32 -d $IP --destination-port 1813 -j ACCEPT
iptables -A INPUT -i $ETH -p udp -s 161.53.114.135/32 -d $IP --destination-port 1813 -j ACCEPT
iptables -A INPUT -i $ETH -p udp -s 161.53.114.145/32 -d $IP --destination-port 1813 -j ACCEPT
iptables -A INPUT -i $ETH -p udp -s 0/0 -d $IP --destination-port 1812 -j DROP
iptables -A INPUT -i $ETH -p udp -s 0/0 -d $IP --destination-port 1813 -j DROP

# -----Dozvola za spajanje na port 1050 samo za bjesomar.srce.hr koji salje upite za sys-mon sustav
iptables -A INPUT -i $ETH -p tcp -s 161.53.2.70/32 -d $IP --destination-port 1050 -j ACCEPT
iptables -A INPUT -i $ETH -p tcp -s 0/0 -d $IP --destination-port 1050 -j DROP

# -----Linije za privremene zabrane s obaveznim limitom upisivanja u log (otkomentirati i prilagoditi source IP potrebi)
#iptables -A INPUT -i $ETH -s 10.10.10.0/24 -d $IP -m limit --limit 1/sec -j LOG --log-prefix "proizvoljni_tekst"
#iptables -A INPUT -i $ETH -s 10.10.10.0/24 -d $IP -j DROP

# -----Ovo obavezno mora biti na kraju ako se koristi stateful firewalling koji prati pripadnost paketa konekcijama
#
# -----Dozvola svim paketima koji uspostavljaju novu konekciju ili pripadaju uspostavljenoj konekciji
#
iptables -A INPUT -i $ETH -s 0/0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT





[Lista]
Ovu uslugu CARNeta realizira Sveučilišni računski centar Sveučilišta u Zagrebu
  Copyright ©2005. CARNet. Sva prava zadržana. Impressum.
Mail to
sys-portal@CARNet.hr