Ssh

在 AWS 上,我是否必須在 EC2 實例的防火牆和安全組中打開埠?

  • February 25, 2013

如果我將 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

希望這些步驟可以解決問題。如果仍然沒有,請告訴我。

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