Iptables Örnekleri
Iptables kullanımı hakkında güzel örneklerin olduğu bir site
Iptables komutunun kullanımda temel kavramlar şunlardır:
INPUT bilgisayarımıza gelen paketler için uygulanacak kuralları içeren zincirdir.
OUTPUT bilgisayarımızdan dışarı giden paketler için uygulanacak kuralları içeren zincirdir.
FORWARD bilgisayarımızdan geçen yönlendirilecek paketler için uygulanacak kuralları içeren zincirdir.
ACCEPT paket kabul edilir.
DROP paket engellenir ve paketi gönderen kişi paketin engellendiğinden haberdar edilmez.
REJECT paketi engeller fakat paketi gönderen kişiye paketin gönderilemediği haber edilir.
Kavramları kısaca öğrendiğimize göre gelelim iptablesda nasıl ayar yapılır. Bunu yapmak kavramları bildikten sonra oldukça kolay olacaktır. Ana komutlar şunlardır:
-A –append : Belirli bir zincirin sonuna bir kural eklemek için;
iptables -A INPUT ... iptables -A OUTPUT ...
-D –delete : Zinciri silmek için kullanılan komut; Silme işlemi için ya zincir numarası belirtilir ya da kuralın kendisi.
iptables -D INPUT 1 iptables -D INPUT --dport 80 -j DROP
-R –replace : Mevcut zinciri değiştirmek için;
iptables -R INPUT 1 -s 192.168.0.1 -j DROP
-I — insert : Genel zincir içinde belirlenmiş bir alana bir zincir daha eklemek için;
iptables -I INPUT 1 --dport 80 -j ACCEPT
-L –list : Kuralları listeler;
iptables -L # zincirdeki tüm kuralları listeler iptables -L INPUT # Sadece INPUT kurallarını listeler
-F –flush : Zincirdeki tüm kuralları siler;
iptables -F INPUT # INPUT zincirindeki tüm kuralları siler iptables -F # Tüm kuralları siler
-N –new-chain : Yeni bir zincir oluşturur
iptables -N LOG_DROP
-X –delete-chain : Bir zinciri siler.
iptables -X LOG_DROP # Sadece LOG_DROP zincirini siler iptables -X # Tüm zincirleri siler
-P –policy : Kernelin bir zincirdeki kurala karşılık hangi hareket tarzını göstermesi gerektiğini söyler ACCEPT, REJECT, DROP … ;
iptables -P INPUT DROP
! karakteri ile belirli bir kural içerinde ayrıcalık oluşturabilir; Örneğin tüm gelen tcp bağlantılarını engellemek ama 10.42.42.42 IP’ye ayrıcalık tanımak istiyoruz;
iptables -A INPUT -p tcp --source ! 10.42.42.42 -j DROP
-p –protocol : Kuralda kullanılacak protokol tipini belirtir: tcp, udp, icmp, all. Örneğin tüm icmp trafiğini engellemek için.
iptables -A INPUT -p icmp -j DROP
-s –source : Kaynak adresini belirtmek için kullanılır; Örneğin 192.168.42.42 no’lu ipden gelen tüm tcp trafiğini kabul etmek için.
iptables -A INPUT -p tcp -s 192.168.42.42 -j ACCEPT
-d –destination : Varış adresini belirler. Örneğin 10.1.0.1 no’lu ipye tcp trafiği için port yönlendirmesi yapılacaksa
iptables -A FORWARD -p tcp -d 10.1.0.1 -j ACCEPT
-i –in-interface : Belirli bir ağ arayüzünün gelen bağlantıları için belirli bir kuralı uygulama (Sadece INPUT, FORWARD ve PREROUTING). Örneğin eth0 aygıtında tüm gelen icmp trafiğini engellemek için
iptables -A INPUT -p icmp -i eth0 -j DROP
-o –out-interface : Belirli bir ağ arayüzünün giden bağlantıları için belirli bir kuralı uygulama (Sadece OUTPUT, FORWARD ve PREROUTING). Örneğin eth0 aygıtında tüm giden icmp trafiğini engellemek için
iptables -A OUTPUT -p icmp -o eth0 -j DROP
–sport –source-port : Kaynak portu ya da sıra halindeki portları [1024:2042] belirlemek için kullanılır. Birden fazla port belirtilcekse -m multiport parametresi kullanılır.
iptables -A INPUT -p tcp --sport 80 -j ACCEPT iptables -A INPUT -p udp --sport 80 -j DROP iptables -A INPUT -p tcp -m multiport --sport 3128,21,1000 -j DROP iptables -A INPUT -p tcp --sport 1024:2042 -j ACCEPT
–dport –destination-port : Sıra halindeki varış portlarını belirtmek için kullanılır. Birden fazla port belirtilcekse -m multiport parametresi kullanılır.
iptables -A OUPUT -p tcp --dport 110 -j DROP iptables -A OUPUT -p udp --dport 110 -j DROP iptables -A OUPUT -p tcp -m multiport --dport 110,4242,119 -j DROP iptables -A OUPUT -p tcp --dport 4925:4633 -j ACCEPT
–mac-source : MAC adresini belirtmek için kullanılır. Örneğin 42:AA:42:AA MAC adresinden gelen tüm trafiği engellemek için
iptables -A INPUT --mac-source 42:42:AA:42:42:AA -j DROP
–state : Belirli bir paket durumunun karşılaştırması için kullanılır. (ESTABLISHED, NEW, INVALID, RELATED)
iptables -A INPUT -i eth0 -p tcp --sport 80 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --dport 80 -m state --state ESTABLISHED -j ACCEPT
4.1. Bazı Örnekler:
(Örneklerde ağ arayüzü eth0 kabul edilmiştir.)
Ön ayarlı kuralların yüklenmesi: (Tüm ağ trafiğini engeller)
iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP
Loopback için izin ver:
iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT
Web trafiğine izin ver:
iptables -A INPUT -i eth0 -p tcp -m tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp -m tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
DNS’ye izin ver:
iptables -A INPUT -i eth0 -p udp -m udp --sport 53 -j ACCEPT iptables -A OUTPUT -o eth0 -p udp -m udp --dport 53 -j ACCEPT iptables -A INPUT -i eth0 -p tcp -m tcp --sport 53 -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp -m tcp --dport 53 -j ACCEPT
FTP’ye izin ver:
iptables -A INPUT -i eth0 -p tcp -m tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT iptables -A INPUT -i eth0 -p tcp -m tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -i eth0 -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp -m tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp -m tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT
IRC’ye izin ver:
iptables -A INPUT -i eth0 -p tcp -m tcp --sport 6667 -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp -m tcp --dport 6667 -j ACCEPT iptables -A INPUT -i eth0 -p udp -m tcp --sport 133 -j ACCEPT # tanımlama portu iptables -A OUTPUT -o eth0 -p udp -m tcp --dport 133 -j ACCEPT # tanımlama port
Belirli bir ip için izin ve ya da engelle:
iptables -A INPUT -s 10.123.452.36 -j ACCEPT iptables -A INPUT -s 10.123.452.36 -j DROP
4.2. Iptables Kurallarının Belirlenmesi İçin Script Kullanma:
Size nette bulduğum firewall scriptlerinin bir derlemesini vermek istiyorum. Arzu edilirse script ek kurallarla değiştirilebilir. (Tabi biraz iptables çalışmanız gerekecektir )
İlk scriptimiz tüm firewall ayarlarımızı sıfırlamak için:
Gnomeda iseniz gnome-terminal, kdede iseniz konsole’u açıyoruz. Ben gnome-terminal üzerinden gedit ile scripti anlatıcam. Kde için gedit yerine kwrite kullanabilirsiniz.
gedit firewall_reset.bash
Gedit sayfasına şu scripti kopyalıyoruz.
#!/bin/sh # # Ön tanımlı ayarlı kuralları uygula # iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT # # NAT tablosu için ön tanımlı ayarları uygula # iptables -t nat -P PREROUTING ACCEPT iptables -t nat -P POSTROUTING ACCEPT iptables -t nat -P OUTPUT ACCEPT # # Tüm kuralları sil # iptables -F iptables -t nat -F # # Tüm zincirleri sil # iptables -X iptables -t nat -X # Sonuç mesajı echo " [Resetleme sonu]"
Sonra kaydedip çıkıyoruz ve scriptimizi executable çalıştırılabilir hale getiriyoruz.
chmod +x firewall_reset.bash
Ardından scriptimizi çalıştırıyoruz ve firewall ayarlarımızı resetliyoruz (eğer iptables ile oynamadıysanız zaten önayarlı olarak bu scriptin içeriği gibidir ayarlar).
sudo sh firewall_reset.bash
Mevcut ayarları kaydetmek için şu komutu girip iptables’ı tekrar başlatıyoruz (Herhangi bir sorunda bu adımları tekrar edin ve ayarları bu şekilde resetleyin).
#Ubuntu ve türevi dağıtımlar için sudo /etc/init.d/iptables save sudo /etc/init.d/iptables restart
#Archlinux türevi dağıtımlar için sudo /etc/rc.d/iptables save sudo /etc/rc.d/iptables restart
Ardından firewall kuralları için gerekli scripti yazalım.
Yine gnome-terminalden şu komutları girip gedit penceresine scripti yapıştırıp kaydediyoruz ve scripti çalıştırılabilir hale getiriyoruz.
gedit firewall_settings.bash
#!/bin/bash # Kendi ağınızdaki ipler için ayarlayın LAN=192.168.0.1/24 # Kendi ip'nizi belirtin OWNIP=192.168.1.2 # Tüm ayarları sil iptables -F iptables -X # Ön tanımlı ayarları geri yükle. Tüm bağlantıları kabul et iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT # Yeni iki zincir oluştur iptables -N FIREWALL iptables -N TRUSTED # ESTABLISHED ve RELATED gelen bağlantılara izin ver iptables -A FIREWALL -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT # Loopback trafiğine izin ver iptables -A FIREWALL -i lo -j ACCEPT # Gönderilen tüm paketleri TRUSTED zincirine yolla iptables -A FIREWALL -j TRUSTED # Diğer tüm paketleri engelle iptables -A FIREWALL -j DROP # Tüm gelen INPUT paketleri FIREWALL zincirine yolla iptables -A INPUT -j FIREWALL # Tüm forward edilmiş paketleri engelle DROP, internet paylaşmadığımız farzediliyor. iptables -A FORWARD -j DROP # amule portları iptables -A TRUSTED -i eth0 -p udp -m udp --dport 5349 -j ACCEPT iptables -A TRUSTED -i eth0 -p udp -m udp --dport 5351 -j ACCEPT iptables -A TRUSTED -i eth0 -p tcp -m tcp --dport 5348 -j ACCEPT # bittorrent portları iptables -A TRUSTED -i eth0 -p tcp -m tcp --dport 6881:6889 -j ACCEPT # samba (Netbios'suz) iptables -A TRUSTED -i eth1 -p tcp -m tcp -s $LAN --dport 445 -j ACCEPT # Samba (Netbios) iptables -A TRUSTED -i eth1 -p udp -m udp -s $LAN --dport 137:139 -j ACCEPT iptables -A TRUSTED -i eth1 -p udp -m udp --sport 137:138 -j ACCEPT # Sonuç mesajı echo " [Iptables kuralları uygulandı] "
chmod +x firewall_settings.bash
sudo sh firewall_settings.bash
#Ubuntu ve türevi dağıtımlar için sudo /etc/init.d/iptables save sudo /etc/init.d/iptables restart
#Archlinux ve türevi dağıtımlar için sudo /etc/rc.d/iptables save sudo /etc/rc.d/iptables restart
5. Sonuç
Artık güvenlik duvarımız gayet temiz bir şekilde kullanıma hazır ve çalışıyor .
Şayet tcp için port açma ihtiyacı duyarsanız ;
iptables -A TRUSTED -i eth0 -p tcp -m tcp --dport port_numarası -j ACCEPT
udp için port açacaksanız;
iptables -A TRUSTED -i eth0 -p udp -m udp --dport port_numarası -j ACCEPT
Yeni bir iptables kuralı girdiğinizde aşağıdaki adımları tekrarlamanız gerekmektedir.
#Ubuntu ve türevi dağıtımlar için sudo /etc/init.d/iptables save sudo /etc/init.d/iptables restart
#Archlinux ve türevi dağıtımlar için sudo /etc/rc.d/iptables save sudo /etc/rc.d/iptables restart
Gördüğünüz gibi gayet kolay bir şekilde iptables yapılandırması yaparak güvenlik duvarımızı kişiselleştirebiliriz. Iptables ayarlaması için yazılmış GTK ve QT arayüzleri de mevcut. Örneğin GTK ile yazılmış firestarter kullanımı gayet kolay bir arayüzdür.
iptables ile belirli bir portu belirli bir ip aralığına yasaklamak için:
Kaynak