EnderUnix Software Development Team

Linux uzerinde IPCHAINS Firewall Kurulumu ve Konfigurasyonu. 

Giris

9 $ubat 2001

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
Genel Notlar
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
   ismail@enderunix.org
   9 $ubat, 2001

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
 
  • 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ı

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

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: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.

 

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 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.
  !                                           :Bu 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.
 


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.

        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ı 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çıklamaya 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 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
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 kurmaya başlayabiliriz..
 

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.

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
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.!
 

Eğer bu komutları yazmak bayagı zor geliyor ise sizin için firewall kuralları üreten bazı yardımcı programlar var

  1. İsmi:PHP Chains 2.0
    Adresi : http://www.tuial.com/projects.php3:
    Özelliği :PHP de yazılmış , web üzerinden kullanabiliyorsunuz.
  1. İsmi: PHP Firewall Generator
    Adresi :   http://phpfwgen.sourceforge.net
    Özelliği :PHP de yazılmış , web üzerinden kullanabiliyorsunuz.
  2. İsmi:PMFirewall
    Adresi: http://www.pmfirewall.com/PMFirewall/
    Özelliği: Ipchains ve MASQUAREDING Kuralları yazma.
Kaynaklar
 
  1. Securing And Optimazing Redhat Linux  v 1.3 (PDF olarak indirelebiliyor.) http://www.openna.com/books/book.htm
  2. IPchains HOWTO: http://netfilter.filewatcher.org/ipchains
  3. Building Internet Firewall  (http://www.oreilly.com)
  4. Ipchains Türkçe Çeviri Dökümanı  http://www.linux.org.tr/documents/kullanici_belgeleri/ipchains/
  5. man ipchains ;)

 

(c) 2001 Enderunix Software Development Team