Firewall nedir, Nasıl kurulur? (Linux)

ByCrauSeRs

Kıdemli Üye
22 Eyl 2007
2,641
9
THT KaLıcı KonutLarı
Firewall nedir, Nasıl kurulur? (Linux)
1-Firewall nedir?

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

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
frown.gif
Insert) Araya kural eklemk için kullanılır
-F
frown.gif
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.
!
gleam.gif
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.

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


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


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.

2-İsmi: PHP Firewall Generator
Adresi : http://phpfwgen.sourceforge.net
Özelliği :pHP de yazılmış , web üzerinden kullanabiliyorsunuz.
3-İsmi:pMFirewall
Adresi: http://www.pmfirewall.com/PMFirewall/
3-Özelliği: Ipchains ve MASQUARING 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/********s/ku...leri/ipchains/
5- man ipchains
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.