ตัวอย่างง่ายๆ ที่อาจช่วยป้องกัน SYN-FLOOD ทำให้ server ยังอยู่ได้ไม่ม่องเท่งก่อน เวลาอันควร
เอาคำสั่งนี้ไว้บนๆ สุดหน่อย จะช่วยได้มากครับ
คำสั่งแรกเป็นคำสั่ง Limit syn Packet ให้อยู่ในช่วง 75 Packet ต่อวินาที และไม่เกิน 100 ต่อวินาที
iptables -A INPUT -p tcp --syn -m limit --limit 75/s --limit-burst 100 -j ACCEPT
คำสั่งที่ 2 ถ้ามันเกินจากนั้นก็จะถูก Drop ด้วยคำสั่งถัดมา
iptables -A INPUT -p tcp --syn -j DROP
** สำหรับการป้องกันด้วยวิธีนี้ยังไม่ถือว่าดีนัก
----------------------------
วิธีที่ง่ายกว่านั้นคือ drop syn packet (ที่เป็น packet เริ่ม) ทิ้งไปเลยครับ
iptables -A INPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
iptables -A FORWARD -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
iptables -A OUTPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
เพราะถ้า packet เริ่มไม่เป็น syn แสดงว่ามันกำลังเข้าสู่ขั้นตอนการ syn ack ของ tcp อยู่
แล้วจะทำให้ตรวจสอบได้ว่า host ปลายทางมีตัวตนจริงๆ หรือไม่ด้วย (เพราะการ accept connection ต้องมีการ ack กลับมาด้วย)
(ยังโดนยิง)
---------------
iptables -N syn-flood
iptables -A syn-flood -m limit --limit 75/s --limit-burst 100 -j RETURN
iptables -A syn-flood -j LOG --log-prefix "SYN-FLOOD:"
iptables -A syn-flood -j DROP
ไม่มีความคิดเห็น:
แสดงความคิดเห็น