Colobridge WIKI

установка и настройка sshguard

Применимость:

Слова для поиска:


<Уберите этот раздел если он не нужен>

CentOS 6.5+, CentOS 7

1. Подключитесь к виртуальному серверу по протоколу SSH. 2. Установите на свой VPS дополнительное программное обеспечение: компилятор gcc и утилиту make. Для этого выполните следующую команду(gcc и make могут уже быть установлены):

 yum install gcc make 

2. Скачайте архив с программой SSHGuard и распакуйте его, выполнив представленные ниже команды по очереди:

 
wget http://sourceforge.net/projects/sshguard/files/sshguard/sshguard-1.5/ 
sshguard-1.5.tar.bz2/download
tar xjpf download
cd sshguard-1.5
./configure –with-firewall=iptables 
make && make install 
3.Теперь задайте цепочку правил в iptables командой
 iptables -N sshguard 
4. Обязательно настройте проверку всего входящего трафика через установленную цепочку правил командой
 iptables -A INPUT -j sshguard 
5. Настройте отслеживание активности на основных портах FTP, SSH, POP3, IMAP. (Если SSH использует нестандартный порт (42222 , 52222 либо другой , укажите его )
iptables -P INPUT ACCEPT
iptables -A INPUT -m multiport -p tcp --destination-ports 21,22,110,143 -j sshguard
Дополнительно вы можете настроить блокировку нарушителей на портах TCP и UDP командами:
 
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
6. Чтобы SSHGuard имел право доступа на динамическое изменение настроек iptables, выполните команду
 chmod +s /usr/local/sbin/sshguard 
7. Сохраните внесенные в правила изменения командой
 service iptables save 
либо
 iptables-save > /etc/sysconfig/iptables 
8. Теперь выполните запуск SSHGuard командой
 /usr/local/sbin/sshguard -l /var/log/secure 

9. На этом установка SSHGuard завершена. Отныне после каждых 4 неуспешных попыток подключения к VPS IP-адрес нарушителя будет блокироваться. Однако, созданные настройки будут работать до первой перезагрузки виртуального сервера. Восстанавливать их придется командой

 /sbin/service iptables restart 

Чтобы не делать этого каждый раз, можно на сервере создать специальный файл и разместить в нем текст скрипта, который бы выполнял запуск программы автоматически. 10. Cоздайте файл со скриптом на VPS. Создание такого файла осуществляется командой

 touch /etc/rc.d/init.d/sshguard 

После того, как вы открыли файл с названием sshguard, добавьте в него все строки :

#! /bin/sh
# chkconfig: 2345 90 25
### BEGIN INIT INFO
# Provides: $sshguard
# Required-Start: $syslog
# Default-Start: 2 3 4 5
# Short-Description: starting and stoppning SSHGuard Daemon
# Description: Sshguard is a small program that monitors services running \
# on your machine from the log files. When it detects that someone is \
# doing something bad to a service, sshguard blocks the IP address of \
# the bad guy with a firewall rule.\
# Project page http://www.sshguard.net\
# Startup script by an0maly.andr@gmail.com
#
#Source function library.
. /etc/init.d/functions
D_PATH="/usr/local/sbin/sshguard"
LOGFILES=(/var/log/secure)
PIDFILE="/var/run/sshguard.pid"
PROG="SSHGuard"
OPTIONS="-a 5 -w 127.0.0.1"
LOGSUCKER_OPT=""
check() {
status $D_PATH
}
start() {
echo -n $"Starting $PROG: "
if [ -f $PIDFILE ]; then
echo -n "$PROG already started"
echo_failure
echo
else
for lfl in ${LOGFILES[@]}; do
if [ ! -f $lfl ]; then
echo -n "$lfl not found!"
else
LOGSUCKER_OPT="$LOGSUCKER_OPT -l $lfl"
fi;
done
$D_PATH $LOGSUCKER_OPT $OPTIONS -i $PIDFILE 2>/dev/null &
sleep 2
if [ -f $PIDFILE ]; then
echo_success
else
echo_failure
fi;
echo
return
fi;
}
stop() {
echo -n $"Stopping $PROG: "
killproc -p $PIDFILE
echo
return $RETVAL
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
check
;;
restart)
stop
start
;;
*)
echo $"Usage: $0 {start|stop|restart|status}"
;;
esac
exit $RETVAL 

11. Чтобы операционная система могла прочитать созданный файл, выполните приведенный ниже набор команд:

yum install perl
perl -pi -e 's/\r\n/\n/;' /etc/rc.d/init.d/sshguard
12. Дополнительно установите на свой VPS специальную утилиту для чтения логов - syslog-ng. Ее установка и запуск выполняется следующей последовательностью команд:
 yum install chkconfig
cd /root
wget http:// dl.fedoraproject.org/pub/epel/6Server/x86_64/epel-release-6-8.noarch.rpm  
yum -y update
rpm -Uvh /root/epel-release-6-8.noarch.rpm
yum repolist
yum check-update
sudo sed -i "s/mirrorlist=https/mirrorlist=http/" /etc/yum.repos.d/epel.repo
yum list *syslog-ng*
yum install syslog-ng syslog-ng-libdbi
chkconfig rsyslog off
chkconfig syslog-ng on
chkconfig --list syslog-ng
service rsyslog stop
service syslog-ng start

