Anda di halaman 1dari 11

Routare Linux + firewall

1. Introducere
La cererea voastra ne-am mobilizat, si am facut o versiune alfa a acestui tutorial. Daca aveti vreo
obiectie/imbunatatire/intrebare va rugam sa contactati autorul.

1.1 Ce este routarea


Termenul de routare este folosit pentru a desemna trecerea pachetelor dintr-o retea in alta. Ok, pentru a
intelege mai bine, trebuie sa stiti ca, atunci cand te conectezi la internet primesti un IP, si iti este setat
automat un gateway. Acel gateway, este un router, un computer cu un Linux, care are grija sa routeze
( sa mute ) pachetele tale spre internet. Astfel aveti intrenet. In mod normal acest proces este realizat
prin intermediul unui dispozitiv numit router hardware ( sau doar router ), dar si orice computer cu un
Linux instalat si cu minim 2 placi de retea poate fi considerat un router. O definitie a termenului de
routare poate fi urmatoarea:
Routarea este procesul prin care, un host cu multiple interfete de retea, decide unde sa trimita
datagramele IP pe care le primeste.

1.2 Unelte necesare


Pentru kernel-urile 2.2.X este indeajuns sa aveti comanda "route", dar pentru kernel-urile 2.4.X este indicat sa instalati
pachetul iproute2 (ftp://ftp.inr.ac.ru/ip-routing/). Daca doriti sa faceti routare avansata, sau limitare de banda, atunci trebuie
sa activati in kerne urmatoarele optiuni:

CONFIG_PACKET
CONFIG_IP_MULTICAST
CONFIG_IP_ADVANCED_ROUTER
CONFIG_IP_MULTIPLE_TABLES
CONFIG_IP_ROUTE_FWMARK
CONFIG_IP_ROUTE_NAT
CONFIG_IP_ROUTE_MULTIPATH
CONFIG_IP_ROUTE_TOS
CONFIG_IP_ROUTE_VERBOSE
CONFIG_IP_ROUTE_LARGE_TABLES
CONFIG_NET_IPIP
CONFIG_NET_IPGRE
CONFIG_NET_IPGRE_BROADCAST
CONFIG_IP_MROUTE
CONFIG_IP_PIMSM_V1
CONFIG_IP_PIMSM_V2
CONFIG_SYN_COOKIES

Pentru fiecare optiune de mai sus exista ajutor detaliat in kernel. De asemenea...pentru a putea face limitare de banda, este
necesar sa aveti si urmatoarele optiuni in kernel:

CONFIG_NET_SCHED
CONFIG_NET_SCH_CBQ
CONFIG_NET_SCH_CSZ
CONFIG_NET_SCH_PRIO
CONFIG_NET_SCH_RED
CONFIG_NET_SCH_SFQ
CONFIG_NET_SCH_TEQL
CONFIG_NET_SCH_TBF

1
Routare Linux + firewall
CONFIG_NET_SCH_GRED
CONFIG_NET_SCH_DSMARK
CONFIG_NET_QOS
CONFIG_NET_ESTIMATOR
CONFIG_NET_CLS
CONFIG_NET_CLS_TCINDEX
CONFIG_NET_CLS_ROUTE4
CONFIG_NET_CLS_FW
CONFIG_NET_CLS_U32
CONFIG_NET_CLS_RSVP
CONFIG_NET_CLS_RSVP6
CONFIG_NET_CLS_POLICE
CONFIG_SHAPER

Optiunile de mai sus de gasesc in menu-urile:

 Networking Options
 Network Device Support

2. Cum se face
Pentru manipularea tabelelor cu route se pot folosi 2 comenzi: route (se gaseste in pachetul net-tools) si ip (sa gaseste in
pachetul iproute2). Daca se dorenste numai manipularea routelor, este recomandata folosirea comenzii route. Mai exact, sa
presupunem ca doriti ca toate pachetele care au destinatia 194.148.0.0/24 sa fie trimise pe interfata eth1 este necesar sa scrieti
comanda urmatoare:
route add -net 194.148.0.0/24 dev eth1 . Pentru a sterge aceasta ruta este necesar sa tastati urmatoarea comanda: route del -net
194.148.0.0/24 dev eth1 .
Dupa cum vedeti, singura schimbare in comanda este optiunea add care devine del. Daca aceasta este singura routa din tabela
de route ( care se vizualizeaza cu ajutorul comenzii: route -n ), atunci se poate tasta comanda urmatoare pentru a o sterge:
route del -net 194.148.0.0/24 .

Prototipul comenzii route este urmatorul:

route [-v] [-A family] add [-net|-host] target [netmask Nm] [gw Gw] [metric N] [mss M] [window W] [irtt I] [reject] [mod]
[dyn] [reinstate] [[dev] If]

Optiunea -A se foloseste pentru a desemna familia de adrese. Aceasta poate fi inet, inet6 (IPv6), ax25 (AMPR AX.25),
netrom (AMPR NET/ROM), ipx (Novell IPX), ddp (Appletalk DDP), x25 (CCITT X.25).

Optiunea -net desemneaza tinta(target) ca fiind o retea, iar -host desemneaza tinta(target) ca fiind un host.

Optiunea natmask este folosita cand se adauga o retea la tabela de routare.

Optiunea gw ii spune kernel-ului sa routeze pachetele printr-un gateway. Este important ca gateway-ul sa fie accesibil. In caz
contrar, trebuie setata o ruta statica spre gateway inainte.

Optiunea dev forteaza ruta sa fie asociata cu interfata specificata. In cazul in care aceasta optiune nu este folosita, kernel-ul
va descoperi singur interfata ce trebuie folosita.

Restul specificatiilor sunt mai putin importante si se pot afla folosind pagina de manual( man route ).

2
Routare Linux + firewall

1. Pregatiri
1.1 De unde se poate procura IPtables
In principal, este nevoie de 2 lucruri: pachetul iptables, pe care il puteti obtine de la
http://netfilter.samba.org/, sau il puteti folosi pe cel gata compilat cu care vine distributia
dumneavoastra. Cel de-al II-lea lucru este suportul din kernel, oferit de toate kernel-urile 2.4 .
Configurarea kernel-ului.

1.2 Configurarea kernel-ului


Pentru a putea folosi comanda iptables, este necesar sa compilati kernel-ul cu urmatoarele optiuni:

CONFIG_PACKET - Aceasta optiune le permite aplicatiilor, si programelor sa lucreze direct cu anumite


device-uri de retea. Un exemplu ar fi: tcpdump sau snort.

CONFIG_NETFILTER - Aceasta optiune este necesara daca aveti de gand sa folositi computer-ul ca un
firewall sau gateway spre internet. Cu alte cuvinte, aceasta optiune este necesara pentru a functiona ceva
din tutorial-ul acesta.

CONFIG_IP_NF_CONNTRACK - Acest modul este folosit pentru a face urmarirea conexiunii.


Urmarirea conexiunii este folosita, printre altele, de NAT si Mascaradare. De exemplu, daca vrei sa
folositi computer-ul ca firewall pentru o retea, categoric aveti nevoie de acest modul.

CONFIG_IP_NF_FTP - Acest modul este necesar pentru urmarire conexiunii pe conexiuni FTP.
Deoarece, pe conexiunile FTP este destul de greu sa faci urmarire de conexiune, in mod normal
"conntrack" are nevoie de un ajutator, iar acasta optiune il compileaza. Deci, daca nu adaugati aceasta
optiune, nu veti putea folosi FTP-ul printr-un gateway sau firewall.

CONFIG_IP_NF_IPTABLES - Aceasta optiune este necesara pentru a putea face orice tip de filtrare,
mascaradare sau NAT-are. Fara aceasta, nu veti putea face nimic cu iptables.

CONFIG_IP_NF_MATCH_LIMIT - Acest modul nu este exact necesar, dar este bun in cazul in care
vrei sa limitezi numarul de pachete pe minut. (ex: "-m limit --limit 3/minute" limiteaza nr de pachete pe
minut la 3).

CONFIG_IP_NF_MATCH_MAC - Acest modul ne permite potrivirea pachetelor dupa adresa MAC. Cu


ajutorul ei, se poate bloca access-ul unui computer dupa adresa MAC. Aceasta este o optiune foarte
buna, doarece adresele MAC nu se schimba.

CONFIG_IP_NF_MATCH_MARK - Acest modul ne permite marcarea pachetelor.

CONFIG_IP_NF_MATCH_MULTIPORT - Acest modul ne permite potrivrea pachetelor cu o raza de


porturi pentru sursa si destinatie. In mod normal, asa ceva nu este posibil, dar cu acest modul, se poate.

3
Routare Linux + firewall
CONFIG_IP_NF_MATCH_TOS - Cu aceasta potrivire putem potrivi pachetele dupa campul lor TOS.
TOS vine de la TypeOfService.

CONFIG_IP_NF_MATCH_TCPMSS - Aceasta potrivire ne permite sa potrivim pachetele TCP SYN pe


baza campului lor MSS

CONFIG_IP_NF_MATCH_STATE - Aceasta este una dintre cele mai noi lucruri in comparatie cu
IPchains. Cu acest modul, putem face potrivire de stare pe pachete.

CONFIG_IP_NF_MATCH_UNCLEAN - Acest modul ne permite sa potrivim pachetele de tip


IP/TCP/UDP si ICMP care arata ciudat, sau sunt invalide. De exemplu, putem sa blocam aceste pachete.

CONFIG_IP_NF_MATCH_OWNER - Aceasta optiune ne permite sa facem potrivire dupa proprietar


(owner). De exemplu, putem permite numai utilizatorului root sa aibe access la Internet.

CONFIG_IP_NF_FILTER - Acest modul va aduga bazele tabelului FILTER. Aici gasititi 3 lanturi:
INPUT, OUTPUT si FORWARD. Acest modul e necesar daca doriti sa filtrati pachetele care vin sau ies
din computer.

CONFIG_IP_NF_TARGET_REJECT - Aceasta tinta ne permite sa specificam, ca, un mesaj ICMP


trebuie trimis sursei.

CONFIG_IP_NF_TARGET_MIRROR - Acesta permite pachetelor sa fie retrimise sender-ului. Astfel,


daca setati ca tinta MIRROR pe un port http, cel care incearca sa se conecteze la http-ul vostru isi vede
propria pagina, deoarece pachetele ii sunt retrimise ca si cum ar fi incercat sa se conecteze direct la el.

CONFIG_IP_NF_NAT - Acest modul permite translatarea adresei de retea ( sau NAT ). Cu acest modul
putem sa facem inaintare de porturi ( port forwarding ), sau mascaradare.

CONFIG_IP_NF_TARGET_MASQUERADE - Acest modul adauga tina MASQUERADE.

CONFIG_IP_NF_TARGET_REDIRECT - In loc sa lasam un pachet sa treaca prin computer-ul nostru,


il remap-am, astfel incat sa vina in calculatorul nostru.

CONFIG_IP_NF_TARGET_LOG - Acest adauga tinda LOC la iptables. Putem folosi acest modul
pentru a loga anumite pachete prin syslog, si a le observa.

CONFIG_IP_NF_TARGET_TCPMSS -

CONFIG_IP_NF_COMPAT_IPCHAINS - Adauga un mod de compatibilitate cu vechiul IPchains.

CONFIG_IP_NF_COMPAT_IPFWADM - Adauga un mod de compatibilitate cu vechiu ipfwadm.

Acestea ar fi tot ceea de ce aveti nevoie, dar eu recomand compilarea tuturor modulelor din menu-ul
Netfilter Configuration.

4
Routare Linux + firewall

1. Bazele
In acest capitol se va discuta amanuntit cum sa faceti propriile reguli. Fiecare regula pe care o inserati
intr-un lant poate fi considerata o regula. Fiecare regula este o linie la care kernel-ul se uita pentru a sti
ce va face cu pachetul. Daca toate criteriile sau potrivirile sunt intalnite, se executa o tinta. In mod
normal am scrie o regula astfel:

iptables [table] <command> <match> <target/jump>

Nimic nu spune ca trebuie sa pui tinta ultima, dar ofera o mai buna citire. In schimb comanda trebuie sa
fie scrisa prima, sau imediat dupa specificarea tabel-ului.

2.1 Tabelele
Optiunea -t specifica ce tabel sa fie folosit. Default este "filter". Urmatoarele optiuni se pot folosi cu
comanda -t.

Tabel Explicatie
nat Tabelul nat este folosit pentru Translatarea Adresei de Retea. Nu incercati sa faceti nici un fel de
filtrare in acest tabel. Aici avem 3 lanturi: PREROUTING [folosit pentru a altera pachetele chiar
cand ajung la firewall], OUTPUT [folosit pentru a altera pachetele generate local] si
POSTROUTING [folosit pentru a altera pachetele chiar inainte sa iasa].
mangle Cu ajutorul acestui tabel se pot shimba diferite pachete, si felul in care arata header-ele printre
altele. Exemple ar fi schimbarea TTL-ului, TOS-ului sau MARK-ului. Contine 2 lanturi:
PREROUTING [folosit pentru a altera pachetele care ating firewall-ul, inainte de a ajunge la
decizia de routare] si OUTPUT [folosit pentru alterarea pachetelor generate local inainte de a
ajunge la decizia de routare].
filter Tabelul fiter trebuie folosit pentru a filtra pachetele in general. De exemplu, putem sa DROP,
LOG, ACCEPT sau REJECT. Aici exista 3 tabele: FORWARD [folosit pentru toate pachetele
generate nelocal], INPUT [pentru toate pachetele care sunt destinate pentru localhost] si
OUTPUT [folosit pentru toate pachetele generate local]

5
Routare Linux + firewall

2.2 Comenzile
Comanda Exemplu Explicatie
-A, iptables -A Aceasta comanda este folosita pentru adougarea regulii la sfarsitul
--append INPUT ... lantului. Regula, cu alte cuvinte, va fi pusa mereu la sfarsitul lantului,
si va fi cercetata ultima.
-D, --delete iptables -D INPUT Aceasta comanda sterge o regula dintr-un lant. Aceasta poate fi facuta
--dport 80 -j DROP in 2 metode: ori prin a pune un -D in loc de -A ( in regula scrisa ), ori
iptables -D INPUT 1 prin numarul acesteia -D lant 1 ( sterge regula 1 [aceasta fiind prima
de sus in jos]).
-R, iptables -R INPUT 1 Aceasta comanda inlocuieste vechea regula de la acea linie.
--replace -s 192.168.0.1 -j
DROP
-I, --insert iptables -I INPUT 1 Insereaza o regula in lant.
--dport 80 -j
ACCEPT
-L, --list iptables -L INPUT Listeaza regulile din lant.
-F, --flush iptables -F INPUT Aceasta comanda sterge toate regulile din lant. Aceasta se specifica
fara alte optiuni
-Z, --zero iptables -Z INPUT Reseteaza toate counte-ele din lantul specificat.
-N, --new- iptables -N permis Aceasta comanda ii spune kernel-ului sa creeze un nou lant, in tabelul
chain specificat, cu numele specificat.
-X, --delete- iptables -X permis Aceasta regula sterge un lant. Este necesar ca lantul sa fie gol.
chain
-P, --policy iptables -P INPUT Aceasta comanda ii spune kernel-ului sa seteze o tinta default. Toate
DROP pachetele carora nu se potriveste nici o regula vor fi trimise catre
aceasta tinta default.
-E, iptables -E permis Comanda -E ii spune kernel-ului sa redenumeasca regula permis in
--rename- nepermis nepermis.
chain
Comanda trebuie sa existe neaparat. Se poate omite numai aunci cand se foloseste optiunea -h pentru a
afisa ajutorul.

6
Routare Linux + firewall

2.3 Potrivirile ( matches )


In aceasta sectiune se va vorbi mai mult despre portiviri ( matches ). Potrivirile se impart in: potriviri
generale ( Generic matches ), dupa care mai exista potriviri TCP, UDP si ICMP, potriviri ce pot fi
folosite numai pe acele protocoale.

Potriviri Generale

Potrivire Exemplu Explicatie


-p, --protocol iptables -A INPUT -p tcp Protocoalele pachetelor. Acestea pot fi: tcp, udp si icmp
-s, --source iptables -A INPUT -s Sursa pachetului.
192.168.1.1
-d, --destination iptables -A INPUT -d Destinatia pachetului.
192.168.1.1
-i, --in-interface iptables -A INPUT -d Interfata pe care intra pachetele.
192.168.1.1
-o, --out- iptables -A FORWARD -o Interfata pe care ies pachetele.
interface eth0
-f, --fragment iptables -A INPUT -f Spune ca regula se refera la cel de-al II-lea sau restul
pachetelor.
-c, --set-counters iptables -A INPUT --set- Seteaza counter-ele la un numar de pachete si un numar
counters de biti.

Potriviri TCP

Potrivire Exemplu
-sport, --source-port iptables -A INPUT -p tcp --sport 22
-dport, --destination-port iptables -A INPUT -p tcp --dport 22
--tcp-flags iptables -p tcp --tcp-flags SYN,ACK,FIN SYN
--syn iptables -p tcp --syn
--tcp-option iptables -p tcp --tcp-option 16

Portiviri UDP

Potrivire Exemplu
--sport, --source-port iptables -A INPUT -p udp --sport 53
--dport, --destination-port iptables -A INPUT -p udp --dport 53

Potriviri ICMP
7
Routare Linux + firewall
Potrivire Exemplu
--icmp-type iptables -A INPUT -p icmp --icmp-type 8
 Potrivirile explicite sunt potrivirile despre care vorbeam la capitolul Configurarea kernel-ului.
Acestea se pot utiliza prin folosirea optiunii -m. Mai jos avem o lista cu potrivirile posibile.

Potriviri MAC

Potrivire Exemplu
--mac-source iptables -A INPUT --mac-source 00:00:00:00:00:01

Potriviri Limit

Potrivire Exemplu
--limit iptables -A INPUT -m limit --limit 3/hour
--limit-burst iptables -A INPUT -m limit --limit-burst 5

Potriviri Multiport

Potrivire Exemplu
--source-port iptables -A INPUT -p tcp -m multiport --source-port 22,53,80,110
--destination-port iptables -A INPUT -p tcp -m multiport --destination-port 22,53,80,110
--port iptables -A INPUT -p tcp -m multiport --port 22,53,80,110

Potriviri Mark

Potrivire Exemplu
--mark iptables -t mangle -A INPUT -m mark --mark 1

Potriviri Owner

Potrivire Exemplu
--uid-owner iptables -A OUTPUT -m owner --uid-owner 500
--gid-owner iptables -A OUTPUT -m owner --gid-owner 0
--pid-owner iptables -A OUTPUT -m owner --pid-owner 78
--sid-owner iptables -A OUTPUT -m owner --sid-owner 100

Potriviri de stare

Potrivire Exemplu
--state iptables -A INPUT -m state --state RELATED,ESTABLISHED

Potriviri Unclean

Potrivire Exemplu

8
Routare Linux + firewall
Potriviri TOS

Potrivire Exemplu
--tos iptables -A INPUT -p tcp -m tos --tos 0x16

Potriviri TTL

Potrivire Exemplu
--ttl iptables -A OUTPUT -m ttl --ttl 60

2.4 Tintele
ACCPET
DROP
QUEUE
RETURN
LOG
MARK
REJECT
TOS
MIRROR
SNAT
DNAT
MASQUERADE
REDIRECT
TTL
ULOG

9
Routare Linux + firewall

3. Traversarea tabelelor si a lanturilor


3.1 General

Cand un pachet intra in firewall, ajunge la hardware si intra pe driver-ul device-ului din kernel. Dupa
care pachetul trece printr-o serie de pasi din kernel pana ce este trimis catre aplicatia corecta ( local ),
sau este forward-at catre un alt host. Daca un pachet, destinat pentru o alta masina, ajunge la firewall,
trece prin urmatoarele etape:

Pas Tabel Lant Comentariu


1 Pe fir (ex: Internet).
2 Intra pe interfata (ex: eth0, ppp0).
3 mangle PREROUTING Aici se schimba valoarea din campul TOS si multe altele.
4 nat PREROUTING Acest lant este folosit pentru translatarea adresei destinatie de retea
(DNAT).
5 Decizia de routare.
6 filter FORWARD Daca doriti sa faceti filtrare, aici este cazul.
7 nat POSTROUTING Acest lant se foloseste pentru translatarea adresei sursa.
8 Iese pe interfata (ex: eth1, ppp1)
9 Pe fir din nou (ex: Internet)

Daca un pachet, destinat pentu firewall (localhost), ajunge la acesta, trece prin urmatoarele etape:

Pas Tabel Lant Comentariu


1 Pe fir (ex: Internet).
2 Intra pe interfata (ex: eth0, ppp0).
3 mangle PREROUTING Aici se schimba valoarea din campul TOS si multe altele.
4 nat PREROUTING Acest lant este folosit pentru translatarea adresei destinatie de retea
(DNAT).
5 Decizia de routare.
6 filter INPUT Aici se va face filtrarea pachetelor ce vin. Toate pachetele (destinate pentru
firewall) ce vin, trec prin acest lant indiferent de interfata de pe care vin.
7 Proces local/Aplicatie locala (ex: program client/server).

Pachetele ce au ca sursa firewalul trec prin urmatoarele etape:

Pas Tabel Lant Comentariu


1 Proces local/Aplicatie locala (ex: progral client/server).
2 mangle OUTPUT Aici se face schimbarea valorii TOS.
3 natfilter OUTPUT Aici se face filtrarea pachetelor.
4 Decizia de routare.
5 nat POSTROUTING Aici se face translatarea adresei sursa de retea (SNAT).
6 Iese pe o interfata (ex: eth0, ppp0).
7 Pe fir (ex: Internet).

10
Routare Linux + firewall
3.2 Tabelul "Mangle"
In acest tabel se pot schimba valorile TOS ( Type Of Service ), si multe altele. Nu faceti nici un fel de fitrare aici, si nici
SNAT, DNAT sau mascaradare. Singurele tinte aici sunt:

TOS
TTL
MARK

Tinta TOS este folosita pentru a seta/schimba valoarea TOS. Acesta poate fi folosit pentru a seta regulile unei retele in
functie de cum trebuie un pachet sa fie routat samd. Aceasta valoare nu se foloseste pe Internet, deci, nu schimbati aceasta
valoare pentru pachetele ce pleaca spre Internet, decat daca faceti routare cu iproute2.

Tinta TTL este folosita pentru a schimba valoarea TTL-ului ( Time To Live ). Putem spune pachetelor sa aibe un TTL
specific.

Tinta MARK este folosita pentru a seta valori speciale in campul MARK. Aceste insemnari ar putea fi recunoscute de catre
programele lui iproute2 pentru a face diferite routari pe baza valorii mark. Putem face limitare de banda si CBQ cu aceasta
tinta.

3.3 Tabelul "NAT"


Acest tabel este folosit numai pentru a face translatarea adresei de retea. Nu se va face nici un fel de filtrare. Numai primul
pachet (dintr-o succesiune) va ajunge la acest lant, restul li se vor lua aceleasi masuri ca si primul. Tintele acestui lant sunt:

DNAT
SNAT
MASQUERADE

DNAT-ul este folosit in cazuri in care, avem un singur IP, si vrem ca orice conexiune pe portul 80 de pe acel IP, sa fie
redirectionata la un computer din reteaua locala.

SNAT-ul este folosit pentru a ascunde reteaua locala. SNAT-ul consuma mai putin procesor, dar este necesar sa ai o adresa
IP neroutabila fixa.

Tinta MASQUERADE, este la fel ca si SNAT-ul, numai ca nu este necesar sa stii adresa IP neroutabila. Consuma mai mult
procesor, pentru ca, la fiecare pachet redirectioneaza adresa IP neroutabila.

3.4 Tabelul "FILTER"


Tabelul filter, este folosit desigur pentru filtrarea de pachete. Are mai multe tine, dar cele mai importante sunt:

ACCEPT
REJECT
DROP

Tinta ACCEPT ii spune kernel-ului sa accepte toate pachetele care intrunesc calitatile.

Tinta REJECT ii spune kernel-ului sa nu accepte nici un pachet care intruneste calitatile, si sa informeze sursa.

Tinta DROP ii spune kernel-ului sa nu accepte nici un pachet care intruneste calitatile, fara a mai informa sursa.

11

Anda mungkin juga menyukai