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.
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.
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;
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
McGrawHill – Fedora Core 7 and Red Hat Enterprise Linux – Richard PETERSON
www.redhat.com
Kaynaklar
McGrawHill – Fedora Core 7 and Red Hat Enterprise Linux – Richard PETERSON
Erdal YAZICIOĞLU