iptables nedir, nasıl ve nerelerde kullanılır — 1?

Bu flood’da Linux’ta paket işlemenin temel taşlarından netfilter ve iptables'ı inceleyeceğiz.

netfilter Linux çekirdeğinde paketler işlenirken çağrılmak üzere callback'ler tanımlanmasına izin verir. iptables ise netfilter altyapısını kullanıp paketler işlenirken çekirdek tarafından çağrılacak callback'leri hazırlamak için bir arayüz sunar.

iptables sunucuya gelen, sunucudan çıkan ve sunucunun yönlendirdiği paketler için birer zincir tanımlamıştır. Bu zincirler sırasıyla INPUT, OUTPUT ve FORWARD olarak adlandırılır. iptables kullanıcının bu zincirlere kurallar eklemesine ve incelenen paket bu kurallardan birine uyduğunda belirli aksiyonların alınmasına olanak tanır. Paket bir zincirde eşleştiği ilk kural ile o zinciri terkeder. Paket eşleşme olduğunda ya kullanıcı tarafından tanımlanan başka bir zincire atlar ya da DROP veya ACCEPT edilir.

Bir paket zincirdeki herhangi bir kuralla eşleşmezse pakete o zincirin default aksiyonu uygulanır. default aksiyon ACCEPT olabileceği gibi DROP da olabilir. Örneğin, default aksiyonu DROP olan ve sadece TCP - 22 portuna izin verilen bir sunucuya TCP - 80 yani HTTP isteği gelirse INPUT zincirinde hiçbir kuralla eşleşmeyen pakete çekirdek tarafından DROP aksiyonu uygulanacaktır. Güvenliğin ön planda olduğu sistemlerde default DROP konseptiyle default aksiyon DROP olarak seçilir, servisler ACCEPT ile sonlanan kurallarla eklenir.

Kullanılabilirliğin ön planda tutulduğu sistemlerde ise default ACCEPT konseptiyle default aksiyon ACCEPT olarak belirlenip engellenmek istenen servisler teker teker DROP kuralıyla eklenir. Şimdi örneklerle iptables'ın nasıl kullanıldığını anlamaya çalışalım.

Aşağıdaki ekran çıktısında öncelikle mevcut kurallar silinmiş, sonra default INPUT ve OUTPUT default aksiyonları ACCEPT, FORWARD default aksiyonu ise DROP olarak belirlenmiştir. Aslında böylece FORWARD hariç efektif olarak firewall devre dışı bırakılmıştır.

Sunucuya uzaktan bağlanılıyor ise INPUT zincirinde SSH portuna izin vermeden default DROP kuralı eklenirse sunucuya erişim kaybedilir, buna dikkat etmek gereklidir. Bu durumda öncelikle zincire SSH kuralını ekleyelim.

SSH'a özel olarak izin verdikten sonra şimdi INPUT zincirinde default DROP'a geçebiliriz. default DROP'a geçerek sunucuda bir web sunucu çalıştırıp ona dışarıdan erişmeye çalışalım.

Görüldüğü üzere 80 portuna yapılan TCP bağlantı isteği bir süre beklemiş ve timeout olmuştur. Paket çekirdek tarafından DROP edildiği için istemciye, yaptığı istek ile ilgili olumlu/olumsuz bir cevap dönülmemiştir, paket resmen çöpe atılmış ve ölü taklidi yapılmıştır.

firewall'dan istemciye cevap dönülmesi istendiği zaman DROP yerine REJECT aksiyonu kullanılabilir. Aşağıdaki ekran çıktısında default ACCEPT moda geçilip TCP - 80 için REJECT aksiyonu yapılandırılmış ve Linux'un istemciye olumsuz bir cevap vermesi sağlanmıştır.

Geleneksel olarak REJECT yerine DROP kullanılmasının sebebi ağı taramak isteyen kötü niyetli kişilere IP/port ile ilgili mümkün olan en az bilgiyi mümkün olan en uzun zamanda vermektir ancak gelişen araçlarla portların paralel olarak taranması ile arada pek fark kalmamıştır.

Son olarak iptables ile belirli bir IP veya ağ arayüzüne (ör eth0) göre de filtreleme yapılabilir. Aşağıda web sunucu sadece 192.168.33.10 adresinden trafik kabul edecek şekilde yapılandırılmış ve localhost'tan yapılan istek olumsuz cevaplanmıştır.

netfilter ve iptables'ın genel kullanım alanı paket filtreleme yani firewall olarak bilinse de Linux'ta bir sonraki flood'da değineceğimiz birbirinden farklı ve faydalı fonksiyonları gerçekleştirmek için de kullanılmaktadırlar.