Linux iptables Kullanımı & Örnek Kurallar


Gelen Paketler = INPUT
Giden Paketler = OUTPUT

DROP = (kesmek)
ACCEPT = (izin vermek )
REJECT  = (geri bildirmek)
LOG = (loglamak)

Gelen Tüm Portları Kapatmak için ;
iptables -A INPUT -j DROP

Tüm Yazılan Kuralları Silmek İçin bu Komutu girebilirsiniz
iptables -F

Yazılan Tüm Kuralları Listeler
iptables -L

Bir ip'ye gelen tüm portları yasaklamak için;
iptables -A INPUT -j DROP -s 192.168.250.250

Bir ip'ye gelen spesifik bir portu yasaklamak için ;
iptables -A INPUT -j DROP -s 192.168.1.10 -p tcp --dport 21

Bir Ip için dışarı gidişte bir portu yasaklamak için ;
iptables -A OUTPUT -j DROP -d 192.168.1.20 -p tcp --sport 80

TCP 80 portunu içerden dışarı çıkışını yasaklamak için ; internet çıkışını
Bloklamış oluruz.
iptables -A OUTPUT -j DROP -p tcp --dport 80

Dışardan 80 port isteklerini bloklar. İnternet yine kesilir :)
iptables -A INPUT -j DROP -p tcp --sport 80


Tüm portları yasak- giriş-çıkış (başlangıçta tüm policyler accept durumdadır, 
bu kurallarla drop yaptık. artık izin kuralları yazıcam)
iptables -P INPUT DROP
iptables -P OUTPUT DROP

80 portundan geliş için izin veren kural ;
iptables -A INPUT -j ACCEPT -p udp --dport 53

80 portundan gidiş için izin veren kural ;
iptables -A INPUT -j ACCEPT -p tcp --sport 80

80 portunun çıkışını sağlamak için ;
iptables -A OUTPUT -j ACCEPT -p tcp --dport 80
iptables -A INPUT -j ACCEPT -p tcp --sport 80


Kuralları numaralı şekilde listeler ;
iptables -L --line-numbers

Bir kuralı silmek için ;
iptables -D INPUT 1
iptables -D OUTPUT 3

Kuralların tx-rx paket trafiğini görmek için ;
iptables -L -v


Kuralların sırasını değiştirmek için ; (yazdığımız kuralı 1. sıraya atar)
iptables -I INPUT 1 -j ACCEPT -s 192.168.250.200 -p tcp --dport 21

Yazdığımız kurala birden fazla port eklemek için; (-m multiport)
iptables -A INPUT -j ACCEPT -m multiport -p tcp --sport 80,81,82


Herşeyin kapalı internete izin verme kuralı ;
iptables -A OUTPUT -j ACCEPT -p tcp --dport 80
iptables -A OUTPUT -j ACCEPT -p udp --dport 53
iptables -A INPUT -j ACCEPT -p udp --sport 53
iptables -A INPUT -j ACCEPT -p tcp --sport 80


NAT İŞLEMLERİ İÇİN

PREROUTING = (içeri geliş)
POSTROUTING = (dışarı çıkış)
FORWARD     = (yönlendirme, filtreleme)

defaultta FORWARD işlemi disable'dır

/etc/sysctl.conf dosyası içerisinde

net.ipv4.ip_forward = 1 yapılır

network restart edilir


Nat filter policyleri görmek için ;
iptables -t nat -L

Birebir Nat Yazma
iptables -t nat -A PREROUTING -j DNAT -d 192.168.250.200 --to 10.1.1.5
iptables -t nat -A POSTROUTING -j SNAT -s 10.1.1.5 --to-source 192.168.250.200

80 portunun yönlendirilmesi ;
iptables -t nat -A PREROUTING -j DNAT -d 192.168.250.202 -p tcp --dport 80 --to 10.1.1.2:80
ptables -t nat -A PREROUTING -j SNAT -s 10.1.1.2 -p tcp --sport 80 --to-source 192.168.250.202

Bağlantıya kontrollü olarak izin veriyoruz.
SYN ACK FIN
0 0 1
iptables -A INPUT -j ACCEPT -m state --state NEW -p tcp --dport 80
iptables -A OUTPUT -j ACCEPT -m state --state ESTABLISHED -p tcp --sport 80
iptables -A INPUT -j ACCEPT -m state --state NEW,ESTABLISHED -p tcp --dport 80


