Tutorial pentru IPTABLES in care inveti cum sa configurezi firewall-ul linux pentru WWW, SSH, DNS, Acces la internet, NAT, Port Forwarding, Static NAT
Permite accesul DNS in firewall
#---------------------------------------------------------------
# Permiteti interogari DNS outbound de la FIREWALL si raspunsurile catre acesta
#
# - Interfata eth0 este interfata catre internet
#---------------------------------------------------------------
iptables -A OUTPUT -p udp -o eth0 --dport 53 --sport 1024:65535 -j ACCEPT
iptables -A INPUT -p udp -i eth0 –sport 53 –dport 1024:65535 -j ACCEPT
Permite accesul WWW si SSH catre masina Linux
Pachetele Inbound destinate porturilor 80 si 22 sunt permise. Nu este necesar sa specificam aceste porturi intr-o regula Outbound deoarece toate aceste pachete pentru conexiunile deja stabilite sut permise.
#---------------------------------------------------------------
# Permite conexiunile deja stabilite (established)
# - Interfata eth0 este interfata conectata la internet
#---------------------------------------------------------------
iptables -A OUTPUT -o eth0 -m state --state ESTABLISHED,RELATED \
-j ACCEPT
#—————————————————————
# Permite conexiuni pe portul 80 (www) si 22 (SSH) catre firewall
#—————————————————————
iptables -A INPUT -p tcp -i eth0 –dport 22 –sport 1024:65535 \
-m state –state NEW -j ACCEPT
iptables -A INPUT -p tcp -i eth0 –dport 80 –sport 1024:65535 \
-m state –state NEW -j ACCEPT
Permiteti Firewall-ului sa acceseze Internet-ul
Acest script iptables permite unui utilizator de pe Firewall sa foloseasca un Web Browser pentru a naviga pe Internet. Traficul HTTP foloseste portul TCP 80, si cel HTTPS foloseste portul 443.
#---------------------------------------------------------------
# Permite conexiuni pe portul 80 (www) si 443 (https) de la firewall
#---------------------------------------------------------------
iptables -A OUTPUT -j ACCEPT -m state \
–state NEW,ESTABLISHED,RELATED -o eth0 -p tcp \
-m multiport –dports 80,443 –sport 1024:65535
#—————————————————————
# Permite conexiunile deja stabilite
# – Interfata eth0 este interfata catre internet
#—————————————————————
iptables -A INPUT -j ACCEPT -m state –state ESTABLISHED,RELATED \
-i eth0 -p tcp
Permite unei retele private sa acceseze Firewall-ul
In acest exemplu, interfata eth1 este direct conectata la o retea privata folosind adrese IP din reteaua 192.168.1.0/24. Tot traficul dintre aceasta retea si firewallul va fi considerat de incredere.
#---------------------------------------------------------------
# Permite traficul din ambele directii dintre firewall si reteaua privata
# - Interfata eth1 este conectata la reteaua privata
#---------------------------------------------------------------
iptables -A INPUT -j ACCEPT -p all -s 192.168.1.0/24 -i eth1
iptables -A OUTPUT -j ACCEPT -p all -d 192.168.1.0/24 -o eth1
Mascaradare (Many to One NAT)
Mascaradarea este un sinonim pentru ce numesc unii many to one NAT.
Cu alte cuvinte,traficul de la mai multe echipamente din una sau mai multe retele private va aparea ca si cum provine de la o singura adresa IP.
Nota: Adresa IP de mascaradare este implicit adresa IP a interfetei principale de pe masina firewall si are ca avantaj ca nu trebuie specificata adresa IP pentru NAT.
Se poate configura NAT catre un alias IP, folosind declaratia POSTROUTING si nu MASQUERADE(Vedeti mai jos exemple in sectiunea NAT static).
Important: IPTABLES necesita ca modulul iptables_nat sa fie incarcat cu comanda modprobe, ca functia de mascaradare sa functioneze. Mascaradarea depinde si de configurarea sistemului de operare LINUX sa suporte rutarea dintre interfata catre Internet si reteaua privata.
#---------------------------------------------------------------
# Incarca modulul NAT
#---------------------------------------------------------------
modprobe iptable_nat
Activarea IP forward se efectueaza aplicand in fisierul /proc/sys/net/ipv4/ip_forward valoarea 1.
#---------------------------------------------------------------
# Activeaza rutarea pachetelor prin modificarea fisierului ip_forward din /proc
#---------------------------------------------------------------
echo 1 > /proc/sys/net/ipv4/ip_forward
O dată ce mascaradarea a fost realizata folosind chain-ul POSTROUTING din tabela nat, va trebui să configuraţi iptables pentru a permite pachetelor să circule între cele două interfeţe. Pentru a face aceasta, utilizaţi chain-ul FORWARD din tabelul de filtrare.
Pachetele ce tin de conexiuni NEW si ESTABLISHED vor fi permise sa iasa catre Internet, dar numai pachetele ce tin de conexiuni ESTABLISHED vor fi permise din Internet catre masina firewall.
#---------------------------------------------------------------
# Permite mascaradarea
# - Interfata eth0 este catre internet
# - Interfata eth1 este catre reteaua privata
#---------------------------------------------------------------
iptables -A POSTROUTING -t nat -o eth0 -s 192.168.1.0/24 -d 0/0 \
-j MASQUERADE
#—————————————————————
# Înainte de mascaradare, pachetele sunt rutate prin intermediul
# chain-ului FORWARD din tabela FILTER.
# Permise outbound: New, established si related
# Permise inbound : Established si related
#—————————————————————
iptables -A FORWARD -t filter -o eth0 -m state \
–state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -t filter -i eth0 -m state \
–state ESTABLISHED,RELATED -j ACCEPT
Port Forwarding
Daca vreti sa publicati un server web pe un server dintr-o retea privata unde se foloseste NAT, atunci va trebui sa folositi port forwarding.
Port forwarding este manipulat de chain-ul PREROUTING al tabelei nat. Ca si in mascaradare, modulul iptables_nat trebuie sa fie incarcat si rutarea sa fie activata ca port forwarding sa functioneze.
In iptables trebuie permisa rutarea cu ajutorul chain-ului FORWARD; aceasta include toate conexiunile NEW inbound din Internet care se potrivesc cu portul pentru port forwarding plus toate pachetele care tin de conexiunea deja ESTABLISHED in ambele directii.
#---------------------------------------------------------------
# Incarca modulul NAT
#---------------------------------------------------------------
modprobe iptable_nat
#————————————————————–
#Definirea interfetei externe si al IP-ului extern
external_int=”eth0″
external_ip=”Treceti aici adresa IP externa”
#—————————————————————
# Activeaza rutarea pachetelor prin modificarea fisierului ip_forward din /proc
#—————————————————————
echo 1 > /proc/sys/net/ipv4/ip_forward
#—————————————————————
# Permite port forwarding pentru traficul destinat portului 80 de pe firewall
# sa fie redirectionat catre portul 8080 de pe serverul cu adresa IP 192.168.1.200
# – Interfata eth0 este catre internet
# – Interfata eth1 este catre reteaua interna
#————————————————————–
iptables -t nat -A PREROUTING -p tcp -i eth0 -d $external_ip \
–dport 80 –sport 1024:65535 -j DNAT –to 192.168.1.200:8080
#————————————————————–
# Dupa DNAT, pachetele sunt rutate prin chain-ul FORWARD al tabelei FILTER
#—————————————————————
iptables -A FORWARD -p tcp -i eth0 -o eth1 -d 192.168.1.200 \
–dport 8080 –sport 1024:65535 -m state –state NEW -j ACCEPT
iptables -A FORWARD -t filter -o eth0 -m state \
–state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -t filter -i eth0 -m state \
–state ESTABLISHED,RELATED -j ACCEPT
Static NAT
În acest exemplu, tot traficul catre o anumită adresă IP publica, nu un port anume, este trimis la un singur server din reteaua privata.
Deoarece firewall-ul are mai mult de o adresă IP, nu pot recomanda MASQUERADE ci SNAT pentru a putea specifica adresa IP alias care va fi folosita pentru conexiunile initiate de alte servere din reteaua privata.
In acest exemplu:
- Firewall-ul foloseste one to one NAT pentru ca serverul cu adresa IP 192.168.1.100 din reteaua interna sa apara pe Internet cu adresa IP publica 97.158.253.26.
- Firewall-ul foloseste many to one NAT pentru reteaua 192.168.1.0 in care toate serverele apar pe Internet cu adresa IP publica 97.158.253.29. Acest lucru este diferit de mascaradare
#---------------------------------------------------------------
# Incarca modulul NAT
#---------------------------------------------------------------
modprobe iptable_nat
#—————————————————————
# Activeaza rutarea pachetelor prin modificarea fisierului ip_forward din /proc
#—————————————————————
echo 1 > /proc/sys/net/ipv4/ip_forward
#—————————————————————
# NAT pentru tot traficul:
#
# TO: FROM: MAPARE_CATRE_SERVERUL:
# 97.158.253.26 Anywhere 192.168.1.100 (1:1 NAT – Inbound)
# Anywhere 192.168.1.100 97.158.253.26 (1:1 NAT – Outbound)
# Anywhere 192.168.1.0/24 97.158.253.29 (FW IP)
#
# SNAT este folosit pentru a face NAT tuturor conexiunilor OUTBOUND initiate
# din reteaua privata pentru a parea ca provin de la adresa IP 97.158.253.29
#
# POSTROUTING:
# NAT adresei IP sursa. Folosit pentru a face NAT conexiunilor din reteaua interna
#
# PREROUTING:
# NATs adresei IP destinatie. Folosit pentru a face NAT conexiunilor din Internet catre reteaua interna
#
# – Interfata eth0 este catre Internet
# – Interfata eth1 este catre reteaua interna
#—————————————————————
#
# Declaratii PREROUTING pentru 1:1 NAT
# (Conexiuni care isi au originea din Internet)
iptables -t nat -A PREROUTING -d 97.158.253.26 -i eth0 \
-j DNAT –to-destination 192.168.1.100
# Declaratii POSTROUTING pentru 1:1 NAT
# (Conexiuni care isi au originea din reteaua interna)
iptables -t nat -A POSTROUTING -s 192.168.1.100 -o eth0 \
-j SNAT –to-source 97.158.253.26
# Declaratii POSTROUTING pentru Many:1 NAT
# (Conectiuni care isi au originea din intreaga retea interna)
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 \
-j SNAT -o eth0 –to-source 97.158.253.29
# Permite FORWARD pentru serverul configurat 1:1 NAT
# (Conexiuni care isi au originea din Internet)
iptables -A FORWARD -p tcp -i eth0 -o eth1 -d 192.168.1.100 \
-m multiport –dports 80,443,22 -m state –state NEW -j ACCEPT
# Permite forward la toate conexiunile pentru care s-a facut 1:1 NAT
# care isi au originea din Internet care au trecut de declaratie de forwarding NEW de mai sus
iptables -A FORWARD -t filter -i eth0 -m state –state ESTABLISHED,RELATED -j ACCEPT
# Permite FORWARD pentru toate conexiunile NEW si ESTABLISHED pentru care s-a facut SNAT
# si toate conexiunile ESTABLISHED pentru care s-a facutDNAT
iptables -A FORWARD -t filter -o eth0 -m state –state NEW,ESTABLISHED,RELATED -j ACCEPT