Iată exemple de setări pentru situații diferite. Despre structura IPTABLES. management, arhitectură și așa mai departe - vezi Ciclul Linux: IPTABLES - Manual: Partea 1 - Bazele IPTABLES.
Setarea se face la:
# lsb_release -a
Nu sunt disponibile module LSB.
ID Distributor: Debian
Descriere: Debian GNU / Linux 6.0.7 (squeeze)
Eliberare: 6.0.7
Codename: stoarceți
Creați un fișier de configurare pentru IPTABLES:
Să începem:
# chmod + x /etc/network/if-up.d/iptables.conf
IMPORTANT: unele opțiuni sunt specificate cu două liniuțe - deși în exemple sunt afișate ca unul! Țineți cont de acest lucru dacă copiați regulile direct de pe blog:
- - stat
- Dport
- - tcp-flags
- - respingere - cu
În aceasta adăugăm:
# Setați calea către fișierul executabil IPTABLES
IPTABLES = '/ sbin / iptables'
# Resetați regulile existente pentru toate tabelele și lanțurile
$ IPTABLES -F
$ IPTABLES -X
# Setați regulile implicite (dacă nu o regulă din lanț nu a funcționat - regula va funcționa de aici)
$ IPTABLES -P INPUT DROP
$ IPTABLES -P ACCEPTUL DE IEȘIRE
$ IPTABLES-P ACȚIUNEA FORWARD
# Permitem tot traficul pe interfața loopback lo0
# Permitem traficul deja stabilit și creând conexiuni de conexiuni noi:
$ IPTABLES -U INPUT -m state-state RELATE, ESTABLISHED -j ACCEPT
# Permitem intrarea SSH prin interfața eth0
$ IPTABLES -U INPUT -p tcp -i eth0 -dport 22 -j ACCEPT
Acum, să analizăm mai detaliat regulile create.
IPTABLES folosește trei tipuri de tabele:
În consecință, suntem interesați de al treilea tabel de filtre. În acest tabel există trei lanțuri încorporate:
- INPUT - pentru pachetele primite.
- FORWARD - pentru trecerea prin această mașină la alta.
- OUTPUT - pentru ieșire.
Un pachet care trece prin aceste lanțuri, bazat pe regulă, poate fi omis (ACCEPT) sau aruncat (DROP):
Prima regulă pe care am creat-o pentru lanțul INPUT este comportamentul implicit pentru pachetele care trec prin acest filtru. În cazul în care niciuna dintre regulile specificate mai jos nu este aplicată pachetului - acesta va fi aruncat (DROP) fără notificarea expeditorului:
$ IPTABLES -P INPUT DROP
Pachetele care trec prin filtrul OUTPUT vor fi, prin urmare, ignorate:
Același lucru este valabil și pentru pachetele de "tranzit":
$ IPTABLES -P ACCEPTUL DE IEȘIRE
$ IPTABLES -U INPUT -i lo -j ACCEPT
Specifică regula obișnuită (-A) din filtrul INPUT pentru pachetele care trec prin interfața (-i) loopback (lo) și execută țintă (-j) "ACCEPT".
Următoarea regulă utilizează starea modulului (-m). care verifică starea conexiunii stabilite - RELATED sau ESTABLISHED și dacă conexiunea este potrivită pentru această regulă - o rezolvă:
$ IPTABLES -U INPUT -m state-state RELATE, ESTABLISHED -j ACCEPT
În regula următoare pentru filtrul de intrare INPUT, specificăm:
$ IPTABLES -U INPUT -p tcp -i eth0 -dport 22 -j ACCEPT
Protocol (-p) TCP. interfața (-i) eth0. și portul de destinație, adică port pe serverul nostru la care este stabilită conexiunea (-port).
Adăugați alte câteva reguli:
# Facem protecție împotriva atacurilor DOS:
$ IPTABLES -U INPUT -p tcp -m tcp -tcp-flags SYN, ACK, FIN, RST RST -m limita -limit 1 / s -j ACCEPT
# Permiteți FTP
$ IPTABLES -U INPUT -i eth0 -p tcp -dport 21 -j ACCEPT
# Să rezolvăm HTTP
$ IPTABLES -U INPUT -i eth0 -p tcp -dport 80 -j ACCEPT
# Activați HTTPS
$ IPTABLES -U INPUT -i eth0 -p tcp -dport 443 -j ACCEPT
# Permitem numai SMTP din rețeaua 77.120. *** 1/24
$ IPTABLES -U INPUT -s 77.120. *** 1/24 -i eth0 -p tcp -dport 25 -j ACCEPT
# Rezolvăm doar POP3 din IP 77.120
$ IPTABLES -U INPUT -s 77.120. *** 46 -i eth0 -p tcp -dport 110 -j ACCEPT
# Permiteți DNS
$ IPTABLES -U INPUT -i eth0 -p udp -sport 53 -j ACCEPT
# Accesul la porturile 8081 și 8082 este permis numai din rețelele 91. ***. **. 0/24, 195. ***. ***. 0/23 și IP 37. ***. ** 174
pentru net în 91. ***. ** 0/24 195. ***. *** 0/23 37. ***. ** 174; face
$ IPTABLES -A INPUT -p tcp -m tcp -s $ net -m multiport -dports 8081,8082 -j ACCEPT
făcut
$ IPTABLES -U INPUT -p tcp -m tcp -m multiport -dports 8081,8082 -j DROP
# Activați ping-ul
$ IPTABLES -U INPUT -p icmp -j ACCEPT
Reporniți scriptul astfel încât regulile să intre în vigoare, în același timp verificăm erorile:
În caz de erori - va fi indicat în ce linie ce eroare. De exemplu:
iptables v1.4.8: protocolul necunoscut `tcp-dport 'specificat
Spațiul după tcp lipsește.
Puteți vedea regulile actuale cu opțiunea -list:
# iptables -list
Lanț INPUT (politică DROP)
direcționați țintă destinație sursă pro opt
ACCEPTATI - oriunde oriunde
ACCEPTATI toate - oriunde oriunde state legate, stabilit
ACCEPT tcp - oriunde oriunde tcp dpt: ssh
ACCEPT tcp - oriunde oriunde tcp flags: FIN, SYN, RST, limita ACK / RST: avg 1 / sec burst 5
ACCEPT tcp - oriunde oriunde tcp dpt: ftp
ACCEPT tcp - oriunde oriunde tcp dpt: www
ACCEPT tcp - oriunde oriunde tcp dpt: https
ACCEPT tcp - 0. ***. ***. 77.colo.static.dc.volia.com/24 oriunde tcp dpt: smtp
ACCEPT tcp -! 0. *** ***. 77.colo.static.dc.volia.com/24 oriunde tcp dpt: smtp
ACCEPT tcp - 46. ***. ***. 77.colo.static.dc.volia.com oriunde tcp dpt: pop3
ACCEPT udp - oriunde oriunde udp spt: domain
ACCEPT tcp - 91. ***. ** 0/24 oriunde tcp multiport dports tproxy, 8082
ACCEPT tcp - 195. ***. *** 0/23 oriunde tcp multiport dports tproxy, 8082
ACCEPT tcp - 37. ***. *** 174 oriunde tcp multiport dports tproxy, 8082
DROP tcp - oriunde oriunde tcp multiport dports tproxy, 8082
ACCEPT icmp - oriunde undeva icmp echo-request
Lanț FORWARD (politica ACCEPT)
direcționați țintă destinație sursă pro opt
Lanț OUTPUT (politică ACCEPT)
direcționați țintă destinație sursă pro opt
Mai multe exemple de utilizare.
Verificați starea IPTABLES:
# iptables -L -n -v
Lanț INPUT (politică DROP 176 pachete, 36734 octeți)
Pkts bytes țintă pro opt în destinație sursă
0 0 ACCEPT toate - lo * 0.0.0.0/0 0.0.0.0 / 0
179K 40M ACCEPTĂ toate - * * 0.0.0.0/0 0.0.0.0/0 stat asociat, stabilit
1 100 ACCEPT tcp - eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt: 22
0 0 ACCEPT tcp - eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt: 21
3 180 ACCEPT tcp - eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt: 80
1 28 ACCEPT icmp - * * 0.0.0.0/0 0.0.0.0 / 0
1 60 ACCEPT tcp - * * 195.191.226.102 0.0.0.0/0 tcp dpt: 514
0 0 ACCEPT tcp - * * 91.218.228.236 0.0.0.0/0 tcp dpt: 514
Lanț FORWARD (politică ACCEPT 0 pachete, 0 octeți)
Pkts bytes țintă pro opt în destinație sursă
Lanț OUTPUT (politică ACCEPT 180K pachete, 12M octeți)
Pkts bytes țintă pro opt în destinație sursă
Reguli curente de ieșire, numai INPUT:
# iptables-L INPUT -n -v
# iptables -L OUTPUT -n -v
Adăugați și eliminați reguli.
Efectuați regulile INPUT actuale cu liniile (numere de reguli):
# iptables -L INPUT -n -line-numere
Lanț INPUT (politică DROP)
num destinație țintă destinație opt opt
1 Acceptați toate - 0.0.0.0/0 0.0.0.0 / 0
2 ACCEPT toate - 0.0.0.0/0 0.0.0.0/0 stat asociate, stabilit
3 ACCEPT tcp - 0.0.0.0/0 0.0.0.0/0 tcp dpt: 22
4 ACCEPT tcp - 0.0.0.0/0 0.0.0.0/0 tcp dpt: 21
5 ACCEPT tcp - 0.0.0.0/0 0.0.0.0/0 tcp dpt: 80
6 ACCEPT icmp - 0.0.0.0/0 0.0.0.0/0
7 ACCEPT tcp - 195.191.226.102 0.0.0.0/0 tcp dpt: 514
8 ACCEPT tcp - 91.218.228.236 0.0.0.0/0 tcp dpt: 514
Pentru a adăuga o regulă înainte de 5:
# iptables -I INPUT 5 -i eth0 -p tcp -dport 8080 -j ACCEPT
# iptables -L INPUT -n -line-numere | grep 80
5 ACCEPT tcp - 0.0.0.0/0 0.0.0.0/0 tcp dpt: 8080
6 ACCEPT tcp - 0.0.0.0/0 0.0.0.0/0 tcp dpt: 80
Vechea regulă a fost "mutată" la linia 6, cea nouă a devenit 5.
Blocați conexiunile de intrare pentru IP8.8.8.8:
# iptables -I INPUT 7 -s 8.8.8.8 -j DROP
# iptables -L INPUT -n -line-numere | grep 8.8.8.8
7 DROP all - 8.8.8.8 0.0.0.0 / 0
# iptables -A OUTPUT -p icmp -d www.facebook.com -j DROP
# ping 173.252.101.26
PING 173.252.101.26 (173.252.101.26) 56 (84) octeți de date.
ping: sendmsg: Operația nu este permisă
ping: sendmsg: Operația nu este permisă
Să ne uităm la reguli:
# iptables -L OUTPUT -n -line-numere
Lanț OUTPUT (politică ACCEPT)
num destinație țintă destinație opt opt
1 DROP tcp - 0.0.0.0/0 173.252.101.26
# iptables -A INPUT -p tcp -destinație-port 22 -m mac -mac-sursă 00: 60: ef: 0b: f6: 1a -j ACCEPT
# iptables -A INPUT -p tcp -destinație-port 22 -m iprange -src-range 10.0.0.5-10.0.0.10 -j ACCEPT
Pentru constrângeri, se utilizează un modul connlimit. Pentru a permite numai 3 conexiuni SSH pe client:
# iptables -A INPUT -p tcp -syn -dport 22 -m connlimit -connlimit-de mai sus 3 -j REJECT
Setați numărul de solicitări HTTP la 20:
# iptables -p tcp -syn -dport 80 -m connlimit -connlimit-de mai sus 20 -connlimit -mask 24 -j DROP
-connlimit-above 3: indică faptul că regula este valabilă numai dacă numărul de conexiuni depășește 3;
-connlimit-mask 24: Specifică masca de rețea.