外部ユーザーがイントラネット専用のWebアプリケーションにアクセスするための安価なVPNソリューションとしてSSHトンネリングを実装することを検討しています。
現在、OpenSSHがインストールされたUbuntu Server 10.04.1 64ビットを使用しています。
WindowsボックスでPuTTYを使用して、sshサーバーへのローカルポートにトンネルを作成しています。
start PuTTY -D 9999 mysshserver.com -N
次に、Firefoxにlocalhost:9999でSOCKSプロキシを使用するように指示します。
-Nフラグは、クライアント側からインタラクティブシェルを無効にします。サーバー側でこれを行う方法はありますか?
ルートアクセスの無効化、rsaキー認証の使用、デフォルトポートの変更。この目的のために私が従うべき他の明らかなセキュリティ慣行はありますか?私の目標は、単にWebトラフィックをトンネリングできるようにすることです。
4年後、この回答は更新に値します。もともと私はauthorized_keys
を自分で使用していましたが、一部の特定のケースではおそらくそれを使用するでしょうが、中央のsshd_config
サーバー構成ファイルを使用することもできます。
proxy-only
やMatch
の個々のユーザーなどのグループを(特定のユースケースで)指定できます。 sshd_config
内。これは、グローバル設定の後に行われ、グローバル設定で指定された設定の一部を取り消し、繰り返し、または調整します。
注:sshd_config(5)
で使用される構文/ディレクティブの一部は、man
ssh_config(5)
のページ。特に、 ssh_config(5)
の[〜#〜]パターン[〜#〜]セクションを必ずお読みください。 。
グループの場合、これはMatch
ブロックが次のように始まることを意味します。
Match group proxy-only
次の基準をMatch
できます:User
、Group
、Host
、LocalAddress
、LocalPort
およびAddress
。複数の条件に一致させるには、条件とパターンのペアをカンマで区切ります(上記のgroup proxy-only
)。
簡潔にするために従来は適宜インデントされているこのようなブロック内で(そうする必要はありません)、そのグループのメンバーのすべてのauthorized_keys
ファイルを編集する必要なく、ユーザーグループに適用する設定を宣言できます。
no-pty
のauthorized_keys
設定はPermitTTY no
設定によってミラーリングされ、command="/sbin/nologin"
はForceCommand /sbin/nologin
になります。
さらに、ユーザーをホームフォルダーにchroot
- ingするなど、管理者のパラノイアを満たすためにさらに多くの設定を設定することもできます。
Match group proxy-only
PermitTTY no
ForceCommand /sbin/nologin
ChrootDirectory %h
# Optionally enable these by un-commenting the needed line
# AllowTcpForwarding no
# GatewayPorts yes
# KbdInteractiveAuthentication no
# PasswordAuthentication no
# PubkeyAuthentication yes
# PermitRootLogin no
(コメントアウトした行が必要かどうか、または必要に応じてコメントを外してください)
%h
は、ユーザーのホームディレクトリに置き換えられるトークンです(%u
はユーザー名を示し、%%
はパーセント記号を示します)。 ChrootDirectory
は、sftp-only
ユーザーを制限するのに特に便利です。
Match group sftp-only
X11Forwarding no
AllowTcpForwarding no
ChrootDirectory %h
ForceCommand internal-sftp
PasswordAuthentication no
certainディレクティブのみがMatch
ブロックで使用できることに注意してください。詳細については、man
ページ sshd_config(5)
を参照してください(Match
を検索)。
NB:この発言の下の部分は私の元の答えでした。その間-しかし、それはあなたの正確なsshd
バージョンの機能にも依存します-ほとんどの場合、私は上記の方法を選びます。
はい、できます。公開鍵を割り当てるのと同じくらいきめ細かくできます。 ajdeconが推奨するnologinに加えて、authorized_keys
のキーエントリの前に以下を設定することをお勧めします。
no-pty ssh-rsa ...
No ptyは、そのキーに疑似端末を割り当てないようにサーバー側に指示します。
これを前に付けることにより、特定のキーに対してnologinなどの実行を強制することもできます。
command="/sbin/nologin",no-pty ssh-rsa ...
トンネリングのみのユーザーの場合、ログインシェルを/ sbin/nologinに変更します。これにより、ユーザーはサーバー上のシェルにアクセスできなくなりますが、クライアントからsshトンネルのセットアップを実行することはできます。
ユーザー/パス認証を放棄してログインにキーを使用する準備ができている場合は、各公開キーにparametersを指定できます。
注目すべきパラメータは次のとおりです。
command = "command"
このキーが認証に使用されるたびにコマンドが実行されることを指定します。ユーザーが指定したコマンド(存在する場合)は無視されます。
そして
制限
すべての制限を有効にします。つまり、ポート、エージェント、X11転送を無効にし、PTYの割り当てと〜/ .ssh/rcの実行を無効にします。
そして最後に
port-forwarding制限オプションによって以前に無効にされたポート転送を有効にします。
これらを使用すると、特定のキーペアのユーザーがSSHセッションで実行できることをかなり制限できます。
次のようになります。
restrict,port-forwarding,command="/sbin/nologin" ssh-rsa <base64-encoded key>
Tunnelier を試すことをお勧めします。構成/管理がはるかに簡単です。
これはあなたが探している答えではないかもしれませんが、代わりにOpenVPNの使用を検討しましたか?