Etiket arşivi: Fedora Core 7 and Red Hat Enterprise Linux

Linux Firewall – Guvenlik Duvarı – Iptables Bolum 3

IPTables konusunda yeterince bilgi verdiğimi umuyorum. Artık iptables yapılandırması sırasına kullanacağımız Red Hat yâda Fedora işletim sistemlerinde, iptables işlemlerinin nasıl çalıştığına göz atalım.

Red Hat ve Fedora işletim sistemleri üzerinde iptables paketi aksini belirtmediğiniz sürece kurulu gelir. Eğer iptables’ı sistemin açılışı sırasında otomatik olarak başlatmaya ayarladı iseniz o zaman her başlangıç esansında sistem /etc/sysconfig/iptables dosyasını okuyarak, gerekli kuralların çalışmasını sağlar.

/etc/sysconfig/iptables dosyası otomatik olarak system-config-securitylevel programı tarafından oluşturulur. Her defasından system-config-securitylevel kullanılarak yapılan değişiklikler /etc/sysconfig/iptables dosyasına kayıt edilir.

image001

Red hat yada Fedora işletim sistemleri üzerinde iptables kurallarını direkt olarak /etc/sysconfig/iptables dosyasına yazabilirsiniz. Ancak bu pek önerilen bir durum değildir. Iptables kurallarını en güzel yazmanın yolu, bir script dosyası hazırlayarak, bu script dosyası aracılığı ile iptables kurallarını oluşturmanızdır. Yazdığınız script’i çalıştırmadan önce iptables servisini durdurmanız gerekmektedir. Bu işlemleri nasıl yapacağımızı makalenin ilerleyen bölümlerinde göstereceğim.

Sisteminizde çalışan kuralları görmek için service iptables status komutu kullanılır. Yaratmış olduğumuz iptables kurallarını kayıt etmek için ise service iptables save komutu kullanılır. Bu komut çalıştırıldığında iptables kuralları otomatik olarak /etc/sysconfig/iptables dosyasına yazılır.

Kurallarımız kayıt etmemizin diğer bir yolu da iptables-save komutunu kullanmaktır. iptables-save komutu –c anahtarını kullanarak otomatik olarak /etc/sysconfig/iptables dosyasına kuralları kayıt eder. Eğer ikinci bir yedek istersek dosyanın adını değiştirerek, ayrı bir dosyaya da yedek alabiliriz.

#iptables-save –c  > /etc/sysconfig/iptables

Kayıt edilen kuralların geri yüklenmesi iptables-restore komutu ile yapılır.

#iptables-restore < /etc/sysconfig/iptables

Iptables konusunda bir hayli bilgi yüklemesi yaptık. Artık örnek bir yapılandırma yapabiliriz. Örnek yapılandırmamızı BÖLÜM 6 da anlatmaya çalışacağım. Örneğimizde adet iptables güvenlik duvarı, Web sunucumuz ve iç ağımızdan oluşan bir yapı olacak. Eğer buraya kadar sabırlı bu makaleyi okuduysanız o zaman BÖLÜM 6 daki örneğimizi kolayca gerçek hayatta uygulayabilirsiniz.

Artık internet bağlı bir sistemde gerçek bir IPTABLES örneği verebiliriz. Aşağıda vereceğimiz örnek IPTABLES kullanarak yerel ağımızı ve Web sunucumuzu dışarıdan gelecek saldırılar karşınsında önleme görevi üstlenecek. Direkt olarak komut satırı yerine, bir script yazarak IPTABLES kurallarımızı oluşturacağız.

Yapımızdan biraz bahsedecek olursak, Güvenlik duvarı görevini üstlenmiş bir adet sunucumuz var. Bu sunucumuz üzerinde iki adet ağ kartı bulunmakta, eth0 ve eth1 . eth1 üzerinden yerel ağımıza bağlanıyoruz, eth0 ise internet çıkışımız. İç ağımız 192.168.0.0 ağı ve domain adımız zanzare.com (İtalyanca da sivrisinek anlamına geliyor). İki adet internet adresimiz var, 10.0.0.1 ve 10.0.0.2( Sadece örnek için bunları kullanıyorum. Siz Internet sağlayıcınız tarafından size verilen IP’leri kullanmanız gerek). Güvenlik sunucumuz ağımız için geçerli ağ geçidi olarak çalışmakta. Web sunucumuzun eth0 üzerindeki IP adresi 10.0.0.2.

