ssh — Ограничение доступа по GeoIP

Последнее время обьем говнотрафика в Интернете вырос в разы. Если раньше auth.log насчитывал примерно до 10 SSH ботов в сутки, то на данный момент этот показатель вырос до сотен уникальных ip. Боты в основном из Китая/Тайвани/Кореи… Фаервол конечно спасает, но хочется чегото изощреннее …
На просторах Интернета когдато нашел рецепт ограничения доступа к sshd по GeoIP. Решил опробовать.
Задача: дать доступ по SSH только ip адресам из Украины — остальным зась!
Для начала установил необходимые пакеты:

root@host:~# apt-get install geoip-bin geoip-database

И поехали ваять скрипты … настраивать конфиги!

Теперь сделал вот такой скриптик:

#!/usr/bin/env bash

PATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/root/bin"

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=`geoiplookup $1 |sed -e 's/^.*Edition\:\ //' -e 's/\,.*$//'`

if [[ ${COUNTRY} = "IP Address not found" ]]; then
  logger "sshd ALLOW connection from IP $1 - [LAN]"
  exit 0
elif [[ ${COUNTRY} =~ ${ALLOW_COUNTRIES} ]]; then
  logger "sshd ALLOW connection from IP $1 - [${COUNTRY}]"
  exit 0
 else
  logger "sshd DENY connection from IP $1 - [${COUNTRY}]"
  exit 1
fi

и сохранил его в /root/bin/ssh_geoip.sh
Теперь подправим конфиг /etc/hosts.deny добавив туда:

sshd: ALL

также добавим в /etc/hosts.allow вот такую строчку:

sshd: ALL: aclexec /root/bin/ssh_geoip.sh %a

Никакие сервисы перегружать ненадо … просто пробуем и смотрим лог /var/log/messages.
Вот так с мира:

Feb 27 15:39:16 host logger: sshd DENY connection from IP 91.230.200.46 - [PL]
Feb 27 15:39:29 host logger: sshd DENY connection from IP 91.230.200.48 - [PL]

и вот так с Украины:

Feb 27 15:47:21 host logger: sshd ALLOW connection from IP 77.91.174.100 - [UA]

Позаимствовал идею отсюда, скрипты немного переписал.

Хай щастить!

    • Fedr
    • Март 15th, 2015 7:54дп

    Крутая тема. Себе такое же поставлю. Будьмо!

    • Богдан
    • Сентябрь 14th, 2016 11:50дп

    Не работает у меня на шарид хостинге сколько не пробывал не получаеться

    • admin
    • Октябрь 16th, 2016 4:38пп

    @Богдан
    нужно дебажить. На шаред хостнге могут быть разные нюансы.

  1. Трэкбэков пока нет.

Why ask?