SSHを別の内部ポートに事前ルーティング

SSHを別の内部ポートに事前ルーティング

私はローカルGitプロジェクトを開発しており、root以外のユーザーを使用してポート2222で別々のSSHサービスを実行しています。それ以外はufwファイアウォールを使用してポート2222を開きます。接続が期待どおりに機能し、正常であるかどうかをテストするためにオープンしました。

SSHのデフォルトポートは22であり、ユーザーがリポジトリにアクセスするためにアドレスに別のポートを書きたくないので、22から2222に事前にルーティングしたいと思います。そして、Pre-Routing中はポート2222を外部からアクセスできないという点も有効であればいいです。

基本的に最初の部分を完了しました。トラフィックを2222から2222に事前にルーティングしており、ポート2222も開いていると正しく機能しますが、ポート2222を閉じようとすると22への接続も機能しません(ポートを開くルールは次のとおり)。まだそこにあります)。 iptablesはポート22を2222に変換し、それをufwに渡すように見えるため、これはやや論理的です。 ufwはこれを認識し、ポート2222が開いていないため接続を拒否します。

現在これはufwのbefore.rulesにあり、ポート2222も開いていると機能します。

*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -p tcp --dport 22 -j REDIRECT --to-port 2222

ポート2222を開かずに事前ルーティングを実行する方法はありますか?

ベストアンサー1

原則としてはいいえ。ここで使用することは重要ではありませんufw。これは、iptablesルールを生成するフロントエンドの役割のみを持っているからです。ご存知のように、NATルールはフィルタリングの前に処理されるため、フィルタはNATルールの後に生成されたパケットを表示できます。 (ウィキペディアではかなり怖く見えるチャートパケットはネットフィルタ内を流れ、これは独立していることを意味します。 )

別のポートからサーバーにアクセスできるようにすることが大きな問題かどうかはわかりません。

ただし、実際にポート2222に直接送信されたパケットを破棄するには、いくつかのトリック、つまり接続タグ(ターゲットとCONNMARKモジュールconnmarkなど)を使用してこれを実行できます。

テーブルからnat接続にフラグを設定し、宛先ポートにリダイレクトします。

iptables -t nat -A PREROUTING -p tcp --dport 22 -j CONNMARK --set-mark 1234
iptables -t nat -A PREROUTING -p tcp --dport 22 -j REDIRECT --to-port 2222

(デフォルト)テーブルにfilterタグがない場合、接続は拒否されます。

iptables -A INPUT -p tcp --dport 2222 -m connmark ! --mark 1234 -j REJECT

他のルールと矛盾しない限り、タグ番号が何であるかは問題ではありません。

(NATテーブルでもルールを作成することが可能かどうかはわかりませんDROP。iptables v1.4.21はこれを許可しないようですが、カーネルではなくiptables自体から苦情が発生しますREJECT。)

おすすめ記事