image002

Güvenlik sunucumuzun yapacaklarını sıralarsak;

Dış ağ adresli tüm isteklerin, iç ağa geçmesini engelle

Dış ağdan gelen ve iç ağ adresi olan tüm istekleri engelle ancak iç ağ adresleri eth1 üzerinden gelen isteklere izin ver

Localhost adresli tüm dış ağ isteklerini hem eth0 hem de eth1 üzerinde engelle

Güvenlik duvarı arkasındaki kullanıcıların mesajlarına izin ver(localhost ağ birimi üzerinde)

Web sunucusu ile haberleşmeye izin ver.

İç ağdan web sunucusu ile hali hazırda yapılmış bağlantılara izin ver.

Web sunucusundan direkt olarak iç ağa bağlantı yapılmasını engellle

Dışarıdan yapılmış ESTABLISHED yada RELATED bağlantılara izin ver.

Güvenlik duvarı ile dış dünyanın ICMP paketleri dışındaki ESTABLISHED ve RELATED bağlantılarına izin ver.

Dışarıdan yapılacak yeni bağlantıları engelle

İç ağdan güvenlik duvarına yâda güvenlik duvarından iç ağa bağlantılara izin ver.

Ip maskeleme yaparak iç ağın internete çıkmasına izin ver.

ICMP Ping ve Destination Unreachable paketlerine izin ver. Diğerlerini iptal et.

Güvenlik duvarlarını yapılandırmadan önce hangi işlemleri yapacağımızı bir liste halinde yazarsak, kuralların oluşturulması esnasında işimiz oldukça kolaylaştıracaktır.

Güvenlik duvarı olarak yapılandıracağınız sisteme root kullanıcısı olarak giriş yapın ve zanzare.sh adında bir dosya yaratın. Bu dosya içersine aşağıdaki kuralı ister yazarak isterseniz kopyala-yapıştır işlemi ile yazabilirsiniz.

# Ic network adresi eth1 üzerinde 192.168.0.0

# web sunucusu adresi 10.0.0.2

# IP forwarding kapat

echo 0 > /proc/sys/net/ipv4/ip_forward

# Tum kurallari temizle

iptables -F INPUT

iptables -F OUTPUT

iptables -F FORWARD

# Geçerli kuralları oluştur

iptables -P INPUT DROP

iptables -P OUTPUT ACCEPT

iptables -P FORWARD ACCEPT

# İç ağda diş ağ adresli tüm paketleri engelle

iptables -A INPUT -j LOG -i eth1 ! -s 192.168.0.0/24

iptables -A INPUT -j DROP -i eth1 ! -s 192.168.0.0/24

iptables -A FORWARD -j DROP -i eth1 ! -s 192.168.0.0/24

#eth1 haricinde dis agdan gelen ic ag adresli paketleri engelle

iptables -A INPUT -j DROP ! -i eth1 -s 192.168.0.0/24

iptables -A FORWARD -j DROP ! -i eth1 -s 192.168.0.0/24

#lo arayüzü haricindeki tüm ağ birimlerinde localhost adresli tüm paketleri engelle

iptables -A INPUT -j DROP -i ! lo -s 127.0.0.0/255.0.0.0

iptables -A FORWARD -j DROP -i ! lo -s 127.0.0.0/255.0.0.0

#İç ağdan gelen kullanıcılara izin ver

iptables -A INPUT -j ACCEPT -i lo

#Web sunucusu ile bağlantı kurulmasına izin ver

iptables -A INPUT -j ACCEPT -p tcp -i eth0 –dport www -s 10.0.0.2

#Web sunucu ile iç ağdan ESATBLISH durumundaki bağlantılara izin ver

