Iptables Rehberi – Linux Güvenlik Duvarı ile Ubuntu VPS Güvenliği

Iptables Rehberi – Linux Güvenlik Duvarı ile Ubuntu VPS Güvenliği

İstenmeyen kişilerin sisteme erişmesini öncelemek için kullanıcı tarafından belirlenen kurallarla sunucuya gelen ve giden trafiğin izlenmesi ve filtrelenmesinde Iptables Linux güvenlik duvarı kullanılır.

Iptables kullanarak yalnızca seçili trafiği sunucunuza izin verecek kurallar belirleyebilirsiniz. Bu Iptables rehberinde web uygulamanızı nası Iptables ile güvene alabileceğinizi öğreneceksiniz.

Not: RHEL / CentOS işletim sistemlerinde firewallD adı verilen bir sistem zaten kuruludur. Eğer Iptables kullanmak istiyorsanız, öncelikle bunu devre dışı bırakmalısınız.

Nelere ihtiyacınız olacak?

Iptables rehberine başlamadan önce aşağıdakilere ihtiyacınız vardır:

SSH ve SSH komutları hakkında daha fazla bilgi edinmek isterseniz Basit SSH Komutları rehberimizi incelemenizi öneririz.

Iptables Temelleri

İnternet üzerinde tüm veri paketler halinde gönderilir. Linux kernel’i hem gelen hem de giden trafiğin paketlerini paket filtresi tablosu kullanarak filtrelemenize olanak veren bir arayüze sahiptir. Iptables bu tabloları kurmak, yönetmek ve incelemek için bir komut satırı uygulaması ve Linux güvenlik duvarıdır. Birden fazla tablo belirlenebilir. Her tablo birden fazla zincir içerebilir. Zincir kuralların bütünüdür. Her kural bir paketin paket kuralı ile uyduğunda o paketle ne yapılması gerektiğini içerir. Bir paket eşleştiğinde, ona bir TARGET (HEDEF) verilir. Target eşlenmesi için başka bir zincir veya aşağıdaki bazı özel değerler olabilir.

  • ACCEPT (KABUL ET): Paketin geçmesine izin verileceği anlamına gelir.
  • DROP (REDDET): Paketin geçmesine izin verilmeyeceği anlamına gelir.
  • RETURN (GERİ ÇEVİR): Şimdiki zincirin pas geçilmesi ve çağrıldığı zincirde bir sonraki kurala geçilmesi gerektiği anlamına gelir.

Bu rehberde varsayılan tablolardan biri olan filter ile çalışacağız. Filtreler tablosu üç zincire (kural gurubuna) sahiptir.

  • INPUT – Bu zincir sunucuya gelen paketleri kontrol etmek için kullanılır. Bağlantıları port, protokol ve kaynak IP adresi bazında engelleyebilir veya izin verebilirsiniz.
  • FORWARD – Bu zincir sunucuya gelen ama başka bir yere yönlendirilecek paketleri filtrelemek için kullanılır.
  • OUTPUT – Bu zincir sunucudan giden paketleri filtrelemek için kullanılır.

ip tables input forward ve outputAdım 1 – Iptables Linux Güvenlik Duvarı Kurulumu

1. Iptables kurulumu

Iptables neredeyse tüm Linux dağıtımlarında varsayılan olarak kurulu gelir. Ancak eğer Debian veya Ubuntu sisteminizde kurulu değilse, aşağıdaki satırları çalıştırarak kurabilirsiniz.

sudo apt-get update
sudo apt-get install iptables

2. Mevcut Iptables durumunu kontrol etmek

Bu komut ile mevcut Iptables yapılandırmanızın drumunu kontrol edebilirsiniz. Burada -L seçeneği tüm kuralları göstermek için ve -v seçeneği ise daha geniş bir liste almak için kullanılıyor. Lütfen bu seçeneklerin büyük/küçük harf duyarlı olduğunu not ediniz.

sudo iptables -L -v

Örnek çıktı:

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source             destination         
 
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source             destination         
 
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source             destination

Bu yukarıdaki komutun çıktısıdır. Burada, tüm zincirler (chain) varsayılan ACCEPT politikasına ayarlıdır. Şu anda zincirlerde herhangi bir kural bulunmamaktadır.

Bu rehberi daha öğretici kılmak için INPUT zincirini gelen trafiği filtrelemek için düzenleyeceğiz.

Adım 2 – Zincir Kuralları Belirlemek

Kural belirlemek onu zincire (listeye) eklemek demektir. Olağan seçeneklerle düzenlenmiş Iptables komutu şu şekildedir:

sudo iptables -A -i <interface> -p <protocol (tcp/udp) > -s <source> --dport <port no.> -j <target>

Burada -A sona eklemeyi(append) temsil ediyor. Zincir hangi zincire kurallarımızı eklemek istediğimizi gösteriyor. Interface ise hangi ağ arayüzündeki trafiği filtrelemek istediğimizi belirtiyor. Protocol de paketleri ağ protokolüne göre filtreleyecek kuralı belirtiyor. Aynı zamanda üzerinde trafiği filtrelemek için port, port numarası da belirtebilirsiniz.

Iptables komutları ve seçenekleri hakkında daha fazla bilgi için Iptables sayfasını kontrol edebilirsiniz.

