背景
ファイルを抽出するためにサードパーティのSFTPサイトに接続するサービスがあります。サードパーティには、特定のユーザーが接続しようとすると着信IPを自動的にブロックするシステムがあります。誰かが禁止されているユーザーを使用していくつかの接続を試みています。これはレガシーシステムであり、すべてのユーザーがrootとしてシステムにアクセスできるためです。この人がsftp root @ remote-siteを試みるたびに、同じリモートSFTPに依存する複数のアプリケーションがクラッシュします。
質問 SSHを使用して特定のuser@siteへの接続をブロックする方法はありますか?一致ルールは、デフォルトで渡される sshd_config のためのものです。 SSHクライアントに対応するものはありますか?
答え1
たとえば、次のように使用する必要がありますiptable
。
ssh
192.168.1.0/24 サブネットへの接続切断
iptables -I OUTPUT -d 192.168.1.0/24 -p tcp --dport 22 -j REJECT
その後、確認
ssh -v 192.168.1.6
OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: Connecting to 192.168.1.6 [192.168.1.6] port 22.
debug1: connect to address 192.168.1.6 port 22: **Connection refused**
ssh: connect to host 192.168.1.6 port 22: **Connection refused**
答え2
これマッチsshd_configの規則は、ssh_config、特に以下/etc/ssh/ssh_config
を含むように編集できるグローバルファイルにも適用されます。
Match host site user root
Hostname DontDoThat
SSHまたはSFTPを使用すると、ホスト名が置き換えられます。
$ sftp root@site
Couldn't read packet: Connection reset by peer
$ sudo sftp site
ssh: Could not resolve hostname dontdothat: Name or service not known
もちろん、ユーザーの~/.ssh/config
ファイルはまだこの設定を上書きできます。
一致する行にスクリプト呼び出し(0を終了する必要がある)を追加して、sftpを実行している人に関する情報を記録できます(一重exec "/bin/mylogger somearg..."
引用符を使用しないなど)。
答え3
発信SSH接続を許可するには、いつでもiptables "users"モジュールを使用できます。
iptables -A OUTPUT -o eth0 -p tcp --destination-port 22 -m owner --uid-owner {USERNAME} -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --destination-port 22 -j DROP
これにより、すべての発信SSH接続がブロックされますが、{USERNAME}はそれを実行できます。