ÇözümPark

Çözümsüz Sorununuz Kalmasın.
ÇözümPark'a hoş geldiniz. Oturum Aç | Üye Ol
in ARA
Ana Sayfa Makaleler Forumlar Resimler Dosyalar Ajanda Online Destek Biz Kimiz? İletişim

Linux Unix

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

Yorumlar

 

Hakan UZUNER Dediki :

süper bir makale serisi olmuş ...

Aralık 28, 2008 05:25
 

Mustafa KILIC Dediki :

Eline sağlık Erdal Hocam.

Aralık 28, 2008 17:47
 

Bugra KESKIN Dediki :

eline sağlık Erdal hocam güzel bir seri.

Aralık 28, 2008 19:09
 

mehmet ali Dediki :

valla gercekden ilaç gibi geldi bu makaleler bana teşekkürlerr.....

Aralık 28, 2008 19:54
 

samil saltug Dediki :

Teşekkürler Erdal bey. Elinize sağlık

Aralık 31, 2008 12:12
 

Yücel Gemici Dediki :

Daha önce böyle bir dökümana cok ihtiyac duymuştuk.Kendimiz burdakinin özeti gibi bişey hazırlamamıştık.Geniş çaplı bu döküman kendimizi geliştirmemize cok faydalı olacak.Cok teşekkür ederiz bu guzel paylaşiminiz için.

Aralık 31, 2008 15:25
 

Sinan KAHRAMAN Dediki :

Erdal Hocam ellerin dert görmesin, Allah klavyene zeval vermesin.

Ocak 2, 2009 08:54
 

Sinan KAHRAMAN Dediki :

Teşekkürler Erdal Hocam. Güzel bir seri olmuş

Ocak 2, 2009 09:51
 

Rafet S. AYATA Dediki :

Eline sağlık erdal hocam.

Ocak 4, 2009 02:23
 

Kamil Onat Dediki :

Harika bir seri penguenciler bayram edecek :) Teşekkürler

Ocak 11, 2009 20:36
 

ismail Erol Aykut Dediki :

Teşekkürler

Çok güzel bir makale olmuş.

Linux konusunda bu kadar eksiklerimiz varken.

Şubat 2, 2009 00:19
 

Atilla TURKAN Dediki :

Çok güzel bir makale zinciri hocam devamını bekliyorum.. teşekkürler

Mart 24, 2009 17:25
Kimliksiz yorumlar seçilemez kılınmış durumdadır.

About Erdal YAZICIOGLU

2000-2006 arası Sun Solaris ve Windows İşletim sistemleri üzerinde Hastane Laboratuvar BT Altyapısı Dizayn, Kurulum vb. sorumlu olarak çalıştı. Şu an İtalya'da Page Europa S.R.L şirketinde proje bazlı Sistem ve Network Mühendisi olarak çalışıyor. Bitirdiği projeler NATO Packet Transport Protocol, LNG Adriatic Telecom Systems, Shell Pearl Project in Qatar.

Bu Kategori

Hızlı aktarma

Etiketler