un firewall in cea mai simpla forma:
# 1 politici implicite
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
# 2 lant definit de utilizator pentru pachetele tcp acceptate
iptables -N okay
iptables -A okay -p TCP --syn -j ACCEPT
iptables -A okay -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A okay -p TCP -j DROP
# 3 reguli pentur lantul de intrare
iptables -A INPUT -p ALL -i eth1 -s 10.0.0.0/8 -j ACCEPT
iptables -A INPUT -p ALL -i lo -s 127.0.0.1 -j ACCEPT
iptables -A INPUT -p ALL -i lo -s 10.0.0.1 -j ACCEPT
iptables -A INPUT -p ALL -i lo -s 123.45.67.89 -j ACCEPT
iptables -A INPUT -p ALL -i eth1 -d 10.0.0.255 -j ACCEPT
# reguli pentru pachetele provenite din internet
# pachete pentru conexiunile stabilite
iptables -A INPUT -p ALL -d 123.45.67.89 -m state --state ESTABLISHED,RELATED -j ACCEPT
# reguli TCP
iptables -A INPUT -p TCP -i eth0 -s 0/0 --destination-port 21 -j okay
iptables -A INPUT -p TCP -i eth0 -s 0/0 --destination-port 22 -j okay
iptables -A INPUT -p TCP -i eth0 -s 0/0 --destination-port 80 -j okay
iptables -A INPUT -p TCP -i eth0 -s 0/0 --destination-port 113 -j okay
# reguli UDP
iptables -A INPUT -p UDP -i eth0 -s 0/0 --destination-port 53 -j ACCEPT
iptables -A INPUT -p UDP -i eth0 -s 0/0 --destination-port 2074 -j ACCEPT
iptables -A INPUT -p UDP -i eth0 -s 0/0 --destination-port 4000 -j ACCEPT
# reguli icmp
iptables -A INPUT -p ICMP -i eth0 -s 0/0 --icmp-type 8 -j ACCEPT
iptables -A INPUT -p ICMP -i eth0 -s 0/0 --icmp-type 11 -j ACCEPT
# 4 reguli pentru lantul de forward
# accepta pachete de forwardat
iptables -A FORWARD -i eth1 -j ACCEPT
iptables -A FORWARD -m -state --state ESTABLISHED,RELATED -j ACCEPT
# 5 reguli pentru lantul de iesire
# permite iesirea doar pentru pachetele din reteaua locala (pentru prevenire spoofing)
iptables -A OUTPUT -p ALL -s 127.0.0.1 -j ACCEPT
iptables -A OUTPUT -p ALL -s 10.0.0.1 -j ACCEPT
iptables -A OUTPUT -p ALL -s 123.45.67.89 -j ACCEPT
# 6 reguli pentru lantul de postroutare
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 123.45.67.89
# 7 reguli pentru lantul de preroutare
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8000
iptables -t nat -A PREROUTING -p tcp -d 123.45.67.89 --dport 25 -j DNAT --to-destination 10.0.0.2
# interfata esterioara este eth0 123.45.67.89
# interfata interna este eth1 10.0.0.1
# statiile lan din retea au adresele intre 10.0.0.2 la 10.0.0.254
si acum explicatiile ar fi de forma:
Sectiunea 1 specifica politica implicita pentru lanturile prestabilite: orice pachet pentru care nu exista o regula definita in mod explicit va fi refuzat prin mecanismul DROP. Pentru ca un pachet sa trebuiasca sa treaca este necesar sa corespunda unei reguli de ACCPT-are.
Sectiunea 2 creeaza un lant definit de utilizator, numit okay, care va fi folosit pentru a realiza unele validari asupra pachetelor care solicita cerereri de conexiune si care se doresc acceptate. Astfel se permite trecerea pachetelor SYN (care solicita cereri de conexiune noua), a celor asociate cu o conexiune deja initiata (ESTABLISHED) si a celor care initiaza o conexiune legata de una aflata in desfasurare (RELATED). Ultima linie indica ca oricare pachet care nu indeplineste una din conditiile de mai sus va fi aruncata (DROP).
Sectiunea 3 stabileste regulile corespunzatoare lantului de intrare in firewall (input).
Aceasta sectiune este impartita in:
Pachetele cu origine in LAN. Prima linie precizeaza firewall-lului sa accepte pachetele destinate oricaror protocoale care isi au originea in LAN (10.0.0.0/8 in acest caz). Urmatoarele trei linii permit trecerea pachetelor care provin de la adresele valide ale firewall-lului, respectiv dispozitivele: lo, eth0, eth1. Ultima linie accepta pachetele difuzate in LAN.
Pachetele cu iriginea in internet (conexiuni deja realizate). Se stabileste ACCEPT-area pachetelor care sunt asociate unor conexiuni tip ESTABLISHER sau RELATED si care sunt solicitate la adresa IP externa a firewall-lului.
Reguli pentru TCP (conexiuninoi). In aceasta sectiune se dechid porturile pentru serviciile pe care le oferiti fiecarui utilizator din internet. FTP (port 21), Ssh (port 22), WEB (port 80) si IDENTD (port 113), acesta din urma fiind folosit pentru unele protocoaleprecum IRC. Pentru fiecare din acestea se face un salt la lantul okay, pe care l-am definit mai sus, pentru a verifica mai in profunzime daca pachetele s-au format corespunzator.
Reguli pentru UDP (conexiuni noi). Se definesc reguli de acceptare a pachetelor pentru serviciile UDP. De exemplu se accepta conexiuni pe portul 53 in cazul in care calculatorul este configurat ca si server DNS. Portul 2074 este necesar pentru unele aplicatii multimedia, iar portul 4000 este folosit de protocolul ICQ.
Reguli pentru ICMP. Mesajele ICMP sunt destinate pentru semnalarea unor circumstante in care se gaseste serverul. Am ales sa accepte doar pachetele de tipul 8 (necesare daca se doreste ca sistemul sa raspunda la comanda ping) si de tipul 11, folosit la comanda traceroute.
Sectiunea 4 defineste reguli pentru lantul FORWARD. Deoarece calculatorul indeplineste si functia de router, aici se definesc reguli cu privire la pachetele care vor trece sau nu vor trece prin acesta. Prima linie permite trecerea tuturor pachetelor cu originea in LAN, iar cea de-a 2 permite trecerea pachetelor cu originea in internet, dar asociate cu o conexiune stabilita.
Sectiunea 5 defineste regulile pentru lantul OUTPUT. Aceste reguli au rolul de a preveni un atac de tip spoofing (falsificarea adresei de ip), initiat de cineva de la sistemul firewall. Fiecare pachet care iese din firewall trebuie sa aiba drept adresa sursa una din interfetele: lo, eth0 sau eth1.
Sectiunea 6 defineste reguli pentru lantul de POSTROUTING din tabela nat. se aplica acelor pachete care au fost acceptate, dar care necesita unele operatii suplimentare. Aici se produce operatia de translatare a adreselor (nat): adresele tuturor pachetelor destinate internetului vor fi convertite in adresa placii externe de retea (eth0). Am folosit SNAT deoarece am o adresa publica alocata static. De asemenea, pentru a utiliza NAT este necesar sa activati IP forwarding-ul din kernel. Aceasta se poate realiza modificand valoarea net.ipv4.ip_forwarding in 1 in fisierul /etc/sysctl.conf, folosint orice editor de text.
Daca sunteti multumit de regulile existente la un moment dat le puteti salva folosind comanda iptables save > /etc/sysconfig/iptable.
Alte utilizari pentru iptables
Pe langa utilitatea sa de firewall, cu filtrarea pachetelor iptables poate avea si alte utilizari in cadrul unui sistem cu destinatie router/gateway. Astfel el poate fi folosit pentru:
Crearea unui intermediar transparent. Folosind REDIRECT puteti redirectiona traficul destinat unui anumit port al sistemului catre un alt port pe care “asculta” un serviciu proxy, si toate acestea fara ca utilizatorul sa remarce ceva. Comanda de mai jos redirecteaza traficul destinat serviciului WEB (port 80) catre portul 8000: iptables -t nat -A PREROUTING -p tcp - - dport 80 - - j REDIRECT - - to-ports 8000.
Realizarea operatiei de port forwarding. Aceasta este utila cand avem o singura adresa IP publica si aveti serverele pe care vreti sa le vedeti din exterior pe mai multe calculatoare, aflate in spatele firewall-lului. Exemplul de mai jos directioneaza toate cererile destinate portului 80 de pe sistemul firewall catre portul 80 al calculatorului cu IP 10.0.0.2 ,aflat in LAN: iptables - - t nat - - A PREROUTING - - p tcp - - d 123.45.67.89 - - dport 80 - - j DNAT - - to-destination 10.0.0.2.
Utilizarea consemnarii in jurnal. Folosind optiunea LOG puteti pastra in jurnalele sistemului informatii despre pachetele care indeplinesc anumite criterii (in general cele suspecte). Exemplu: iptables - - A FORWARD - - p tcp - - j LOG - - log-level info. Puteti folosi oricare din urmatoarele nivele de jurnal disponibile: emerg, alert, crit, err, warning, notice, info, debug.
23 septembrie 2007
linux firewall (1)
Abonați-vă la:
Postare comentarii (Atom)
Un comentariu:
e
se poate si mai bine, dar fiind la inceput...se accepta.
Trimiteți un comentariu