FreeBSD sistemlerde IPFIREWALL üzerine

NATd (NAT Daemon) Kurulumu ve Konfigürasyonu

Güncellenme tarihi: 12 Ağustos 2002


NAT (Network Address Translation), local area network ve internet bağlantısının birlikte yer aldığı ortamlarda olmazsa olmaz bir ihtiyaçtır.
NAT Daemon'ın çalışabilmesi için öncelike IPFW kurulu bir sisteme ihtiyacımız var. Eğer IPFW dökümantasyonunu okumadıysanız bu dökümantasyonu okumaya devam etmeyin. IPFW dökümantasyonunu http://bsd.mersin.edu.tr adresinde bulabilirsiniz. IPFW ile en sorunsuz çalışan NAT yazılımı NAT Daemondur. FreeBSD ile birlikte default olarak yüklenir. Kernel konfigürasyonuna ihtiyaç duymaz.


* BAŞLANGIÇ:

NATd'yi aktive etmek için /etc/rc.conf dosyasına aşağıdaki satırları eklemek gerekli.

natd_enable="YES"
natd_flags="-f /etc/natd.conf"

natd_flags değişkenine NAT daemona verilecek parametreler atanır. Yazdığımız parametre, konfigürasyon dosyası olarak "/etc/natd.conf" u seçtiğimizi ifade ediyor.


* KONFİGÜRASYON:

Konfigürasyonu aslında oldukça basit olmasına rağmen, NATd hakkında dökümantasyon bulmak gerçekten zor. Konfigürasyona başlayalım:
Öncelikle /etc/natd.conf dosyasını oluşturalım. Bunun için touch /etc/natd.conf  komudunu uygulayın. Daha sonra kullanmak istediğiniz parametreleri belirtilen formatta /etc/natd.conf dosyasına ekleyin:

NATd'nin marifetli parametreleri aşağıda listelenmiştir:

log <yes|no>

Ör: log yes
Bu parametre NAT bilgilerini ve istatistiklerini /var/log/alias.log dosyasına loglar.


verbose <yes|no>

Ör: verbose no
verbose parametresi natd'nin başlarken daemon modunda başlayıp başlamayacağını belirtir. verbose yes ise daemon mod başlamaz, kontrol terminali gelir ve bütün paket değişimleri gösterilir. Bu parametre sadece debugging esnasında kullanılır.


same_ports <yes|no>

Ör: same_ports yes
Giden paketlerin port numaralarının değişmesini engellemeye çalışır. Eğer o port numarası başkası tarafından kullanılıyorsa başka bir port kullanılır. Bu, peer to peer connectionlar için gerekli bir parametredir. Önerilen değer yes.


redirect_address <yerelIP> <statikIP>

Ör: redirect_address 10.1.1.2  212.122.155.74
Burada "212.122.155.74" nolu IPye gelen istekler "10.1.1.2" nolu IPye yönlendirilecek. Yani StaticNAT yapılıyor.


redirect_port proto yerelIP[,yerelIP[,...]] statikIP

Ör: redirect_proto tcp www1:http,www2:http,www3:http www:http
Bu şekilde bir sözdizimi, www'ye gelen http isteklerini www1,www2,www3 hostlarının birine yönlendirecektir.


