Bu yazının ilk 4 bölümünü IpTables ile Firewall Oluşturmak – 1 – IpTables ile Firewall Oluşturmak – 2 – IpTables ile Firewall Oluşturmak – 3 ve IpTables ile Firewall Oluşturmak – 4 başlıkları altında okuyabilirsiniz.
Internet Bağlantısını Paylaştırma
Network adres çevirisi/IP maskeleme tek bir Internet bağlantısının birkaç host arasında paylaştırılmasına olanak tanır – örneğin Linux’lu karma bir LAN ile Windows sistemi arasında.İki NIC’si ve durağan, sevkedilebilir IP adresi olan bir firewall kutusu düşünün. eth0 “genel” NIC olsun, eth1 ise “özel” NIC. Bir diğer deyişle eth0 durağan sevkedilebilir IP adrese tahsis edilmişken eth1 da özel, sevkedilemez IP’ye tahsis edilmiş olsun ve LAN alt net’ine ait olsun. Şimdi nat ve filtre tablolarına zincirler eklememiz gerekecek:
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# iptables -t filter -A FORWARD -i eth0 -o eth1 -m state –state RELATED,ESTABLISHED -j ACCEPT
# iptables -t filter -A FORWARD -i eth1 -o eth0 -j ACCEPT
Bu, durum belirtici paket araştırmasının büyük değerini gösteriyor. Nasıl yalnızca var olan bir bağlantıya ait olarak gelen paketlere izin verildiğine bakın. LAN başlıklı dışa çıkışlardan gelen tüm paketlerin geçişine izin veriliyor. (Not: filter kendiliğinden var olan tablodur; özellikle belirtmenize gerek yoktur. Bir çok iptables örneğinde de belirtmiyoruz.)
Her ne kadar ilk kural tüm çıkış trafiğini sadece firewall makinesinden çıkıyormuş gibi gösterse de, onun arkasıyla bütün bir LAN’ın bulunduğunu özellikle belirtmeye gerek yok.
Bu örnek FORWARD (sevket) ve POSTROUTING (sevk sonrası) zincirlerinin izleyeceği genel politikayı da düzenlemektedir. Maskeleme işlevini kullanırken POSTROUTING DROP politikasının özelleştirilmemiş halini düzenlemek önemlidir; aksi halde kötü niyetli bir kullanıcıların sizin gateway (giriş kapısı)ndan girip kendi kimliklerini maskelemesi mümkün olur.
# iptables -t filter -P FORWARD DROP
# iptables -t filter -P POSTROUTING DROP
Bu örnek dinamik olarak tahsis edilmiş IP’lere sahip çevirmeli bağlantılar içindir:
# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
Sunucuları Çalıştırmak
Zaman geçirmenin yaygın bir yolu da, sunucuların firewall’ların arkasına mı yoksa dışına mı konması gerektiğiyle ilgili tartışmalarla uğraşmaktır. Eğer sunucuları firewall’un arkasına koymayı tercih ederseniz, paketlerin nereden geçeceğini iptables’ın bilmesi gerekir:
# iptables -t nat -A PREROUTING -i eth0 -p tcp -dport 80 -j DNAT -to 192.168.0.10:80
# iptables -t nat -A PREROUTING -i eth0 -p tcp -dport 25 -j DNAT -to 192.168.0.11:25
Script Yazmak
Şu ana kadar tüm örnekler komut satırlarıyla yürütülen örneklerdir. Bu, yeni kuralları sınamanın iyi bir yoludur. Denemede tatmin olursanız onları bir script’e yerleştirin. Yalnızca değişkenlerin kullanımını gösterdiği ve ek örnek kural sağladığı için aşağıdaki örnek eksiksiz bir script değildir.
#!/bin/sh
#Degiskenleri Tahsis Etmek
IPTABLES=/sbin/iptables
LAN_NET=”192.168.1.0/24″
IFACE= “eth0″
LO_IFACE=”lo”
LO_IP=”127.0.0.1″
#Yuklenmesi gereken her tur kernel modulu burada yer alir
/sbin/modprobe ip_conntrack
/sbin/modprobe iptable_nat
#ozellestirilmemis kernel’de genellikle IP sevk etme yoktur. Bu islevi koymak icin:
echo “1” > /proc/sys/net/ipv4/ip_forward
#Dinamik olarak tahsis edilmis IP’li Ser’ler icin
echo “1” > /proc/sys/net/ipv4/ip_dynaddr
###Bu script her yeniden baslatildiginda tum kurallari sil bastan yapmak akillicadir
#Bircok ogretme rehberi OUTPUT’larin DROP’a ayarli olmasini tavsiye eder. Bu cok sinirlayicidir, o yuzden
#size ne uyuyorsa onu ayarlayin
$IPTABLES -P INPUT DROP
$IPTABLES -F INPUT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -F OUTPUT
$IPTABLES -P FORWARD DROP
$IPTABLES -F FORWARD
$IPTABLES -F -t nat
###Rasgele kullanisli kural ornekleri
#ssh baglantilarina sadece LAN dahilinde musaade edin
$IPTABLES -A INPUT -s LAN_NET -p tcp –destination-port ssh -j ACCEPT
#Loopback islevini acmak gerek!
$IPTABLES -A INPUT -i lo -p all -j ACCEPT
$IPTABLES -A OUTPUT -o lo -p all -j ACCEPT
###Kaynak IP’ye hile yapilmasini engelleyin; bizden geldigi iddia edilen gelen paketleri dusurun,
#ve bizden cikmayan, cikan paketleri de dusurun
$IPTABLES -A INPUT -i $IFACE -s $LAN_NET -j DROP
$IPTABLES -A OUTPUT -o $IFACE -s ! $LAN_NET -j DROP
###spyware (casus yazilim) ve truva viruslerinin kaynaklariyla irtibat kurmalarini engellemek icin
#cikis trafiginin de kisitlanmasi gerekir
$IPTABLES -A OUTPUT -o eth0 -p tcp -dport 31337 -j DROP
$IPTABLES -A OUTPUT -o eth0 -p tcp -sport 31337 -j DROP
###Bloke edilecek diger iyi port’lar 31335, 27444, 27665, 20034 NetBus, 9704, 137-139 (smb)
#…ve benzerleri…. OUTPUT DROP diyip tumden kapatmak sonra da sadece izin verilenleri belirlemek daha kolay olabilir!
Çok Önemli Uyarı
Bu noktaya kadar örneklerimizde yalnızca tcp kullandık ancak unutmayın ki bu konuda UDP ve ICMP paketleri de kullanılabilir. Bir diğer deyişle, bu öğretme rehberi katiyen eksiksiz bir firewall öğretme rehberi değildir! Umarız artık temel kavramları ve terim bilgisini anlamışsınızdır. Eğer iptables’larda yeniyseniz size tavsiyem biraz ciddi TCP/IP çalışması yapmanız ve ardından da Oskar Andreasson’un harika iptables öğrenme rehberine göz atmanızdır!
Kaynakça
iptables Öğrenme Rehberi 1.1.19 yazan Oskar Andreasson
Netfilter/iptables ana sayfa – içinde download’lar, belgeler ve e-posta listeleri var
LinuxGuruz – burada da dünya çapında derlenmiş iptables script’leri var
Building Secure Servers with Linux (Linux ile Güvenli Sunucu Kurmak) yazan Michael D. Bauer