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
|