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