Firewall nedir, Nasıl kurulur? (Linux)

eXCaLiBuR 27 May 2009

  1. eXCaLiBuR

    eXCaLiBuR ÜYE

    507
    0
    0


    Firewall tek bilgisayarınıza veya yerel ağınıza internetten veya diğer ağlardan erişimi kısıtlayıp bilgisayarınızın veya yerel ağınızın internetten veya diğer ağlardan gelecek saldırılara karşı koruyan bir sistemdir. Firewall İnternet ile Yerel ağınızın arasında bulunur. Bu sayede internetten gelen ve internete giden paketleri mutlaka firewall kurulu bilgisayardan geçmek zorundadır. Bu sayede gelen ve giden paketleri kontrol edebilir. İstediğine izin verip , istediğinizi engelleyebilirsiniz. Bu kısıtlama paket filtreleme yöntemi ile yapılır

    2-Paket Filtreleme:

    Paket filtreleme Linux kernel(Çekirdek) içerisine gömülmüş durumdadır ve TCP/IP protokolünün Network Layer(Ağ Katmanı) da çalışır.Bu sayede sadece firewall kurallarının izin verdiği paketlerin geçişine 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 makinesine geldiği zaman paketin başlık(header) kısmı açılır ve paket başlığındaki bilgilere göre paket e izin verilir veya engellenir. Paketin başlık kısmında aşağıdaki bilgiler bulunur.

    * Kaynak(source) IP adresi
    * Hedef (Destination) IP adresi
    * TCP/IP Kaynak Portu
    * TCP/IP Hedef Portu
    * ICMP Mesaj Türü
    * Protokol Türü

    İki türlü Firewall dizayn vardır.

    1- İzin verilen trafik dışındaki tüm trafiği engellemek
    2- Kapatılan trafik dışındaki tüm trafiğe izin vermek.

    1. Durum en iyi firewall dizayndır. Burada nelere izin verilip verilmediği bellidir. ve dahiliniz dışında herhangi bir pakete izin verilmez.

    2. 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 1. yöntemi uygulayacağız.

    3- Ipchains Firewall :
    Ipchains, Linux 2.1.102 kernel dan itibaren kullanılmayısa 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ık ki 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 anlatmayısa 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ılacaktır. Bu dokü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ılmayısacaktı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:Firewalling (CONFIG_IP_FIREWALL) [N] Y
    IP:TCP syncookie support (CONFIG_SYN_COOKIES) [N] Y

    IP:Masquerading (CONFIG_IP_MASQUERADE) [N] Y
    IP:ICMP Masquerading (CONFIG_IP_MASQUERADE_ICMP) [N] Y

    yukarıdaki destekleri vererek kernel i tekrar derleyiniz. kernel derlemek için
    /usr/src/linux dizin altında sıra ile
    # make dep && make clean && make bzImage && make modules && make modules_install
    komutunu veriniz ve
    #cp /usr/src/linux/arch/i386/boot/bzImage /boot komutu ile kopyalayın ve

    /etc/lilo.conf dosyasına
    image=/boot/bzImage
    label=linux
    root=/dev/xxx
    read-only

    xxx Linux un bulunduğu root dizini ifade etmektedir.
    yazdıktan sonra
    # lilo komutunu verdikten sonra linux reboot edin.

    4: Ipchains Komutları:

    İ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 1.3.9 17-Mar-1999



    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.
    -A : (Append) Yeni bir kural ekleme
    -D : (Delete) Tanımlanmış bir kuralı silme
    -R : (Replace) Bır kuralı değiştirmek için kullanılır.
    -I Insert) Araya kural eklemk için kullanılır
    -F Flush) Bir kurallar tablosunun tamamen silinmesini sağlar(tablonun içeriği sıfırlanır).
    -X : içeriği sıfır olan kural grublarını (input , output, forward, kullanıcının tanımladıkları)siler.
    -N : (New) Yeni bir kural grubu oluşturur.
    -L : (List) Tanımlı kural grublarındaki kuralları listeler
    -P : (Policy) ipchains in ön tanımlı kural grublarının kurallarını ayarlar.




    -i interface(arayüz) :Hangi arayüzün kullanılacağını belirtir.
    -s kaynak (source) :paketin geldiği kaynağın IP adresi veya ağ grubunu belirtilir.
    -d hedef (destination) :paketin gideceği adres veya adres grubu
    -p protokol(protocol) :paketin kullandığı protokol adını belirtir(tcp udp icmp gibi).
    -j (jump) :paket ile ilgili hangi kararın verileceğini belirtir.
    -l log(kayıt) :paket ile ilgili bilgilerin log dosyasına yazılmasını sağlar
    -v (verbose) :paket ile ilgili detaylı bilgi verir.
    ! u parametre kuralın değilinıi (tersini) belirtilir.

    Firewall makinamızda Paket için aşagıdaki Karar mekanizmaları(Policy) işler.

    ACCEPT: Paketin kabul edildiğini belirtir.
    DENY : Paketin kabul edilmediğini belirtir. Paket blok edilir ve paketi gönderen tarafa hiç bir şey gönderilmez.
    REJECT: Paket reddedilir ve paketi gönderen tarafa paketin reddedildiğine dair bilgi gönderilir.
    MASQ : Paketin maskelendigini belirtir. (MASQUARING de kullanılır)
    REDIRECT: Bir porta (gelen , giden, yönlendirilen) paketin başka bir yerel porta yönlendirilmesi işini yapar.(Genelde Web isteklerini yerel makinadaki proxy portuna yönlendirmek için kullanılır.),
    Portlarla ilğili olarakta.
    1:1000 ifadesi 1 ile 1000 arasındaki portları tanımlayabilirsiniz.
    1500: ifadesi ise 1500 ile 65535 (En sonuncu port) demektir.

    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
    Bu komut ise eth0 arayüzünü kullanan 212.65.128.100 IP li makinanın 25 portundan gelen ve herhangi bir yere (0/0) giden tcp protokolu kullananan paketlerin çıkışına (-A output) izin ver (-j ACCEPT) demektir.

    #ipchains -A forward -s 0/0 -i eth1 -d 200.1.2.3 -p icmp -j ACCEPT
    Bu ifade ise herhangi bir yerden eth1 arayüzüne gelen ve 200.1.2.3 IP li makinaya giden tüm icmp protokolu paketlerini kabul et demektir.

    #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
    # ipchains -P output DENY
    # ipchains -P forward 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
    Bu komut ile yerel ağdan gelen ve dışarı giden ( nereye olursa olsun internet veya diğer ağa ) tüm paketlere MASQUARING uygula demektir.
    #ipchains -F
    Bu komut ile daha önce belirlenen tüm grublara ait kurallar silinir

    #ipchains -F input
    ile sadece input grubuna ait komutlar silinir.

    #ipchains -L
    ifadesi ile tüm grublarda tanımlanan kurallar listelenir.


    5-Firewall Dizayn:

    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.
     
  2. eXCaLiBuR

    eXCaLiBuR ÜYE

    507
    0
    0


    Ynt: Firewall nedir, Nasıl kurulur? (Linux)

    INTERNET
    |
    |
    ppp0 veya eth2
    ------------------
    |160.75.5.5 | Sunucu Network
    | | eth0
    | |----------------------------------------------
    | LINUX |
    | IPCHAINS | 212.2.2.1 | | |
    | FIREWALL | | | |
    |192.168.1.1 | | | |
    ----------------- - -------- ------- -------
    | eth1 | WWW | |SMTP | |DNS |
    |192.168.1.1 -------- ------- -------
    | 212.2.2.2 212.2.2.3 212.2.2.4
    YEREL AĞ


    Yukarıdaki şemayısı açıklamadan önce Linux de arayüz(interface) isimlerinden kısaca bahsedeyim.
    Linuxte birinci ethernet kartının ismi eth0 dır
    ikinci ethernet kartınn ismi eth1 dir
    üçüncü ethernet kartının ismi eth2 dir. ve bu şekilde devam eder,ve
    hangi ethernet kartının hangi isimde olacağı size kalmış.
    Kısacası ,3 ethernet kartı varsa istediğinizi eth0 eth1 veya eth2 olarak belirleyebilirsiniz.
    Birinci Modem bağlantısının ismi ise ppp0
    Linuxun kendisinden oluşan ve yine kendisine giden paketler lo0 (loopback) arayüzünü kullanır. Bu sayede paket dışarı çıkmadan kendisine iletilir.
    Şeklimizi açıklamayısa başlayalım:

    Ş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 MASQUARING 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ğı üzere MASQUARING olmasa idi gerçek IP ye sahip olmayısan 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
    - SMTP sunucusunda çalışan SMTP(25), POP3 (110) , TELNET(23), FTP(20 ,21) servislerine erişim.
    - DNS sunucunda çalışan DOMAIN(53), TELNET (23), FTP(20 ,21) servislerine erişim hakkı verilecektir.

    3-Internet ten Yerel Ağ erişim.
    - Sadece Yerel Ağın internet e gönderdiği paketlere gelen cevap paketler kabul edilecektir.

    4-Internet ten Sunucu Bölgesine, Sunucudan İnternete:

    - WWW sunucusudaki HTTP(80) ve HTTPS(433) servislere giriş ve çılış erişimi
    - SMTP sunucusundaki SMTP(25) servisine giriş ve çıkış erişimi
    - DNS Sunucusundaki DOMAIN(53) servisine giriş çıkışa izin verilecektir.

    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 kurmayısa başlayabiliriz..


    6-Firewall Kurulumu:

    İlk olarak linux e forward ozelliği verilmesi lazım bunun için
    Eğer Redhat 6.1 Kullanıyorsanız
    /etc/syconfig/network dosyasındaki
    FORWARD_IPV4="false"
    FORWARD_IPV4="yes"
    yapın ve
    #/etc/rc.d/init.d/network restart komutu ile değişiklikleri aktif yapınız.

    Redhat 6.2 kullanıyorsanız

    /etc/syscl.conf
    net.ipv4.ip_forward = 1
    ekleyin ve
    #/etc/rc.d/init.d/network restart komutu ile değişiklikleri aktif yapınız.

    Diğer Linux çeşitlerinde

    # echo 1 > /proc/sys/net/ipv4/ip_forward komutu verin bu komutun açılışta aktif olması için
    Mandrake ve Slackware de /etc/rc.d/rc.local dosyasının içine yazınız.

    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.
    # ile başlayan ifadeler sadece açıklamadır , firewallın kurallarını değiştirmez.
    #------------------------------------------------- FIREWALL dosyasi------------------------
    #--------------------- Buradan itibaren dosyaya yazin...............
    #Değişkenlerimizi tanımlayım.

    www=212.2.2.2 # web sunucusu IP
    smtp=212.2.2.3 # mail sunucusu IP
    dns=212.2.2.4 # dns sunucusu IP
    localnet=192.168.1.0/24 #Tüm Yerel Ağ
    fwhost=192.168.1.1/32 # firewall makinasının kendisi
    EXTERNAL_INT=ppp0 # internete bağlantı arayüzü
    SERVER_INT =eth0 # firewall makinasınındaki sunucuların olduğu tarafın arayüzü
    LOCAL_INT=eth1 # firewall makinasınındaki yerel ağ bağlantı arayüz ü
    LOOPBACK=127.0.0.1 # linuxun kendisinin loopback adresi

    # önce ,daha önceki tüm kuralları silelim
    ipchains -F
    ipchains -X

    # tüm işlemleri yasaklayalım

    ipchains -P input DENY
    ipchains -P output DENY
    ipchains -P forward DENY

    # firewall sunucusun kendisinden gelip kendisinden paketlere izin vereelim
    ipchains -A input -i lo0 -j ACCEPT
    ipchains -A output -i lo0 -j ACCEPT

    # 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
    ipchains -A output -i $EXTERNAL_INT -s $LOOPBACK -j DENY -l



    # Yerel ağın internet bağlantısı için MASQUARING i aktif edelim
    # MASQUARING RULES
    /sbin/modprobe ip_masq_ftp
    /sbin/modprobe ip_masq_raudio
    /sbin/modprobe ip_masq_irc


    # simdi web sunucusuna gelen ve sunucudan gelen pakerler için kuralllar (rules) yazalım.
    # WEB SUNUCUSU

    #Internetten(ppp0) Web sunucununa(eth0) HTTPD (80) erişimi
    # internet ten sunucu ya gelen paketleri kabul edelim
    ipchains -A input -i $EXTERNAL_INT -p tcp -d $www 80 -j ACCEPT

    # internet arayüzünden(ppp0 ) gelen paketin ,sunucular tarafına giden arayüzüne (eth1) yönlendirilmesi ( forward) kabul ediliyor
    ipchains -A forward -i $SERVER_INT -p tcp -d $www 80 -j ACCEPT

    # 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.).
    ipchains -A output -i $SERVER_INT -p tcp -d $www 80 -j ACCEPT


    #Şimdide Web sunucusuna yukarıdaki gibi gelen paket lerin çıkışına izin verelim.

    #Web sunucusundan (eth0) Internete (ppp0) HTTPD (80) Cevabı (Reply)
    # firewall un sunucu arayüzüne web sunucusu tarafından gelen paketi kabul et.
    ipchains -A input -i $SERVER_INT -p tcp -s $www 80 ! -y -j ACCEPT

    # paketin internet arayüzüne yönlendirilmesini kabul et.!
    ipchains -A forward -i $EXTERNAL_INT -p tcp -s $www 80 ! -y -j ACCEPT

    # paketin internet arayüzünden çıkıp ,internet gitmesine izin ver.
    ipchains -A output -i $EXTERNAL_INT -p tcp -s $www 80 ! -y -j ACCEPT

    # 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.
    #Internetten(ppp0) Web sunucununa(eth0) HTTPSD (443) erişimi

    ipchains -A input -i $EXTERNAL_INT -p tcp -d $www 443 -j ACCEPT
    ipchains -A forward -i $SERVER_INT -p tcp -d $www 443 -j ACCEPT
    ipchains -A output -i $SERVER_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
    ipchains -A forward -i $EXTERNAL_INT -p tcp -s $www 443 ! -y -j ACCEPT
    ipchains -A output -i $EXTERNAL_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 )
    #Internetten(eth2) SMTP sunucununa(eth0) SMTP (25) erişimi

    ipchains -A input -i $EXTERNAL_INT -p tcp -d $smtp 25 -j ACCEPT
    ipchains -A forward -i $SERVER_INT -p tcp -d $smtp 25 -j ACCEPT
    ipchains -A output -i $SERVER_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
    ipchains -A forward -i $EXTERNAL_INT -p tcp -s $smtp 25 -j ACCEPT
    ipchains -A output -i $EXTERNAL_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.
    # DNS SUNUCUSU
    #Internetten(ppp0) DNS sunucununa(eth0) DOMAIN (53) erişimi UDP

    ipchains -A input -i $EXTERNAL_INT -p udp -d $dns 53 -j ACCEPT
    ipchains -A forward -i $SERVER_INT -p udp -d $dns 53 -j ACCEPT
    ipchains -A output -i $SERVER_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
    ipchains -A forward -i $EXTERNAL_INT -p udp -s $dns 53 -j ACCEPT
    ipchains -A output -i $EXTERNAL_INT -p udp -s $snd 53 -j ACCEPT


    $ICMP PAKETLERİNE İZİN VERELİM
    # ICMP paketlerinin girişine izin veriyoruz
    ipchains -A input -i $EXTERNAL_INT -p icmp -j ACCEPT
    ipchains -A forward -i $SERVER_INT -p icmp --j ACCEPT
    ipchains -A output -i $SERVER_INT -p icmp -j ACCEPT


    # icmp Paketlerinin çıkışına izin veriyoruz
    ipchains -A input -i $SERVER_INT -p icmp -j ACCEPT
    ipchains -A forward -i $EXTERNAL_INT -p icmp -j ACCEPT
    ipchains -A output -i $EXTERNAL_INT -p icmp -j ACCEPT


    # traceroute genellikle Kaynak(source) olarak 32769:65535 hedef (destination) olarak 33434:33523
    #portlarını kullanır.


    -
    # traceroute genellikle Kaynak(source) olarak 32769:65535 hedef (destination) olarak 33434:33523
    #portlarını kullanır.

    # Dışarıya Traceroute izin verelim.
    ipchains -A input -i $SERVER_INT -p udp -s 0/0 32769:65535 -d any 33434:33523 -j ACCEPT
    ipchains -A forward -i $EXTERNAL_INT -p udp -s 0/0 32769:65535 -d any 33434:33523 -j ACCEPT
    ipchains -A output -i $EXTERNAL_INT -p udp -s 0/0 32769:65535 -d any 33434:33523 -j ACCEPT




    #Şimdi de yerel ağı internete çıkaralım


    # Local (eth1) to INTERNET (eth2 )

    # Yerel ağdan gelen tüm tcp paketlerini kabul et.
    ipchains -A input -i $LOCAL_INT -s $localnet -j ACCEPT


    # ve firewallun 61000 ile 65096 arasındaki tüm portlardan çıkan paketleri kabul et.!
    ipchains -A output -i $EXTERNAL_INT -s $fwhost 61000:65096 -j ACCEPT

    # 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.
    ipchains -A input -i $EXTERNAL_INT -d $fwhost 61000:65096 -j ACCEPT


    # ve Firewallın internet arayüzünden gelip yerel ağ arayüzüden çıkan paketleri kabul et.
    ipchains -A output -i $LOCAL_INT -d $localnet ! -y -j ACCEPT


    # YEREL AĞDAN SUNUCU BÖLGESİNE GEÇİŞ.

    ## WWW sunucusuna firewall ın MASQUARING portlarından gelen paketlerin,
    # sunucu bölgesine geçmesi için firewallın sunucu arayüzünden çıkmasını kabul et.

    # httpd izni
    ipchains -A output -i $SERVER_INT -s $fwhost 61000:65096 -d $www 80 -j ACCEPT

    # https izni
    ipchains -A output -i $SERVER_INT -s $fwhost 61000:65096 -d $www 443 -j ACCEPT

    # telnet izni
    ipchains -A output -i $SERVER_INT -s $fwhost 61000:65096 -d $www 23 -j ACCEPT

    # ftp izinleri
    ipchains -A output -i $SERVER_INT -s $fwhost 61000:65096 -d $www 21 -j ACCEPT
    ipchains -A output -i $SERVER_INT -s $fwhost 61000:65096 -d $www 20 -j ACCEPT

    # Yerel ağın Mail sunucusuna erişim izinleri (mail , pop3 telnet ftp)
    ipchains -A output -i $SERVER_INT -s $fwhost 61000:65096 -d $smtp 25 -j ACCEPT
    ipchains -A output -i $SERVER_INT -s $fwhost 61000:65096 -d $smtp 110 -j ACCEPT
    ipchains -A output -i $SERVER_INT -s $fwhost 61000:65096 -d $smtp 23 -j ACCEPT
    ipchains -A output -i $SERVER_INT -s $fwhost 61000:65096 -d $smtp 21 -j ACCEPT
    ipchains -A output -i $SERVER_INT -s $fwhost 61000:65096 -d $smtp 20 -j ACCEPT


    # 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
    ipchains -A output -i $SERVER_INT -s $fwhost 61000:65096 -d $smtp 23 -j ACCEPT
    ipchains -A output -i $SERVER_INT -s $fwhost 61000:65096 -d $smtp 21 -j ACCEPT
    ipchains -A output -i $SERVER_INT -s $fwhost 61000:65096 -d $smtp 20 -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.
    Aşagıdaki ifadeleri bir dosyaya yazalım (firewall )olsun

    ----------------DOSYA BAŞLANGIÇ--------------

    #!/bin/sh
    # Firewall istendiğii zaman çalıştıran ve durduran scriptdir.
    #

    case "$1" in

    start)
    echo "Firewall Aktif Hale Getiriliyor..."
    /etc/rc.d/firewall.sh
    ;;
    stop)
    echo "Firewall durduruluyor..."
    /sbin/ipchains -F
    /sbin/ipchains -X
    /sbin/ipchains -P forward ACCEPT
    /sbin/ipchains -P output ACCEPT
    ;;
    * )
    echo "Kullanim : $firewall {start|stop**"
    exit 1
    ;;
    esac

    exit 0

    --------DOSYA BİTİŞ--------------------------------

    bu komutların açılışta aktif olması için

    ilk önce
    # chmod 700 firewall firewall.sh
    komutu ile yukarıdaki dosyaları çalıştırılabilir hale getirelim ve daha sonra
    /etc/rc.d/rc.local dosyasının sonuna
    /etc/rc.d/firewall start
    ifadesini yazalım.

    Artık Firewallımız hazırdır. Kolay gelsın.!
     
Yükleniyor...

Bu Sayfayı Paylaş