IPTables Kullanımı

Linux'ın hayatımıza girmesi ile özellikle uygulama sunucularındaki yapıların esnekleşmesi çoğu sistem yöneticisinin işini kolaylaştırmıştır. Özellikle güvenlik olgusunun önem kazanması ile muhafaza edilmeyen, korunup takibi yapılmayan sistemler art niyetli kullanıcıların iştahını kabartıyor.

Bu makalede Herhangi bir Linux sunucusunun IPTables ile nasıl temel güvenlik yapılandırmasından geçirileceğini ve bu Esnek yönetim aracının nasıl kullanılacağını inceleyeceğiz.

Öncelikle IPTables'ı tanıyalım. IPTables Linux, Unix ve BSD sistemler için geliştirilen Nic üzerinden geçen trafiğin ve dataların Başlıklarına bakarak erişim denetimlerini sağlayan pratik bir araçtır. Hemen güncel Linux sürümü IPTables'ı bünyesinde barındırır. Bunun için IPTables'ı kuruluma çoğu zaman ihtiyaç duymayız. Bu makalede IPTables'ın kurulumundan çok kullanımını ve pratik yol ve yöntemlerini inceleyeceğiz.

Sırası ile başlayalım. IPTables, daha öncede bahsettiğimiz gibi, Ethernet aygıtımız üzerinden geçen trafikdeki dataların başlıklarına bakarak erişim denetimlerini sağlar. Bu denetimleri IPTables komutu ile veririz. IPtables komutunun temel kullanım betikleri ve prosedürü şu şekildedir ;

#iptables İŞLEM PROSEDÜR PROTOKOL HEDEF KAYNAK DENETİM

Şeklindedir. Şimdi sırası ile inceleyelim.

İşlem ; Bir diğer adıyla zincir. Çoğu makalede Zincir olarak tanımlanan bu ime biz daha anlaşılır olması için İşlem diyeceğiz. IPTables için en temel işlemler aşağıdaki gibidir.

N - Yeni İşlem Ekleneceğini belirtir ( New )
X - Silme işlemini belirtir. ( Eks )
L - Listeleme İşlemini belirtir ( List )
F - Tüm Kuralların silineceğini belirtir ( Flush )
Z - Sayaçların sıfırlanacağını belirtir ( Zero )
A - Yeni Kural eklentileri için kullanılır ( Add )
I - Bir aralığa kural eklemek için kullanılır ( Insert )
D - Belirtilen kuralı silmek için kullanılır ( Delete )
R - Belirtilen kuralı değiştirmek için kullanılır ( Replace )

Burada Iptables ile herhangi bi işlem yaparken yapacağımız işlemin türünü belirtiriz. "#iptables -A" diycek olursak bu yeni bir işlem eklemek istediğimizi belirtir.

Prosedür ; İşlemin yapılacağı prosedürü belirtir. Burası için üç temel Prosedür vardır. "INPUT - OUTPUT - FORWARD" Bu prosedürler ne anlama gelir açıklayalım. Sistemimiz üzerinden geçecek tüm trafikler ya giriş, ya çıkış yada yönlendirmedir. Dışarıdan sistemimize gelecek paketler için "INPUT", sistemimizden dışarıya çıkacak paketler için "OUTPUT", başka bir sistemden, diğer bir sisteme gidecek ve bizim üzerimizden geçecek paketler için "FORWARD" prosedürlerini kullanırız.

Protokol ; Denetimi hangi protokol üzerinde yapacağımızı, "Tcp, Udp, Icmp, Igmp" bu betikte belirtiriz. Örneğin "-p tcp"

Hedef ; Yapacağımız denetim işleminin hedefini belirtir. Örneğin "-d 212.174.199.71" Burada 127.0.0.1 IP adresini hedef olarak belirtiyoruz. Bu IP adresi üzerindeki herhangi bi portuda "--dport" betiğiyle belirtebiliriz. Örneğin "-d 212.174.199.71 --sport 21" diyelim. Bu betik 212.174.199.71 Nolu istemcinin 21 nolu portunu gösterecektir.

Kaynak ; Yapacağımız denetimin kaynağını belirtir. Örneğin "-s 127.0.0.1" Burada 127.0.0.1 IP adresini kaynak olarak belirtiyoruz. Bu IP adresi üzerindeki herhangi bi portuda "--sport" betiğiyle belirtebiliriz. Örneğin "-s 127.0.0.1 --sport 21" diyelim. Bu betik 127.0.0.1 Adresimizin 21 nolu portunu gösterecektir.

Denetim ; Yapacağımız denetimin türünü belirtir. Örneğin, yasaklamak istiyor isek "DROP", izin vermek istiyor isek "ACCEPT", kabul etmeyip red cevabını göndermek istiyor isek "REJECT", işlemin kaydını tutmak istiyor isek "LOG" seçenklerini kullanırız.

