SYNFlood là gì?

SYNFlood là một kiểu tấn công DDoS bằng cách gửi rất nhiều gói tin SYN tới đích, khiến server quá tải tài nguyên, dẫn tới không thể phục vụ tiếp dịch vụ.

Tình trạng hay gặp dạng tấn công SYN Flood:

  • Quá nhiều request GET vào đích tấn công (ví dụ GET http://example.com:80)
  • CPU, RAM quá tải
  • Trạng thái bắt tay kết nối TIME_WAIT quá nhiều

SynFlood là phương pháp tấn công dựa theo logic truyền tin bắt tay 3 bước của giao thức TCP/IP

synflood  tabatech

Các biện pháp phòng chống tấn công DDoS SYN Flood

  • Filter hay rate limit bằng firewall
  • Tăng backlog
  • Giảm SYN-RECEIVED timer
  • SYN cache

Nên sử dụng SynProxy để chặn tấn công DDoS SYN Flood

Theo khuyến cáo từ TABATECH – Công ty bảo mật Website và chống DDoS ” SYNProxy là một trong phương pháp tốt nhất hiện nay để ngăn chặn tấn công DDoS dạng ngập lụt gói SYN. Nhiều tập đoàn lớn hay các thiết bị phần cứng Firewall chuyên dụng cũng sử SYNProxy làm phương án chặn chặn SYN Flood”

SYNPROXY là gì? 

SYNPROXY là module netfilter được tích hợp trong kernel (từ phiên bản kernel linux 3.12). Nó được sử dụng để bảo vệ server trước các cuộc tấn công SYN floods và các cuộc tấn công DDOS tương tự khác. Nó thiết kế tối ưu hóa để có thể xử lý hàng triệu gói tin trên 1 giây.

SynProxy sử dụng được cho các loại traffic TCP, cả traffic mã hóa hay không mã hóa.

Phương thức hoạt động của SYNProxy

Bản chất hoạt động của SYNPROXY : SYNPROXY sẽ đứng trước server, nhận kết nối từ client, tham gia vào quá trình bắt tay 3 bước với máy client

        · When a SYNPROXY is used, clients transparently get connected to the  SYNPROXY.   So  the
         3-way TCP handshake happens first between the client and the SYNPROXY:

         · Clients send TCP SYN to server A

         · At the firewall, when this packet arrives it is marked as UNTRACKED

         · The UNTRACKED TCP SYN packet is then given to SYNPROXY

         · SYNPROXY gets this and responds (as server A) with TCP SYN+ACK (UNTRACKED)

         · Client  responds  with  TCP  ACK (marked as INVALID or UNTRACKED in iptables) which is
           also given to SYNPROXY

       · Once a client has been connected to the SYNPROXY,  SYNPROXY  automatically  initiates  a
         3-way  TCP  handshake  with  the  real  server, spoofing the SYN packet so that the real
         server will see that the original client is attempting to connect:

         · SYNPROXY sends TCP SYN to real server A.  This is a NEW  connection  in  iptables  and happens on the OUTPUT chain.  The source IP of the packet is the IP of the client

         · The real server A responds with SYN+ACK to the client

         · SYNPROXY  receives  this  and responds back to the server with ACK.  The connection is
           now marked as ESTABLISHED

       · Once the connection has been established, SYNPROXY leaves the traffic flow  between  the
         client and the server

Cấu hình SYNProxy trên Linux

Giả sử thiết lập lọc SYNproxy trên Port 80:

/sbin/iptables -t raw -I PREROUTING -i <NAME_INTERFACE> -p tcp -m tcp --syn --dport 80 -j CT --notrack

/sbin/iptables -A INPUT -i <NAME_INTERFACE> -p tcp -m tcp --dport 80 -m state --state INVALID,UNTRACKED -j SYNPROXY --sack-perm --timestamp --wscale 7 --mss 1460

/sbin/iptables -A INPUT -i <NAME_INTERFACE> -p tcp -m tcp --dport 80 -m state --state INVALID -j DROP

/sbin/iptables -A INPUT -i <NAME_INTERFACE> -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
/sbin/iptables -A OUTPUT -o <NAME_INTERFACE> -p tcp --sport 80 -m state --state INVALID,UNTRACKED -j ACCEPT 

Hiểu về các Option thiết lập:

[wscale <value>]  Windows scale. Default value: not set. Requires timestamp
[mss <value>]  Maximum Segment Size. Default value: 1460
[sack-perm]  Selective Acknowledgment. Default value: not enabled. Requires timestamp
[timestamp]  timestamps. Default value: not enabled
[ecn]  Explicit Congestion Notification. Default value: not enabled. Requires timestamp

 

Thiết lập Kernel Sysctl:

sysctl  -w "net.netfilter.nf_conntrack_tcp_loose=0"
sysctl  -w "net.ipv4.tcp_syncookies=1"
/bin/echo 2097152 > /sys/module/nf_conntrack/parameters/hashsize
#And increase "net.netfilter.nf_conntrack_max"

LEAVE A REPLY

Please enter your comment!
Please enter your name here