magmalinux-alt-aga-interneti-paylastirmak

6  Alt Ağa İnterneti Paylaştırmak

Bu bölümde, önceki bölümlerde öğrendiklerimizi uygulamak için; bir bilgisayarın (sunucu) internetini, bu bilgisayara bağlı alt ağa paylaştıracağız. Bilgisayarımızın; internete bağlı olan arayüzünün eth0 ve IP adresinin 192.168.1.2, alt ağa bağlı olan arayüzünün eth1 ve IP adresinin 10.0.0.1 olduğu varsayımını yaparak örneğimizi gerçekleştirelim.
 

6.1  FORWARD Zinciri Ayarları

Alt ağımızdaki bilgisayarların birbiri arasında iletişim kurması için, kural tanımlamalarını FORWARD zincirinde yapacağız:

# iptables -P FORWARD DROP
# iptables -A FORWARD -i eth1 -j ACCEPT
# iptables -A FORWARD -o eth1 -j ACCEPT

kuralını tanımlıyoruz. İlk kural ile FORWARD zincirimiz için varsayılan politikayı ayarladık. İkinci kural ile, eth1'e gelen FORWARD zincirindeki paketleri, üçüncü kural ile eth1'den giden FORWARD zincirindeki paketleri kabul ettik. Böylelikle, eth1 arayüzüne bağlı, alt ağdaki bir bilgisayar bir başka bilgisayara gönderdiği paketlere izin veriyoruz.

Yukarıdaki kuralların çalışabilmesi için, ayrıca çekirdeğimizde IP Forward özelliğinin açık olması gerekiyor. Bu özelliği açmak için;

# sysctl -w net.ipv4.ip_forward=1

komutunu çalıştıralım. Yaptığımız bu ayar, bilgisayarı yeniden başlattığımızda kaybolacak. Eğer bu özelliğin sistemde kalıcı olmasını istiyorsak, aşağıdaki satırı /etc/sysctl.conf dosyasına girmemiz gerekiyor:

net.ipv4.ip_forward=1

 

Alt ağ internete çıkarken, bazı portları kullanmamasını istiyorsak, bu işlemi de FORWARD zincirinde yapacağız. Örneğin, alt ağdakilere MSN Messenger'ın kullandığı portu kapatmak istiyorsak:

# iptables -A FORWARD -i eth1 -o eth0 -p tcp –dport 1863 -j DROP

kuralını tanımlayalım. Dikkat! Yukarıdaki kuralın iş görebilmesi için, bu kuralı, "-A FORWARD -i eth1 -j ACCEPT" kuralından önce tanımlamalısınız. Aksi halde paketler yukarıdaki kuralla eşleşmeden önce, "-A FORWARD -i eth1 -j ACCEPT" kuralı ile eşleşmiş olacak, ve bu paketlere izin verilecek.

Yukarıdaki örnekteki gibi başka portları da kapatmak istiyorsak, –dport parametresinde belirttiğimiz port numarasını değiştirerek, aynı şekilde yeni kurallar eklemeliyiz.
 

6.2  NAT Ayarları

Alt ağımızın birbirleri arasında iletişimine izin verdikten sonra; alt ağımızın bu sunucu üzerinden internete çıkmasına izin verelim. Bunun için, alt ağdaki bilgisayarlardan gelen paketlerin, internete gönderilmeden hemen öncesinde kaynak IP adresini değiştireceğiz:

# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Masquerading, bizim yerimize otomatik olarak eth0'dan çıkan paketlerin, kaynak IP adreslerini, -o parametresi ile belirtilen eth0 arayüzünün IP adresi olarak değiştirecek. MASQUERADE yerine SNAT hedefini kullandığımız zaman, kaynak IP adresini elle girmemiz gerekirdi. Yani eth0 arayüzünün IP adresi 192.168.1.2 ise, yukarıdaki kural yerine aynı anlama gelen aşağıdaki kuralı da kullanabilirdik:

# iptables -t nat -A POSTROUTING -o eth0 -j SNAT –to 192.168.1.2


Bu işlemden sonra alt ağdaki bilgisayarlar ağ geçitleri ve IP adresleri düzgün bir şekilde ayarlanmış ise, internete çıkabilirler (Sunucu üzerine DHCP sunucusu kurarak, alt ağdaki bilgisayarların otomatik IP adresi almalarını sağlayabilirsiniz).

İnterneti paylaştırmanın dışında, biraz daha ayar yapalım. Örneğin, alt ağımızdan 80 numaralı portlara giden paketlerini Squid proxy sunucusuna yönlendirelim:

# iptables -t nat -A PREROUTING -i eth1 -p tcp –dport 80 -j DNAT –to 192.168.1.2:3128

 

Daha sonra kullanabilmek için tanımladığımız bu kuralları düzenleyip bir betik dosyası haline getirelim:

#!/bin/sh

sysctl -w net.ipv4.ip_forward=1
iptables -P FORWARD DROP
iptables -A FORWARD -i eth1 -o eth0 -p tcp –dport 1863 -j DROP
iptables -A FORWARD -i eth1 -j ACCEPT
iptables -A FORWARD -o eth1 -j ACCEPT

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A PREROUTING -i eth1 -p tcp –dport 80 -j DNAT –to 192.168.1.2:3128

Bu betiği, her sistem açılışında çalıştırmak için /etc/rc.local dosyasına aşağıdaki satırı ekleyin (betiğin /usr/local/bin dizininde iptables.sh isminde olduğu varsayılmıştır. Siz betiğin yolunu kendinize uygun bir biçimde değiştirin):

sh /usr/local/bin/iptables.sh