ssh geoip freebsd

Здравствуйте товарищи !

Сегодня речь пойдет о том как во FreeBSD сделать блокировку по стране то есть например я хочу что бы к серверу могли подключиться только из Украины в этом случае мне нужно во первых либо добавлять каждый раз все адреса этих стран в фаервол либо интерактивно блокировать тех кому доступ запрещен что у нас и будет сделано так как я хочу видеть список адресов которые меня брутят.

Все мы знаем о возможности freebsd блокировать хосты посредством файла hosts.allow ) о нем и пойдет речь

для решения данной задачи нам понадобиться фаервол это либо pf либо ipfw кому как удобнее, кусок скрипта на sh или bash

и собственно установленный geoip на нашем сервере.

и так перейдем к делу

cd /usr/ports/net/GeoIP

make && make install

дальше обновляем базу адресов

/usr/local/bin/geoipupdate.sh

так после обновления базы приходит время написать скрипт который будет опеределять ип и банить в случае необходимости :

создаем сам файл скрипта

touch  /usr/local/bin/brute_ssh.sh

даем ему право исполняться

chmod +x /usr/local/bin/brute_ssh.sh

Вносим сам код в скрипт с помощью редактора vi

vi  /usr/local/bin/brute_ssh.sh

 

#!/bin/sh

# UPPERCASE space-separated country codes to ACCEPT
ALLOW_COUNTRIES=»UA»

if [ $# -ne 1 ]; then
echo «Usage: `basename $0` <ip>» 1>&2
exit 0 # return true in case of config issue
fi

COUNTRY=`/usr/local/bin/geoiplookup $1 | awk -F «: » ‘{ print $2 }’ | awk -F «,» ‘{ print $1 }’ | head -n 1`

if [ $ALLOW_COUNTRIES == $COUNTRY ]; then
RESPONSE=»ALLOW»
else
RESPONSE=»DENY»
fi
if [ $RESPONSE == «ALLOW» ]; then
logger «$RESPONSE sshd connection from $1 ($COUNTRY)»
exit 0
else
logger «$RESPONSE sshd connection from $1 ($COUNTRY)»
/sbin/pfctl -t badhosts -T add $1
exit 1

fi

exit

Так теперь необходимо добавить в /etc/pf.conf

таблицу :

table <badhosts> persist

и правило :

block in quick from <badhosts> to any

сохраняем  и переходим к конфигурированию /etc/hosts.allow

добавляем разрешения на диапазон адресов которые не пройдут проверку то есть «серые сети» :

sshd: 127.0.0.0/255.0.0.0 : ALLOW
sshd: 172.16.101.0/255.255.255.0 : ALLOW

и само правило для блокировки не желательных гостей

sshd: ALL : spawn /usr/local/bin/brute_ssh.sh %a

сохраняем и применяем конфигурацию фаервола :

pfctl -f /etc/pf.conf

Готово enjoy !