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


8

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 -Lnow の出力は次のようになります。

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

3番目iptables -L(sshが機能する)と2番目iptables -L(sshがブロックされている)の違いがわからない人のために。INPUTチェーン内のルールの順序(最初の「ターゲット」の下の6行)を見てください。これらは上から下に読み取られるため、2番目のルールセットでは、「ACCEPT tcp」の前に「REJECT all」がヒットします。 dpt:23453 "。3番目のルールセットには、上記のACCEPTエントリがあり、したがってREJECTエントリの前にあります。
アンドリューマーティン

回答:


12

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

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

これはうまくいきました。@melsayedのiptablesルールとFrankのiptablesルールの重要な違いを誰かに教えてもらえれば、とてもありがたいです。また、これは私の究極の質問に対する答えが「はい、AWSではec2インスタンスのファイアウォールとそのセキュリティグループでポートを開かなければならない」ということを意味していると思います。みんな、ありがとう。
Andrew Martin、

私はフランクの答えにコメントしようとしましたが、まだ十分な担当者がいません:)
12

2
基本的に、Frankのiptablesコマンドは、そのポートへの接続を許可する新しいルールを追加(-A)します。問題は、ルールのiptablesリストの最後にルールを追加することです。iptablesリストの最後のルールは、それより前に明示的に許可されていないものをすべて拒否します。iptablesルールは順番に適用されるため、新しいルールに到達する前に、接続が一致して拒否されます。
12

2
リストの3番目の位置に新しいルールを挿入しました(-I INPUT 3)。最後に拒否ルールの前に一致するため、接続が許可されます。フランクが述べたように、iptables -nvLを使用して、各ルールに一致するパケットの数を確認できます。これは、このような構成のデバッグに役立ちます。
melsayed

/sbin/service iptables savesudoを使用しても、私にはうまくいきません。
huertanix

2

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

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


1

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

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


以前に「変更を適用する」落とし穴に反則しました。二度と。:)
Andrew Martin

-1

sshのデフォルトポートが変更されたためにこのトピックに遭遇した場合に備えて、解決策は次のとおりです。

  1. 企業のファイアウォールをバイパスするために、ポートを80に変更しました/etc/ssh/sshd_conf
  2. 残念ながら、そのインスタンスにはApacheがすでにインストールされているため、もうsshを実行できませんでした。
  3. インスタンスからボリュームを切り離しました。
  4. 別のインスタンスに接続しました
  5. それをマウントし、設定ファイルでポートを変更しました
  6. デタッチし、古いインスタンスに再アタッチしました
  7. 再起動:すべて良い:D
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.