Toate încep cu un prim
pas….
1. Ștergere reguli
existente
Înainte de a construe
un nou set de reguli trebuie resetate toate regulile existente.
Comanda este iptables –F sau iptables
–flush
2. Stabilire reguli
implicite
Regula implicit este
ACCEPT. Motivul pentru care se folosește iptables este simplu- nu se dorește ca
aceasta să rămână regula implicită. Se va schimba cu DROP (respingere
pachete fără atenționare) pentru INPUT,
FORWARD, and OUTPUT astfel
iptables
-P INPUT DROP
iptables
-P FORWARD DROP
iptables
-P OUTPUT DROP
Dacă pentru INPUT și
OUTPUT regula implicit este DROP pentru fiecare excepție firewall trebuiesc
definite 2 reguli, una pentru pachetele de intrare și alta pentru pachetele de
ieșire
Dacă aveți încredere
în utilizatorii rețelei interne nu
rulați comanda iptables -P OUTPUT DROP. În acest caz trebuiesc definite reguli numai
pentru conexiunile de intrare (INPUT din exteriorul rețelei interne către calculatoarele
din rețeaua internă). Aceasta este de fapt setarea implicită la rețelele
Windows.
3. Blocarea unei
adrese IP
Blocarea unei adrese
IP se realizează direct cu comanda
iptables
-A INPUT -i eth0 -s x.x.x.x -j DROP
sau
iptables
-A INPUT -i eth0 -p tcp -s x.x.x.x -j
DROP unde x.x.x.x este adresa IP
Tag-ul –A înseamnă adăugarea unei noi reguli.
Tagul –p tcp arată că vor fi blocate
pachetele transmise prin protocolul TCP. Tagul –j specifică ce se va întâmpla cu pachetele de date astfel ACCEPT –accept, DROP –refuz, QUEQUE-
trimiterea în coada de așteptare și RETURN retransmiterea la expeditor.
Tagul -s arată sursa pachetelor de date. Dacă
dorim stergerea acestei reguli se folosește tag-ul –D de exemplu
iptables
-D INPUT -i eth0 -s x.x.x.x -j DROP
iptables
-D INPUT -i eth0 -p tcp -s x.x.x.x -j
DROP
Regulile sunt
numerotate de aceea se poate folosi
pentru stergere comanda
iptables
-D INPUT 1
Pentru a vizualiza
regulile din iptables comanda este
iptables
-L
O altă modalitatea este
folosirea unui fisier script (fișier text făcut executabil cu comanda chmod 700 file.txt și rulat cu
comanda ./file.txt din folderul fișierului
În acest caz putem
defini o variabila căreia îi atribuim valoarea adresei IP astfel
BLOCK_THIS_IP="x.x.x.x"
iptables
-A INPUT -s "$BLOCK_THIS_IP" -j DROP
Acest mod de lucru în
aparență mai complicat este foarte util pentru a vizualiza mai rapid în log-uri
adresa IP care generează „trafic suplimentar”.
Se poate bloca
traficul de pe o adresă IP pe o anumită interfață de rețea de exemplu
iptables
-A INPUT -i eth0 -s "$BLOCK_THIS_IP" -j DROP
iptables
-A INPUT -i eth0 -p tcp -s "$BLOCK_THIS_IP" -j DROP
4. Permiterea
conexiunilor SSH
Următoarea regulă
permite efectuarea de conexiuni SSH pe interfața de rețea eth0 .
iptables
-A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o
eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
Tagul port permite specificarea
unui port anume (în cazul ssh portul 22) iar prefixul -d arată destinația către
portul 22 . Similar –sport indică ca sursă a traficului portul 22
Setul de două
instrucţiuni este necesar pentru INPUT/OUTPUT. Este recomandat ca în loc de
prima instrucțiune pentru ssh să se folosească următoarele
iptables
-A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW, ESTABLISHED -m recent --set --name SSH -j ACCEPT
iptables
-A INPUT -i eth0 -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 4
--rttl --name SSH -j DROP.
Și, bineînțeles, ar
trebui ca portul implicit pentru SSH să fie modificat.
5.Permiterea
conexiunilor SSH numai dintr-o anumită reţea
Dacă dorim să fie
premise conexiunile SSH numai din reţeaua 192.168.33.0 comanda este
iptables
-A INPUT -i eth0 -p tcp -s 192.168.33.0/24 --dport 22 -m state --state
NEW,ESTABLISHED -j ACCEPT
iptables
-A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
În loc de masca
restrânsă de reţea se poate folosi masaca extinsă de reţea astfel în loc de
192.168.33.0/24 folosim 192.168.33.0/255.255.255.0.
6. Permiterea
conexiunilor HTTP şi HTTPS
Regulile următoare
permit traffic web nesecurizat (Protocolul http port 80)
iptables
-A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables
-A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
Regulile următoare
permit traffic web securizat (Protocolul https port 443)
iptables
-A INPUT -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables
-A OUTPUT -o eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
7. Crearea de reguli
de acces multiple.
Dacă se doreşte
permiterea de conexiuni de intrare de tipuri diferite este suficient să se
insereze lista porturilor pe care se efectuează accesul fără a se creea reguli
individuale pe fiecare port în parte..
De exemplu pentru a
permite conexiuni de intrare SSH, HTTP și HTTPS.
iptables
-A INPUT -i eth0 -p tcp -m multiport --dports 22,80,443 -m state --state
NEW,ESTABLISHED -j ACCEPT
iptables
-A OUTPUT -o eth0 -p tcp -m multiport --sports 22,80,443 -m state --state
ESTABLISHED -j ACCEPT
Apare tagul –m multiport care precizează o listă de
porturi.
8. Permiterea
conexiunilor SSH în rețele externe
Dacă dorim să ne
conectăm la un server extern prin SSH
trebuiesc create regulie următoare
iptables
-A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables
-A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
Se observă diferența
față de conexiunile de intrare tag-urile NEW
și ESTABLISHED se aplică pe OUTPUT
iar pe INPUT numai ESTABLISHED, invers
față de conexiunile de intrare
9. Permiterea
conexiunilor SSH într-o anumită rețea
externă.
Regula următoare
permite efectuarea conexiunilor SSH numai pentru o rețea specifică (de exemplu
192.168.33.0 ).
iptables
-A OUTPUT -o eth0 -p tcp -d 192.168.33.0/24 --dport 22 -m state --state
NEW,ESTABLISHED -j ACCEPT
iptables
-A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
10. Permiterea
conexiunilor HTTP și HTTPS externe
Pentru a permite
traficul HTTPS se folosesc următoarele reguli.
iptables
-A OUTPUT -o eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables
-A INPUT -i eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
Această regulă permite
și conexiuni wget.
Pentru a permite
conexiuni HTTP se inserează următoarele reguli
iptables
-A OUTPUT -o eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables
-A INPUT -i eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
11. Efectuare Load
Balancing pentru traffic web de intrare
Se poate efectua
loadbalance cu iptables. Se folosește taguș nth. In exemplu următor efectuăm
load balance pe 2 adrese IP pentru HTTPS. Un pachet va fi transmis la o adresă
IP iar următorul pachet la altă adresă IP.
iptables
-A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter
0 --every 2 --packet 0 -j DNAT --to-destination 192.168.1.33:443
iptables
-A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter
0 --every 2 --packet 1 -j DNAT --to-destination 192.168.1.34:443
12. Permitere ping din
exterior în interior
Regulile următoare
permit efectuarea de ping-uri către serverele din rețeaua locală.
iptables
-A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables
-A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
13. Permitere ping din
interior în exterior
iptables
-A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables
-A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
14. Permitere Loopback
Access
Majoritatea serverelor
necesită acces Loopback (localhost -127.0.0.1). Se folosește tagul lo
iptables
-A INPUT -i lo -j ACCEPT
iptables
-A OUTPUT -o lo -j ACCEPT
15. Permitere trafic
din rețeaua internă în rețeaua externă
În mod normal un
server firewall are o placă de rețea conectată la rețeaua internă și o pălacă
de rețea conectată la internet (rețeaua externă).Pentru a permite traficul din
rețeaua externă în rețeaua internă se folosesc următoarele reguli (rețeaua
internă este 192.168.1.x și este conectată la server prin interfața eth1.
iptables
-A FORWARD -i eth1 -o eth0 -j ACCEPT
Tagul –o reprezintă output destination și tagul –i
input destination.
Pentru a efectua
corect MASQUERADE regulile sunt :
iptables
-A INPUT -i lo -j ACCEPT
iptables
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables
-A INPUT -m state --state NEW -i ! eth1 -j ACCEPT
iptables
-A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables
-A FORWARD -i eth1 -o eth0 -j REJECT
iptables
-t nat -A POSTROUTING -o eth1 -j MASQUERADE
16. Permiterea
cererilor către DNS externe
The following rules
allow outgoing DNS connections.
iptables
-A OUTPUT -p udp -o eth1 --dport 53 -j ACCEPT
iptables
-A INPUT -p udp -i eth1 --sport 53 -j ACCEPT
17. Permiterea
conexiunilor NIS
Dacă se folosește NIS
pentru management conturi utilizator trebuiesc premise conexiuni NIS. Chiar
dacă sunt permise conexiunile SSH dacă nu sunt premise conexiunile NIS
utilizatorii nu se pot loga.
Porturile NIS sunt
alocate dynamic de ypbind la lansarea în execuție.
Folosind comanda rpcinfo
–p vedem că sunt folosie porturile 851 și 852 de exemplu. Pentru a identifica
port ypbind folosim comanda rpcinfo -p | grep ypbind. Observăm că ypbind
utilizează portul 114 e.g.
Permitem conexiuni de
intrare tcp and udp pe porturile menționate.
iptables
-A INPUT -p tcp --dport 114 -j ACCEPT
iptables
-A INPUT -p udp --dport 114 -j ACCEPT
iptables
-A INPUT -p tcp --dport 851 -j ACCEPT
iptables
-A INPUT -p udp --dport 851 -j ACCEPT
iptables
-A INPUT -p tcp --dport 852 -j ACCEPT
iptables
-A INPUT -p udp --dport 852 -j ACCEPT
NB. Dacă se restartează ypbind porturile vor fi
altele.
Sunt două soluții:
1) Folosire adresă
static pentru serverul NIS
2)Folosirea de
scripturi automate care prelucreaza output-ul lui rpcinfo -p .
18. Permiterea
cererilor DHCP
Pentru a permite
cereri DHCP
iptables
-A OUTPUT -o eth0 -p udp --dport 68 -j
ACCEPT
iptables
-A INPUT -i eth1 -p udp --dport 67 -j ACCEPT
19.Permiterea
traficului SAMBA 3 numai în rețeaua curentă
Asumăm că rețeaua
locala este 192.168.1.0/24
iptables
-A INPUT -s 192.168.1.0/24 -p udp -m udp --dport 137 -j ACCEPT
iptables
-A INPUT -s 192.168.1.0/24 -p udp -m udp --dport 138 -j ACCEPT
iptables
-A INPUT -m state --state NEW -m tcp -p
tcp -s 192.168.1.0/24 --dport 139 -j ACCEPT
iptables
-A INPUT -m state --state NEW -m tcp -p
tcp -s 192.168.1.0/24 --dport 445 -j ACCEPT
20. Permiterea Rsync
dintr-o rețea specificată
iptables
-A INPUT -i eth0 -p tcp -s 192.168.101.0/24 --dport 873 -m state --state
NEW,ESTABLISHED -j ACCEPT
iptables
-A OUTPUT -o eth1 -p tcp --sport 873 -m state --state ESTABLISHED -j ACCEPT
21. Permiterea MySQL
din rețeaua internă
În mod normal nu se
permit conexiuni SQL directe dar este util ca rețeaua locală să se poată
conecta la serverul SQL.
iptables
-A INPUT -i eth0 -p tcp -s 192.168.33.0/24 --dport 3306 -m state --state
NEW,ESTABLISHED -j ACCEPT
iptables
-A OUTPUT -o eth0 -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT
22. Permiterea traffic
Mail
The following rules
allow mail traffic. It may be sendmail or postfix.
iptables
-A INPUT -i eth0 -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables
-A OUTPUT -o eth0 -p tcp --sport 25 -m state --state ESTABLISHED -j ACCEPT
23. Permiterea IMAP și
IMAPS
iptables
-A INPUT -i eth0 -p tcp --dport 143 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables
-A OUTPUT -o eth0 -p tcp --sport 143 -m state --state ESTABLISHED -j ACCEPT
Și pentru IMAPS.
iptables
-A INPUT -i eth0 -p tcp --dport 993 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables
-A OUTPUT -o eth0 -p tcp --sport 993 -m state --state ESTABLISHED -j ACCEPT
24. Permiterea POP3 și
POP3S
iptables
-A INPUT -i eth0 -p tcp --dport 110 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables
-A OUTPUT -o eth0 -p tcp --sport 110 -m state --state ESTABLISHED -j ACCEPT
Și pentru POP3S.
iptables
-A INPUT -i eth0 -p tcp --dport 995 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables
-A OUTPUT -o eth0 -p tcp --sport 995 -m state --state ESTABLISHED -j ACCEPT
25. Prevenirea DoS
Attack
Următoarea regulă
ajută la reducerea efectelor atacurilor Denial of Service (DoS) attack pe
webserverul dumneavoastră.
iptables
-A INPUT -p tcp --dport 80 -m limit --limit 60/minute --limit-burst 10 -j
ACCEPT
În acest exemplu
·
-m limit: Tagul – limit definește
limită de conexiuni
·
–limit 60/minute: Există o limitare
de maximum 60 conexiuni pe minut. Această valoare poate fi modificată
·
–limit-burst 5: Această valoare indică
că limitarea conexiunilor va fi aplicată numai după lce numărul conexiunilor va depăși 60
conexiuni în ultimile 5 minute.
·
26. Port Forwarding
Următorul exemplu
arată modul în care traficul extern pe portul 6022 va fi transferat pe portul
22.
iptables
-t nat -A PREROUTING -p tcp -d 192.168.101.37 --dport 6022 -j DNAT --to
192.168.101.37:22
De asemena trebuiesc
premise conexiunile pe portul 6022
iptables
-A INPUT -i eth0 -p tcp --dport 6022 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables
-A OUTPUT -o eth0 -p tcp --sport 6022 -m state --state ESTABLISHED -j ACCEPT
27. Blocarea
traficului de la adresă fizică MAC
iptables
-A INPUT -m mac --mac-source x:x:x:x:x:x -j DROP
iptables
-A FORWARD -m mac --mac-source x:x:x:x:x:x -j DROP
Dacă dorim permiterea
traficului doar de la o adresă MAC regulile sunt
iptables
-A INPUT -m mac! --mac-source x:x:x:x:x:x -j DROP
iptables
-A FORWARD -m mac! --mac-source x:x:x:x:x:x -j DROP
Se observă apariția
tag-ului ! care reprezintă cunoscutul not (sensul mac! este nu această adresă)
28. Log pachete drop
Este foarte util să se
efectueze log cu toate pachetele drop. Aceasta este întotdeauna ultima regulă
în iptables.
Prima data se creează
un nou chain numit LOGGING.
iptables
-N LOGGING
După aceea toate
conexiunile de intrare sunt rulate prin LOGGING cu comanda
iptables
-A INPUT -j LOGGING
Vom loga pachetele sub
o denumire particularizată.
iptables
-A LOGGING -m limit --limit 2/min -j LOG --log-prefix "Packet Drops:
" --log-level 7
În final se dă DROP la
aceste pachete.
iptables
-A LOGGING -j DROP
Descărcați acest tutorial în format PDF
Niciun comentariu:
Trimiteți un comentariu
Comentează această postare.