====== Iptables ======
{{:wiki:os:debian:iptables.png?direct&700|}}
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)
* probíhá v chainu PREROUTING a OUTPUT
* rozeznává stavy: NEW, ESTABILISHED, RELATED, INVALID
* Některé protokoly potřebují speciální podporu: **ip_conntrack_***
* Podobná podpora je potřebná i pro NAT: **ip_nat_***
* POZOR na FTP!! **modprobe ip_conntrack_ftp**
#!/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
#!/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