在 AWS 上,我是否必須在 EC2 實例的防火牆和安全組中打開埠?
如果我將 SSH 埠從 22 更改為 23453,我將無法再 ssh 進入。
更詳細地說,我在 Amazon Web Services 上使用 Red Hat EC2 實例。這是我全新安裝的第二個更改(第一個更改是添加一個非 root 使用者)。
我可以使用 Git Bash 和本地 .ssh/config 文件正常 ssh,我編輯 /etc/ssh/sshd_config 中目前顯示的行
#Port 23453
說
Port 23453
然後重新啟動 sshd
sudo service sshd restart
然後我在我的 .ssh/config 文件中添加一行“埠 23453”
Host foo Hostname my-ec2-public-DNS Port 23453 IdentityFile my ssl key
如果我打開另一個 Git Bash shell(不關閉我現有的連接)並嘗試 ssh 進入我的實例(使用 ssh foo),我會看到以下錯誤:
ssh: connect to host my-ec2-public-DNS port 23453: Bad file number
附加到這個實例的安全組有兩個條目,都是 TCP
22 (SSH) 0.0.0.0/0
23453 0.0.0.0/0
我最好的猜測是該埠仍然被我的防火牆阻止。
的輸出
sudo iptables -L
如下Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT icmp -- anywhere anywhere ACCEPT all -- anywhere anywhere ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh REJECT all -- anywhere anywhere reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT) target prot opt source destination REJECT all -- anywhere anywhere reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT) target prot opt source destination
這對我來說看起來很開放。
更新
添加 iptables 規則後
iptables -A INPUT -p tcp --dport 23453 -j ACCEPT
再試一次,仍然沒有運氣。
的輸出
iptables -L
Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT icmp -- anywhere anywhere ACCEPT all -- anywhere anywhere ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh REJECT all -- anywhere anywhere reject-with icmp-host-prohibited ACCEPT tcp -- anywhere anywhere tcp dpt:23453 Chain FORWARD (policy ACCEPT) target prot opt source destination REJECT all -- anywhere anywhere reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT) target prot opt source destination
看起來足夠開放。我不完全確定如何查找傳入的數據包或埠上的活動。但是
netstat -ntlp
(作為根)的輸出Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:56137 0.0.0.0:* LISTEN 948/rpc.statd tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 930/rpcbind tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1012/cupsd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1224/master tcp 0 0 0.0.0.0:23453 0.0.0.0:* LISTEN 32638/sshd tcp 0 0 :::36139 :::* LISTEN 948/rpc.statd tcp 0 0 :::111 :::* LISTEN 930/rpcbind tcp 0 0 ::1:631 :::* LISTEN 1012/cupsd tcp 0 0 :::23453 :::* LISTEN 32638/sshd
在我看來,在 23453 上顯示 sshd。
我再次檢查了實例在安全組中打開了埠(埠:23453,協議:tcp,源:0.0.0.0/0)
還有什麼可能導致無法通過 SSH 連接?
乾杯
屍檢
我現在可以連接了。這是 iptables 中缺少的規則。now的輸出
iptables -L
如下所示:Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT icmp -- anywhere anywhere ACCEPT tcp -- anywhere anywhere tcp dpt:23453 state NEW ACCEPT all -- anywhere anywhere ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh REJECT all -- anywhere anywhere reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT) target prot opt source destination REJECT all -- anywhere anywhere reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT) target prot opt source destination
您的實例防火牆沒有打開此埠。嘗試以下命令:
iptables -I INPUT 3 -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 23453 -m state --state New -j ACCEPT
請注意,需要保存 iptables 規則以在重新啟動後保留。在 RHEL 上是:
/sbin/service iptables save
添加 iptables 規則
iptables -I INPUT 1 -p tcp --dport 23435 -j ACCEPT
它通過埠 23435 接受來自任何主機的流量,並嘗試 ssh,如果您看到任何數據包或活動,則表示數據包正在到達您的伺服器。
如果您沒有看到任何數據包,這意味著 AWS 安全組沒有允許您的埠的規則。
但是如果您看到這條規則的流量(通過
iptables -nvL
),那麼您必須執行“netstat -ntlp”並驗證 SSH 守護程序是否在埠 2435 上執行0.0.0.0/0
。希望這些步驟可以解決問題。如果仍然沒有,請告訴我。