![]() |
|
Linux uzerinde IPCHAINS Firewall
Kurulumu ve Konfigurasyonu. |
||
|
||
| Firewall tek bilgisayarınıza veya yerel
ağınıza internet ten veya diğer ağlardan erişimi i kısıtlayıp bilgisayarınızın
veya yerel ağınızın internet ten veya diğer ağlardan gelecek saldırılara karşı
koruyan bir sistemdir. Firewall İnternet ile Yerel ağınızın arasında
bulunur(Aşagıdaki Şekilde oldugu gibi). Bu sayede İnternetten gelen ve internete giden paketleri mutlaka firewall kurulu bilgisayardan geçmek zorundadır. Bu sayede gelen ve giden paketleri kontrol edebilir. İstedigine izin verip , istediginizi engelleyebilirsiniz. Bu kısıtlama paket filtreleme yöntemi ile yapılır |
||
|
||
| Bu dokumanin en guncel hali; http://www.enderunix.org/docs/ipchains.html
adresindedir. Aksi belirtilmedigi takdirde bu kabil dokumanlarin haklari kendilerini yazan yazarlarda saklidir. Bu dokuman da, parca parca ya da tamamen herhangi bir sekilde, yazarinin izni dahilinde dagitilabilir. Yazar, bu dokumani okuyanlarin ugrayacaklari herhangi bir zarardan oturu sorumluluk kabul etmez. Use at your own risk! Bu makalede, yeni kullanicilara ipchains paketinin tanitimi, ve guzel firewall dizayni hakkinda bir kac bilgi verebilmek amaciyla yazilmistir. Kullanicinin temel network kavramlari, temel isletim sistemi kavramlari, paket filtreleme, tcp/ip hakkinda genel bilgisi oldugu kabul edilmektedir. Vasatin uzeri seviyede Linux bilgisi gerekmektiedir!!!. Egerki, BSD uzerinde bir firewall uygulamasi ( ipfilter'la ) Murat hoca'nin OpenBSD / FreeBSD + IpFilter dokumanini okuyabilirsiniz. Adresi: http://www.enderunix.org/docs/ipfilter.html Burada, temel ( www/smtp/ssh/pop/imap gibi ) birkac servisin firewall kontrolu altinda alinmasi, ve organizasyonun internet cikisinin firewall'imizdan yapilmasi icin gerekli konfigurasyonu, ipfilter'i genel olarak anlatarak yapacagiz. --Ismail Yenigul |
||
| Paket Filtreleme | ||
Paket filtreleme Linux kernel(Çekirdek) içerisine gömülmüş durumdadır ve TCP/IP
protokolunun Network Layer(Ağ Katmanı) da çalışır.Bu sayede sadece firewall
kurallarının izin verdiği paketlerin geçisine izin verilir. Paketler tipine ,kaynak
adresine(source address), hedef adresine (destination address) ve portlara göre
filtrelenir. Paket Aynı zamanda Router görevi yapan firewall makinasına geldigi
zaman paketin başlık(header) kısmı açılır ve paket başlıgındaki bilgilere göre
paket e izin verilir veya engellenir. Paketin başlık kısmında aşağıdaki bilgiler
bulunur
İki türlü Firewall dizayn vardı 1- Kapatınlan trafik
dışındaki tüm trafige izin vermek. 1. Burada güvenlik açığı olabilecek uygulamaları tek tek kapatmak zorundasınız ve diğerlerine izin vermelisiniz. Bu durumda bazı gözden kaçırdığınız durumlar olabilir. Bu yüzden güvenlik açısından çok iyi bir yöntem değildir. Biz burada 2. yöntemi uygulayacağız. 2. Durum en iyi firewall dizayndır. Burada nelere izin verilip verilmedigi bellidir. ve dahiliniz dışında hehangi bir pakete izin verilmez.
|
||
| Ipchains Firewall | ||
|
Ipchains, Linux 2.1.102 kernel dan itibaren kullanılmaya başlayan tüm linux
çeşitlerinde bulunan ücretsiz bir firewall çeşitidir. ve binlerde $ verilip
alınan diğer firewalların yaptığı (IP bazında ,Ağ bazında ,protokol
bazında, port bazında filtreleme , port yönlendirme, gelen paketi reddetme ) gibi
tüm işleri yapmaktadır.Ama ne yazıkki ipchainsi bilmeyenler için
,ipchains sadece ücretsiz basit bir firewall programından ibaret
görülmektedir. Günde onlarca sitenin HACK edildiği günümüzde
,İnternette güvenliğin ne kadar önemli olduğuna anlatmaya gerek yok. Bu
belgede ipchains ile neler yapılacağı anlatılacaktır ve örnek bir ağ yapısı ele
alınarak ipchains firewall dizaynı yapılacktır. Bu dökümanın binlerce $
vermek istemeyen veya veremeyen firmalar veya kişiler için sistemlerini
korumakta yardımcı olacağını ümit ederim. Linux 2.1.102 kernel dan önce ipfwadm isimli firewall vardı. Linux kernel liniz 2.0 ise ipchains kullanmak için yama(patch) yapmanız gerekiyor. Ama tavsiyem, şu an en son kararlı kernel 2.2.17 yi ftp://ftp.kernel.org adresinden indirip derlemeniz olacak . Burada baştan Kernel derleme anlatılmayacaktır. sadece kernel a ipchains destegi(Yoksa !) nasıl verileceği anlatılacaktır.Eğer 2.1.102 kernel dan yukarısını kullanıyorsanız. ve /proc/net/ip_fwchains dosyası var ise ipchains kurulu demektir.Kernel derlemenize gerek yoktur. Eğer Kernel de ipchains destegi yoksa ve ipchains yüklü değilse http://netfilter.filewatcher.org/ipchains adresinden ipchains indirip kurun ve kernelinize Network firewalls (CONFIG_FIREFALL) [N] Y IP:Masquerading (CONFIG_IP_MASQUERADE) [N] Y yukarıdaki destekleri vererek kernel i tekrar derleyiniz. kernel
derlemek için
xxx Linux un bulunduğu root dizini ifade etmektedir.
|
||
| Ipchains komutlari | ||
|
İlk olarak # kullanıldığını da bunun Linux konsolu oldugunu ve Linux e root
kullanıcısı ile girildigi kabul edilecektir. Kullandığınız ipchains versiyonunu ögrenmek için # ipchains
--version komutu
verildiginde Ipchains te paketler için ön tanımlı olarak 3 grup vardır. input: (Giriş) Makinanızanın arayüzüne gelen paketller. output: (Çıkış) Makinanızın ara yüzünden çıkan paketler. forward: (Yönlendirme) Makinanızın bir arayüzünden gelip , diğer arayüzüne geçen paketler (MASQUARING gibi) bunların dışında kullanıcıların kendilerine grup tanımlayabilirler. Kendi grubunuzu tanımlamak için # ipchains -N grubadı komutu ile belirtilen grub adında bir grub oluşur. Ipchains le kullanılan parametler şu şekildedir. -i
interface(arayüz) :Hangi arayüzün
kullanılacağını belirtir. Firewall makinamızda Paket için aşagıdaki Karar mekanizmaları(Policy) işler. ACCEPT:
Paketin kabul edildiğini belirtir. Yukarıdaki tüm ifadeleri örneklerle açıklayalım. # ipchains -A input -i eth0 -p tcp -s 193.12.3.100 -d 212.65.128.100 80 -j ACCEPT Bu komut eth0 arayüzüne(-i eth0), 193.12.3.100 IP adresinden (-s 193.12.3.100) gelen (-A input) , tcp (-p tcp) protokolunu kullanan ve 212.65.128.100 IP li (-d 212.65.128.100 )bilgisayarın 80 portuna gelen paketleri kabul et(-j ACCEPT) manasına gelmektedir. # ipchains -A output -s 212.65.128.100 25 -d 0/0 -p tcp
-i eth0 -j ACCEPT #ipchains -A forward -s 0/0 -i eth1 -d 200.1.2.3 -p
icmp -j ACCEPT #ipchains -D forward -s 0/0 -i eth1 -d 200.1.2.3 -p icmp -j ACCEPT İfadesi ile bir üstte oluşturduğumuz kuralı kurallar tablosundan sil demektir. # ipchains -P input DENY Bu komutlar ile ön tanımlı üç kural grubu için gelen paketleri yasakla (DENY) demektir. Bu durumda hiç bir paket giriş çıkışı olmaz # ipchains -A forward -i eth0 -p tcp -s
192.168.1.0/24 -d 0/0 -j MASQ #ipchains -F input #ipchains -L
|
||
| Firewall Dizayni | ||
| Bu dökümanda Aşağıdaki gibi bir sisteme sahip bir firmamız olduğu varsayılacak ve buna göre firewall dizayn yapılacaktır.
Şekilde 3 tane arayüze(interface)sahip bir Linux (Ipchains Kurulu) bilgisayar gözükmektedir. Linux umuz eth0 (Birinci ethernet kartı) isimli arayüz ile firmamızın Sunucularının olduğu ağa bağlanmştır. Sunucların olduğu ağda Firmamıza ait WWW(Web sunucusu IP: 212.2.2.2 ), SMTP(Mail ve POP3 sunucusu IP:212.2.2.3) , DNS(dns sunucusu IP: 212.2.2.4) bulunmaktadır. ve eth1 arayüzü ile Şirkette çalışanların bilgisayarlarının olduğu Yerel Ağa bağlı. Son olarakta ppp0 (Modem) arayüzü ile internet çıkışımızı sağlanmaktadır. Çoğu firmanın Kiralık Hat kulandığı göze alınarak Modem bağlantısının Kiralık hat ile yapıldığı ve sabit bir IP(160.75.5.5) ye sahip olduğu kabul edilmiştir. (Not: hangi servisin hangi numaraya sahip olduğunu /etc/services dosyasından öğrenebilirsiniz.) Dikkat ederseniz Yerel ağ 192.168.1 ile başlayan kayıtsız (unregistered) IP lere sahip bir özel(private) ağdır. Bu tür IP lere sahip bilgisayarların internete bağlanması ve için Linuxumuzda MASQUARING (Maskeleme) yapılması lazımdır. MASQUARING de yerel ağdan çıkan paketler sanki Firewall makinasından çıkıyormuş gibi gösterilir. ve paketinize gelen cevap ilk önce Linux firewall makinamıza gelir ve sizin bilgisara ulaştırılır. Bir örnekle açıklayalım . Diyelim ki siz 192.168.1.49 IP li yerel ağdaki bilgisarayızın web tarayıcısından http://skywalker.mis.boun.edu.tr web sayfasına bağlanmak istediniz. 1-Bu paket sizin bilgisayarınızın 1500 portundan http://skywalker.mis.boun.edu.tr sunucusunun 80(HTTP) portuna gitmek için oluşturulur ve Gateway e iletilir. 2-Gateway olan Linux umuze gelen paket MASQUERADING sayesinde biraz değiştirilir . Aynı paket Linux umuzun kendi yerel 65155 portundan geliyormuş gibi tekrar oluşturulur ve http://skywalker.mis.boun.edu.tr sunucusunun 80 portuna gönderilir. 3- http://skywalker.mis.boun.edu.tr sunucusuna gelen paketimiz bu sunucu tarafından Linux (firewall.pcworld.com.tr diyelim)umuzun 65155 portundan gelmiş gibi gözükür ve gelen pakete cevabı Linux makinamıza gönderir. 4-Linux u muze gelen bu paketi ,Linux 192.168.1.49 bilgisayarına gönderilmesi gerektiğini anlar(Linux kimlerin hangi paketi gönderdiğini hatırlamaktadır ve internet ten paket gelince paket kim göndermisse cevabı ona iletir. ) ve paketi tekrar oluşturarak 192.168.1.49 bilgisayarına iletir. Anlaşılacağı üzre MASQUERADING
olmasa idi gerçek IP ye sahip olmayan bilgisayarların internet e bağlanması
mümkün değildi. IPchains komutlarını vermeden önce bir firewall yaptırımlarını belirleyerek nelere izin verilip nelere izin verilmeyeceğini belirleyelim. 1- Yerel Ağdan Internete: - İnternete sınırsız erişime izin verilecek. 2- Yerel Ağdan Sunucu Bölgesine (Server zone): - WWW sunucusunda çalışan HTTP(80 .port) ve
HTTPS (443. port) TELNET(23) FTP (20 , 21) servislerine erişimi 3-Internet ten Yerel Ağ erişim. 4-Internet ten Sunucu Bölgesine, Sunucudan İnternete: - WWW sunucusudaki HTTP(80) ve HTTPS(433)
servislere giriş ve çılış erişimi 5-Sunucu Bölgesinen Yerel Ağa - Sadece Yerel Ağın sunucu bölgesine gönderdiği paketlere
gelen cevap paketler kabul edilecektir. Evet bu şekilde bir firewall uygulaması yapılacaktır.
(Evet biliyorum biraz karışık galiba :)) ) şimdi Firewall kurmaya
başlayabiliriz.. |
||
| Firewall Kurulumu | ||
| İlk olarak linux e forward ozelliği verilmesi
lazım bunun için Redhat 6.2 kullanıyorsanız /etc/syscl.conf ya da, RedHat 7.0 kullaniyorsaniz: #sysctl -w net.ipv4.ip_forward = 1 Diğer Linux çeşitlerinde # echo 1 > /proc/sys/net/ipv4/ip_forward
komutu verin bu komutun açılışta aktif olması için Buradan sonraki tüm yazınlanları bir dosyaya
yazalım çünkü Linux reboot edildiğinde tüm firewall kuralları silinecektir. Bu
yüzden reboot edildikten sonra kurallarımızı dosyadan tekrar çalıştırabiliriz.
www=212.2.2.2 # web sunucusu IP # önce ,daha önceki tüm kuralları silelim # tüm işlemleri yasaklayalım ipchains -P input DENY # firewall sunucusun kendisinden gelip kendisinden paketlere izin
vereelim # internet te bağlı arayüzden sanki bizim loopback ip sinden gelmiş gibi görünen paketleri engelleyelim ve -l parametresi ile böyle bir paket geldiginde log dosyasına yazmasına belirtelim. ipchains -A input -i $EXTERNAL_INT -s $LOOPBACK -j DENY -l # Yerel ağın internet bağlantısı için MASQUARING i aktif
edelim # simdi web sunucusuna gelen ve sunucudan gelen pakerler
için kuralllar (rules) yazalım. #Internetten(ppp0) Web sunucununa(eth0) HTTPD (80) erişimi # internet arayüzünden(ppp0 ) gelen paketin ,sunucular
tarafına giden arayüzüne (eth1) yönlendirilmesi ( forward) kabul ediliyor # yuakarıda firewallın sunucu arayüzüne gelen paket ,artık
sunucu arayüzünden çıkıp web sunucusuna gidecektir. Bu durumda bu paket firewall un
internet arayüzü için (ppp0) bir input ,Sunucu arayüzü için (eth0) bir output
kuralıdır(Çükü paket eth0 dan ÇIKIYOR bu yüzden output dur.). #Şimdide Web sunucusuna yukarıdaki gibi gelen paket lerin çıkışına izin verelim. #Web sunucusundan (eth0) Internete (ppp0) HTTPD (80) Cevabı
(Reply) # paketin internet arayüzüne yönlendirilmesini kabul
et.! # paketin internet arayüzünden çıkıp ,internet gitmesine
izin ver. # Durup dururken hiç bir web sunucusu kendisine paket gelmeden
hiç bir yere cevap vermez. Önce bir istek gelmesi lazım ve sunucunun da bu isteğe
cevap vermesi ## lazım , Sadece iki yönlü paket geçisine izin vermek için ! -y
parametresi verilir. Bu parametre sadece TCP paketleri için geçerlidir. # Yukarıdaki aynı mantık HTPPSD (SSL ) içinde
geçerlidir. ipchains -A input -i $EXTERNAL_INT -p tcp -d $www 443 -j
ACCEPT #Web sunucusundan (eth0) Internete (ppp0) HTTPSD (443) Cevabı (Reply) ipchains -A input -i $SERVER_INT -p tcp -s $www 443 ! -y
-j ACCEPT #SMTP SUNUCU # yine aynı kurallar MAIL sunucusu içinde geçerlidir.
burada -y parametresi söz konusu değil Çünkü mail sunucusunun kendisi dışarıdan
istek gelmeden paket gönderir. (Eh yoksa mailler nasıl gider :) ) ipchains -A input -i $EXTERNAL_INT -p tcp -d $smtp 25 -j ACCEPT
#SMTP sunucusundan (eth0) Internete (eth2) SMTP (25) Cevabı (Reply) ipchains -A input -i $SERVER_INT -p tcp -s $smtp
25 -j ACCEPT # sunucu kısmında en son olarak dns sunucusunu alalım.
Yukarıdakilerden pek farkı ama domain(dns) UDP paketini kullanır. ipchains -A input -i $EXTERNAL_INT -p udp -d $dns 53 -j
ACCEPT #DNS sunucusundan (eth0) Internete (ppp0) DOMAIN (53) Cevabı (Reply) TCP UDP ipchains -A input -i $SERVER_INT -p udp -s $dns 53 -j
ACCEPT $ICMP PAKETLERİNE İZİN VERELİM # icmp Paketlerinin çıkışına izin veriyoruz # traceroute genellikle Kaynak(source) olarak
32769:65535 hedef (destination) olarak 33434:33523 - # Dışarıya Traceroute izin verelim. #Şimdi de yerel ağı internete çıkaralım # Local (eth1) to INTERNET (eth2 ) # Yerel ağdan gelen tüm tcp paketlerini kabul et. # ve firewallun 61000 ile 65096 arasındaki tüm portlardan
çıkan paketleri kabul et.! # Evet bu portlarda neyin nesi diyenler olabilir :) .
Açıklayayım MASQUARING yapılan tüm paketler (yani yerel ağdan gelen paketler).
internet te çıkmadan önce firewall sunucusunda yukarıdaki port
aralığında herhangi bir porttan tekrar oluşturulur. ve bu portlar aralığından giden
paketler yine bu port aralığından firewalla gelir. # INTERNET ( eth2) to Local (eth1) # İnternetten Firewallın MASQ arin port
aralığına gelen paketleri kabul et. # ve Firewallın internet arayüzünden gelip yerel ağ
arayüzüden çıkan paketleri kabul et. # YEREL AĞDAN SUNUCU BÖLGESİNE GEÇİŞ. ## WWW sunucusuna firewall ın MASQUARING portlarından gelen
paketlerin, # httpd izni # https izni # telnet izni # ftp izinleri # Yerel ağın Mail sunucusuna erişim izinleri (mail , pop3
telnet ftp) # yerel ağdan dns sunucusuna erişim (domain , telnet, ftp izinleri) ipchains -A output -i $SERVER_INT -s $fwhost
61000:65096 -d $dns 53 -j ACCEPT --------------- DOSYAMIZ BURADA SONA ERDİ------------------------------------------------ evet bunları firewall.sh dosyasına yazdığımız kabul edelim.
ve bu kuralları istediğimiz zaman çalıştırıp durdurmak için bir script (betik)
yazalım. ----------------DOSYA BAŞLANGIÇ-------------- #!/bin/sh case "$1" in start) exit 0 --------DOSYA BİTİŞ-------------------------------- bu komutların açılışta aktif olması için ilk önce Artık Firewallımız hazırdır. Kolay gelsın.! Eğer bu komutları yazmak bayagı zor geliyor ise sizin için firewall kuralları üreten bazı yardımcı programlar var
|
||
| Kaynaklar | ||
|
||
(c) 2001 Enderunix Software Development Team |