GELEN TÜM PORTLARA KARŞILIK TEK BİR GİDEN KURALI YAZDIK. KONTROLLÜ ERİŞİM VERMİŞ OLDUK.
(SYNFLOOD, FINFOOD ATAKLARI ENGELLEMEK İÇİN)
iptables -A INPUT -j ACCEPT -m state --state NEW,ESTABLISHED -p tcp --dport 80
iptables -A INPUT -j ACCEPT -m state --state NEW,ESTABLISHED -p tcp --dport 443
iptables -A INPUT -j ACCEPT -m state --state NEW,ESTABLISHED -p tcp --dport 21
iptables -A INPUT -j ACCEPT -m state --state NEW,ESTABLISHED -p tcp --dport 25
iptables -A OUTPUT -j ACCEPT -m state --state ESTABLISHED

Passive ftp için;

iptables -A INPUT -j ACCEPT -p tcp --dport 21 -m state --state NEW
iptables -A OUTPUT -j ACCEPT -p tcp --sport 21 -m state --state ESTABLISHED
iptables -A INPUT -j ACCEPT -p tcp --dport 1024:65535 -m state --state ESTABLISHED,RELATED
iptables -A OUTPUT -j ACCEPT -p tcp --sport 1024:65535 -m state --state ESTABLISHED,RELATED
iptables -A INPUT -j ACCEPT -p tcp --dport 21 -m state --state NEW,ESTABLISHED


Belli bir interface'e kural yazmak için;
iptables -A INPUT -j DROP -i eth1 -p icmp (gelen kurallarda -i kullanılır)
iptables -A OUTPUT -j DROP -o ethO -p icmp (giden kurallarda -o kullanılır)


İNTERNETE ÇIKARMAK İÇİN (eth0'ı maskeledik)
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

iptables -A FORWARD -j ACCEPT -p tcp --dport 80
iptables -A FORWARD -j ACCEPT -p tcp --sport 80
iptables -A FORWARD -j ACCEPT -p udp --sport 53
iptables -A FORWARD -j ACCEPT -p udp --dport 53

Bire Bir Nat ;
iptables -t nat -A PREROUTING -j DNAT -d 192.168.250.200 --to 10.1.1.5
iptables -t nat -A POSTROUTING -j SNAT -s 10.1.1.5 --to-source 192.168.250.200
iptables -A FORWARD -j ACCEPT -d 10.1.1.5
iptables -A FORWARD -j ACCEPT -s 10.1.1.5

iptables -A FORWARD -j ACCEPT -d 10.1.1.5 -m state --state NEW,ESTABLISHED
iptables -A FORWARD -j ACCEPT -s 10.1.1.5 -m state --state ESTABLISHED


Mac ADresi Bazlı Yasak Kuralı Girmek için;
iptables -A INPUT -j DROP -m mac --mac-source 00:99:88:99:88:77

BİRDEN FAZLA PORTU YASAK-İZİN VERMEK İÇİN ;
iptables -A INPUT -j DROP -m multiport -p tcp  --dport 80,443,25,110
iptables -A OUTPUT -j DROP -m multiport -p tcp  --sport 80,443,25,110


250 SUBNETİNDEN GELEN 80 PORT İSTEĞİNİ REJECT EDER ;
iptables -A INPUT -j REJECT --reject-with tcp-reset -s 192.168.250.0/24 -p tcp --dport 80

ICMP İSTEKLERİNİ host-unreachable MESAJIYLA REJECT EDER ;
iptables -A INPUT -j REJECT --reject-with icmp-host-unreachable

GELEN PAKETLERDE BOZUKLUK VARSA DROP EDER ;
iptables -I INPUT 1 -j DROP -m state --state INVALID

Gelen Tüm İstekleri Log'lamak için ;  (var/log/messages)
iptables -I INPUT 1 -j LOG

YALNIZCA WEB İSTEKLERİNİ LOGLAYACAK, VE LOGUN BAŞINA WEB SERVER EKLEYECEK
iptables -A INPUT -j LOG -p tcp --dport 80 --log-prefix "web server"

SYSLOG İÇERİSİNE AŞAĞIDAKİ SATIRI EKLEYEREK İPTABLES LOGLARINI /VAR/LOG/FİREWALL.LOG'A ATICAK
kern.warn  /var/log/firewall.log

SON OLARAK YAZDIĞIMIZ KURALLARI KALICI OLARAK KAYDETMEK için ;
iptables-save > /etc/sysconfig/iptables

Yorumlar