Basit bir web sunucusunda güvenlik için Apache, MySQL, DNS, FTP ve SSH servislerinin kullandığı portlar dışında kalanları engellemek gerek.
Aşağıdaki betikte SSH için 22. portun kullanıldığı varsayılmıştır. MySQL varsayılan ayarlarıyla çalıştırıldığında 3306 portunu kullanır. Aşağıdaki betikte localhost’tan gelen tüm paketleri kabul etmek için loopback arayüzünden gelen tüm paketlere izin verilmiştir. Bu sayede MySQL dışında localhost’tan çalışan diğer uygulamalara da izin verilmiş oldu. FTP işi biraz daha çetrefilli. FTP aktif modla bağlandığında 21. portu kontrol için, 20. portu da veri iletimi için kullanır. Ama pasif modla bağlandığında ilk bağlantıdan sonra FTP istemcisi daha yüksek portları da kullanmak isteyebilir. Bunun için ip_conntrack çekirdek modülü kullanılarak kurulmuş bağlantılarla ilgili olan bağlantılara izin verilmiştir. ip_conntrack’in yüklenmesi aşağıda açıklanmıştır.
Bazı IP’lerin ve subnet’lerin yasaklanması için örnek satırlar da verilmiştir. Yanlışlıkla engellenmemesi için Cloudflare CDN hizmetinin kullandığı IP adresleri beyaz listeye alınmıştır.
iptables kuralları yukarıdan aşağıya doğru işletilir, gelen paketin uyduğu ilk satır işlendikten sonra diğerleri atlanır. Kuralların sonuna kadar gelindiğinde, bir paket için hala uygun bir kural bulunamamışsa, prensip (Policy) işletilir. Aşağıdaki örnekte prensip DROP olarak belirlenmiştir.
### IP v4 ### # SSH iptables -I INPUT -p tcp --dport 22 -j ACCEPT # Web iptables -A INPUT -p tcp --dport 80 -j ACCEPT # MySQL (ve localhost'tan gelen diğer istekler) iptables -I INPUT -i lo -j ACCEPT # FTP iptables -A INPUT -p tcp --dport 21 -j ACCEPT iptables -A INPUT -p tcp --dport 20 -j ACCEPT iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # DNS iptables -A INPUT -p tcp --dport 53 -j ACCEPT iptables -A INPUT -p udp --dport 53 -j ACCEPT # Yasaklı IPler iptables -I INPUT 3 -s YASAKLI_IP/24 -j DROP iptables -I INPUT 3 -s YASAKLI_IP -j DROP # Cloudflare iptables -I INPUT 3 -s 103.21.244.0/22 -j ACCEPT iptables -I INPUT 3 -s 103.22.200.0/22 -j ACCEPT iptables -I INPUT 3 -s 103.31.4.0/22 -j ACCEPT iptables -I INPUT 3 -s 104.16.0.0/12 -j ACCEPT iptables -I INPUT 3 -s 108.162.192.0/18 -j ACCEPT iptables -I INPUT 3 -s 141.101.64.0/18 -j ACCEPT iptables -I INPUT 3 -s 162.158.0.0/15 -j ACCEPT iptables -I INPUT 3 -s 172.64.0.0/13 -j ACCEPT iptables -I INPUT 3 -s 173.245.48.0/20 -j ACCEPT iptables -I INPUT 3 -s 188.114.96.0/20 -j ACCEPT iptables -I INPUT 3 -s 190.93.240.0/20 -j ACCEPT iptables -I INPUT 3 -s 197.234.240.0/22 -j ACCEPT iptables -I INPUT 3 -s 198.41.128.0/17 -j ACCEPT iptables -I INPUT 3 -s 199.27.128.0/21 -j ACCEPT # Policy iptables -P INPUT DROP ### IP v6 ### # Web ip6tables -A INPUT -p tcp --dport 80 -j ACCEPT # MySQL ip6tables -I INPUT -i lo -j ACCEPT # DNS ip6tables -A INPUT -p tcp --dport 53 -j ACCEPT ip6tables -A INPUT -p udp --dport 53 -j ACCEPT # Yasaklı IPler # Cloudflare ip6tables -I INPUT 3 -s 2400:cb00::/32 -j ACCEPT ip6tables -I INPUT 3 -s 2405:8100::/32 -j ACCEPT ip6tables -I INPUT 3 -s 2405:b500::/32 -j ACCEPT ip6tables -I INPUT 3 -s 2606:4700::/32 -j ACCEPT ip6tables -I INPUT 3 -s 2803:f800::/32 -j ACCEPT # Policy ip6tables -P INPUT DROP
ip_conntrack modülünü yüklemek için şu komutu kullanabilirsiniz:
modprobe ip_conntrack_ftp
iptables kuralları bilgisayar yeniden başlatıldığında silinir. Kurallarınızı kaydetmek için iptables-persistent programını yükleyebilirsiniz:
apt-get install iptables-persistent
Bu program kurallarınızı /etc/iptables/rules.v4 ve /etc/iptables/rules.v6 dosyalarına kaydeder ve sistem tekrar başlatıldığında tekrar bu dosyalardan yükler.
ip_conntrack modülünün bilgisayar yeniden başlatıldığında tekrar yüklenmesi için ise /etc/init.d/iptables-persistent dosyasında load_rules() fonksiyonunun en üstüne aşağıdaki satırı ekleyebilirsiniz:
/sbin/modprobe -q ip_conntrack_ftp
Kaynak:
http://bencane.com/2012/09/iptables-linux-firewall-rules-for-a-basic-web-server/
https://www.cloudflare.com/ips