1. Localhost üzerinde trafiğe izin vermek

Sunucu üzerindeki uygulamaların ve veritabanlarının aynı şekilde iletişim kurmasına devam etmesini istiyoruz.

sudo iptables -A INPUT -i lo -j ACCEPT

Örnek çıktı:

Chain INPUT (policy ACCEPT 7 packets, 488 bytes)
pkts bytes target     prot opt in     out     source               destination         
0     0 ACCEPT     all  --  lo     any     anywhere             anywhere

Burada -A seçeneği INPUT zincirinin sonuna eklenmek, lo arayüzünde tüm bağlantılara izin vermek için kullanılmıştır. lo loopback interface anlamına gelir. Aynı makinedeki veritabanı veya web uygulaması arasındaki gibi localhost üzerindeki tüm iletişim için kullanılır.

2. HTTP, SSH ve SSL portuna bağlantılara izin vermek

Olağan HTTP (port 80), https (port 443) ve ssh (port 22) bağlantılarının aynen normalde olduğu gibi çalışmaya devam etmesini isteriz. Bu portlara izin vermek için aşağıdaki komutları çalıştırın. Aşağıdaki komutlarda protokolü -p seçeneği ile ve her protokolün ilgili olduğu portu -dport (destination port – hedef port) ile gösterdik.

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

Şimdi belirlenen port numaralarından gelen tüm TCP protokol bağlantıları kabul edilecek.

3. Kaynağına göre paketleri filtrelemek

Eğer kaynak IP adresine veya adres aralığına göre gelen trafiği kabul etmek veya reddetmek istiyorsanız, bunu -s seçeneği ile belirtebilirsiniz. Örneğin, 192.168.1.3 adresinden gelen paketleri kabul etmek için:

sudo iptables -A INPUT -s 192.168.1.3 -j ACCEPT

Benzer şekilde aynı IP adresinden gelen paketleri reddetmek için:

sudo iptables -A INPUT -s 192.168.1.3 -j DROP

Eğer gelen paketleri reddetmek için IP aralığı belirtmek isterseniz,-m seçeneğini ve IP aralığını -src-range ile belirterek Iprange modülünü kullanabilirsiniz.

sudo iptables -A INPUT -m iprange --src-range 192.168.1.100-192.168.1.200 -j DROP

4. Diğer tüm trafiği reddetmek

Note: Kurallarınızı belirledikten sonra gelen diğer trafiğin tamamını reddetmek (DROP) önemlidir. Aksi durumda diğer tüm açık portlardan izin verilmemiş erişim kurulabilir.

sudo iptables -A INPUT -j DROP

Bu komut yukarıda belirtilen komutlarda belirlenen portlar dışındaki tüm trafiği reddeder.

Şimdi ayarladığınız kendi kurallarınızın tamamını şu komut ile kontrol edebilirsiniz:

sudo iptables -L -v

5. Kuralları silmek

Eğer tüm kuralları silmek ve yeniden temiz bir sayfa açmak isterseniz, bu komutu kullanabilirsiniz:

sudo iptables -F

Bu komut mevcut tüm kuralları siler. Eğer belirli bir kuralı silmek isterseniz bunu -D seçeneği ile yapabilirsiniz. Çncelikle kuralları numaralarıyla görmek için şu komutu girin:

sudo iptables -L --line-numbers

Ardından kuralları numaralarıyla göreceksiniz.

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     all  --  192.168.0.4          anywhere            
2    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https
3    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
4    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh

Adım 3 – Değişiklikleri kalıcı hale getirmek

Oluşturduğumuz Iptables kuralları hafızada saklanır. Bu da her tekrar başlatma (reboot) sonrasında tekrar tanımlamamız anlamına gelir. Reboot sonrasında kuralların kalmasını sağlamak için Ubuntu/Debian sistemlerinde şu komutu kullanabilirsiniz:

sudo /sbin/iptables-save

Bu komut kuralları sistem yapılandırma dosyasına kaydeder ve her tekrar başlatmadan sonra sistem bu yapılandırma dosyasından Iptables kurallarını tekrar devreye alır. Kurallarda her değişiklik yaptığınızda bu komutu çalıştırmalısınız.

Koruma duvarını sıfırlamak için tüm kuralları silin ve değişiklikleri kaydedin:

sudo iptables -F
sudo /sbin/iptables-save

Sonuç

Bu Iptables rehberinde yalnızca belirli port numaralarından gelen trafiğe izin vermek için Iptables Linux koruma duvarını kullandık. Kurallarımızın tekrar başlatma sonrasında kalıcı olmaları için kaydetmeyi de öğrendik. Bu Linux koruma duvarı istenmeyen paketleri reddedecek ancak dikkat etmelisiniz ki Iptables yalnızca IPv4 trafiğini kontrol edebilir. Eğer VPS planınızda IPv6 ağ yapısı aktifse, bu trafik için ip6tables ile kuralları tanımlamalısınız.

Author
Yazar

Egehan D.

Egehan Hostinger'da ML ve NN ile denetimsiz öğrenme üzerinde çalışıyor. Veri analizi hakkında büyük bir tutkuya sahiptir. İşi her ne kadar hobi gibi olsa da, çeşitli aktivitelerde gönüllü olmaktan ve ormanda kamp yapmaktan da büyük oranda zevk alıyor.