Listuje zawartość tablic iptables. Domyślne tabele (łańcuchy chains) - INPUT, FORWARD, OUTPUT
(Przełącznik -v dodaje dodatkowe pola - interfejsy):
iptables -L -v
Dodaje regułę do łańcucha
iptables -A INPUT
Czyści cały łańcuch
iptables -F INPUT
Usuwa regułę z łańcucha
iptables -D INPUT
Ustawia domyślną politykę łańcucha: ACCEPT, REJECT, DROP
iptables -P INPUT DROP
Opcja pozwalająca na dopasowania reguł bazując na stanie połączenia. Udostępnia opcję --ctstate
-m conntrack
Definiuje listę stanów porównywanych przez regułę firewalla.
--ctstate
Poprawne stany, to:
Ograniczenie dozwolonych pakietów do podanej liczby w jednostce czasu:
-m limit
Pozwala używać opcję --limit.
--limit - maksymalna liczba pakietów w jednostce czasu. Dostępne jednostki:
"/second", "/minute", "/hour", or "/day"
Jeśli opcja ta nie została użyta a zastosowano przełącznik -m limit, to domyślną wartością jest "3/hour".
Kilka przykładów:
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT // Old deprecated version of above
iptables -A INPUT -p tcp --dport ssh -j ACCEPT
iptables -I INPUT 1 -i lo -j ACCEPT
Żeby karta pobierała adres przez DHCP wystarczy do pliku /etc/network/interfaces dodać linijki: auto eth0 iface eth0 inet dhcp
Pobiera nowy adres ip z serwera dhcp: dhclient eth0
Poniżej znajduje się przykładowy plik firewalla - iptables.sh:
#!/bin/sh
IPTABLES=/sbin/iptables
MODPROBE=/sbin/modprobe
LAN=192.168.0.0/24
LAN_IFACE=wlp3s0
WAN_IFACE=eth0
LOCAL=127.0.0.1
LOCAL_HTTP_SERVER=192.168.0.1:80
LOCAL_HTTPS_SERVER=192.168.0.1:443
LOCAL_DNS_SERVER=192.168.0.1:53
# Usuń istniejące reguły oraz ustaw domyślną politykę na DROP
echo "[+] Usuwanie istniejących reguł..."
$IPTABLES -F
$IPTABLES -F -t nat
$IPTABLES -F INPUT
$IPTABLES -F OUTPUT
$IPTABLES -F FORWARD
$IPTABLES -X
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP
# Załaduj moduły śledzące połączenia
$MODPROBE ip_conntrack
$MODPROBE iptable_nat
$MODPROBE ip_conntrack_ftp
$MODPROBE ip_nat_ftp
#################################################################################################################################################
### łańcuch INPUT ###
#################################################################################################################################################
echo "[+] Ustawianie reguł łańcuhca INPUT..."
#akceptuj połączenia loopback
$IPTABLES -A INPUT -i lo -s $LOCAL -m state --state NEW -j ACCEPT
# reguły śledzące stan połączeń
$IPTABLES -A INPUT -m state --state INVALID -j LOG --log-prefix "[ipt]: DROP INVALID IN: " --log-ip-options --log-tcp-options
$IPTABLES -A INPUT -m state --state INVALID -j DROP
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# reguły anti-spoofing
$IPTABLES -A INPUT -i $LAN_IFACE ! -s $LAN -j LOG --log-prefix "[ipt]: SPOOFED IN: " --log-ip-options --log-tcp-options
$IPTABLES -A INPUT -i $LAN_IFACE ! -s $LAN -j DROP
# dozwolone reguły
#$IPTABLES -A INPUT -i $LAN_IFACE -p tcp -s $LAN --dport 22 --syn -m state --state NEW -j LOG --log-prefix "[ipt]: ACCEPTED SSH NEW: " --log-ip-options --log-tcp-options
#$IPTABLES -A INPUT -i $LAN_IFACE -p tcp -s $LAN --dport 22 --syn -m state --state NEW -j ACCEPT
$IPTABLES -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
# domyślna reguła logująca łańcucha INPUT
$IPTABLES -A INPUT ! -i lo -j LOG --log-prefix "[ipt]: DEF DROP INPUT: " --log-ip-options --log-tcp-options
#################################################################################################################################################
### łańcuch OUTPUT ###
#################################################################################################################################################
echo "[+] Ustawianie reguł łańcucha OUTPUT..."
#akceptuj połączenia loopback
$IPTABLES -A OUTPUT -o lo -d $LOCAL -m state --state NEW -j ACCEPT
# reguły śledzące stan połączeń
$IPTABLES -A OUTPUT -m state --state INVALID -j LOG --log-prefix "[ipt]: DROP INVALID OUT: " --log-ip-options --log-tcp-options
$IPTABLES -A OUTPUT -m state --state INVALID -j DROP
$IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# dozwolone reguły
#ftp
$IPTABLES -A OUTPUT -p tcp --dport 21 --syn -m state --state NEW -j ACCEPT
#ssh
$IPTABLES -A OUTPUT -p tcp --dport 22 --syn -m state --state NEW -j ACCEPT
#smtp
$IPTABLES -A OUTPUT -p tcp --dport 25 --syn -m state --state NEW -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 465 --syn -m state --state NEW -j ACCEPT
#imaps
$IPTABLES -A OUTPUT -p tcp --dport 993 --syn -m state --state NEW -j ACCEPT
#pop3s
$IPTABLES -A OUTPUT -p tcp --dport 995 --syn -m state --state NEW -j ACCEPT
#whois
$IPTABLES -A OUTPUT -p tcp --dport 43 --syn -m state --state NEW -j ACCEPT
#http
$IPTABLES -A OUTPUT -p tcp --dport 80 --syn -m state --state NEW -j ACCEPT
#https
$IPTABLES -A OUTPUT -p tcp --dport 443 --syn -m state --state NEW -j ACCEPT
#dns tcp
$IPTABLES -A OUTPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT
#dns udp
$IPTABLES -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT
#echo
$IPTABLES -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
# domyślna reguła logująca łańcuch OUTPUT
$IPTABLES -A OUTPUT ! -o lo -j LOG --log-prefix "[ipt]: DEF DROP OUTPUT: " --log-ip-options --log-tcp-options
Poniżej znajduje się przykładowy plik firewalla IPv6 - ip6tables.sh. Domyślnie loguje on i blokuje pakiety we wszystkich łańcuchach: INPUT, OUTPUT, FORWARD:
#!/bin/bash
ip6tables -F INPUT
ip6tables -F OUTPUT
ip6tables -F FORWARD
ip6tables -X
ip6tables -P INPUT DROP
ip6tables -P FORWARD DROP
ip6tables -P OUTPUT DROP
# #############################################################################################################
# INPUT
# #############################################################################################################
ip6tables -A INPUT -j LOG --log-prefix "[ipt]: INPUT6 DROP: "
# #############################################################################################################
# #############################################################################################################
# #############################################################################################################
# OUTPUT
# #############################################################################################################
ip6tables -A OUTPUT -j LOG --log-prefix "[ipt]: OUTPUT6 DROP: "
# #############################################################################################################
# #############################################################################################################
# #############################################################################################################
# FORWARD
# #############################################################################################################
ip6tables -A FORWARD -j LOG --log-prefix "[ipt]: FORWARD6 DROP: "
# #############################################################################################################
# #############################################################################################################
Wypisuje na standardowe wyjście aktualny zestaw reguł firewalla:
iptables-save
Ustawia zestaw reguł firewalla zapisanych wcześniej przez polecenie iptables-save w pliku firewall.ipt:
iptables-restore firewall.ipt
lub:
cat firewall.ipt | iptables-restore