redirect_proto <proto> <yerelIP> [statikIP [remoteIP]

Ör: redirect_proto tcp 192.168.0.2 212.122.125.2
192.168.0.2 IP adresli bir sunucumuz olsun. 192.168.0.2 ve 212.122.125.2 IPleri arasinda Static NAT yapılmış olsun. Yani sunucumuzun statik IPsi 212.122.125.2. Bu durumda local networkten 212.122.125.2 nolu IPye bir istek geldiğinde, bu istek önce internete çıkar daha sonra geri gelip sunucuya ulaşır. Bu ise zaman, perfomans ve verim kaybıdır. Bunu engellemek için bu isteği direk kaynağına biz yönlendiriyoruz. Yani diyoruz ki 212.122.125.2 nolu IPye istek gelirse 192.168.0.2'ye yolla. Bu durumu statik NATla karıştırmayın. Statik NAT genellikle dışardan gelen isteklere uygulanır.
Bunların yanında bi de remoteIP tanımlanırsa remoteIPye giden istekleri tanımladığınız yerelIP'ye yönlendirecektir.


alias_address <adres>

Ör: alias_address 212.122.125.5
Bu parametrenin kullanım amacı dinamik natta kullanılacak registeredIP tanımlanmasıdır. Bu parametre kullanılmayacaksa interface parametresi kullanılmalıdır. Aynı konfigürasyonda alias_address ve interface kesinlikle birlikte kullanılmamalıdır. Ancak ikisinden birinin tanımlanması şarttır. alias_address'e verilen IP adresi başkası tarafından kullanılmamalıdır. Bu örnekte bütün yerelağdaki kullanıcıların internete çıkarken kullanacakları IP 212.122.125.5 olacaktır.


interface <ethernet>

Ör: interface fxp0
Bu parametrenin tanımlanması ile alias_addresiniz, tanımlamış olduğunuz interface'in IP'si olarak atanır. Bu parametre kullanılmayacaksa alias_address parametresi kullanılmalıdır. Aynı konfigürasyonda interface ve alias_address kesinlikle birlikte kullanılmamalıdır. Ancak ikisinden birinin tanımlanması şarttır.


proxy_only

Ör: proxy only
NAT deamon'u sadece transparent proxy yapmasına zorlar. Normal NAT işlemi yapılmaz.


proxy_rule port <portno> server <a.b.c.d:yyyy>

Ör: proxy_rule port 80 server 192.168.0.1:8080
Transparent Proxy yapmaya yarayan bu parametre ilgili örnekte port 80'e gelen istekler 192.168.0.1 adresli proxy sunucusunun 8080 nolu portuna yönlendirilecektir.


unregistered_only <yes|no>

Ör: unregistered_only yes
Bu sayede local kullanicilar registered IP kullanamayacaklar. Kullanicilar zorunlu olarak unregistered IP kullanacak. Aksi takdirde NAT'a dahil edilmediği için internete çıkamayacak. Bu parametre registered IPlerinizi manage etme açısından çok önemlidir. Düşünsenize local bir kullanıcı gidiyor ve herhangi bir serverınızın IPsini kullanmaya çalışıyor. Eğer unregistered_only no ise server'ınızın etherneti devredışı kalacaktır!


* Uyarılar ve Önemler:

NATd çalışmaya başladığınde, IPFW'ye NATd ile ilgili kurallar ekleyecektir. Ancak bu kuralların sonuncusu ise aynen şöyle “allow all from any to any”. Yani tüm protokollerde gelen ve giden tüm paketlerin geçmesine izin ver.
Eğer bu sunucuyu firewall amaçlı kullanmayacaksanız, kurallarda herhangi bir değişiklik yapmanıza gerek yok. Ancak hem Firewall hem de NAT yapan bir sunucu yapmayı düşünüyorsanız, bu kuralları silip yeni düzenlemenizi yapmalısınız. En çok dikkat etmeniz gerek nokta, firewall kurallarının natd destekli olarak yazılması. Aşağıda bir kural sözdizimi örneği mevcut:

/sbin/ipfw add allow tcp from any to any 80 via fxp1

fxp1'den geçen hedef bilgisayarın tcp port 80'ine istekte bulunan paketlerin NAT işlemi uygulanmadan direk geçmesini sağlar.

/sbin/ipfw add allow tcp from any 80 to any via fxp1

fxp1'den geçen kaynak bilgisayarın tcp port 80'inden gelen paketlerin NAT işlemi uygulanmadan direk geçmesini sağlar.

/sbin/ipfw add allow icmp from any to any via fxp1

fxp1'den geçen icmp paketlerinin NAT işlemi uygulanmadan direk geçmesini sağlar.

/sbin/ipfw add divert natd icmp from any to any via fxp0

fxp0'dan geçen icmp paketlerinin NAT Daemon'a yönlendirilmesini sağlar.

/sbin/ipfw add divert natd tcp from any to any 80 via fxp0

fxp0'dan geçen hedef bilgisayarın tcp port 80'ine istekte bulunan paketlerin NAT Daemon'a yönlendirilmesini sağlar.

/sbin/ipfw add divert natd tcp from any 80 to any via fxp0

fxp0'dan geçen kaynak bilgisayarın tcp port 80'inden gelen paketlerin NAT Daemon'a yönlendirilmesini sağlar.

/sbin/ipfw add divert natd udp from any to any 53 via fxp0

fxp0'dan geçen hedef bilgisayarın udp port 53'ine istekte bulunan paketlerin NAT Daemon'a yönlendirilmesini sağlar.

/sbin/ipfw add divert natd udp from any 53 to any via fxp0

fxp0'dan geçen kaynak bilgisayarın udp port 53'inden gelen paketlerin NAT Daemon'a yönlendirilmesini sağlar.

...

...


NATd artık çalışmaya hazır.


Beni FreeBSD dünyasına kazandıran Sn. Kutluhan KİBRİT'e sonsuz saygı ve teşekkürlerimi sunarım.
Bu dökümantasyon, yazarın ismi ve ünvanı değiştirilmediği sürece, kaynak gösterilmek şartıyla kullanılabilir.

Hazırlayan:

Özkan KIRIK
ozkan@mersin.edu.tr

Mersin Universty
Computer Research and
Application Center
System Administrator