Iptables üzerinde özellikle DDoS filtreleme ve kendi anti-DDoS kurallarınızı oluşturmanız için kullanabileceğiniz yöntemlerdir, saldırılar daha komplike ve farklı yöntemler ile geliyor ise çözüm olmayacağını unutmayınız. Konu ile ilgili profesyonel destek almaktan çekinmeyiniz.
Bu makalede TCP tabanlı saldırılara karşı kurallar yazacağız ve kötü amaçlı trafiğin büyük bir kısmını süzeceğiz. Ancak tamamen sorunlarınıza çözüm olmasını lütfen beklemeyiniz.
Geçersiz paketlerin engellenmesi
iptables -t mangle -A PREROUTING -m conntrack --ctstate INVALID -j DROP
SYN‘siz gelen yeni TCP bağlantılarının engellenmesi
iptables -t mangle -A PREROUTING -p tcp ! --syn -m conntrack --ctstate NEW -j DROP
MSS değeri şüpheli olan TCP paketlerinin engellenmesi
iptables -t mangle -A PREROUTING -p tcp -m conntrack --ctstate NEW -m tcpmss ! --mss 536:65535 -j DROP
Sahte TCP bağlantılarının engellenmesi
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
Sahte paketlerin engellenmesi(BOGUS gelen)
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
DDoS saldırılarından daha az etkilenmenizi sağlayacak kernel parametrelerinin sisteme tanımlanması
Bu işlemi yaparken /etc/sysctl.conf
içerisine aşağıdaki eklemeleri gerçekleştirin.
#
# /etc/sysctl.conf - Configuration file for setting system variables
# See /etc/sysctl.d/ for additional system variables.
# See sysctl.conf (5) for information.
#
#kernel.domainname = mertcangokgoz.com
# Uncomment the following to stop low-level messages on console
kernel.printk= 4 4 1 7
kernel.yama.ptrace_scope= 1 2 3
kernel.kptr_restrict=2
kernel.core_uses_pid=1
kernel.panic=10
kernel.sysrq=0
kernel.shmmax=4294967296
kernel.shmall=4194304
vm.max_map_count=1048576
vm.min_free_kbytes=65535
vm.overcommit_memory=1
vm.dirty_ratio=80
vm.dirty_background_ratio=5
vm.swappiness=0
fs.file-max=1048576
fs.nr_open=1048576
net.core.somaxconn=65535
net.core.rmem_default = 1048576
net.core.rmem_max = 16777216
net.core.wmem_default = 1048576
net.core.wmem_max = 16777216
net.core.optmem_max = 65536
net.ipv4.tcp_rmem = 4096 1048576 2097152
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_timestamps=1
net.ipv4.conf.all.rp_filter=1
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_sack=1
net.ipv4.tcp_fack=1
net.ipv4.tcp_ecn=2
net.ipv4.tcp_tw_recycle=0
net.ipv4.tcp_tw_reuse=1
net.core.netdev_max_backlog = 100000
net.core.netdev_budget = 50000
net.core.netdev_budget_usecs = 5000
net.ipv4.conf.default.rp_filter = 1
net.ipv4.tcp_rfc1337=1
net.ipv4.tcp_max_orphans=1048576
net.ipv4.tcp_max_syn_backlog=20480
net.ipv4.tcp_max_tw_buckets=400000
net.ipv4.tcp_no_metrics_save=1
net.ipv4.tcp_window_scaling=1
net.ipv4.tcp_synack_retries=2
net.ipv4.tcp_syn_retries=2
net.ipv4.tcp_fastopen=3
net.ipv4.tcp_fin_timeout=10
net.ipv4.tcp_slow_start_after_idle=0
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
net.ipv4.tcp_notsent_lowat=16384
net.ipv4.udp_rmem_min=8192
net.ipv4.udp_wmem_min=8192
net.ipv4.tcp_keepalive_time=60
net.ipv4.tcp_keepalive_intvl=10
net.ipv4.tcp_keepalive_probes=6
net.ipv4.ip_no_pmtu_disc=1
net.ipv4.route.flush=1
net.ipv4.tcp_mtu_probing=1
net.ipv4.conf.default.log_martians=1
net.ipv4.conf.all.log_martians=1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.default.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.icmp_ignore_bogus_error_responses=1
net.ipv4.icmp_echo_ignore_broadcasts=1
Kaynak IP adresi bağışına bağlantıları 10 ile limitleme
iptables -A INPUT -p tcp -m connlimit --connlimit-above 10 -j REJECT --reject-with tcp-reset
Saniye bazında TCP bağlantılarını sınırlamak
iptables -A INPUT -p tcp -m conntrack --ctstate NEW -m limit --limit 120/s --limit-burst 30 -j ACCEPT
iptables -A INPUT -p tcp -m conntrack --ctstate NEW -j DROP
Port taraması tespiti ve engellenmesi
iptables -N PORTSCANNING
iptables -A PORTSCANNING -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s --limit-burst 2 -j RETURN
iptables -A PORTSCANNING -j DROP
Logların aktif edilmesi
iptables -A INPUT -j LOG --log-prefix "PORT DENIED: " --log-level 5 --log-ip-options --log-tcp-options --log-tcp-sequence
Bunlar dışında kullanabileceğiniz Iptables’da Örnekler ve Kalıcı Kurallarını inceleyiniz. Ayrıca saldırı anında Anti-DDOS betiğinden faydalanabilirsiniz.
Bunlar dışında kullanmak isterseniz NGINX üzerinde Lua Anti-DDoS modülünden faydalanabilirsiniz.