Linux iptables ile ddos/syn ataklarından korunmak

Linux sunucularda işinize yarayabilecek bir makale olacağını düşünüyorum. Lütfen işlemleri yapmadan yedek alınız veya test ortamında denemeden aktif bir sunucuda uygulamayınız. iptables kullanımıyla ilgili bilginiz yoksa iptables kullanımı makalemizi inceleyebilirsiniz

Saldırı çeşitlerine göre sunucunuzu belirli ataklardan koruyabilirsiniz. Genelde sitelerin http servislerini durdurmak amacıyla http/mysql gibi herkese açık portlara yapılan ve çok yüksek değerlerde olmasa da devamlı olarak istek gönderip servisi çökertebilen saldırılar için linux sunucuların firewall servisi olan iptables ı kullanarak yazılmış  aşağıdaki kurallar işinize yarayabilir.

Yaygın kullanılan saldırı yöntemleri için en iyi kernel yapılandırması olarak aşağıdaki yapılandırma dosyasını centos7 kerneliniz için kullanabilirsiniz.

Aşağıda anlattığım işlemler sunucu optimizasyonunuza göre kernel panic hatası vb. alabilme olasılığınız olabilir. Bu nedenle bir sorun oluştuğunda müdahale edebilecek bilgiye sahip değilseniz kullanmanız tehlikelidir. 

sysctl.conf (/etc/sysctl.conf) dosyanızı yedekledikten sonra ,

[cc]
kernel.printk = 4 4 1 7
kernel.panic = 10
kernel.sysrq = 0
kernel.shmmax = 4294967296
kernel.shmall = 4194304
kernel.core_uses_pid = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
vm.swappiness = 20
vm.dirty_ratio = 80
vm.dirty_background_ratio = 5
fs.file-max = 2097152
net.core.netdev_max_backlog = 262144
net.core.rmem_default = 31457280
net.core.rmem_max = 67108864
net.core.wmem_default = 31457280
net.core.wmem_max = 67108864
net.core.somaxconn = 65535
net.core.optmem_max = 25165824
net.ipv4.neigh.default.gc_thresh1 = 4096
net.ipv4.neigh.default.gc_thresh2 = 8192
net.ipv4.neigh.default.gc_thresh3 = 16384
net.ipv4.neigh.default.gc_interval = 5
net.ipv4.neigh.default.gc_stale_time = 120
net.netfilter.nf_conntrack_max = 10000000
net.netfilter.nf_conntrack_tcp_loose = 0
net.netfilter.nf_conntrack_tcp_timeout_established = 1800
net.netfilter.nf_conntrack_tcp_timeout_close = 10
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 10
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 20
net.netfilter.nf_conntrack_tcp_timeout_last_ack = 20
net.netfilter.nf_conntrack_tcp_timeout_syn_recv = 20
net.netfilter.nf_conntrack_tcp_timeout_syn_sent = 20
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 10
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.ip_no_pmtu_disc = 1
net.ipv4.route.flush = 1
net.ipv4.route.max_size = 8048576
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.tcp_congestion_control = htcp
net.ipv4.tcp_mem = 65536 131072 262144
net.ipv4.udp_mem = 65536 131072 262144
net.ipv4.tcp_rmem = 4096 87380 33554432
net.ipv4.udp_rmem_min = 16384
net.ipv4.tcp_wmem = 4096 87380 33554432
net.ipv4.udp_wmem_min = 16384
net.ipv4.tcp_max_tw_buckets = 1440000
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_orphans = 400000
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rfc1337 = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_sack = 1
net.ipv4.tcp_fack = 1
net.ipv4.tcp_ecn = 2
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 60
net.ipv4.tcp_keepalive_probes = 10
net.ipv4.tcp_no_metrics_save = 1
net.ipv4.ip_forward = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.all.rp_filter = 1
[/cc]

Bu sysctl.conf ayarları, bu kılavuzda sağladığımız iptables kurallarının etkinliğinin yanı sıra DDoS kapsamında sunucunuzun performansını en üst düzeye çıkarmanıza yardımcı olur.

 

IPTABLES ile antidos kuralları

