web-dev-qa-db-ja.com

AWSでは、EC2インスタンスのファイアウォールとセキュリティグループでポートを開く必要がありますか?

SSHポートを22から23453に変更すると、sshでログインできなくなります。

詳しくは、Amazon Web ServicesでRed Hat EC2インスタンスを使用しています。これは、フレッシュインストールでの2番目の変更です(最初の変更は、非rootユーザーを追加することでした)。

Git Bashとローカルの.ssh/configファイルを使用してうまくsshできます。/etc/ssh/sshd_configの現在の行を編集します

_#Port 23453
_

言う

_Port 23453
_

次にsshdを再起動します

_Sudo service sshd restart
_

次に、.ssh/configファイルに「Port 23453」という行を追加します。

_Host foo 
Hostname my-ec2-public-DNS
Port 23453
IdentityFile my ssl key
_

(既存の接続を閉じずに)別のGit Bashシェルを開き、(ssh fooを使用して)インスタンスにSSH接続しようとすると、次のエラーが表示されます。

_ssh: connect to Host my-ec2-public-DNS port 23453: Bad file number
_

このインスタンスにアタッチされているセキュリティグループには2つのエントリがあり、どちらも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_の出力(rootとして)

_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には欠けていたルールでした。 _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
_
8
Andrew Martin

インスタンスのファイアウォールでこのポートが開いていません。次のコマンドを試してください。

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
12
melsayed

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で実行されているかどうかを確認する必要があります。

うまくいけば、これらの手順で問題が解決します。それでもいいえの場合は、教えてください。

2
Farhan

セキュリティグループが正しく設定されていますか? 「変更を適用」をクリックしましたか?多くの人は実際に変更を適用するのを忘れています:)

「不良ファイル番号」は通常、接続タイムアウトを示し、iptablesの設定は正しいように見えます。

1
Waleed Hamra

Sshのデフォルトポートが変更されたためにこのトピックを見つけた場合、解決策は次のとおりです。

  1. 企業のファイアウォールをバイパスするために、/etc/ssh/sshd_confのポートを80に変更しました。
  2. 残念ながら、そのインスタンスにはApacheがすでにインストールされているため、もうsshできませんでした。
  3. インスタンスからボリュームを切り離しました。
  4. 別のインスタンスに接続しました
  5. それをマウントし、設定ファイルでポートを変更しました
  6. デタッチし、古いインスタンスに再アタッチしました
  7. 再起動:すべて良い:D
0
Homezar