ป้องกันโดนยิงเครื่อง server

#การใช้ netstat ตรวจสอบการถูกยิงด้วย syn คำสั่ง
netstat -ntu | grep SYN_RECV | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
อันนี้จะบอกว่า ณ ขณะเวลานั้นๆ มีคนส่ง syn เข้ามาเพื่อขอเชื่อมกับ server ของเรา โดยปกติไม่ควรเกิน 10 ครั้งต่อ 1 IP หากเกินกว่านั้นท่าน Block ได้เลย

#การใช้ netstat นับจำนวน connetion ของแต่ละ IP คำสั่ง
netstat -ntu | grep ESTABLISHED | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
อันนี้จะบอกว่า ณ ขณะเวลานั้นๆ แต่ละ IP มีการเชื่อมต่อกับเรากี่ connetion โดยปกติไม่ควรเกิน 10-20 ครั้งต่อ 1 IP หากเกินกว่านั้นท่าน Block ได้เลย

#การ Block ก็ง่ายๆ ไม่ยากด้วย iptables ตัวอย่าง
iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP
ความหมาย -A = เพิ่ม(add), -s = IP ต้นทาง, -j DROP = Block IP นั้นซ่ะ

#Block เป็น IP Class
iptables -A INPUT -s xxx.xxx.xxx.xxx/xx -j DROP
#Block เป็น Protocal
iptables -A INPUT -p udp --dport 80 -j DROP
ความหมาย -p = เลือก Protocal(udp, tcp) ที่ต้องการ, ‐‐dport = port ปลายทาง, ‐‐sport = port ต้นทาง

ตัวอย่างง่ายๆ ที่อาจช่วยป้องกัน SYN-FLOOD

ทำให้ server ยังอยู่ได้ไม่ม่องเท่งก่อน เวลาอันควร เอาคำสั่งนี้ไว้บนๆ สุดหน่อย จะช่วยได้มากครับ

คำสั่งแรกเป็นคำสั่ง Limit syn Packet ให้อยู่ในช่วง 25 Packet ต่อวินาที และไม่เกิน 30 ต่อวินาที
iptables -A INPUT -p tcp --syn -m limit --limit 25/s --limit-burst 30 -j ACCEPT
คำสั่งที่ 2 ถ้ามันเกินจากนั้นก็จะถูก Drop ด้วยคำสั่งถัดมา
iptables -A INPUT -p tcp --syn -j DROP

ปล. เครดิตเสี่ยโป้ง (Hostparagon.com)
ref: http://www.thaihosttalk.com/index.php?topic=11925.0
cidr: http://tools.icez.net/cidr.php

Blog | , ,
Line it!