/etc/sysconfig/iptables - čia saugomos iptable taisyklės.
/etc/sysconfig/iptables-config - iptables konfigūracinis failas.
Paketas praeina pro vieną iš šių grandinių:
Chains:
- INPUT - paketai skirti ugniasienei.
- OUTPUT - paketai išsiunčiami iš ugniasienės.
- FORWARD - maršrutizuojami paketai.
# vi /etc/sysconfig/iptables
# iptables-restore /etc/sysconfig/iptables #Išsaugom pakeitimus
# iptables -N nauja-grandine
Naujos grandinės tinimas:
# iptables -X nauja-grandine
Permeta visus paketus į nauja-grandinę:
# iptables -t filter -A INPUT -j nauja-grandine
Ip tables atvaizdavimas
# iptables -L [CHAIN]
Iptables atvaizdavimas su eilės numeriais
# iptables -L --line-numbers
Rodo išsamią info kartu su paketų statistika
# iptables -L -n -v
Iptables įrašo trynimas:
# iptables -D [CHAIN] [skaicius]
Iptables gui interfeisas:
# system-config-firewall-tui
Iptables taisyklių išsaugojimas:
# service iptables save
# /sbin/service iptables save
# chkconfig iptables on
# chkconfig --list iptables
iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:offSu Ubuntu:
$ sudo invoke-rc.d iptables-persistent save
Iptables taisyklės:
Taisyklės įsigalioja iš karto!Paketams gali būti taikomos šios taisyklės:
Rule Targets:
- DROP – numeta paketą.
- ACCEPT – priima paketą.
- LOG – įrašo paketą naudojant syslog.
- REJECT – su klaidos pranešimu atmeta paketą.
- No target – gali būti naudojama statistikai.
Ryšių būsenos:
Connection Tracking
- NEW - paketas prašantis užmegsti naują ryšį, pavyzdžiui, HTTP užklausa.
- ESTABLISHED - užmegztas ryšys.
- RELATED - kai vienas ryšys susijęs su kitu, pavyzdžiui FTP.
- INVALID - neatpažintas paketas, kuris nepriklauso nei vienam užmestam ryšiui, ryšių sekimo lentelėje.
-A (Append) - Nauja taisyklė pridedama apačioje.
-I (Insert) - Nauja taisyklė prideda viršuje.
Loginimas:
# iptables -N LOGGING
# iptables -A INPUT -j LOGGING
# iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
# iptables -A LOGGING -j DROP
Taisyklės keitimas, pakeičiant paketų įrašimo greitį:
# iptables -L --line-numbers #Pasižiūrim eilės numerį
Loginimas:
# iptables -N LOGGING
# iptables -A INPUT -j LOGGING
# iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
# iptables -A LOGGING -j DROP
Taisyklės keitimas, pakeičiant paketų įrašimo greitį:
# iptables -L --line-numbers #Pasižiūrim eilės numerį
# iptables -R LOGGING 1 -m limit --limit 5/s -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
localhost praleidimas:# iptables -A INPUT -i lo -j ACCEPT
# iptables -A OUTPUT -o lo -j ACCEPT
IP adreso blokavimas:
# iptables -A INPUT -s 192.168.50.1 -j REJECT #Jungiantis rodys klaidos kodą
ssh praleidimas; shh prisijungimas iš tam tikro ip: -s 192.168.50.1
# iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
http praleidimas:
# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
http ir https praleidimas:
# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
http ir https praleidimas:
# iptables -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
mysql praleidimas:
# iptables -A INPUT -p tcp --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
Serverio blokavimas per pietų pertrauką:
# iptables -A INPUT -p tcp -m time --timestamp 12:00 --timestop 13:00 -j DROP
# iptables -A INPUT -p udp -m time --timestamp 12:00 --timestop 13:00 -j DROP
# iptables -A OUTPUT -p tcp -m multiport -dport http,https -m time --timestart 12:00 --timestop 13:00 -d IP_adresas -j ACCEPT
# iptables -A INPUT -m limit --limit 50/minute --limit-burst 200 -j ACCEPT
# iptables -A INPUT -j REJECT
Draudžia tam pačiam ip adresui jungtis daugiau nei 10 kartų:
# iptables -A INPUT -p tcp -m multiport --dport 80,443 -m state d-state NEW -m recent --set
# iptables -A INPUT -p tcp -m multiport --dport 80,443 -m state --state NEW -m recent --update --seconds 100 --hitcount 10 -j DROP
iptables bazinis šablonas:
# Praleidžiam betkokį susijusi ar jau užmegstą ryšį
-I INPUT 1 -m state --state RELATED, ESTABLISHED -j ACCEPT
-I OUTPUT 1 -m state --state RELATED, ESTABLISHED -j ACCEPT
# Praleidžiam loopbacj
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
# Praleidžiam DHCP užklausas
-A OUTPUT -o eth0 -p udp --dport 67:68 --sport 67:68 -j ACCEPT
# Praleidžiam SSH
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -m state --state NEW -j ACCEPT
# Praleidžiam/nepraleidžia pašto
-A INPUT -p tcp -m tcp --dport 25 -m state -state NEW -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 25 -j DROP
# Išorinėms DNS užklausoms:
-A OUTPUT -p udp -m udp --dport 53 -j ACCEPT
# Išorinėms ping užklausoms:
-A OUTPUT -p icmp -j ACCEPT
# NPT - Tinklo laiko protokolui
-A OUTPUT -p udp --dport 123 --sport 123 -j ACCEPT
# HTTP serveriams
-A OUTPUT -p tcp -m tcp --dport 80 -m state --state NEW -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 443 -m state --state NEW -j ACCEPT
COMMIT
Naudingi patarimai dirbant su iptables
- Pasidaryk iptables atsarginę kopiją.
/sbin/iptables-save > /root/iptables-backup-$(date +%F)
/root/iptables-backup-2016-12-06
/sbin/iptables-save > /root/iptables-backup-$(date +%F_%H:%M)
/root/iptables-backup-2016-12-06_11:48
Iškilus bėdai atstatom iptables, su komanda:
/sbin/iptables-restore /root/iptables-backup-`date +%F`
- Bandymo metu, atstatyk iptables lenteles, numatytu laiko intervalu su cron.
$ ln -s /root/iptables-`date +%F` /root/iptables-veikianti-naujausia
*/5 * * * * /sbin/iptables-restore /root/iptables-backup-`date +\q%F` >/dev/null 2>&1
- Pridėti savo IP pirmoje taisyklėje, apsisaugant nuo užsiblokavimo
# iptables -I INPUT -s <ip-adresas> -j ACCEPT
# yum install system-config-firewall-tui dbus dbus-python
# service messagebus start
# system-config-firewall-tui
- Naudokim system-config-firewall-tui programą su grafinių interfeisu
# yum install system-config-firewall-tui dbus dbus-python
# service messagebus start
# system-config-firewall-tui
Kiti
Porto nukreipimas į kitą portą, pvz tokiu atvėju, kaip prie opvenvpn norime prisijungti per kelis portus (1194, 1195) :
-A INPUT -i <inteface>-p udp -m udp --dport 1194 -j ACCEPT-A INPUT -i <inteface>-p udp -m udp --dport 1195 -j ACCEPT...-A PREROUTING -i <inteface>-p udp --dport 1195 -j REDIRECT --to-port 1194
Kaip blokuoti svetaines per iptables?
$ host -t a facebook.com
facebook.com has address 31.13.93.36
$ whois 31.13.93.36
inetnum: 31.13.93.0 - 31.13.93.255
Sugeneravus CIDR:
31.13.93.0/24
Galutinis rezultatas:
$ iptables -A OUTPUT -p tcp -d 31.13.93.0/24 -j DROP