iptables -A INPUT -m state –state ESTABLISHED, RELATED -i eth0 -p tcp –sport www -s 10.0.0.2 -d 192.168.0.0/24 -j ACCEPT

#Web sunucusundan iç ağa yeni bağlantıları engelle

iptables -A OUTPUT -m state –state NEW -o eth0 -p tcp –sport www -d 192.168.0.0/24 -j DROP

#RELATED ve ESTABLISHED diş bağlantılara izin ver

#Dış bağlantıların ICMP paketleri hariç firewall ile bağlantı kurmasına izin ver

iptables -A INPUT -m state –state ESTABLISHED, RELATED -i eth0 -p ! icmp -j ACCEPT

#Dışarıdan yeni bağlantı yapılmasına izin verme

iptables -A INPUT -m state –state NEW -i eth0 -j DROP

iptables -A FORWARD -m state –state NEW -i eth0 -j DROP

#iç ağdan güvenlik duvarına yâda güvenlik duvarından iç ağa bağlantılara izin ver

iptables -A INPUT -j ACCEPT -p all -i eth1 -s 192.168.0.0/24

#IP maskeleme ile ic makinelerin internete çıkmasına sağla

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

#ICMP Ping ve Destination Unreachable mesajlarına izin ver

#Diger ICMP paketlerini INPUT ve DROP kurallar ile engelle

iptables -A INPUT -j ACCEPT -p icmp -i eth0 –icmp-type echo-reply -d 10.0.0.1

iptables -A INPUT -j ACCEPT -p icmp -i eth0 –icmp-type echo-request -d 10.0.0.1

iptables -A INPUT -j ACCEPT -p icmp -i eth0 –icmp-type destination-unreachable -d 10.0.0.1

#IP Forwarding opsiyonunu aç

echo 1 > /proc/sys/net/ipv4/ip_forward

Eğer ne yaptığımızı grafik olarak göstermeye çalışırsak;

image003

Eğer komut satırına iptables –L –n komutunu girerseniz aşağıdaki çıktıyı almanız gerekir.

[root@server ~]# iptables -L -n

Chain INPUT (policy DROP)

target     prot opt source               destination

LOG        all  — !192.168.0.0/24       0.0.0.0/0           LOG flags 0 level 4

ACCEPT     all  —  192.168.2.0/24       0.0.0.0/0

DROP       all  — !192.168.0.0/24       0.0.0.0/0

DROP       all  —  192.168.0.0/24       0.0.0.0/0

DROP       all  —  127.0.0.0/8          0.0.0.0/0

ACCEPT     all  —  0.0.0.0/0            0.0.0.0/0

ACCEPT     tcp  —  10.0.0.2             0.0.0.0/0           tcp dpt:80

ACCEPT     tcp  —  10.0.0.2             192.168.0.0/24      state RELATED,ESTABLISHED tcp spt:80

ACCEPT    !icmp —  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED

DROP       all  —  0.0.0.0/0            0.0.0.0/0           state NEW

ACCEPT     all  —  192.168.0.0/24       0.0.0.0/0

ACCEPT     icmp —  0.0.0.0/0            10.0.0.1            icmp type 0

ACCEPT     icmp —  0.0.0.0/0            10.0.0.1            icmp type 8

ACCEPT     icmp —  0.0.0.0/0            10.0.0.1            icmp type 3

Chain FORWARD (policy ACCEPT)

target     prot opt source               destination

DROP       all  — !192.168.0.0/24       0.0.0.0/0

DROP       all  —  192.168.0.0/24       0.0.0.0/0

DROP       all  —  127.0.0.0/8          0.0.0.0/0

DROP       all  —  0.0.0.0/0            0.0.0.0/0           state NEW

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination

DROP       tcp  —  0.0.0.0/0            192.168.0.0/24      state NEW tcp spt:80

[root@server ~]#

Iptables ile yazdığım makale serisinin sonuna gelmiş bulunuyoruz. Umarım yazdıklarım size iptables’ın nasıl kullanılacağı ile ilgili bilgi vermiştir. Bir başka Linux makalesinde görüşmek üzere.

Kaynaklar