13. С помощью редактора nano или vi откройте файл syslog-ng.conf:

 nano /etc/syslog-ng/syslog-ng.conf 
Добавьте в него такие строки:
# pass only entries with auth+authpriv facilities from programs other than 

sshguard

filter f_sshguard { facility(auth, authpriv) and not program("sshguard"); };

# pass entries built with this format

destination sshguard {

    program("/usr/local/sbin/sshguard"

        template("$DATE $FULLHOST $MSGHDR$MESSAGE\n")

    );

};

log { source(src); filter(f_sshguard); destination(sshguard); }; 
Сохраните изменения в файле и выполните команду
 killall -HUP syslog-ng 

14. Остается только выполнить запуск скрипта командами:

chkconfig sshguard on
service sshguard start 

Debian

Для Debian процедура установки SSHGuard следующая: 1. Выполните команду

 apt-get –y install sshguard 
2. Создайте правила в iptables, поочередно выполнив такие команды:
iptables -N sshguard
iptables -A INPUT -j sshguard
iptables -P INPUT ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
Указанный выше набор правил предусматривает разрешение подключения к серверу только через порты 22, 53, 80, 443. Подключения через другие порты будут блокироваться (стоит заметить что Ваш сервер может иметь нестандартный SSH порт 42222 либо 52222)Это лишь пример цепочки правил для iptables. Вы можете задавать и свои условия проверки. Например, можно использовать и предложенное в предыдущих пунктах условие мониторинга активности на основных портах доступа к серверу:
 iptables -A INPUT -m multiport -p tcp --destination-ports 21,22,110,143 -j sshguard 

3. Сохраните заданные правила в памяти сервера командой

 iptables-save 
4. Чтобы заданная цепочка правил имела действие после перезапуска виртуального сервера, необходимо открыть для редактирования файл 00-iptables. Предварительно установите к себе на VPS предпочитаемый редактор, например, nano:
apt-get install nano
nano -w /etc/network/if-up.d/00-iptables
Содержимое файла должно быть таким:
#!/bin/sh
iptables-restore < /etc/firewall.conf
Сохраните обновления и предоставьте скрипту необходимые права для выполнения:
 chmod +x /etc/network/if-up.d/00-iptables 
5. Передайте заданную ранее цепочку правил в firewall:
 iptables-save >/etc/firewall.conf 
6. Теперь предоставьте SSHGuard права, чтобы была возможность перезаписывать правила в iptables:
 chmod +s /usr/sbin/sshguard 
 iptables-save > /etc/init.d/iptables 
 /usr/sbin/sshguard -l /var/log/messages 

Ubuntu Установка SSHGuard на Ubuntu выполняется следующим образом:

1. Скачайте и установите программу, выполнив команды

 sudo apt-get update 
 sudo apt-get install sshguard 

2. Далее установите на сервер специальную утилиту для чтения логов:

sudo apt-get autoremove rsyslog 
 sudo apt-get install syslog-ng 

3. Укажите цепочку правил iptables и сохраните их командами:

iptables -A INPUT -j sshguard 
iptables -P INPUT ACCEPT 
iptables -A INPUT -p tcp --dport 22 -j ACCEPT 
iptables -A INPUT -p udp --dport 53 -j ACCEPT 
iptables -A INPUT -p tcp --dport 80 -j ACCEPT 
iptables -A INPUT -p tcp --dport 443 -j ACCEPT 
 sudo iptables-save -c 

4. Откройте конфигурационный файл syslog-ng.conf для редактирования:

 sudo nano /etc/syslog-ng/syslog-ng.conf 

Добавьте в него следующие строки:

(можно скрыть в разворачивающееся окно)

 
# pass only entries with auth+authpriv facilities from programs other than 

sshguard

filter f_sshguard { facility(auth, authpriv) and not program(“sshguard”); };

# pass entries built with this format

destination sshguard {

    program(“/usr/sbin/sshguard”

        template(“$DATE $FULLHOST $MSGHDR$MESSAGE\n”)

    );

};

log { source(src); filter(f_sshguard); destination(sshguard); }; 

Сохраните внесенные изменения в файле, после чего выполните команду:

 killall -HUP syslog-ng 

5. Чтобы настроенные в iptables правила действовали и после перезагрузки сервера, откройте для редактирования файл 00-iptables:

 sudo nano –w /etc/network/if-up.d/00-iptables 

Добавьте в него следующие строки:

#!/bin/sh

iptables-restore < /etc/firewall.conf 

Сохраните изменения и укажите для указанного файла права для запуска командой

<code>chmod +x /etc/network/if-up.d/00-iptables

6. Сохраните заданную цепочку правил в конфигурационный файл firewall:

<code>sudo iptables-save >/etc/firewall.conf

7. И, наконец, запустите SSHGuard командой <code> /etc/init.d/sshguard start

Теперь после 4 неудачных попыток ввода пароля при подключении к Вашему серверу IP компьютера, с которого выполнялось подключение, попадет в бан. Сначала время блокировки составляет около 10 минут. При каждых последующих попытках перебора пароля время блокировки возрастает по экспоненте.