| 430 | * 因為又遇到了兩次攻擊行為,所以想試試看有沒有辦法透過 iptable 的方式把同時連線太多次的加以刪除。參考 [http://www.debian-administration.org/articles/187 Using iptables to throttle incoming connections] 的文章,修改成統計 80 port 的連線,再用另一台跑 nc 模擬攻擊。發現每 10 個連線會暫停 10 秒鐘。 |
| 431 | {{{ |
| 432 | iptables -A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -m recent --set --name DEFAULT --rsource |
| 433 | iptables -A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -m recent --update --seconds 10 --hitcount 10 --name DEFAULT --rsource -j DROP |
| 434 | }}} |
| 435 | * [參考] [http://blog.toknow.idv.tw/?p=277 調整網路 TCP TIME_WAIT,快速釋放 connection] |
| 436 | {{{ |
| 437 | 在繁忙的server中我們常常會看到許多狀態已是「TIME_WAIT」的連線 |
| 438 | 透過調整系統參數可使連線更快速的釋放 |
| 439 | 修改系統預設tcp fin timeout |
| 440 | |
| 441 | echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout |
| 442 | |
| 443 | 調整為30sec |
| 444 | |
| 445 | 調整tcp參數 |
| 446 | |
| 447 | net.ipv4.tcp_tw_reuse = 0 |
| 448 | |
| 449 | net.ipv4.tcp_tw_reuse = 1 表示開啟重用。 |
| 450 | 允許將TIME-WAIT sockets重新用於新的TCP連接,默認為0,表示關閉 |
| 451 | |
| 452 | net.ipv4.tcp_tw_recycle = 0 |
| 453 | |
| 454 | net.ipv4.tcp_tw_recycle = 1 表示開啟TCP連接中TIME-WAIT sockets的快速回收,預設為0,表示關閉 |
| 455 | }}} |
| 456 | * 彙整以上的規則,寫一隻 script 來當做開機時啟用安全防護的機制。 |
| 457 | {{{ |
| 458 | #!sh |
| 459 | echo "clear rules" |
| 460 | iptables -F |
| 461 | iptables -X |
| 462 | iptables -Z |
| 463 | iptables -t nat -F |
| 464 | echo "drop ping and traceroute" |
| 465 | iptables -A INPUT -i eth0 -p icmp -s any/0 --icmp-type 8 -j DROP |
| 466 | iptables -A OUTPUT -o eth0 -p icmp --icmp-type 3 -d any/0 -j DROP |
| 467 | iptables -A OUTPUT -o eth0 -p icmp --icmp-type 11 -d any/0 -j DROP |
| 468 | echo "drop abuse IP connections" |
| 469 | iptables -A INPUT -s 124.254.15.50 -j DROP |
| 470 | iptables -A INPUT -s 222.191.249.106 -j DROP |
| 471 | iptables -A INPUT -s 121.235.30.92 -j DROP |
| 472 | echo "drop connect more than 10 times in 10 seconds ..." |
| 473 | iptables -A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -m recent --set --name DEFAULT --rsource |
| 474 | iptables -A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -m recent --update --seconds 10 --hitcount 10 --name DEFAULT --rsource -j DROP |
| 475 | echo "decrease TCP socket TIME_WAIT time" |
| 476 | echo 10 > /proc/sys/net/ipv4/tcp_fin_timeout |
| 477 | sysctl net.ipv4.tcp_tw_reuse=1 |
| 478 | sysctl net.ipv4.tcp_tw_recycle=1 |
| 479 | }}} |