www.netfilter.org

McGrawHill – Fedora Core 7 and Red Hat Enterprise Linux – Richard PETERSON

www.redhat.com

Kaynaklar

www.netfilter.org

McGrawHill – Fedora Core 7 and Red Hat Enterprise Linux – Richard PETERSON

www.redhat.com

Erdal YAZICIOĞLU

Linux Firewall – Guvenlik Duvarı – Iptables Bolum 2

Zincir kurallarını değiştirmek yada zincire yeni bir kural eklemek için iptables komutu kullanılır. Örneğin iptables –A zincire yeni kural eklerken, iptables –D komutu zincirden kural siler.  Bir kuralı değiştirmek için iptables –R komutu kullanılır. Iptables komut listesi aşağıdaki tabloda verilmiştir.

image001

IPTABLES SEÇENEKLERİ

Iptables ile birlikte birçok değişik seçenek gelir. Örneğin, TCP –syn seçeneği SYN paketlerini kontrol eder. ICMP –icmp-type seçeneğini ping işlemlerinde kullanılan ICMP paketlerini belirlemede kullanılır. –limit seçeneğini ile tanımlanan zaman içerisinde aynı paketlere limit koyabilirsiniz.

Aşağıdaki örnekte kaynak adresi 192.168.184.128 gelen tüm paketler –j ACCEPT hedefi kullanılarak kabul edilecektir.

#iptables –A INPUT –s 192.168.184.128 –j ACCEPT

image002

image003

PAKETLERİN KABULÜ ve REDEDİLMESİ (ACCEPT&DROP)

Iptables içerisinde iki adet geçerli hedef vardır. DROP ve ACCEPT. Diğer hedefler, REJECT gibi, kullanıcı tanımlı olabilirler.  Zincirleri yönetmek için iptables içerisinde iki adet özel hedef bulunur, RETURN ve QUEUE. RETURN zincirin sonuna gelindiğini belirler ve başlağı zincirin başına döner. QUEUE ise paketleri kullanıcı alanına gönderir. Aşağıdaki örnekte www.btjunkie.org kaynak adresli tüm paketlerin red edilme örneği verilmiştir.

#iptables  -A INPUT –s www.btjunkie.org –j DROP

Bir kuralın ters çalışması için ! işareti kullanılır. Örneğin, belirlenen bir IP dışında, gelen tüm paketleri kabul etmek için –s anahtarından önce ! işareti kullanılır. Aşağıdaki örnekte 192.168.184.128 adresi haricindeki tüm adreslerden gelen paketler kabul edilemektedir.

#iptables  -A INPUT –j ACCEPT ! –s 192.168.184.128

Herhangi bir adresi DNS adı yada IP adresini kullanarak belirleyebilirsiniz. IP adres aralığı için ağ IP sayısını ve ağ IP maskesi kullanılır. IP maskesi, ip adresi olabileceği gibi, IP maskesini tamamlayan bit sayısı da olabilir. Örneğin192.168.0 ağında bulunan tüm adresler 192.168.0.0/255.255.255.0 yada 192.168.0.0/24 olarak tanımlanabilir. Herhangi bir adres belirtmek için ise 0.0.0.0/0.0.0.0 yada 0/0 kullanır. Geçerli olarak eğer –s ve –d anahtarları kullanılmamış ise yazılan kural tüm adresler için geçerli olacaktır. Aşağıdaki örnekte 192.168.0.0 adresinden gelip, ağımızda herhangi bir adrese giden paketlerin kabülü gösterilmektedir.

#iptables –A INPUT –s 192.168.0.0/24 –j ACCEPT

Iptables kuralları genelde diğer ağlara bağlı ağ birimlerine uygulanır. Internete direkt bağlı olan sistemlerde genelde iki ağ birimi bulunur, eth0 ve lo(lopback). Modem kullanılarak yapılan bağlantılarda arayüz ppp0 olarak adlandırılır. Iptables kurallarında –i anahtarını kullanarak sadece INPUT ve FORWARD zincirlerinde kural atanacak ağ birimi belirtilir.  Dışarıya giden trafik için –o anahtarı OUTPUT ve FORWARD zincirleri ile kullanılır. Daha sonra gelen ve giden paketler için belirlen ağ birimine kurallar tanımlanır.

