IP tables; Linux işletim sistemlerinde entegre olarak kullanılan güvenlik duvarı uygulamasıdır. IP tables Linux’un 4. nesil paketleme yönetim aracıdır. İlk olarak 1994 yılında Alan COX tarafından geliştiriliştir. IP Tables birçok linux dağıtımında kurulu olarak gelmektedir. IP Tables’in kurulu olmadığı durumlarda, Redhat türevi işletim sistemlerinde aşağıdaki komut ile kurulum işleminin gerçekleştirebilirsiniz.
IPv4 sistemler için; yum install iptables
IPv sistemler için; yum install iptables-ipv6
IP Tables temel olarak kullanımı aşağıdaki gibidir.
# iptables <zincir> <prosedür> <protokol> <hedef> <kaynak> <denetim>
IP Tables kural seçenekleri
! | Kuralı tersine çevirir. |
s [!] | Kaynak adresini belirtir. |
-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 [!] | Ağ arabirim eth0, eth1, ppp0 vb.. |
-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çin kullanılır. 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. |
Zincirler
- A : zincire kural ekler. ( Add)
- E : zinciri yeniden adlandırır.
- D : zincirden kural siler. (Delete)
- D : zincirden belirtilen numaradaki kuralı siler. (Delete)
- L : belirtilen zincirdeki kuralı listeler. (List)
- I : zincirde belirtilen numaralı alana kural ekler. (Insert)
- R : zincirdeki kuralın değiştirilmesi için kullanılır. (Replace)
- N : yeni bir zincir oluşturur. (New)
- X : kullanıcı tarafından eklenen bir zinciri siler. (Eks)
- F : zincirdeki kuralların tümünü siler. (Fluhs)
- P : zincire genel politika ekler.
Prosedür
Sistemimiz üzerinden geçecek tüm trafikler ya giriş, ya çıkış yada yönlendirilmesidir.
- Input : Dışarıdan sistemimize gelecek paketler,
- Output : Sistemimizden dışarıya çıkacak paketler,
- Forward : Başka bir sistemden, diğer bir sisteme gidecek ve bizim üzerimizden geçecek paketler için.
Denetim
- ACCEPT : paket geçişlerinin izni için kullanılır.
- DROP : paketlerin geçişlerini engellemek için kullanılır.
- REJECT : paketlerin erişimi engellenir ve paketi gönderen sistem bilgilendirilir.
- RETURN : zincirin sonuna gönderilir.
- QUEUE : paketler kullanıcı alanına gönderilir.
IP Tables’da Sık Kullanılan Komutlar
IP Tables servisinin çalışıp/çalışmadığın kontrol etmek için aşağıdaki komutu kullanabilirsiniz.
/etc/init.d/iptables status ya da services iptables status
IP Tables kurulumu tamamlandıktan sonra servisin kapalı olması durumunda aşağıdaki komut ile ip tables servisini başlatabilirsiniz.
# service iptables start
IP Tables servisinin işletim sisteminin yeniden başlatılması ile servisin otomatik olarak başlatılması için aşağıdaki komutu kullanabilirsiniz.
# chkconfig –level 345 iptables on
IP Tables servisi durdurmak için;
/etc/init.d/iptables stop
IP Tables servisi başlatmak için;
/etc/init.d/iptables start
IP Tables konfigini görüntülemek için;
# iptables-save
IP tables’da kuralların system üzerinde kayıtlı kalması için;
# service iptables save
IP Tables’da bütün kuralları silmek ve boş konfig ile ayarları saklamak için sırasıyla aşağıdaki komutları çalıştırmanız gerekecektir.
# iptales -F
# iptales -X
# iptales –t nat -F
# iptales –t nat -X
# iptales –t mangle -F
# iptales –t mangle -X
# iptales –P INPUT ACCEPT
# iptales –P FORWARD ACCEPT
# iptales –P OUTPUT ACCEPT
# service iptables save
IP Tables’da varsayılan ayarları yeniden yüklemek için aşağıdaki komut kullanılır. Bu işlem ile bütün ağ trafiği engellenir.
# iptables -P INPUT DROP
# iptables -P OUTPUT DROP
# iptables -P FORWARD DROP
IP Tables’da loopback ağ kartının izinleri için aşağıdaki komutları kullanabilirsiniz.
# iptables -A INPUT -i lo -j ACCEPT
# iptables -A OUTPUT -o lo -j ACCEPT
FTP sunucu için;
# iptables -A INPUT -i eth0 -p tcp -m tcp –sport 21 -m state –state ESTABLISHED -j ACCEPT
# iptables -A INPUT -i eth0 -p tcp -m tcp –sport 20 -m state –state ESTABLISHED,RELATED -j ACCEPT
# iptables -A INPUT -i eth0 -p tcp -m tcp –sport 1024:65535 –dport 1024:65535 -m state –state ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -o eth0 -p tcp -m tcp –dport 21 -m state –state NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -o eth0 -p tcp -m tcp –dport 20 -m state –state ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -o eth0 -p tcp -m tcp –sport 1024:65535 –dport 1024:65535 -m state –state ESTABLISHED,RELATED -j ACCEPT
Web servisi (tcp 80) izinleri için;
# iptables -A INPUT -i eth0 -p tcp -m tcp –sport 80 -m state –state ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -o eth0 -p tcp -m tcp –dport 80 -m state –state NEW,ESTABLISHED -j ACCEPT
DNS servisi ( tcp/udp 53) izinleri için;
# iptables -A INPUT -i eth0 -p udp -m udp –sport 53 -j ACCEPT
# iptables -A OUTPUT -o eth0 -p udp -m udp –dport 53 -j ACCEPT
# iptables -A INPUT -i eth0 -p tcp -m tcp –sport 53 -j ACCEPT
# iptables -A OUTPUT -o eth0 -p tcp -m tcp –dport 53 -j ACCEPT
Kaynak IP adresi 192.168.100.10 olan sistem üzerinden gelen tüm paketleri kabul etmek için;
# iptables -t filter -l INPUT -s 192.168.100.10 –j ACCEPT
Hedef IP adresi 195.175.39.40 olan tüm paketlerin reddedilmesi için;
# iptables -t filter -I OUTPUT -d 195.175.39.40 -j REJECT
Kaynak IP adresi 192.168.100.10 olan sistem üzerinden gelen tüm paketleri engellemek için;
# iptables -A INPUT -s 192.168.100.10 -j DROP
TCP ABC portunu açmak için;
# iptables -A TRUSTED -i eth0 -p tcp -m tcp –dport ABC -j ACCEPT
UDP ABC portunu açmak için;
# iptables -A TRUSTED -i eth0 -p udp -m udp –dport ABC -j ACCEPT
80 nolu porta gelen bütün isteklerin kabul edilmesi için;
# iptables -t filter -I INPUT -p tcp -dport 80 -j ACCEPT
Kaynak IP adresi 192.168.100.10’dan TCP 22 portdan gelen isteklerin kabul edilmesi için;
# iptables -t filter -I INPUT -s 192.168.100.10 -p tcp -dport 22 -j ACCEPT
IP Tabled’da NAT Kuralları
iptables -t nat PREROUTING -d “Real IP” -j DNAT -to-destination 192.168.100.20
iptables -t nat POSTROUTING -s 192.168.100.20 -j SNAT “Real IP”
Dışarıdan gelen tcp 80 olan paketin hedef portunun 8080 olarak değiştirilmesi için aşağıdaki komutu kullanabilirsiniz.
# iptables –t nat –I OUTPUT –o eth0 –p tcp 80 –J REDIRECT –to ports 8080
Dışarı doğru çıkan tüm trafiğin eth0 interface IP adresi ile NAT lamak.
# iptables –t nat –I POSTROUTING –o eth0 –J MASQUERADE