web-dev-qa-db-ja.com

シェルアクセス用のChrootdebianスクイーズ

ユーザーはWAN側からUbuntuサーバーへのシェルアクセスを必要とします。単純なパスワードを持つシェルアカウントが多数あるため、シェルポート(ポート22)はファイアウォールでブロックされています。私のWANサイドユーザーDebianchrootでsshサーバーを実行し、ファイアウォールでそのポートを開くことを計画しています。この種のセットアップが実行可能である場合、それを実現するための最良の方法は何ですか?

3
nixnotwin

単一のsshサーバー

ChrootでSSHサーバーを実行することを計画している唯一の理由が、パスワード認証を一部のユーザーに制限することである場合、それは必要ありません。ユーザーのホワイトリストに対してのみパスワードを許可するようにsshdに指示できます。 /etc/ssh/sshd_config で、Matchディレクティブを使用します。

PasswordAuthentication No
Match User trusted_user_1,trusted_user_2
    PasswordAuthentication yes

一部のユーザーをchrootしたい場合でも、単一のsshデーモンを実行し、sshd_configChrootDirectoryディレクティブを使用できます(Matchディレクティブの範囲内)。

異なるアドレスでリッスンしている2つのsshサーバー

2つのsshデーモンが異なるアドレスでリッスンしている場合は、同じポートでリッスンすることができます。それぞれにListenAddressディレクティブを配置します /etc/ssh/sshd_config 、それぞれにそのサーバーがリッスンするIPアドレスを指定します(listen on、listento、つまりこれらはサーバーのネットワークインターフェイスのアドレスです)。これは、サーバーマシンがLAN/WANフィルタリングを実行するノードである場合にのみ適用が制限されます。また、ssh localhostのようなものは透過的ではないことも意味します(ローカルホストでリッスンしていないデーモンには、ssh -bで引き続きアクセスできます)。

異なるポートでリッスンしている2つのsshサーバー

/etc/ssh/sshd_configPortディレクティブを使用して、chrootのsshデーモンを別のポートでリッスンさせることができます。ファイアウォールの外部からポート22をブロックし続け、chrootsshd用に選択した他のポートをブロックしないでください。

2つのsshサーバー、ファイアウォールによって実行されるルーティング

(上記のように)2つのデーモンが異なるポートでリッスンしている場合でも、両方がポート22でリッスンしているように見せることができます。たとえば、chrootされたsshデーモンをポート2201でリッスンさせ、ポート22で着信するトラフィックをリダイレクトします。 eth1からポート2201へ:

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 22 -j REDIRECT --to-ports 2201

次に、localhostまたはeth0を介したポート22へのssh接続は、chrootされていないサーバーに到達し、eth1を介したポート22へのssh接続は、chrootされたサーバーに到達します。ポート2201の接続は、chrootされたサーバーに到達します。 -i eth以外の基準を使用できます。たとえば、! -s 10.1.0.0/16 ! -s 127.0.0.0/8を使用して、すべてを10.1.x.yまたはループバック以外の送信元アドレスと照合できます。