【筆記整理】Iptables網路連線限制及攻擊防護和相關設定

摘要:【筆記整理】Iptables網路連線限制及攻擊防護和相關設定

1. 限制每個IP連接HTTP最大併發50個連接數

iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j REJECT

 

2. 限制每個IP同時最多100個連接數

iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 -j REJECT

or

iptables -I INPUT -p tcp --syn --dport 80 -m connlimit ! --connlimit-above 100 -j ACCEPT

 

3. 限制每組C Class IP同時最多100個連接數

iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 --connlimit-mask 24 -j REJECT

 

4. 限制每個IP同時5個80 port轉發,超過的丟棄

iptables -I FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 5 -j DROP

 

5. 限制每個IP在60秒內允許新建立30個連接數

iptables -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --update --seconds 60 --hitcount 30

-j REJECT

 

6. (By CentOS 5.x)調整ipt_recent參數,記錄1000個IP,每個IP記錄60個封包

vim /etc/modprobe.conf

options ipt_recent ip_list_tot=1000 ip_pkt_list_tot=60

完成後執行

modprobe ipt_recent

 

7. 每秒最多允許5個新連接封包數

iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 5 -j ACCEPT

 

8. 防止各種端口掃描

iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST SYN -m limit --limit 1/s -j ACCEPT

 

9. Ping of Death

iptables -A INPUT -p icmp --icmp-type echo_request -m limit --limit 1/s -j ACCEPT

 

10. NMAP FIN/URG/PSH

iptables -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j LOG --log-level warn

iptables -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP

 

11. Xmas Tree

iptables -A INPUT -p tcp --tcp-flags ALL ALL -j LOG --log-level warn

iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

 

12. Another Xmas Tree

iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j LOG --log-level warn

iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP

 

13. Null Scan(possibly)

iptables -A INPUT -p tcp --tcp-flags ALL NONE -j LOG --log-level warn

iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

 

14. SYN/RST

iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST SYN,RST -j LOG --log-level warn

iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST SYN,RST -j DROP

 

15. SYN/FIN --Scan(possibly)

iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN SYN,FIN -j LOG --log-level warn

iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN SYN,FIN -j DROP

 

16. Prevent Sync Flood (New Chain:SYNFLOOD)

iptables -N SYNFLOOD

iptables -A SYNFLOOD -p tcp --syn -m limit --limit 1/s -j RETURN

iptables -A SYNFLOOD -p tcp -j LOG --log-level alert

iptables -A SYNFLOOD -p tcp -j REJECT --reject-with tcp-reset

iptables -A INPUT -p tcp -m state --state NEW -j SYNFLOOD

 

17. Prevent Ping Flood ATTACK (New Chain:PING)

iptables -N PING

iptables -A PING -p icmp --icmp-type echo-request -m limit --limit 1/s -j RETURN

iptables -A PING -p icmp -j LOG --log-level alert

iptables -A PING -p icmp -j REJECT

iptables -A INPUT -p icmp --icmp-type echo-request -m state --state NEW -j PING

 

18. SYN相關設定

sysctl -a | grep syn

vim /etc/sysctl.conf

net.ipv4.tcp_fin_timeout=10:減少處於FIN_WAIT2連接狀態時間

net.ipv4.tcp_keepalive_time=1800:減少TCP KeepAlive連接偵測時間

net.ipv4.tcp_window_scaling=0

net.ipv4.tcp_sack=0

net.ipv4.tcp_tw_recycle=1:表示開啟TCP連接中TIME_WAIT sockets的快速回收。默認為0,表示關閉

net.ipv4.tcp_tw_reuse=1:表示開啟重用,允許將TIME_WAIT sockets重新用於新的TCP連接

net.ipv4.tcp_timestamps=1

net.ipv4.tcp_max_syn_backlog=4096:SYN隊列的長度

net.ipv4.tcp_syncookies=1:打開SYN Cookie,可防止部分攻擊

net.ipv4.tcp_synack_retries=1:定義SYNACK重試次數

net.ipv4.tcp_syn_retries=5:加大SYN隊列長度可容納更多等待連接的網路連接數

fs.quota.syncs=23

net.ipv4.conf.default.rp_filter=1

net.ipv4.conf.all.rp_filter=1

net.ipv4.conf.default.accept_source_route=0

net.ipv4.conf.all.accept_source_route=0

net.ipv4.ip_contrack_max=524288

net.ipv4.netfilter.ip_conntrack_max=524288

net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_recv=5

net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_sent=15

net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=108000

net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait=3

net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait=3

net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait=3

sysctl -p /etc/sysctl.conf:套用更改過的sysctl.conf

註:上列有些參數不需要設定,或是數字可調整,依伺服器狀況而定。

 

19. 查詢目前各狀態連接數狀況

netstat -nat | awk '{print awk $NF}' | sort | uniq -c | sort -n

 

20. 查詢並自動封鎖目前連線數最大的前50個IP(請小心謹慎並記得調整Iptables Chain)

netstat -na | grep :80 |awk '{print $5}'|awk -F '::ffff:' '{print $2}' | grep ':'

| awk -F: '{print $1}' | sort | uniq -c | sort -r | awk -F' ' '{if ($1 > 50) print $2}'

| sed 's/^.*$/iptables -I firewall 1 -p tcp -s & --dport 80 --syn -j REJECT/' | sh

 

21. 增加例外白名單IP(我沒測試過)

netstat -na | grep :80 |awk '{print $5}'|awk -F '::ffff:' '{print $2}' | grep ':'

| awk -F: '{print $1}' | sort | uniq -c | sort -r | awk -F' ' '{if ($1 > 50) print $2}'

| grep -v xxx.xxx.xxx.xxx

| sed 's/^.*$/iptables -I RH-Firewall-1-INPUT 1 -p tcp -m tcp -s & --dport 80 --syn -j REJECT/' | sh

 

22. 查詢port 80目前的IP連接數

netstat -nat | grep ":80" | awk '{printf "%s %s\n", $5, $6}' | awk -F: '{print $1}' | sort | uniq -c | sort -n

 

註:上列為去年我曾任職的公司官網遭到駭客攻擊時,我所記錄的筆記及在Server上下過的指令。

       且上列皆可在網路上搜尋到詳細的解釋,所以我這邊就不增加說明了。

註: https://app.shopback.com/RBANl9P3Ysb