Rejeitar conexões SSH de países não listados, usando hosts.allow / hosts.deny no CentOS

1

Eu estava tentando algumas horas fazer meu script personalizado funcionar ao usar hosts.allow/hosts.deny , para evitar conexões com o SSH e outros serviços que suportam TCP wrappers de países não listados.

Exemplo com SSH:

  1. arquivo hosts.deny

    sshd : ALL

  2. hosts.allow arquivo

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

  3. Script
  4. country_filter :

#!/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

O script acima funciona muito bem no console, mas eu não consegui fazê-lo funcionar, ao usar hosts.allow .

O que estou perdendo aqui?

    
por Ilia Rostovtsev 07.08.2014 / 16:27

1 resposta

2

Conforme documentado na página hosts_options(5) man, a saída padrão é redirecionada para /dev/null , para que não haja chance de obter a saída de echo . E como você deseja que o status de saída seja considerado, use aclexec em vez de spawn . Na verdade, a man page diz para aclexec : "A conexão será permitida ou recusada dependendo se o comando retorna um status de saída verdadeiro ou falso."

    
por 07.08.2014 / 19:57