DigitalOcean 101 – iptables ile Temel Güvenlik Ayarları

iptables Nedir?

Firewall (Güvenlik Duvarı) bildiğiniz gibi internet veya yerel ağ içerisinden gelen/giden veri akışını yapılandırılan ayarlara göre engelleyen veya izin veren yazılımlardır. Özellikle kötü niyetli kişilerin sisteminize sızmasını engellemeye yardımcı olur. iptables ise çeşitli geliştiriciler tarafından Linux işletim sistemi için geliştirilen güvenlik duvarı yazılımıdır. Aslında kendisi Linux çekirdeği içerisinde bulunan netfilter adlı IP paket filtreleme sistemini yönetmek için kullandığımız bir araçtır. iptables aracılığıyla hizmete açacağınız servislerin port’larından geçecek trafiği engelleme veya yönlendirme gibi işlemleri kolayca gerçekleştirebilirsiniz.

iptables’ın Kurulumu ve Ayarlar

Çoğu Linux dağıtımında varsayılan olarak iptables kurulu geliyor. DigitalOcean’da kuracağınız CentOS’lu sunucuların içerisinde de iptables kurulu olarak mevcut bulunuyor. Dilerseniz aşağıdaki komutla IPv4 için iptables kurulumunu gerçekleştirebilirsiniz:

yum install iptables

IPv6 sürümü için ise aşağıdaki komutu kullanabilirsiniz:

yum install iptables-ipv6

Kurulumdan sonra iptables’ı sunucunun her yeniden başlatma işlemi sonrası çalışması için yapılandıralım:

chkconfig iptables on

Aşağıdaki komut ile iptables üzerindeki güncel ayarları görüntüleyebilirsiniz:

service iptables status

digitalocean-101-17

iptables’a herhangi bir kural eklenmediğinden şuanda tertemiz görünüyor.

En Yaygın Saldırıların Engellenmesi

DigitalOcean’da kurduğunuz VPS’lerin iptables yapılandırması tüm trafiğe izin verilecek şekilde geliyor. Önceden yapılandırmış olduğunuz kurallar varsa bunları silmek için aşağıdaki komuttan yararlanabilirsiniz:

iptables -F

Öncelikle iptables ile DDOS gibi ağır saldırılardan tamamıyla korunmanız mümkün değil ancak internette aktif olarak dolanarak güvenlik açıkları arayan botlara karşı boş paketleri engelleyerek ilk güvenlik adımını atabiliriz:

iptables -A INPUT -p tcp –tcp-flags ALL NONE -j DROP

SYN saldırısı olarak bilinen karşı tarafın yeni bir bağlantı oluşturduğu ancak paket durumunu belirtmeyerek sistem kaynaklarını tüketmeyi amaçladığı saldırılardan korunmak için aşağıdaki komutu çalıştıralım:

iptables -A INPUT -p tcp ! –syn -m state –state NEW -j DROP

Son olarak XMAS (Christmas Tree Packet) ile yapılabilecek saldırıları engellemek için aşağıdaki kuralı ekleyelim:

iptables -A INPUT -p tcp –tcp-flags ALL ALL -j DROP

Servisler için Port Açılımı

Sunucunuz üzerinde çalışan uygulamalar önceden belirlenmiş port’lar aracılığıyla gelen ve giden veri akışını sağlar. Kısacası hangi veri paketinin hangi uygulamaya ait olduğunun belirlenmesi için kullanılan port’lara ait izinleri güvenlik amacıyla iptables üzerinden belirleyebilirsiniz. İlk olarak web sitenizin veritabanı ile bağlantı için sıkça kullanacağı “localhost” arayüzü için gerekli izni verelim, böylece veritabanına yerel olarak erişim mümkün olurken dışarıdan gelebilecek saldırılara karşı kapalı kalmış olacak:

iptables -A INPUT -i lo -j ACCEPT

Web uygulamalarında kullanılan http ve https protokollerine ait 80 ve 443 port’larını açalım:

iptables -A INPUT -p tcp -m tcp –dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp –dport 443 -j ACCEPT

E-posta uygulamalarının gönderim ve alım için gerekli olan SMTP‘e ait 25 ve 465, POP3‘e ait 110 ve 995 son olarak da IMAP‘a ait 143 ve 993 port’ları açalım:

iptables -A INPUT -p tcp -m tcp –dport 25 -j ACCEPT
iptables -A INPUT -p tcp -m tcp –dport 465 -j ACCEPT

iptables -A INPUT -p tcp -m tcp –dport 110 -j ACCEPT
iptables -A INPUT -p tcp -m tcp –dport 995 -j ACCEPT

iptables -A INPUT -p tcp -m tcp –dport 143 -j ACCEPT
iptables -A INPUT -p tcp -m tcp –dport 993 -j ACCEPT

Güvenliğiniz açısından SMTP’de 465 port’unu tercih etmenizi öneririm. Benzer şekilde POP3 ve IMAP’te diğerlerini kullanmanız daha iyi olacaktır. Şuanda konsola erişim sağladığımız SSH üzerinden tekrar iletişim kurabilmek için 22 port’unu açmayı unutmayalım:

iptables -A INPUT -p tcp -m tcp –dport 22 -j ACCEPT

Sunucunun güncelleme gibi dışarıyla bağlantı kurması gereken durumlar için aşağıdaki tanımlamayı gerçekleştirelim:

iptables -I INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

Yukarıda açmış olduğumuz port’lar dışında diğerlerinin ret edilip gidenlere izin verecek şekilde noktayı koyalım:

iptables -P OUTPUT ACCEPT
iptables -P INPUT DROP

digitalocean-101-18

Yukarıdaki kuralları ekledikten sonra iptables’ın mevcut hali…

Yapılandırmış olduğunuz ayarları kalıcı hale getirmek için aşağıdaki komutu çalıştıralım:

iptables-save | sudo tee /etc/sysconfig/iptables

Kaydettiğimiz ayarlardan sonra uygulamalara erişimde sorun olup olmadığını kontrol etmek için iptables’ı yeniden başlatalım:

service iptables restart

Uygulamalarınız için ihtiyaç duyacağınız başka port’lar için TCP ve UDP port’ları listesine göz atarak yukarıda web ve e-posta uygulamaları için yaptığımız mantıkta iptables’a benzer kurallar ekleyebilirsiniz. Eğer eklediğiniz kurallardan sonra istenmeyen sonuçlar elde ederseniz tüm yapılandırmayı aşağıdaki komutla sıfırlayabilirsiniz:

iptables -F