はじめに
本記事は、iptablesを検証設定し、Remote-SSHで繋げられないという内容です。
そもそも本事象や、同様な原因という可能性は極めて低いですが、備忘録として記します。
事象内容
ターミナル等で、SSH接続をすると、問題なく接続できますが、
vscodeのRemote-SSH機能を使用すると、接続中にエラーが起こり接続できません。
リモートホストのiptables上のInput Chainでは、22番ポートをACCEPTし、
他の通信(確立した関連の通信を除く)をブロックしています。
Chain INPUT (policy DROP 65 packets, 5490 bytes) pkts bytes target prot opt in out source destination 1797 186K ACCEPT 0 -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED 2 128 ACCEPT 6 -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
原因
ローカルループバックインターフェースからの接続は許可していなかった。
以下のように許可してあげることで解決しました。
(OutputもDROP Policyの場合は、ACCEPTが必要です)
iptables -A INPUT -i lo -j ACCEPT
vscodeのRemote-SSHは、SSHで指定したポート(22)でリモートサーバに接続した後、
ダイナミックポートフォワーディング(SOCKSプロキシ経由)にて通信していました。
リモートサーバの動的にポートをSOCKSプロキシがリッスンし、ローカルマシンと直接通信するため、INPUT Chainへの追加が必要です。
なお、外部からloに偽装したトラフィックが流れてくる恐れがあり、
ループバックアドレス範囲外はDROPするように設定します。
iptables -A INPUT -s 127.0.0.0/8 ! -i lo -j DROP
おわりに
dockerでのインフラ構築の一環として、iptablesを学んでいました。
初期設定は、INPUTがACCEPT Policyでパーパーなのできちんと学んで設定していかなくちゃいけないです。
一定のルールは、検証前に追加しておくべきでした。
ループバックの許可やら、確立した通信の許可やら。
ただ、本原因とは別にこういった事象が起こるケースがあるみたいで、
そのときは、vscodeのsetting.jsonにて、Remote.SSHの記述をすることで
解消されるかもしれません。
コメント