19 Şubat 2016 Cuma

IPTABLES




IPTABLES

Öğr. Gör. Mustafa SARIÖZ - Fatih Üniversitesi 
Orjinal metin:
chrome-extension://gbkeegbaiigmenfmjfclcdgdpimamgkj/views/app.html

IPTables Nedir?
İnternete bağlanan her sistem potansiyel saldırı tehlikelerine gebedir. Bir saldırgan direkt olarak veya kendini gizleyerek sisteme sızmak isteyebilir. Güncel Linux çekirdeklerinde kullanılan firewalllarin son gözdesi iptables, paket filtrelemesi yaparak erişim yetkisini belli bir seviyede tutar. Bilinmelidir ki sistem kurulmaya başladığı andan itibaren, yönetim politikasinin belirlenmeye başlaması ve firewall'in bu politika üzerine inşası şarttır. Netfilter (iptables) kurulmadan önce, kullanıcının gereksiz servisleri çalıştırmaması ve gerekli olanlarda daha seçici davranması gerekir. Daha seçici davranmasından kasıt bir servisin her zaman bir kaç tane daha alternatifi olmasıdır (sendmail yerine postfix gibi). Sendmail eski günlerdeki verdiği güveni artık verememektedir.
Aslında iptables Linux'un 4. nesil paket filtreleme yönetim aracı. İlk olarak Alan Cox tarafından 1994'de BSD'den uyarlanan ipfw aracı vardı ve Linux 1.1 serisi çekirdekten bu yana paket filtreleme sistemine sahip durumda.




IPTables Komutu
IPtables komutunun temel kullanım betikleri ve prosedürü şu şekildedir ; 

#iptables <İŞLEM> <PROSEDÜR> <PROTOKOL> <HEDEF> <KAYNAK>< DENETİM>

IPTables kural seçenekleri aşağıdaki gibidir:
!   Kuralı tersine çevirir. 
-s [!]   Kaynak adresini belirtir.127.0.0.1/255.0.0.0 gibi.. 
-p [!]   UDP, TCP, ICMP, ALL protokollerinden biri kullanılır. ALL hepsi içindir. 
--sport [!]  Kaynak portu belirtir.etc/services da listelenen port isimleri olabilir ya da numarasıyla yazılabilir. --source-port --sport ile aynı 
-d [!]   Varış adresidir. 
--dport [!]  Varış portudur. 
--icmp-type  ICMP (Internet Control Message Protocol) tipini belirtir. 
-i [!]   arabirim eth1, ppp0 gibi..
-j   Kural için belirtilen zincirde hedef belirtir. -j ACCEPT gibi.. 
--to-source  Yeni kaynak ip'si yazar SNAT ile kullanılır. 
-o [!]   Çıkan ve yönlendirilen zincirlerde kullanılır.(-o ppp1 gibi) 
-t   Tabloyu belirtir.Nat tablosu için -t nat şeklinde yazılır. 
-m   Kullanılacak modülü belirtir.-m limit gibi 
--state   State (durum) modülü içindir. NEW, INVALID, RELATED ve ESTABLISHED seçenekleri içindir. 
--tcp-flags  TCP flag'laridir. ACK, FIN, RST, URG, SYN, PS veya ALL. 
--syn   SYN paketlerini kontrol etmek içindir. 
--limit   Saniye başina eşleşme hızını kontrol etmek için kullanılır. 
-V   Iptables'ın versiyonunu öğrenmek için kullanılır. 

--mac-source[!] Belirtilen fiziksel adres için işleme alınır yada alınmaz.  
İşlem 
Bir diğer adıyla zincir. IPTables için en temel işlemler aşağıdaki gibidir:

N - Yeni İşlem Ekleneceğini belirtir ( New ) 
X - Silme işlemini belirtir. ( Eks ) 
L - Listeleme İşlemini belirtir ( List ) 
F - Tüm Kuralların silineceğini belirtir ( Flush ) 
Z - Sayaçların sıfırlanacağını belirtir ( Zero ) 
A - Yeni Kural eklentileri için kullanılır ( Add ) 
I - Bir aralığa kural eklemek için kullanılır ( Insert ) 
D - Belirtilen kuralı silmek için kullanılır ( Delete ) 
R - Belirtilen kuralı değiştirmek için kullanılır ( Replace ) 
Prosedür 
İşlemin yapılacağı prosedürü belirtir.  Burası için üç temel Prosedür vardır:

"INPUT - OUTPUT - FORWARD" 

 Sistemimiz üzerinden geçecek tüm trafikler ya giriş, ya çıkış yada yönlendirmedir. Dışarıdan sistemimize gelecek paketler için "INPUT", sistemimizden dışarıya çıkacak paketler için "OUTPUT", başka bir sistemden, diğer bir sisteme gidecek ve bizim üzerimizden geçecek paketler için "FORWARD" prosedürlerini kullanırız. 
Protokol  
Denetimi hangi protokol üzerinde yapacağımızı, "Tcp, Udp" bu betikte belirtiriz. 
Örneğin "-p tcp"
Hedef 
Yapacağımız denetim işleminin hedefini belirtir. Örneğin "-d 212.174.199.71" 
Kaynak
Yapacağımız denetimin kaynağını belirtir. 
Örneğin "-s 127.0.0.1" 
Burada 127.0.0.1 IP adresini kaynak olarak belirtiyoruz.
Denetim
Yapacağımız denetimin türünü belirtir. 
Örneğin, yasaklamak istiyor isek "DROP", izin vermek istiyor isek  "ACCEPT", kabul etmeyip red cevabını göndermek istiyor isek  "REJECT", işlemin kaydını tutmak istiyor isek "LOG" seçenklerini kullanırız. 

