Iptables pre začiatočníkov
Iptables sú považované za jeden z hlavných obranných zdrojov pre mnohých správcov systému napriek tomu, že boli nahradené Nftables. Špičkoví výrobcovia sietí začlenili Iptables do hardvéru ešte v produkčnom prostredí.
Iptables je vysoko všestranný a prijíma priame príkazy od používateľa, ktorý môže načítať a uvoľniť pravidlá podľa potreby.
Tento tutoriál ukazuje, ako chrániť webový server, preposielať pripojenia na interné adresy IP z našej siete LAN a ponúkať špecifické služby iba adresám IP na zozname povolených.
Poznámka: Tento návod Iptables bol prvýkrát vydaný pred dvoma rokmi a aktualizovaný 23. mája 2021 o vylepšené príklady a snímky obrazovky vyššej kvality.
Ako nainštalovať
Iptables sú štandardne vynechané v distribúciách, ktoré obsahujú Nftables.
Ak chcete nainštalovať Iptables na distribúcie Linuxu založené na Debiane, spustite nasledujúci príkaz:
Otvorenie portov HTTP a HTTPS
Najprv pridajte všetky pravidlá ACCEPT počnúc webovým serverom.
Poznámka: Ak vytvoríte skript s pravidlami, nemusíte používať sudo.
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
Ak chcete zobraziť pridané pravidlá, spustite „iptables -L “
Kde :
Iptables = volá program
-A=pridá pravidlo
INPUT=prichádzajúca návštevnosť
-p=protokol
–ddport=cieľový port
-j = špecifikujte „cieľ“; cieľom je typ politiky: ACCEPT, DROP, REJECT (zabudovaná)…
Iptables -L=zoznam všetkých načítaných pravidiel iptables (Iptables -L -v=rovnaké s výrečnosťou.)
Vo vyššie uvedenom príklade dávame Iptables pokyn, aby pridal pravidlo pre prichádzajúcu komunikáciu cez protokol TCP a porty 80 (http) a 443 (https), ktoré sa majú akceptovať.
Príkaz môžeme zmeniť tak, aby akceptoval pripojenie iba z konkrétnej IP pridaním parametra „-s “:
Kde :
s = zdroj
Firewall môžete otestovať aj pomocou nmap:
Poznámka: V príklade vyššie sa port 443 nezobrazuje, pretože server nemá dostatočne nakonfigurovaný certifikát SSL.
Poznámka: Viac informácií o Nmape si môžete prečítať v tomto článku.
Ochrana vášho servera pomocou Iptables:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
#Open SSH Port Service
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
Kde sú nové parametre:
-m znamená „zhoda“ a používa sa na volanie rozšírení Iptables, ako je conntrack, ktoré nie je súčasťou základných funkcií iptables.
conntrack = Umožňuje sledovanie informácií o pripojeniach, ako sú konkrétne adresy alebo v tomto prípade stav pripojenia. Toto sa musí používať opatrne, pretože mnohé pravidlá na ochranu serverov pred niektorými útokmi používajú conntrack, zatiaľ čo hardvér obmedzuje jeho použitie a takéto obmedzenie sa môže použiť na preťaženie zdrojov servera.
-ctstate = určuje stav pravidla, ktoré sa má zhodovať; možné stavy sú: NOVÉ, ZATVORENÉ, SÚVISIACE a NEPLATNÉ.
to access iptables -A INPUT -p tcp -s X.X.X.X --dport 22 -m conntrack --ctstate NEW,
ESTABLISHED -j ACCEPT
#Protect your SSH Service against brute force attacks by limiting connection attempts
Iptables -A INPUT -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -j 22-test
Iptables -A 22-test -m recent --name CONNECTIONS --set --mask 255.255.255.255 --rsource
Iptables -A 22-test -m recent --name CONNECTIONS --rcheck --mask 255.255.255.255
--rsource --seconds 30 --hitcount 3 -j 22-protection
Iptables -A 22-test -j ACCEPT
Iptables -A 22-protection -j DROP
Kde :
V prvom riadku naše pravidlo hovorí „-m conntrack –ctstate NEW“, čo znamená, že ak je pripojenie nové, potom prejsť na pravidlo „22-test “.
Druhý riadok hovorí, že maska siete paketov 255.255.255.255 je pomenovaná ako CONNECTIONS.
Tretí riadok hovorí, že ak CONNECTIONS presiahne 3-krát v priebehu 30 sekúnd, brána firewall pokračuje v používaní reťazovej 22-ochrany. Štvrtý riadok hovorí, že ak CONNECTIONS neboli zobrazené viac ako 3-krát do 30 sekúnd, mohli byť prijaté.
Piaty riadok, ktorý patrí do 22-ochranného reťazca, hovorí, že treba zahodiť CONNECTIONS, ak sa zdá, že sú viac ako 3-krát v priebehu 30 sekúnd.
Teraz na záver odmietnime všetky nepriamené prichádzajúce pripojenia a povoľme všetku odchádzajúce prenosy:
iptables -P INPUT DROP
P odkazuje na politiku reťazca; pamätajte, že cieľom je politika, AKCEPTOVAŤ, DROP, ODMIETNUŤ. V tomto prípade hovoríme, že predvolenou politikou pre odchádzajúce prenosy je prijatie a predvolenou politikou pre prichádzajúce prenosy je odmietnutie, pokiaľ sme v predchádzajúcich pravidlách nešpecifikovali niečo iné. Toto je veľmi základný firewall, ktorý neobsahuje pravidlá pre mnohé útoky, na vzdelávacie účely a nie na produkciu; na konci článku pripájam firewall, ktorý som použil na produkciu na serveri; má komentáre vysvetľujúce každé pravidlo.
PRESMEROVANIE SPOJENIA NA KONKRÉTNY PORT NA KONKRÉTNU IP ADRESU
To je tiež veľmi užitočné pre používateľov stolných počítačov, ktorí chcú smerovať pripojenie cez konkrétne zariadenie; môže to byť užitočné aj pre hráčov; zvyčajne to robíme z nastavení smerovača, ale predpokladajme, že smerovacie zariadenie používa Iptables.
iptables -A POSTROUTING -t nat -p tcp -j SNAT --to-source X.X.X.X
Vyššie uvedené pravidlá vyvolajú NAT (Network Address Translation) na špecifikáciu pripojení cez protokol TCP na adresu X.X.X.X a port 8080 bude presmerovaný na adresu Y.Y.Y.Y, port 80. Druhé pravidlo určuje, že odpovede sa musia posielať na zdrojovú adresu (X.X.X.X). Pomocou týchto pravidiel môžeme povoliť prístup k IP kamere, umožniť online hranie s externými sieťami atď.
Tento tutoriál mal predstaviť začiatočníkom Iptables a vysvetľuje iba obmedzený počet základov. Nižšie môžete vidieť ukážku dobre naplánovaného firewallu používaného pre produkčný server; zahŕňa niektoré z pravidiel, ktoré sme už videli, až po zložitejšie pravidlá na zabránenie DDoS, okrem iných typov útokov.
Bonus: Ukážka produkčného firewallu
#---- Enable bad error message protection
enable /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
#---- Turn on reverse path filtering. Safer, but breaks asymmetric routing and/or IPSEC
enable /proc/sys/net/ipv4/conf/*/rp_filter
#---- Don't accept source routed packets. Source routing is rarely used for legitimate
purposes disable /proc/sys/net/ipv4/conf/*/accept_source_route
#---- Disable ICMP redirect acceptance which can be used to alter your routing tables
disable /proc/sys/net/ipv4/conf/*/accept_redirects
#---- As we don't accept redirects, don't send Redirect messages either
disable /proc/sys/net/ipv4/conf/*/send_redirects
#---- Ignore packets with impossible addresses
disable /proc/sys/net/ipv4/conf/*/log_martians
#---- Protect against wrapping sequence numbers and aid round trip time measurement
enable /proc/sys/net/ipv4/tcp_timestamps
#---- Help against syn-flood DoS or DDoS attacks using particular choices of initial
TCP sequence numbers enable /proc/sys/net/ipv4/tcp_syncookies
#---- Use Selective ACK which can be used to signify that specific packets are missing
disable /proc/sys/net/ipv4/tcp_sack
modprobe nf_conntrack_ipv4
modprobe nf_nat
# modprobe nf_conntrack_ipv6
# modprobe nf_conntrack_amanda
# modprobe nf_nat_amanda
modprobe nf_conntrack_h323
modprobe nf_nat_h323
modprobe nf_conntrack_ftp
modprobe nf_nat_ftp
# modprobe nf_conntrack_netbios_ns
# modprobe nf_conntrack_irc
# modprobe nf_nat_irc
# modprobe nf_conntrack_proto_dccp
# modprobe nf_nat_proto_dccp
modprobe nf_conntrack_netlink
# modprobe nf_conntrack_pptp
# modprobe nf_nat_pptp
# modprobe nf_conntrack_proto_udplite
# modprobe nf_nat_proto_udplite
# modprobe nf_conntrack_proto_gre
# modprobe nf_nat_proto_gre
# modprobe nf_conntrack_proto_sctp
# modprobe nf_nat_proto_sctp
# modprobe nf_conntrack_sane
modprobe nf_conntrack_sip
modprobe nf_nat_sip
# modprobe nf_conntrack_tftp
# modprobe nf_nat_tftp
# modprobe nf_nat_snmp_basic
#Now we can start adding selected services to our firewall filter. The first such thing
is a localhost interface iptables -A INPUT -i lo -j ACCEPT
#We told the firewall to take all incoming packets with tcp flags NONE and just DROP them.
iptables -A INPUT -p tcp ! -m conntrack --ctstate NEW -j DROP
#We tell iptables to add (-A) a rule to the incoming (INPUT)- SSH works on port 50683
instead 22.
iptables -A INPUT -p tcp -m tcp --dport 50683 -j ACCEPT
iptables -A INPUT -p tcp -m tcp -s specific ip --dport 50683 -j ACCEPT
iptables -A INPUT -p tcp -m tcp -s specific ip --dport 50683 -j ACCEPT
iptables -A INPUT -p tcp -m tcp -s specific ip --dport 50683 -j ACCEPT
iptables -A INPUT -p tcp --dport 50683 -m conntrack --ctstate NEW -m recent --set
--name SSH -j ACCEPT
iptables -A INPUT -p tcp --dport 50683 -m recent --update --seconds 60 --hitcount 4
--rttl --name SSH -j LOG --log-prefix "SSH_brute_force "
iptables -A INPUT -p tcp --dport 50683 -m recent --update --seconds 60 --hitcount 4
--rttl --name SSH -j DROP
iptables -A INPUT -p tcp --dport 50683 -m conntrack --ctstate NEW -m recent --set
--name SSH
iptables -A INPUT -p tcp --dport 50683 -m conntrack --ctstate NEW -j SSH_WHITELIST
iptables -A INPUT -p tcp --dport 50683 -m conntrack --ctstate NEW -m recent --update
--seconds 60 --hitcount 4 --rttl --name SSH -j ULOG --ulog-prefix SSH_bru
iptables -A INPUT -p tcp --dport 50683 -m conntrack --ctstate NEW -m recent --update
--seconds 60 --hitcount 4 --rttl --name SSH -j DROP
#Now I allow imap,and smtp.
-A INPUT -p tcp --dport 25 -j ACCEPT
# Allows pop and pops connections
-A INPUT -p tcp --dport 110 -j ACCEPT
-A INPUT -p tcp --dport 995 -j ACCEPT
############ IMAP & IMAPS ############
-A INPUT -p tcp --dport 143 -j ACCEPT
-A INPUT -p tcp --dport 993 -j ACCEPT
########### MYSQL ###################
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT
########## R1soft CDP System ###############
iptables -A INPUT -p tcp -m tcp -s specific ip --dport 1167 -j ACCEPT
############### outgoing ###################
iptables -I INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
### Allow ongoing, block incoming not defined ###
iptables -P OUTPUT ACCEPT
iptables -P INPUT DROP
iptables -L -n
iptables-save | tee /etc/iptables.test.rules
iptables-restore < /etc/iptables.test.rules
#service iptables restart