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