Iptables

Syntaxe:

iptables [-t tabulka] command chain [N] [match options] [-j target]

tabulka:

  
filter   - (default)filtrování, logování, počítání
nat      - překlad adres, port forwarding
mangle   - lze využít pro QoS (klasifikace provozu)

command:

-A --append    - přidá pravidlo na konec
-I --insert    - přidá pravidlo na pozici N (začátek)
-D --delete    - smaže pravidlo číslo N
-R --replace   - přepíše pravidlo číslo N
-F --fush      - smaže všechny pravidla
-P --policy    - nastaví výchozí politiku řetězce
-Z --zero      - vynuluje počítadla
-L --list      - vypíše nastavená pravidla
   -v verbose             - vypíše i počítadla a interfacy
   -n numeric             - vypíše IP adresy, porty jako čísla
   -x exact               - vypíše počítadla v bytech
   --lin --line-numbers   - zobrazí čísla pravidel

chain:

tabulka filter:  INPUT
                 FORWARD
                 OUTPUT

tabulka nat:  PREROUTING
              POSTROUTING
              OUTPUT

tabulka mangle:  INPUT
                 FORWARD
                 OUTPUT
                 PREROUTING
                 POSTROUTING
                 OUTPUT

match options:

-p proto         - protokol (TCP, UDP, ICMP, . . . )
-s source       - zdrojová IP adresa
-d destination  - cílová IP adresa
-i incoming     - příchozí síťová karta
-o outgoing     - odchozí síťová karta
--sport         - zdrojový port (TCP/UDP)
--dport         - cílový port (TCP/UDP)
--icmp-type     - druh ICMP zprávy
--tcp-flags     - lze kontrolovat které flagy jsou nastaveny
--syn           - úvodní paket TCP spojení (SYN bez ACK)
Všechny pravidla lze negovat vykřičníkem (!)

target:

ACCEPT         - povolíme (a dalších pravidel v chainu se neptáme)\\
DROP           - zahodíme (a tváříme se jakoby nic)\\
REJECT         - zahodíme, ale pošleme zpět ICMP unreachable\\
LOG            - zapíšeme info z hlavièky do logu a pokračujeme dál\\
DNAT           - změníme cílovou adresu nebo port (nebo obojí)\\
SNAT           - změníme zdrojovou adresu nebo port (nebo obojí)\\
REDIRECT --to  - speciální DNAT, pošle na lokální stroj\\
MASQUERADE     - speciální SNAT, přepíše adresu na vlastní\\
MARK           - přiřadí paketu číslo, které lze použít pro další zpracování\\
Pravidlo nemusí mít target, v tom případě se pokračuje dál a pouze
se zvedne počítadlo.

Stavový firewall (connection tracking)

/etc/network/if-pre-up.d/iptables
#!/bin/bash
#----- Smazani vsech pravidel -----
iptables -F
iptables -t nat -F
iptables -t mangle -F

#----- DEFAULTNI PRAVIDLA -----
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

#----- LOOPBACK -----
iptables -A INPUT -i lo -j ACCEPT

#----- PUBLIC ETH0 -----
# DHCP
iptables -A INPUT -i eth0 -p UDP --sport 67 --dport 68 -j ACCEPT
iptables -A OUTPUT -o eth0 -p UDP --sport 68 --dport 67 -j ACCEPT
# DNS
iptables -A OUTPUT -o eth0 -p UDP --dport 53 -j ACCEPT
iptables -A INPUT -i eth0 -p UDP --sport 53 -j ACCEPT
# HTTPS
iptables -A INPUT -i eth0 -p TCP --dport 443 -j ACCEPT
# SSH
iptables -A INPUT -i eth0 -p TCP --dport 22 -j ACCEPT
# HTTP pro APT
iptables -A OUTPUT -o eth0 -p TCP --dport 80 -j ACCEPT
# STAVOVY FIREWALL
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

#----- PRIVATE ETH1 -----
# DHCP
iptables -A INPUT -i eth1 -p UDP --sport 68 --dport 67 -j ACCEPT
iptables -A OUTPUT -o eth1 -p UDP --sport 67 --dport 68 -j ACCEPT
# HTTP -> HTTPS
iptables -A INPUT -i eth1 -p TCP --dport 80 -j REJECT
#iptables -t nat -A PREROUTING -i eth1 -p TCP --dport 80 -j REDIRECT --to 443
# HTTPS
iptables -A INPUT -i eth1 -p TCP --dport 443 -j ACCEPT
# SSH
iptables -A INPUT -i eth1 -p TCP --dport 22 -j ACCEPT
# STAVOVY FIREWALL
iptables -A INPUT -i eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT

#----- FORWARDING -----
# DNS
iptables -A FORWARD -i eth1 -o eth0 -p UDP --dport 53 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -p UDP --sport 53 -j ACCEPT
# HTTP
iptables -A FORWARD -i eth1 -o eth0 -p TCP --dport 80 -j ACCEPT
# HTTPS
iptables -A FORWARD -i eth1 -o eth0 -p TCP --dport 443 -j ACCEPT
# FTP - passiv
iptables -A FORWARD -i eth1 -o eth0 -p TCP --dport 21 -j ACCEPT
# STAVOVY FIREWALL
iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
/etc/network/if-up.d/iptables-nat
#!/bin/bash
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

příklad přesměrování webu :)

# iptables -t nat -I PREROUTING -p tcp –dport 80 -s x.x.x.x/yy -j DNAT –to-destination x.x.x.x

Omezení ssh

iptables -I INPUT 3 -p tcp -m tcp –dport 22 -m state –state NEW -m recent –hitcount 5 –seconds 180 –update -j DROP
iptables -I INPUT 4 -p tcp -m tcp –dport 22 -m state –state NEW -m recent –set -j ACCEPT