Ssh

SSH 埠被 iptables 阻止 - 但仍然可以從任何地址登錄 SSH 埠

  • July 28, 2020

我在一些具有相同防火牆規則的伺服器上發生了這種情況,所以我懷疑我的 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 的內置鏈中的規則,則鏈策略指定的目標將決定數據包的命運。

我有一種預感,您的問題可能與此功能有關。

引用自:https://serverfault.com/questions/1026945