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.
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
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 .
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 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.
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_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).
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_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_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_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_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 -
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:
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
Potriviri Generale
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
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:
Daca un pachet, destinat pentu firewall (localhost), ajunge la acesta, trece prin urmatoarele etape:
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.
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.
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