Ось CentOS 7.6
Задача - разрешить любые коннекты к серверу только из заданных стран.
Что сделал:
В файле
hosts.deny
прописал
ALL: ALL
и больше там никаких правил нет
В файле
hosts.allow
прописал
ALL: ALL: spawn /opt/geoip.sh %a
и так же там больше никаких записей нет.
Файл
/opt/geoip.sh
содержит такое:
#!/bin/bash
# UPPERCASE space-separated country codes to ACCEPT
ALLOW_COUNTRIES="RU UA"
if [ $# -ne 1 ]; then
echo "Usage: `basename $0` <ip>" 1>&2
exit 0 # return true in case of config issue
fi
COUNTRY=`/usr/bin/geoiplookup $1 | awk -F ": " '{ print $2 }' | awk -F "," '{ print $1 }' | head -n 1`
[[ $COUNTRY = "IP Address not found" || $ALLOW_COUNTRIES =~ $COUNTRY ]] && RESPONSE="ALLOW" || RESPONSE="DENY"
if [ $RESPONSE = "ALLOW" ]
then
logger "$RESPONSE connection from $1 ($COUNTRY)"
exit 0
else
logger "$RESPONSE connection from $1 ($COUNTRY)"
exit 1
fi
В итоге имею: при подключении по ssh в лог пишется коннект, страна и работает все как надо,
При подключении к веб серверу на 80 или 443 порт никаких записей в логе и никаких запретов, как будто никаких правил нет. Что я делаю не так?