hosts.allow/hosts.deny
SSHやその他のサポートサービスへの接続を防ぐために使用するとき、カスタムスクリプトが機能するように数時間努力しました。TCPラッパーリストにない国の製品です。
SSHの例:
ホストが拒否文書
sshd : ALL
ホスト、許可文書
sshd: ALL: spawn /usr/local/bin/country_filter %h
国フィルタスクリプト:
#!/bin/bash
# Specify the two-letter ISO Country Code(s) to accept
ALLOW_COUNTRIES="RU\|CY" # list of country codes in the exampled format ("RU\|GR\|CY")
COUNTRY=`/usr/bin/geoiplookup $1 | /bin/grep -w $ALLOW_COUNTRIES`
[[ $COUNTRY ]] && RESPONSE="ALLOW" || RESPONSE="DENY"
if [ $RESPONSE = "ALLOW" ]
then
echo "$RESPONSE"
exit 0
else
echo "$RESPONSE"
exit 1
fi
上記のスクリプトはコンソールでうまく実行されますが、できない動作させるには、使用時ホスト、許可。
私がここで何を見逃しているのでしょうか?
答え1
マニュアルページに記載されているように、hosts_options(5)
標準出力はにリダイレクトされるため、から/dev/null
出力を取得できませんecho
。終了状態を考慮するには、代わりにaclexec
使用する必要がありますspawn
。実際、マニュアルページには、aclexec
「コマンドが true または false 終了ステータスを返すかどうかに応じて、接続は許可または拒否されます」と示されています。