Uygulama

Sistemimizde HTTP, FTP, Pop3, Smtp servisleri çalışıyor  olsun. Sistemimiz dışarıdan gelecek Ping'lere yanıt  vermesin ve belirtilen servisler dışındaki hiçbir porta talep  gönderilemesin. 



Prosedürleri sil
#iptables –F

Öncelikle daha önce girdiğimiz tüm betikleri temizliyoruz.

root@localhost ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Tüm girişleri yasakla
#iptables -A INPUT -p tcp -j DROP

Daha sonra IPtables -A INPUT diyerek dışıradın gelen tapeler hakkında bir kayıt gireceğimiz belirterek protokolümüzü "-p tcp" diyerek seçiyoruz. Eğer kaynak ve hedef belirtmezsek tüm kaynak ve tüm hedefleri kapsar yaptığımız işlem. Ozaman kaynak belirtmiyoruz ve "-j DROP" diyerek denetimlerimizi yasaklıyoruz. Böylelikle sistemimize dışarıdan hiç kimse ulaşamaz hale geliyor.

[root@localhost ~]# iptables -A INPUT -p tcp -j DROP
[root@localhost ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       tcp  --  anywhere             anywhere            

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

NOT: Browserınızla bir web sayfasına bağlanmaya çalışarak kuralın çalışmasını test edin. 

Ping'leri yasakla
#iptables -A INPUT -p ICMP -j DROP 

Şimdi Dışarıdan sistemimize Ping atılmasını engelleyelim. Bunun için yine "IPtables -A INPUT" diyoruz ve yeni bir işlem gireceğimizi belirtiyoruz. "-p ICMP" diyoruz ve üzerinde işlem yapacağımız protokolün "ICMP" olduğunu gösteriyoruz. Akabinde "-j DROP" diyoruz ve tüm kaynak ve hedefleri içine kapsayacak bir kural ile bu prosedüre engel kuyoyoruz.


[root@localhost ~]# iptables -A INPUT -p ICMP -j DROP
[root@localhost ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       tcp  --  anywhere             anywhere            
DROP       icmp --  anywhere             anywhere            

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

NOT: Bilgisayarınızın IP adresine ping atmaya çalışarak kuralın çalışmasını test edin. 

80 nolu portu (HTTP portunu) aç
#iptables -A INPUT -p tcp -s 0/0 --dport 80 -j ACCEPT 

IPtables -A diyoruz, ve bir denetim gireceğimiz gösteriyoruz. "-p tcp" diyoruz ve işlemin hangi protokol üzerinde uygulanacağını belirtiyoruz. "-s 0/0" diyoruz ve kaynağı tüm network olarak gösteriyoruz. Burada hiçbirşey belirtmeyebilirdikte. "-s" kullanımına örnek olması açısından gösteriyoruz. "-s 0/0" diyerek tüm IP aralıklarını içine kapsayacağını gösteriyoruz. "--dport 80" diyerek sistemimizdeki 80 nolu portu belirtiyoruz ve "-j ACCEPT" diyerek bu porta erişimleri olanaklı kılıyoruz.

[root@localhost ~]# iptables -A INPUT -p tcp -s 0/0 --dport 80 -j ACCEPT
[root@localhost ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       tcp  --  anywhere             anywhere            
DROP       icmp --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:http 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

NOT: Browserınızla bir web sayfasına bağlanmaya çalışarak kuralın çalışmasını test edin. 

21 Nolu Portu aç
#iptables -A INPUT -p tcp -s 0/0 --dport 21 -j ACCEPT 

[root@localhost ~]# iptables -A INPUT -p tcp -s 0/0 --dport 21 -j ACCEPT
[root@localhost ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       tcp  --  anywhere             anywhere            

DROP       icmp --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:http 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ftp 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

25 Nolu portu aç 
#iptables -A INPUT -p tcp -s 0/0 --dport 25 -j ACCEPT 

[root@localhost ~]# iptables -A INPUT -p tcp -s 0/0 --dport 25 -j ACCEPT
[root@localhost ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       tcp  --  anywhere             anywhere            
DROP       icmp --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:http 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ftp 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:smtp 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

110 Nolu portu aç
#iptables -A INPUT -p tcp -s 0/0 --dport 110 -j ACCEPT 

[root@localhost ~]# iptables -D INPUT -p tcp -s 0/0 --dport 110 -j ACCEPT
iptables: Bad rule (does a matching rule exist in that chain?)
[root@localhost ~]# iptables -A INPUT -p tcp -s 0/0 --dport 110 -j ACCEPT
[root@localhost ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       tcp  --  anywhere             anywhere            
DROP       icmp --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:http 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ftp 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:smtp 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:pop3 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         


Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Referanslar


www.fatih.edu.tr/~gulshatk/linux_II/IPTABLES%20SERVISI.pdf

http://www.wardom.org/iptables-nedir-genis-bilgi-t274001.html

Hiç yorum yok:

Yorum Gönder