内部クライアントが指定されたIP範囲内の特定のポートでサーバーの指定されたサービスに接続するときに、サーバーがアウトバウンドSSH接続を自動的に開始するにはどうすればよいですか。接続がすでに確立されている場合は、接続を開始しないでください。
Match
接続が既に確立されているかのようにこれを行うことができる非スクリプト方法はないようで、sshが再接続を試みないようにする方法やメソッドを使用してそれを検出する方法はありませんForceCommand
(または不必要にまったく新しいアウトバウンドSSHセッションを開くこと)。 。
だから私は次のようなスクリプトを思い出しました(これはアイデアを説明するためのドラフトだけです)。
#######auto_ssh-script.sh
####### iptables rule logging all new incoming, unestablished, never before seen connections
iptables -I INPUT -p tcp --sport 22 -m state --state NEW -m state !
--state ESTABLISHED -m state ! --state SEEN_REPLY -j LOG --log-prefix CONNECT
#######background script --> read log and look for a match to string CONNECT
cat /proc/kmsg | while read LOGGING
do
LOG='echo "$LOGGING" | grep 'CONNECT' '
if ["$LOG" = ' ' ] & UP= 'echo alxw | grep ssh '
if [ "UP" = ' '] then
fi
ssh -p 22 <user>@<somewhere-out-there.com
echo "Connected"
done
もっと良い方法はありませんか?そうでなければ、このスクリプトをどのように改善できますか?
答え1
デフォルトでは、以下でこれを行うことができますsshd_config
。
Match User user Address 192.168.100.0/24 LocalPort 22
ForceCommand ssh some-other-ip
LocalPort 22
通常のポートでサービスを実行する場合は必要ありません。クライアントIP範囲は192.168.100.1
- 192.168.100.254
、ユーザー名はですuser
。