ユーザーはWAN側からUbuntuサーバーへのシェルアクセスを必要とします。単純なパスワードを持つシェルアカウントが多数あるため、シェルポート(ポート22)はファイアウォールでブロックされています。私のWANサイドユーザーDebianchrootでsshサーバーを実行し、ファイアウォールでそのポートを開くことを計画しています。この種のセットアップが実行可能である場合、それを実現するための最良の方法は何ですか?
ChrootでSSHサーバーを実行することを計画している唯一の理由が、パスワード認証を一部のユーザーに制限することである場合、それは必要ありません。ユーザーのホワイトリストに対してのみパスワードを許可するようにsshdに指示できます。 /etc/ssh/sshd_config
で、Match
ディレクティブを使用します。
PasswordAuthentication No
Match User trusted_user_1,trusted_user_2
PasswordAuthentication yes
一部のユーザーをchrootしたい場合でも、単一のsshデーモンを実行し、sshd_config
でChrootDirectory
ディレクティブを使用できます(Match
ディレクティブの範囲内)。
2つのsshデーモンが異なるアドレスでリッスンしている場合は、同じポートでリッスンすることができます。それぞれにListenAddress
ディレクティブを配置します /etc/ssh/sshd_config
、それぞれにそのサーバーがリッスンするIPアドレスを指定します(listen on、listento、つまりこれらはサーバーのネットワークインターフェイスのアドレスです)。これは、サーバーマシンがLAN/WANフィルタリングを実行するノードである場合にのみ適用が制限されます。また、ssh localhost
のようなものは透過的ではないことも意味します(ローカルホストでリッスンしていないデーモンには、ssh -b
で引き続きアクセスできます)。
/etc/ssh/sshd_config
のPort
ディレクティブを使用して、chrootのsshデーモンを別のポートでリッスンさせることができます。ファイアウォールの外部からポート22をブロックし続け、chrootsshd用に選択した他のポートをブロックしないでください。
(上記のように)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またはループバック以外の送信元アドレスと照合できます。