Yukarıda DDoS saldırılarının etkilerini hafifletmek için çekirdek ayarları gösterdim. mangle tablosunu ve PREROUTING zinciriyle çoğu TCP DDoS saldırılarını azaltmak için birkaç örnek kurallara geçelim.
Çok farklı ddos saldırıları bulunuyor. Tüm ddos saldırı yöntemlerini durdurabilmek neredeyse imkanszdır Neyse ki, meşru görünen SYN paketlerini kullanmayan hemen hemen her TCP tabanlı DDoS saldırısını hafifletmemize yardımcı olan bağlantı izleme (nf_conntrack çekirdek modülü) adı verilen bir şey var.Buna, sahte TCP bayrakları kullanan DDoS saldırılarının yanı sıra her tür ACK ve SYN-ACK DDoS saldırısı da dahildir.

Çok sayıda TCP tabanlı DDoS saldırılarında işe yarayabilecek basit beş farklı iptables kuralları işinize yarayacaktır.

Geçersiz paketleri engelleme

iptables -t mangle -A PREROUTING -m conntrack –ctstate INVALID -j DROP

 

 

Syn olmayan ve yeni gelen paketleri engelleme

iptables -t mangle -A PREROUTING -p tcp ! –syn -m conntrack –ctstate NEW -j DROP

 

 

MSS değerlerini engelleme

iptables -t mangle -A PREROUTING -p tcp -m conntrack –ctstate NEW -m tcpmss ! –mss 536:65535 -j DROP

 

 

Sahte TCP imzalı blok paketleri engelleyin

iptables -t mangle -A PREROUTING -p tcp –tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
iptables -t mangle -A PREROUTING -p tcp –tcp-flags FIN,SYN FIN,SYN -j DROP
iptables -t mangle -A PREROUTING -p tcp –tcp-flags SYN,RST SYN,RST -j DROP
iptables -t mangle -A PREROUTING -p tcp –tcp-flags SYN,FIN SYN,FIN -j DROP
iptables -t mangle -A PREROUTING -p tcp –tcp-flags FIN,RST FIN,RST -j DROP
iptables -t mangle -A PREROUTING -p tcp –tcp-flags FIN,ACK FIN -j DROP
iptables -t mangle -A PREROUTING -p tcp –tcp-flags ACK,URG URG -j DROP
iptables -t mangle -A PREROUTING -p tcp –tcp-flags ACK,FIN FIN -j DROP
iptables -t mangle -A PREROUTING -p tcp –tcp-flags ACK,PSH PSH -j DROP
iptables -t mangle -A PREROUTING -p tcp –tcp-flags ALL ALL -j DROP
iptables -t mangle -A PREROUTING -p tcp –tcp-flags ALL NONE -j DROP
iptables -t mangle -A PREROUTING -p tcp –tcp-flags ALL FIN,PSH,URG -j DROP
iptables -t mangle -A PREROUTING -p tcp –tcp-flags ALL SYN,FIN,PSH,URG -j DROP
iptables -t mangle -A PREROUTING -p tcp –tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP

 

 

Özel alt ağlardan gelen (Sahtekar) paketleri engelleyin (spoofing olarakta bilinir)

iptables -t mangle -A PREROUTING -s 224.0.0.0/3 -j DROP
iptables -t mangle -A PREROUTING -s 169.254.0.0/16 -j DROP
iptables -t mangle -A PREROUTING -s 172.16.0.0/12 -j DROP
iptables -t mangle -A PREROUTING -s 192.0.2.0/24 -j DROP
iptables -t mangle -A PREROUTING -s 192.168.0.0/16 -j DROP
iptables -t mangle -A PREROUTING -s 10.0.0.0/8 -j DROP
iptables -t mangle -A PREROUTING -s 0.0.0.0/8 -j DROP
iptables -t mangle -A PREROUTING -s 240.0.0.0/5 -j DROP
iptables -t mangle -A PREROUTING -s 127.0.0.0/8 ! -i lo -j DROP

 

 

Sunucunuzu ping e kapatın

iptables -t mangle -A PREROUTING -p icmp -j DROP

 

 

connlimit ile bağlantıları sınırlayın 

iptables -A INPUT -p tcp -m connlimit –connlimit-above 80 -j REJECT –reject-with tcp-reset

**Aynı ip adresi üzerinden 80 den fazla bağlantı gerçekleşemez. 82 değerini kendinize göre düzenleyebilirsiniz 

 

Saniyede oluşabilecek bağlantıyı sınırlayın

Bir istemciden saniyede gelebilecek yeni tcp bağlantılarını sınırlar. Sınırı aşan bağlantıya izin vermeyecektir.

iptables -A INPUT -p tcp -m conntrack –ctstate NEW -m limit –limit 60/s –limit-burst 20 -j ACCEPT
iptables -A INPUT -p tcp -m conntrack –ctstate NEW -j DROP

 

iyi çalışmalar.