CentOS で Host.allow/hosts.deny を使用して、リストにない国の SSH 接続を拒否します。

CentOS で Host.allow/hosts.deny を使用して、リストにない国の SSH 接続を拒否します。

hosts.allow/hosts.denySSHやその他のサポートサービスへの接続を防ぐために使用するとき、カスタムスクリプトが機能するように数時間努力しました。TCPラッパーリストにない国の製品です。

SSHの例:

  1. ホストが拒否文書

    sshd : ALL

  2. ホスト、許可文書

    sshd: ALL: spawn /usr/local/bin/country_filter %h

  3. 国フィルタスクリプト:


#!/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 終了ステータスを返すかどうかに応じて、接続は許可または拒否されます」と示されています。

関連情報