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:

sudo apt update && apt install iptables

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 80 -j ACCEPT
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 “:

sudo iptables -A INPUT -s 127.0.0.1 -p tcp --dport 80 -j ACCEPT

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:

#Open HTTP and HTTPS services.

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É.

#Protect your SSH Service against brute force attacks by allowing only a specific IP

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 OUTPUT ACCEPT

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 PREROUTING -t nat -p tcp -d X.X.X.X --dport 8080 -j DNAT --to-destination Y.Y.Y.Y:80

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

iptables -F

#---- 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