#iptables –A INPUT –j DROP –i eth0 –s 192.168.0.45

#iptables –A INPUT –j ACCEPT –i lo

KULLANICI TANIMLI ZİNCİRLER(CHAINS)

Iptables, FORWARD ve INPUT zinciri içerisindeki kuralları ayrı ayrı değerlendirir. Biraz daha açarsak, eğer belirli bir adresten gelen tüm paketleri engellemek isteniyor ise, hem FORWARD hem de INPUT zincirleri içerisinde bu kurallar tanımlanmalıdır.

#iptables –A INPUT –j DROP –i eth0 –s 192.168.0.45

#iptables –A FORWARD –j DROP –i eth0 –s 192.168.0.45

Bu tür durumlarda kuralların tekrar tekrar yazılmaması için kullanıcı tanımlı zincirler oluşturulur. Oluşturulan kullanıcı tanımlı zincirler içerisine yazılan kuralları daha sonra gerekli zincir içerisine dahil edilerek çalıştırılır.

#iptables –N gelen_paketler

#iptables –A gelen_paketler –j DROP –i eth0 –s 192.168.0.45

#iptables –A gelen_paketler –j ACCEPT –i lo

#iptables –A FORWARD –J gelen_paketler

#iptables –A INPUT –j gelen_paketler

ICMP PAKETLERİ

Güvenlik duvarları üzerinde genelde sistem yöneticileri ICMP(Internet Control Message Protocol) paketleri engellerler.  Ancak sistemlerimiz üzerinde, ping,traceroute gibi işlemler için bazı ICMP paketlerine izin vermemiz gerekir. Eğer gerekli ICMP paketlerine izin verilmez ise DNS sorgulama işlemlerinde problemler yaşanır.  Iptables üzerinde –icmp-type opsiyonu kullanarak, bu paketlere izin verebilirsiniz. Aşağıdaki örneklerde 0,8 ve 3 numaralı echo-reply,echo-request ve destination-unreachable mesajlarına nasıl izin verileceği gösterilmektedir.

iptables -A INPUT -j ACCEPT -p icmp -i eth0 –icmp-type echo-reply -d 192.168.184.128

iptables -A INPUT -j ACCEPT -p icmp -i eth0 –icmp-type echo-request -d 192.168.184.128

iptables -A INPUT -j ACCEPT -p icmp -i eth0 –icmp-type destination-unreachable -d 192.168.184.128

Bu işlemler sonra komut satırına iptables –L –n yazdığınızda karşınıza aşağıdaki kurallar listesi gelecektir.

ACCEPT     icmp —  0.0.0.0/0            192.168.184.128     icmp type 0

ACCEPT     icmp —  0.0.0.0/0            192.168.184.128     icmp type 8

ACCEPT     icmp —  0.0.0.0/0            192.168.184.128     icmp type 3

image004

Ping-of-death türü saldırılardan korunmak için ping işlemlerinin dikkatli bir şekilde yapılandırılması gerekir. Bunun birkaç değişik yolu vardır. Bunlardan ilki tüm ping fragmanları reddetmektir. Ping paketleri genelde çok küçük paketlerden oluşur. Ping-of-death saldırılarından korunmak için ise içinde fragment bulunan tüm paketleri –f anahtarı ile iptables üzerinde engellenir.

#iptables –A INPUT –p icmp –j DROP –f

Diğer bir yolda gelen ping paketlerinin sayısını limitlemektir.

#iptables -A FORWARD -p icmp –icmp-type echo-request -m limit –limit 1/s -j ACCEPT

Port Erişimi Kontrolü

