SSH 埠被 iptables 阻止 - 但仍然可以從任何地址登錄 SSH 埠
我在一些具有相同防火牆規則的伺服器上發生了這種情況,所以我懷疑我的 iptables 配置中缺少某些內容,但不確定出了什麼問題。這發生在一些 CentOS 伺服器和我的 Ubuntu 伺服器上。我已經使用 iptables 多年,並認為我知道自己在做什麼……顯然不是這樣。
我在非標準埠(2022)上執行 SSH。我有防火牆規則允許訪問我的個人 IP,然後阻止特定埠,包括 2022,然後是拒絕所有規則。在過去 3 週左右的時間裡,我的日誌顯示來自不在我接受列表中的外部 IP 的 SSH 登錄嘗試失敗。我的筆記型電腦上有 VPN 服務,因此我可以嘗試從不同的國家、IP 等登錄,並且防火牆不再像以前那樣阻止我。我用我的手機作為熱點,所以我可以確保我有應該被阻止的隨機 IP,但我仍然可以登錄到 ssh。我使用來自隨機 IP 的 nmap,它顯示埠 2022 為 OPEN。
我不確定會發生什麼,防火牆用於正確阻止不允許的 IP 地址上的 SSH,我認為在此開始之前我沒有進行任何更改,我沒有任何類似 fail2ban 的東西使事情複雜化. 我什至也檢查了 rootkit,但沒有任何顯示。我已經用Google搜尋了很多次,但是搜尋結果非常嘈雜,而且我已經放棄了不太相關的回复,並決定在這裡發布問題,希望能得到更好的指導。
此伺服器正在執行 ubuntu 14.04.6 LTS
我允許的 IP 在 209.xxx 和 216.xxx 範圍內這是我的 iptables 規則(iptables -L -n):
ACCEPT all -- 127.0.0.1 0.0.0.0/0 ACCEPT all -- 209.xxx.xxx.1 0.0.0.0/0 ACCEPT all -- 209.xxx.xxx.2 0.0.0.0/0 ACCEPT all -- 209.xxx.xxx.3 0.0.0.0/0 ACCEPT all -- 209.xxx.xxx.4 0.0.0.0/0 ACCEPT all -- 209.xxx.xxx.5 0.0.0.0/0 ACCEPT all -- 209.xxx.xxx.6 0.0.0.0/0 ACCEPT all -- 216.xxx.xxx.1 0.0.0.0/0 ACCEPT all -- 216.xxx.xxx.2 0.0.0.0/0 ACCEPT all -- 74.xxx.xxx.2 0.0.0.0/0 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp flags:0x3F/0x00 RETURN tcp -- 0.0.0.0/0 0.0.0.0/0 tcp flags:0x17/0x02 limit: avg 1/sec burst 2 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp flags:0x3F/0x3F ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:110 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:143 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:465 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:993 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:995 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:2022 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination --------------------------------
典型的伺服器日誌顯示失敗,例如:
Jul 26 05:29:38 SERVERNAME sshd[3536]: Invalid user postgres from 159.89.231.172 Jul 26 05:29:39 SERVERNAME sshd[3536]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=159.89.231.172 Jul 26 05:29:40 SERVERNAME sshd[3534]: Failed password for mysql from 159.89.231.172 port 56352 ssh2 Jul 26 05:29:40 SERVERNAME sshd[3534]: Received disconnect from 159.89.231.172: 11: Normal Shutdown, Thank you for playing [preauth] Jul 26 05:29:40 SERVERNAME sshd[3538]: reverse mapping checking getaddrinfo for usa1.getlark.com [159.89.231.172] failed - POSSIBLE BREAK-IN ATTEMPT!
這是我創建的腳本,用於實現帶有註釋的規則:
APPEND="sudo /sbin/iptables -A INPUT" INSERT="sudo /sbin/iptables -I INPUT" OUTPUT="sudo /sbin/iptables -A OUTPUT" # drop old rules and start from scratch sudo /sbin/iptables -F sudo /sbin/iptables -X # allow local host $INSERT -s 127.0.0.1 -j ACCEPT # Allow full access to our approved IPs first: $APPEND -s 209.xxx.xxx.1 -j ACCEPT $APPEND -s 209.xxx.xxx.2 -j ACCEPT $APPEND -s 209.xxx.xxx.3 -j ACCEPT $APPEND -s 209.xxx.xxx.4 -j ACCEPT $APPEND -s 209.xxx.xxx.5 -j ACCEPT $APPEND -s 209.xxx.xxx.6 -j ACCEPT $APPEND -s 216.xxx.xxx.1 -j ACCEPT $APPEND -s 216.xxx.xxx.2 -j ACCEPT $APPEND -s 74.xxx.xxx.2 -j ACCEPT # drop Null packets $APPEND -p tcp --tcp-flags ALL NONE -j DROP # block syn flood attack $APPEND -p tcp --syn -m limit --limit 1/s --limit-burst 2 -j RETURN # block recon/Xmas Packets $APPEND -p tcp --tcp-flags ALL ALL -j DROP # don’t lock me out if I screwed up: $APPEND -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # Allow/Block our legit services $APPEND -p tcp --dport 80 -j ACCEPT $APPEND -p tcp --dport 110 -j DROP $APPEND -p tcp --dport 143 -j DROP $APPEND -p tcp --dport 443 -j ACCEPT $APPEND -p tcp --dport 465 -j DROP $APPEND -p tcp --dport 993 -j DROP $APPEND -p tcp --dport 995 -j DROP $APPEND -p tcp --dport 2022 -j DROP # LAst Rule - Block everything else $APPEND -j REJECT --reject-with icmp-host-prohibited
由於我的菜鳥名聲,我需要在這裡要求澄清。
您可以編輯您的問題以包含 INPUT 鏈預設策略嗎?我問是因為這條線:
RETURN tcp -- 0.0.0.0/0 0.0.0.0/0 tcp flags:0x17/0x02 limit: avg 1/sec burst 2
我不是專家,但我從未見過在頂級中使用它。雖然可能只有我。iptables 手冊頁中有關 RETURN 的內容:
RETURN 表示停止遍歷此鏈並在上一個(呼叫)鏈中的下一條規則處恢復。如果到達內置鏈的末端或匹配帶有目標 RETURN 的內置鏈中的規則,則鏈策略指定的目標將決定數據包的命運。
我有一種預感,您的問題可能與此功能有關。