Documente Academic
Documente Profesional
Documente Cultură
Capitolul 1: TCP/IP
Poate o sa spuneti, ca la ce va foloseste sa stiti toate aceste detalii,daca acum sistemele de
operare vin cu un installer prietenos,sau poate va ganditi ca daca ati instalat Linux, sunteti
protejati...,etc. Ei bine,nu este chiar asa..dar o sa ajungem si la subiectul acesta.
Am ales sa scriu putin despre protocoalele de retea,deoarece vom avea nevoie de cateva
notiuni pentru a configura un firewall, dar si pentru a intelege mai bine ce se intampla dincolo de ''
click '' . Pentru a putea comunica ,calculatoarele folosesc niste reguli de comunicatieProtocoale. Comunicatia intre calculatoare este similara cu cea umana, trebuie sa avem un sender
si un receiver ,sau mai bine spus sursa si destinatie. Sper sa ma fac inteleasa si sa nu va
plictisesc.Totusi, daca reusesc asta,imi cer scuze de pe acum.
TCP/IP reprezinta setul de protocoale ( se mai numeste si stiva tcp/ip ) pe care se bazeaza
Internetul. Este impartit pe patru niveluri sau straturi . Modelul OSI ( nu-l descriu aici ,caci nu
facem ccna,este impartit pe sapte straturi )
NIVEL APLICATIE
NIVEL TRANSPORT
NIVEL RETEA
NIVEL LEGATURA DE DATE SI FIZIC
OSI MODEL
TCP/IP MODEL
Nu voi dezvolta fiecare strat si protocol in parte,este foarte complex,si tema acestui tutorial nu
este retelistica,am sa ma opresc doar notiuni elementare ( ip , porturi si servicii, TCP, UDP,ICMP ).
IP (Internet Protocol)
Putem sa ne gandim la IP ,ca la un plic in care se trimite un mesaj. Cred ca este cel mai bun
exemplu. Cand trimitem o scrisoare avem un destinatar, cu numele si adresa sa, si o adresa a celui
care o trimite.Cam asa functioneaza si pachetele ip ..cu inca cateva informatii pe langa . Avem un
header in interiorul unui pachet(in general TCP) cu adresele sursa si destinatie,checksum si alte
informatii. Foarte utile pentru a afla mai multe sunt RFC-urile , ex RFC791 .
Adrese IP
In Internet fiecare calculator are asignata o adresa unica IP. Este formata din patru numere de la 0
la 255 separate prin trei puncte. Ex 209.127.112.153. Este formata din 4 bytes (32 biti in total )
Bitii primului
octet
Primul Octet
ClasaA
0xxxxxx
0-127*
128
16777216-2
Clasa B
10xxxxxx
128-191
16384
65536-2
Clasa C
110xxxxx
192-223
2097152
256-2
Clasa D
1110xxxx
224-239
N/A
N/A
Clasa E
1111xxx
240-255
N/A
N/A
Clasa A
Clasa B
Clasa C
Clasa D
- este o clasa speciala folosita pentru multicast. Nu se configureaza interfete sau placi de retea cu
aceasta adresa .
Clasa E (Rezervata pt studii si cercetari )
PORTURI
Acum ca stim cate ceva despre Ip, ne oprim la un alt concept deosebit de important
-porturile. Cand informatia trece de la un calculator la altul , se transmite de la o aplicatie server
catre o aplicatie client. Fiecare program (serviciu ) server are un port predeterminat pe care
asculta ,asteptand cererile clientilor. ( programul client) .Clientul este construit ca sa trimita cereri
catre portul predefinit al serverului. IANA ( Internet Asigned Numbers Authority ) a rezervat
anumite porturi la care se cupleaza anumite servicii si clientii lor. Cateva exemple :
PORT
21
23
25
80
110
SERVICIU
FTP
Telnet
mail ( SMTP)
http (WWW)
pop3
Cand serverul asculta cererile , vede pachetul cu bitul SYN activat, activeaza bitul ACK
( acum atat SYN cat si ACK au valoarea 1 ) ,incrementeaza numarul de secventa si trimite pachetul
ca raspuns.
Cand clientul primeste pachetul SYN-ACK ,incrementeaza numarul de secventa si sterge
( pune bitul pe 0 ) SYN ,lasand doar ACK cu valoarea 1.
Dupa ce serverul primeste pachetul ACK ,abandoneaza coada de asteptare si conexiunea se
stabiliste. Sunt multe explicatii referitoare la acest tip de conexiune, nu stiu daca a mea este cea mai
clara. Imaginea de mai sus ( luata de pe google) este destul de explicita. Cei care sunt interesati ,pot
cauta cursuri cccna cu instructori autorizati, sau pot gasi chiar curricula de la cisco pe net . Oricum,
retineti aceasta schema ,este de maxima importanta pentru a intelege cum functioneaza stabilirea
conexiunilor.
De ce am scris despre asta daca tutorialul pana la urma se vrea a fi unul despre
firewall pentru incepatori? Pentru caa este necesar sa intelegem cum un firewall face
distinctia intre conexiunile noi si cele stabilite.
nadejde, deoarece nu toti stim toate comenzile sau optiunile comenzilor pe deasupra .
Exemplu ifconfig penntru a configura manual o interfata( ip +netmask ,acum intelegeti de
ce am facut mica introducere despre ip )
ifconfig eth0 192.168.0.2 netmask 255.255.255.0 broadcast 192.168.0.255
Aceasta linie doar ne configureaza interfata de retea insa nu ne da acces la internet. Trebuie sa avem
o legatura,poarta de acces catre internet ,un router pe scurt. Aici ne vine in ajutor comanda route
route este un utilitar care ne permite sa specificam un default gateway ( o poarta predeterminata)
pentru internet. Folosind datele de mai sus ( ip ) , putem configura astfel :
route add default gw 192.168.0.1
Trebuie avuta grija la scrierea corecta a comenzilor si ordinea corecta pentru a functiona.
Pentru a verifica daca totul este corect putem arunca o privire in tabela de routare ,sau chiar si un
ping catre o adresa din Internet.
O putem face folosind comanda route -n
route -n
Kernel IP routing table
Destination Gateway
Genmask
Flags Metric Ref Use Iface
0.0.0.0
192.168.0.1 0.0.0.0
UG 1024 0
0 wlan1
192.168.0.0 0.0.0.0
255.255.255.0 U 0
0
0 wlan1
Dupa cum se poate vedea routerul are ip-ul (pe interfata interna) 192.168.0.1 ,si teoretic ar
trebui ca orcine are configurat corect placa de retea si routerul sa aibe acces la internet .
Comanda ping
Verifica daca dispozitivul este up trimitand o cerere de tip eco ICMP dispozitivului .
Man ping :) acolo aveti toate optiunile si explicatiile necesare pentru a intelege cat mai bine aceasta
comanda .
Comanda traceroute
Numele este destul de sugestiv . Se foloseste pentru a vedea ce ruta folosesc pachetele
pentru a ajunge la destinatie, sau unde se opresc in cazul in care nu au ajuns.
Comanda netstat
Obtinem informatii despre cum sunt rutate pachetele ,conexiuni deschise , porturi deschise
si gata pentru a accepta conexiuni. Vine insotita de optiuni : netstat -avn , un exemplu .
Acestea sunt comenzile pe care orice utilizator de linux ar trebui sa le stie.. De asemenea ne
mai poate fi util sa reinitiem manul placa de retea :
/etc/init.d/network stop/start/restart
Desi acum pe Linux gasim programe firewall instalate( necesita doar mici configurari) ele
folosesc in background iptables,asa ca personal prefer sa interactionez cu acest utilitar.Da,iptables
este doar un utilitar cu ajutorul caruia aplicam niste reguli pentru filtrarea pachetelor. Corect ar fi sa
spune netfilter/iptables .
Netfilter vine ca modul al kernelului Linux si ne permite sa interceptam/manipulam
pachetele de retea.
Cand folosim un firewall la nivel de retea prin filtrare de pachete, putem da sau nega accesul
din si in interiorul hostului bazandu-ne pe diferite variabile ca de exemplu :
-adresa sursa, protocol, numar de port,continut.
Un firewall bine configurat ( optiuni avansate) ne poate ajuta sa invingem atacurile de tip
spoofing, DoS, si chiar sa transformam reteaua intr-o retea invizibila pentru exterior.
Nucleul Linux defineste trei tabele de reguli :
1.filter -folosita pentru filtrarea de pachete ---> cu lanturile INPUT,OUTPUT, FORWARD
2. nat -pentru sistemul NAT cu lanturile PREROUTING,OUTPUT,POSTROUTING
3. mangle utilizata pentru verificarea specializata a pachetelor INPUT,OUTPUT,FORWARD
PREROUTING,POSTROUTING
* Cand un pachet intra in sistem trece prin interfata de retea,atunci,nucleul decide daca pachetul
este destinat masinii locale -Lantul INPUT sau altui calculator -lantul FORWARD. Procesul este
asemanator si la iesirea unui pachet, doar ca se foloseste lantul OUTPUT.
Prin lantul PREROUTING trec pachetele inainte ca ruta lor catre destinatie sa fie stabilita si prin
lantul POSTROUTING dupa ce au fost rutate , dar inainte de a iesi din sistem.
Schema 1.
Schema 2.
Fiecare lant contine niste reguli si ii sunt aplicate niste actiuni ( ACCEPT,DROP,REJECT ) .
Daca regula specifica actiunea ACCEPT ,pachetul nu mai este verificat ci este lasat sa treaca, daca
are DROP ,nu ii este permis sa ajunga la destinatie,iar daca are REJECT ,nu se permite trecerea
catre destinatie dar este trimis un pachet de eroare expeditorului.
Cam astea sunt cateva notiuni minime despre cum functioneaza un firewall pe Linux. Multi
cred ca iptables este firewall linux,insa este gresit.Iptables este doar un program..cu care executam
niste comenzi pentru a manipula lanturile si regulile din firewall...dupa parerea mea de nespecialist
ar fi ca o interfata pentru netfilter .
#!/bin/bash
iptables -F
iptables -A OUTPUT -o loopback -j ACCEPT
iptables -A INPUT -i loopback -j ACCEPT
#iptables -A INPUT -p tcp --dport 80 --syn -m limit --limit 5/s -j ACCEPT
#iptables -A INPUT -p tcp --dport 80 --syn -j DROP
iptables -A INPUT -p icmp --icmp-type 8 -j REJECT --reject-with icmp-net-unreachable
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP
Dupa cum puteti vedea prima linie iptables -F ,ne indica stergerea regulilor ,dam accept interfetei
loopback /(127.0.0.1/32 ) atat pe chainul INPUT cat si pe OUTPUT .
Dupa cum vedeti in liniile de mai jos am incercat sa folosesc teoria mai sus scrisa..dar le-am
comentat deorece acum nu am nici un apache instalat pe sistem,dar puteti investiga ce face acea
linie,deja v-am dat suficiente indicii..
Predeterminat ,in sistemul Linux toate chainurile sunt pe ACCEPT. Acest lucru se poate
vedea prin comanda iptables -vnL . Vom obtine un rezultat similar :
[root@sandybell][~]
#iptables -vnL
Chain INPUT (policy ACCEPT 387K packets, 496M bytes)
pkts bytes target prot opt in out source
destination
670 122K ACCEPT udp -- *
*
0.0.0.0/0
0.0.0.0/0
multiport dports 5353
0 0 ACCEPT tcp -- *
*
0.0.0.0/0
0.0.0.0/0
multiport dports 4000
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source
destination
Chain OUTPUT (policy ACCEPT 247K packets, 26M bytes)
pkts bytes target prot opt in out source
destination
Dupa ce am scris micutul script pt firewall,ii dam permisiuni (chmod +x (sau
777)nume_firewall si il executam . Vom vedea cum deja lucreaza,totusi eficacitatea se poate testa
cu nmap,wireshark,etc.
[][root@sandybell][~]
#chmod +x fw
[root@sandybell][~]
#./fw
#iptables -vnL
Chain INPUT (policy DROP 5 packets, 809 bytes)
pkts bytes target prot opt in out source
0 0 ACCEPT all -- loopback *
0.0.0.0/0
0 0 REJECT icmp -- *
*
0.0.0.0/0
icmp-net-unreachable
475 120K ACCEPT all -- *
*
0.0.0.0/0
RELATED,ESTABLISHED
destination
0.0.0.0/0
0.0.0.0/0
0.0.0.0/0
icmptype 8 reject-with
state
destination
0.0.0.0/0
0.0.0.0/0
state
Pentru a nu fi nevoiti de fiecare data sa rulam scriptul,cei care folosesc Debian si derivate ,
adaugam calea unde se afla scriptul in fisierul /etc/rc.local. Acest lucru va face incarcarea regulilor
la bootarea sistemului.
"
#INPUT CHAIN
#\
##########################################################################
#
#/
$IPT -t filter -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
$IPT -t filter -A INPUT -p all -m state --state INVALID -j DROP
#Clase private ce nu au ce cauta via Internet.
for clasa in $PRIVATE_IPCLASSES; do
$IPT -t filter -I INPUT -s $clasa -i $PUBLIC_NIC -j DROP
$IPT -t filter -I FORWARD -s $clasa -i
$PUBLIC_NIC -j DROP
done
#Conexiuni input acceptate; ordinea conteaza!!!!
#SSH pentru Admin via PROVIDER ip
$IPT -t filter -A INPUT -i $PUBLIC_NIC -d $PUBLIC_IP -m state --state NEW -p tcp
--dport 22 -j LOG --log-prefix "ALL-SSH:"
$IPT -t filter -A INPUT -i $PUBLIC_NIC -s ipulme1 -d $PUBLIC_IP -m state --state
NEW -p tcp --dport 22 -j ACCEPT
$IPT -t filter -A INPUT -i $PUBLIC_NIC -s ipulmeu2 -d $PUBLIC_IP -m state
--state NEW -p tcp --dport 22 -j ACCEPT
$IPT -t filter -A INPUT -i $PUBLIC_NIC -s ipulmeu3 -d $PUBLIC_IP -m state
--state NEW -p tcp --dport 22 -j ACCEPT
#access la alte chestii
-j DROP
-j DROP
-j DROP
-j DROP
filter
5/s -j
filter
filter
5/s -j
filter
-A FORWARD
ACCEPT
-A FORWARD
-A FORWARD
ACCEPT
-A FORWARD
#iptables -F
Imi pare rau,dar explicatiile vor veni data viitoare( cand o sa scriu despre routere linux,dupa
cum vedeti mai sus ,avem mai multe placi de retea definite ca eth0 si eth1,avem ip-uri interne si
externe pentru placile respective,folosim si nat (network adress translation) ,deci este nevoie sa o
luam pas cu pas.Cine are nelamuriri ma poate contacta.. se gasesc scripturi asemanatoare pe
Internet , se gasesc foarte multe tutoriale,mult mai bune ca ale mele..Daca v-a placut,va
multumesc,daca nu, va multumesc ca l-ati citit...sau ca ati avut rabdare pana la capat.