Eğer sisteminiz internet üzerinden web yada ftp sunucusu görevini yapıyorsa iptables kullanarak erişimi kontrol edebilirsiniz. –sport ve –dport opsiyonları kullanarak istenilen servis portlarını belirtebilir ve erişim izni verebilirsiniz. Iptables ayrıca port numaraları yerine, servislerin kullandığı isimler ile de kural yazmanıza olanak sağlar. Servislerin adlarını ve port numaralarını /etc/services dosyasında bulabilirsiniz.  Aşağıdaki örnekte 192.168.1.61 adresinde bulunan sunucuya gelen www isteklerine nasıl izin verileceği gösterilmiştir.

#iptables –A INPUT –d 192.168.1.61 –dport –j ACCEPT

Iptables üzerinde port referanslarını kullanarak da belirli portları koruma altına alabilir yada tamamen yasaklayabilirsiniz. Güvensiz bir bağlantı olan ve 23 nolu portu kullananTelnet buna örnek gösterilebilir.  NFS işlemleriniz koruma altına almak için ise portmapper için kullanan 111 nolu porta erişimi engelleyebilirsiniz.

#Dışarıdan gelen portmapper isteklerini engelle

iptables –A arriving –j DROP –p tcp –i et0 –dport 111

#Dışarıdan gelen telnet istemlerini engelle

iptables –A arriving –j DROP –p tcp –i eth0 –dport telnet

Aşağıdaki sistem tarafından kullanılan bazı servislerin port numaraları ve iptables port etiketleri verilmiştir.

image005

PAKET DURUMLARI: BAĞLANTI İZLEME

Bağlantı izleme yani connection tracking, bağlantı ile ilgili kaynak, hedef ve port bilgilerini izler. Bu izlemenin en büyük faydası hangi paketin hangi tamamlanmış yada ilgili bağlantıya ait olduğunu belirler. Bağlantıları izlemek için önce –m state modülü kullanılır. Daha sonra –state anahtarı kullanılır.

image006

Eğer bir güvenlik duvarı yapılandırıyorsanız, dış dünyadan gelen tüm paketleri engellemeniz gerekir. Ancak tüm paketlerin engellemesi, sizin iç ağınızda bulunan diğer istemcilerin dış dünya ile haberleşmesini engelleyecektir. Örneğin internet.  Burada dikkat edilmesi gereken konu, bir saldırının nasıl gerçekleşeceğidir. Saldırgan sisteminize girmek için öncellikle yeni bir bağlantı açmak zorunda. Bu tür bağlantı paketlerinin başlıklarında(header) SYN bölümü(bit) açık ve FIN ve ACK bölümleri(bits) boştur.  Bu tür paketlerin DROP edilmesi, sisteminize dışarıdan yapılacak olan her türlü bağlantıyı engellemiş olacaktır. Ancak iç ağımızdan dış dünya  ile bağlantı kurmuş tüm kullanıcılarımız işlemlerini sorunsuz halde devam edebileceklerdir. Aşağıdaki örnekte eth0 arabirimimize dışardan yapılacak her türlü bağlantının nasıl engeldiği gösterilmektedir.

iptables –A INPUT –m state –state NEW –i eth0 –j DROP

! İşaretini ve ACCEPT hedefini kullanarak eth0 haricinde diğer arabirimlere gelen tüm paketleri kabul edebilirsiniz. Eğer eth0 arabirimi internete açılan arabirim ise bu kural dışarıdan gelen tüm bağlantı isteklerini engelleyecektir. Ancak iç ağınız makineniz ile bağlantı kurabileceklerdir.

iptables –A INPUT –m state –state NEW ! –i eth0 –j ACCEPT

Aşağıdaki örnekte ise, eth0 üzerinden kurulmuş bağlantılar yâda bu bağlantılar ile alakalı paketlerin geçişine izin veriyoruz.

iptables – INPUT –m state –state ESTABLISHED,RELATED –i eth0

NAT(Network Address Translation)

NAT, paketlerin sistem üzerinden geçerken hedef yada kaynaklarını değiştirmeye yarayan bir yöntemdir. Sistem üzerinden geçen paketler, eğer geçtikleri sistem üzerinde NAT uygulaması yapılırsa, kaynak yâda hedefleri değiştirilir. Bu işlem yapılırken, sistem ne tür değişikliklerin yapıldığı bilgisini tutar. Bu gelen paketlere verilen cevaplarda, paketlerin doğru adreslere gitmesine yardımcı olur.

