web-dev-qa-db-ja.com

hosts.allowでツイストを使用する

hosts.allowの最後に、次のものがあります。

ALL : ALL \
 : spawn (echo  "%d" | /usr/bin/mail -s "tcpf\: %d attempt from %h." root) & \
 : severity auth.info \
 : twist /bin/echo "You are not welcome to use %d from %h."`

しかし、これは単にそのテキストを私のauth.logに入れるように見えます:

mail sshd[63546]: twist 12.34.56.789 to /bin/echo "You are not welcome to use sshd from 12.34.56.789."

クライアント側では、「リモートホストによって接続が閉じられました」のみが表示され、エコーの出力は表示されません。 man -k twistには何もありません

1
lbutlr

hosts_options(5)のマニュアルページでは、tcp_wrappersのtwistコマンドについて説明しています。

_twist Shell_command_

hosts_access(5)マニュアルページで説明されている%展開を実行した後、現在のプロセスを指定されたShellコマンドのインスタンスに置き換えます。 Stdin、stdout、およびstderrはクライアントプロセスに接続されています。このオプションは、ルールの最後に表示する必要があります。

問題は、SSHが単なるテキストプロトコルではなく、いくつかのプロトコルメッセージを予期し、それらを受信しない場合、失敗することです。デバッグモード(_ssh -v_)でsshを実行すると、次のように表示されます。

_debug1: Local version string SSH-2.0-OpenSSH_7.5
debug1: ssh_exchange_identification: You are not welcome to use sshd from ::1.

ssh_exchange_identification: read: Connection reset by peer
_

したがって、メッセージは実際に送信されますが、SSHバナーが正しくなかったため、失敗します。メッセージをsshプロトコルに挿入する簡単な方法はありません。おそらく、この動作を受け入れる必要があります。

0
Jakuje