Geçen sayımızda BİDB olarak kütüphanemizde satışa sunduğumuz Linux dağıtımlarını incelemiştik. Bu incelemenin üzerinden fazla bir zaman geçmeden bütün
dağıtımlar yeni sürümlerini duyurdu. Slackware 9.0, Mandrake 9.1 ve RedHat 9.0 sürümü ile yeni görüntülerine kavuştular. Dağıtımların yeni özelliklerini
daha sonraki sayılarımızda tekrar değineceğiz.
Bu sayımızda, oldukça ihtiyaç duyulan ve kullanılan teknik içerikli bir konuyu inceleyeceğiz. Internet ortamında çalışan bilgisayar kullanıcılarının
saldırılarla karşılaşma oranı gün geçtikçe artmaktadır. Bu olumsuzluk karşısında güvenlik duvarı (firewall) olarak adlandırılan pekçok
yazılımın yanında işletim sistemleri de kendi içerisinde bazı çözümler sunmaktadır.
Linux işletim sistemleri güvenlik duvarı çözümünü çekirdek düzeyinde sağlamaktadır. Bunun için kullanılan çekirdeğe gömülü ya da modüler olarak
desteğin sağlanması gerekir. Linux işletim sistemi 2.0.x çekirdek serisinde ipfwadm, 2.2.x serisinde ipchains ve 2.4.x serisinde
iptables programları ile filtreleme işlemlerini gerçekleştirmektedir. Çekirdek derleme sırasında ilgili programların seçilmesi ya da daha sonradan
modül olarak çekirdeğe eklenmesi gerekir.
Yeni Linux sürümleri 2.4 çekirdek serisini kullanığı için, bu yazımızda iptables programını inceleyeceğiz.
Linux çekirdeğinde, Networking options è IP: Netfilter Configuration è IP tables support
(required for filtering/masq/NAT) altında güvenlik
duvarının kullanım amacına göre kullanılacak modüller seçilmelidir.
Linux işletim sisteminin standart güvenlik duvarı olarak kullanılması:
Çekirdek içerisine gömülü değil ise (genellikle bu yöntem tercih ediliyor);
/sbin/insmod ip_tables
/sbin/insmod iptables_filter
komutları ile modüller yüklenir.
Linux işletim sisteminde, güvenlik duvarında üç ana zincir (chain) vardır: GİRİŞ (INPUT), YÖNLENDİRME (FORWARD) ve ÇIKIŞ
(OUTPUT). Bu zincirlerin
varsayılan ayarlarının tanımlanması gerekir. Güvenlik duvarlarında varsayılan ayar olarak bütün paketler reddedilir (DROP) ve sadece istenen
paketlere
izin verilir (ACCEPT). Bunun için ilk olarak kullanılan iptables programının tam konumu belirtilir:
IPTABLES=/sbin/iptables
Sonra üç temel zincir için varsayılan ayarlar belirlenir:
$IPTABLES -P INPUT DROP
$IPTABLES -F INPUT
$IPTABLES -P OUTPUT DROP
$IPTABLES -F OUTPUT
$IPTABLES -P FORWARD DROP
$IPTABLES -F FORWARD
Daha sonra istenen paketlerin geçişi için kurallar belirlenir. Örneğin, 144.122.202.19 nolu IP'den gelen ve aynı IP'ye giden paketlere izin vermek
için;
$IPTABLES -A INPUT -s 144.122.202.19 -j ACCEPT
$IPTABLES -A OUTPUT -d 144.122.202.19 -j ACCEPT
komutları girilir. Benzer şekilde tek bir IP tanımlanabileceği gibi blok IP'ler de tanımlanabilir:
$IPTABLES -A INPUT -s 144.122.202.0/255.255.202.0 -j ACCEPT
$IPTABLES -A OUTPUT -d 144.122.202.0/255.255.202.0 -j ACCEPT
Bunun yanında paketin türü (tcp, udp, icmp vb.) ve port numarasına göre de sınırlamalar yapılabilir. Bu filtrelemenin doğru çalışabilmesi için
programların kullandığı paket türlerinin ve port numaralarının bilinmesi gerekir. Bu konuda Linux işletim sistemlerinde /etc/services dosyasından
standart
servisler hakkında bilgi edinilebilir:
ftp-data 20/tcp
ftp-data 20/udp
# 21 is registered to ftp, but also used by fsp
Ftp 21/tcp
ftp 21/udp fsp fspd
ssh 22/tcp # SSH Remote Login
Protocol
ssh 22/udp # SSH Remote Login
Protocol
telnet 23/tcp
telnet 23/udp
# 24 - private mail system
smtp 25/tcp mail
smtp 25/udp mail
Örneğin web sunucuları 80.porttan tcp paketleri ile hizmet verirler. Web sunucuna her yerden erişilmesi isteniyorsa aşağıdaki kuralların girilmesi
gerekir:
$IPTABLES -A INPUT -p tcp --dport 80 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --sport 80 -j ACCEPT
Benzer şekilde DNS sunucuları 53.porttan hem tcp hem udp paketlerini kullanır. Örneğin DNS sunucusuna sadece ODTÜ'ye tanımlı IP'lerden (144.122 bloğu)
erişilmesi isteniyorsa aşağıdaki kurallar tanımlanmalıdır:
$IPTABLES -A INPUT -p tcp -s 144.122.0.0/255.255.0.0 --dport 53 -j ACCEPT
$IPTABLES -A INPUT -p udp -s 144.122.0.0/255.255.0.0 --dport 53 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp -d 144.122.0.0/255.255.0.0 --sport 53 -j ACCEPT
$IPTABLES -A OUTPUT -p udp -d 144.122.0.0/255.255.0.0 --sport 53 -j ACCEPT
Çekirdek içerisindeki değişik seçenekler kullanılarak iptables programı ile üst düzey filtrelemeler ve kayıt (LOG) tutma özellikleri de
kullanılabilir.
Iptables programı ile sanal ağların oluşturulması:
Uluslararası standartlarda;
10.0.0.0 10.255.255.255
172.16.0.0 172.16.31.255
192.168.0.0 192.168.255.255
IP blokları sanal ağlar için ayrılmış durumdadır.
Internet kafelerde, yeterince IP'si olmayan yerlerde ya da güvenlik gerekçesiyle, Internet erişimi içeride sanal ağlar oluşturarak bir ya da birkaç
makina
üzerinden sağlanmaktadır. Bu işlem için Internet erişiminin sağlanacağı makina üzerinde, gerçek IP'nin tanımlandığı ethernet kartı (ya da modem) ve
içerdeki sanal ağ bağlantısını sağlayan ikinci bir ethernet kartının takılı olması gerekir. İşletim sistemi olarak IP MASQUERADE yapılabilmesi için
çekirdeğe /sbin/insmod iptable_nat komutu ile ilgili modülün yüklenmesi gerekir.
Örneğin, gerçek erişimin birinci ethernet kartı (eth0) ve sanal ağ erişiminin ikinci ethernet kartı (eth1) ile sağlandığını ve içerde 10'lu sanal ağ
yarattığımızı kabul edersek;
DISAG="eth0"
ICAG="eth1"
GERCEKIP="144.122.202.19"
SANALIP="10.0.0.1"
SANALAG="10.0.0.0/255.0.0.0"
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
$IPTABLES -t nat -F
$IPTABLES -t nat -A POSTROUTING -o $DISAG -j MASQUERADE
tanımlamaları yapıldıktan sonra sanal ağ içerisindeki bilgisayarlara IP olarak 10.x.x.x, subnet mask olarak 255.0.0.0 ve gateway olarak 10.0.0.1
girildiğinde Internet erişimi sağlanmış olacaktır.
Iptaples programına ve daha fazla bilgiye http://www.netfilter.org adresinden erişebilirsiniz.
Linux işletim sistemi ile bilişim dünyasında güven dolu yarınlara...
Selçuk Han AYDIN
|