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 종료 상태를 반환하는지 여부에 따라 연결이 허용되거나 거부됩니다."라고 나와 있습니다.

관련 정보