NAT genelde tek genel IP kullanarak internet’e bağlanan sistemlerde kullanılır. IP maskeleme yöntemi ile, kaynak ve hedef adresler değiştirilerek güvenlik duvarı yada ağ geçidinden çıkan geçerek internete çıkan paketlerin güvenliği sağlanır. Ağ geçitlerinin genelde tek IP adresi bulunur. Eğer birden fazla sunucunuz ve tek IP adresiniz varsa, NAT kullanarak gerekli paketleri gerekli sunuculara yönlendirebilirsiniz.

NAT KURALLARI OLUŞTURMAK

NAT tablolarına iptables komutu ile kural eklemek için –t nat anahtarını kullanmanız gerekir. Eğer NAT tablosundaki kuralları görmek için ise –t nat –L komutu kullanılır.

Kural oluşturmak için;

#İptables –t nat

Kuralları listelemek için

#İptables –t nat –L –n

Buradaki –n anahtarı kurallardaki IP adreslerini ve port numaralarını rakamsal formatta görüntüleyecektir.

NAT HEDEF ve ZİNCİRLERİ(Target&Chains)

İki çeşit NAT yöntemi bulunur, SNAT ve DNAT. SNAT kaynak adresi, DNAT ise hedef adresin değiştirilmesinde kullanılır.

NAT tablosundan bulunan 3 adet zincir çekirdek tarafından NAT işlemleri için kullanılır. Bunlar PREROUTING, POSTROUTING ve OUTPUT. PREROUTING DNAT kuralları için kullanılır. POSTROUTING ise SNAT kuralları için geçerlidir. OUTPUT ise yerel işlemler esnasında oluşturulan paketler için DNAT kuralları için kullanılır.

IP maskeleme POSTROUTING zincirine MASQUERADE eklenerek yapılır.

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

Sisteminizden çıkan paketin kaynak adresini değiştirmek için POSTROUTING kuralı ile SNAT hedefi kullanılır. SNAT hedefi için kaynak adresi belirtmek için –to-source seçeneği kullanılır.

#iptables –t nat –A POSTROUTING –o eth0 SNAT –to-source 192.168.0.2

Eğer sisteminize gelen paketin kaynak adresini değiştirmek istiyorsanız PREROUTING kurallı ile beraber DNAT ve –to-destination seçeneği kullanılır.

#iptables –t nat –A PREROUTING –i eth0 –j DNAT –to-destination 192.168.0.2

NAT tablosunu kullanarak, güvenlik duvarınız üzerinde belirli bir port’a gelen istemleri diğer bir sunucuya yönlendirebilirsiniz. Aşağıdaki örnekte 80 nolu www portuna gelen paketler, 192.168.0.4 adresinde bulunan web sunucusunu yönlendirilmektedir.

#iptables –t nat –A PREROUTING –i eth0 –dport 80 –j DNAT –to-destination 192.168.0.4

NAT Yönlendirmesi(NAT Redirection) – Görünmez Vekil Sunucular

(Transparent Proxies)

NAT tablolarını kullanıcıya tamamen görünmez her türlü paket yönlendirmesi yapabilirsiniz. Paket yönlendirmeleri REDIRECT kullanılarak yapılır. Görünmez vekil sunucular sayesinde, alınan paketlerin tümü vekil sunuculara yönlendirilirler. Örneğin 80 nolu www portuna gelen tüm paketler Squid vekil sunucusunun geçerli olarak çalıştığı 3128 nolu porta yönlendirilebilir.

#iptables –t nat –A PREROUTING –i eth1 –dport 80 –j REDIRECT –to-port 3128

Kaynaklar

www.netfilter.org

McGrawHill – Fedora Core 7 and Red Hat Enterprise Linux – Richard PETERSON

www.redhat.com

www.netfilter.org

McGrawHill – Fedora Core 7 and Red Hat Enterprise Linux – Richard PETERSON

www.redhat.com

Erdal YAZICIOĞLU