IPtables komutunun temel kullanım betiklerini inceledik. Şimdi bu komut ile bikaç örnek çalışma yapalım. Önce iki örnek senaryo hazırlayalım.

1. Sistemimizde HTTP, FTP, Pop3, Smtp servisleri çalışıyor olsun. Sistemimiz dışarıdan gelecek Ping'lere yanıt vermesin ve belirtilen servisler dışındaki hiçbir porta talep gönderilemesin.

2. Sistemimizde belirteceğimiz protokollere 212.175.211.19 nolu Bilgisayarın erişmesini engelliyoruz.

Şimdi bu iki temel senaryoyu sırası ile gerçekleştirelim.

1. Nolu senaryo için sistemimize dışarıdan tüm erişimlere yasaklıyalım, ve yalnızca belirtilen portlarımıza erişimleri olanaklı kılalım.

#iptables -F Prosedürleri Siliyoruz

#iptables -A INPUT -p tcp -j DROP Girişleri Yasaklıyoruz

#iptables -A INPUT -p ICMP -j DROP Ping'leri Yasaklıyoruz

#iptables -A INPUT -p tcp -s 0/0 --dport 80 -j ACCEPT 80 Nolu Portu açıyoruz

#iptables -A INPUT -p tcp -s 0/0 --dport 21 -j ACCEPT 21 Nolu Portu açıyoruz.

#iptables -A INPUT -p tcp -s 0/0 --dport 25 -j ACCEPT 25 Nolu portu açıyoruz

#iptables -A INPUT -p tcp -s 0/0 --dport 110 -j ACCEPT 110 Nolu portu açıyoruz

Şimdi sırayla inceliyelim. Öncelikle daha önce girdiğimiz tüm betikleri temizliyoruz. ( Girmiş isek )

Daha sonra IPtables -A INPUT diyerek dışıradın gelen tapeler hakkında bir kayıt gireceğimiz belirterek protokolümüzü "-p tcp" diyerek seçiyoruz. Eğer kaynak ve hedef belirtmezsek tüm kaynak ve tüm hedefleri kapsar yaptığımız işlem. Ozaman kaynak belirtmiyoruz ve "-j DROP" diyerek denetimlerimizi yasaklıyoruz. Böylelikle sistemimize dışarıdan hiç kimse ulaşamaz hale geliyor.

Şimdi Dışarıdan sistemimize Ping atılmasını engelleyelim. Bunun için yine "IPtables -A INPUT" diyoruz ve yeni bir işlem gireceğimizi belirtiyoruz. "-p ICMP" diyoruz ve üzerinde işlem yapacağımız protokolün "ICMP" olduğunu gösteriyoruz. Akabinde "-j DROP" diyoruz ve tüm kaynak ve hedefleri içine kapsayacak bir kural ile bu prosedüre engel kuyoyoruz.

Şimdi sırayla kullanacağımız servisleri açalım.

IPtables -A diyoruz, ve bir denetim gireceğimiz gösteriyoruz. "-p tcp" diyoruz ve işlemin hangi protokol üzerinde uygulanacağını belirtiyoruz. "-s 0/0" diyoruz ve kaynağı tüm network olarak gösteriyoruz. Burada hiçbirşey belirtmeyebilirdikte. "-s" kullanımına örnek olması açısından gösteriyoruz. "-s 0/0" diyerek tüm IP aralıklarını içine kapsayacağını gösteriyoruz. "--dport 80" diyerek sistemimizdeki 80 nolu portu belirtiyoruz ve "-j ACCEPT" diyerek bu porta erişimleri olanaklı kılıyoruz.

Aynı işlemi 21, 25 ve 110 nolu portlar içinde yapıyoruz.

Şimdi ikinci senaryo için örnek işlemler yapalım.

#iptables -F

#iptables -A INPUT -p tcp -s 212.175.211.29 --dport 80-j DROP

#iptables -A INPUT -p ICMP -j DROP

#iptables -A INPUT -p tcp -s 212.175.211.29 --dport 22 -j LOG

Yukarıdada basit bikaç işlem yapıyoruz ve 212.175.211.29 IP adresli istemcinin 80 nolu porta erişimini engelliyerek, Ping atamamasını sağlıyoruz. Daha sonra 22 nolu porta giriş yapmaya çalışır ise bu taleplerini Log'luyoruz.

Görüldüğü gibi IPTables oldukça pratik ve esnek bir araç. Kullanımıda bir okadar geniş ve detaylı. IPtables ile ilgili senaryolar pekiala genişletilip çoğaltılabilir. Yukarıdaki örnek işlemlerden yola çıkarak kendi senaryolarınızı üretebilir, çok daha gelişmiş, komplike güvenlik yapılandırmalarını rahatlıkla yönetebilirsiniz.