Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Routare Linux + firewall

Informatica


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
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), netro 24124l113y m (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 ).

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 https://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.

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.

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]

2.2 Comenzile

Comanda

Exemplu

Explicatie

-A, --append

iptables -A INPUT ...

Aceasta comanda este folosita pentru adougarea regulii la sfarsitul lantului. Regula, cu alte cuvinte, va fi pusa mereu la sfarsitul lantului, si va fi cercetata ultima.

-D, --delete

iptables -D INPUT --dport 80 -j DROP
iptables -D INPUT 1

Aceasta comanda sterge o regula dintr-un lant. Aceasta poate fi facuta in 2 metode: ori prin a pune un -D in loc de -A ( in regula scrisa ), ori prin numarul acesteia -D lant 1 ( sterge regula 1 [aceasta fiind prima de sus in jos]).

-R, --replace

iptables -R INPUT 1 -s 192.168.0.1 -j DROP

Aceasta comanda inlocuieste vechea regula de la acea linie.

-I, --insert

iptables -I INPUT 1 --dport 80 -j ACCEPT

Insereaza o regula in lant.

-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-chain

iptables -N permis

Aceasta comanda ii spune kernel-ului sa creeze un nou lant, in tabelul specificat, cu numele specificat.

-X, --delete-chain

iptables -X permis

Aceasta regula sterge un lant. Este necesar ca lantul sa fie gol.

-P, --policy

iptables -P INPUT DROP

Aceasta comanda ii spune kernel-ului sa seteze o tinta default. Toate pachetele carora nu se potriveste nici o regula vor fi trimise catre aceasta tinta default.

-E, --rename-chain

iptables -E permis nepermis

Comanda -E ii spune kernel-ului sa redenumeasca regula permis in nepermis.

Comanda trebuie sa existe neaparat. Se poate omite numai aunci cand se foloseste optiunea -h pentru a afisa ajutorul.

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 192.168.1.1

Sursa pachetului.

-d, --destination

iptables -A INPUT -d 192.168.1.1

Destinatia pachetului.

-i, --in-interface

iptables -A INPUT -d 192.168.1.1

Interfata pe care intra pachetele.

-o, --out-interface

iptables -A FORWARD -o eth0

Interfata pe care ies pachetele.

-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-counters

Seteaza counter-ele la un numar de pachete si un numar 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

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

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

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).

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.


Document Info


Accesari: 1309
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )