Bu kısımda ise elimden geldiğince Iptables ile NAT (Network Address
Translation) işlemlerine değineceğim. Iptables'ın NAT özelliğini:
Internet bağlantısını paylaştırmak,
Sunucu yükünü dağıtmak/paylaştırmak,
Şeffaf vekil tanımlamak,
gibi işlemlerde kullanırız.
NAT özelliği temel olarak iki bölümden oluşur. Kaynak NAT (SNAT) ve
Hedef NAT (DNAT).
SNAT (POSTROUTING) kaynak adres üzerinde bir değişiklik yapılmak
isteniyorsak kullanılır. Maskeleme (Masquerading) işlemi SNAT ile
yapılır. İç ağdan gelen paket SNAT işlemi sonucunda dış ağa sanki
bizim ip adresimizden gelmiş gibi iletilir ve gelen sonuç ise bizim
tarafımızdan, istek yapılan IP'ye iletilir.
DNAT (PREROUTING) ise hedef adres üzerinde bir değişiklik yapılmak
isteniyorsa kullanılır. Örneğin makinamıza gelen bir paketi iç/dış
ağdaki bir başka makinaya yönlendirmek istiyorsak DNAT kısmı ile
işlem yaparız. Paket bize gelir fakat bu işlem sonucunda paket hedef
adres değiştirilmiş olarak yoluna devam eder. Transparent proxy, port
yönlendirme, yük paylaşımı (load sharing) gibi işlemlerde bu kısmı
kullanıyoruz.
Bu işlemler için -t nat parametresi ile belirlediğimiz
iptables'ın NAT ile ilgili tablosunu kullanıyoruz. O yüzden nat işlemlerini
kullanmak için ilk olarak -t nat parametresini kullanmamız
gerekiyor. Daha sonra ise yapacağımız işlem cinsine göre -A
parametresinden sonra POSTROUTING yada
PREROUTING'i kullanıyoruz.
Fakat burada dikkat edilmesi gereken nokta PREROUTING
işleminde sadece giriş parametrelerinin, POSTROUTING
işleminde ise sadece çıkış parametrelerinin kullanılması gerektiğidir.
PREROUTING işlemlerinde:
-j [DNAT,REDIRECT] pakete uygulanacak işlemi belirler.
DNAT: Paketin hedef
adresini değiştirir ve yollar.
REDIRECT: Paketi
hedef adresini değiştirmeden başka bir adrese iletir.
(Şeffaf vekil işlemleri)
POSTROUTING işlemlerinde:
-j [SNAT, MASQUERADE] pakete uygulanacak işlemi
belirler.
SNAT: Paketin kaynak
adresini değiştirme işlemini gerçekleştirir.
MASQUERADE: Pakete
maskeleme işlemini uygular. Bu işlem sonucunda paketin kaynak adresi
ve kaynak portu, sunucu adresi ve boş bir port ile eşlenerek hedefe yollanır.