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.