Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия Следующая версия Следующая версия справа и слева | ||
каталог_статей:безопастность:установка_и_настройка_sshguard [2015/12/22 10:50] korotish |
каталог_статей:безопастность:установка_и_настройка_sshguard [2015/12/22 10:59] korotish [Смотрите также:] |
||
---|---|---|---|
Строка 15: | Строка 15: | ||
2. Скачайте архив с программой SSHGuard и распакуйте его, выполнив представленные ниже команды по очереди: | 2. Скачайте архив с программой SSHGuard и распакуйте его, выполнив представленные ниже команды по очереди: | ||
- | < | + | < |
+ | wget http:// | ||
sshguard-1.5.tar.bz2/ | sshguard-1.5.tar.bz2/ | ||
tar xjpf download | tar xjpf download | ||
Строка 21: | Строка 22: | ||
./configure –with-firewall=iptables | ./configure –with-firewall=iptables | ||
make && make install </ | make && make install </ | ||
- | |||
3.Теперь задайте цепочку правил в iptables командой | 3.Теперь задайте цепочку правил в iptables командой | ||
- | + | < | |
- | #iptables -N sshguard | + | 4. Обязательно настройте проверку всего входящего трафика через установленную цепочку правил командой |
- | + | < | |
- | 4. Обязательно настройте проверку всего входящего трафика через установленную цепочку | + | 5. Настройте отслеживание активности на основных портах FTP, SSH, POP3, IMAP. (Если SSH использует нестандартный порт (42222 , 52222 либо другой , укажите его ) |
- | + | < | |
- | правил командой | + | iptables -P INPUT ACCEPT |
- | + | iptables -A INPUT -m multiport -p tcp --destination-ports 21, | |
- | #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, | + | |
Дополнительно вы можете настроить блокировку нарушителей на портах TCP и UDP командами: | Дополнительно вы можете настроить блокировку нарушителей на портах TCP и UDP командами: | ||
- | + | < | |
- | #iptables -A INPUT -p udp --dport 53 -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 80 -j ACCEPT | + | </ |
- | + | 6. Чтобы SSHGuard имел право доступа на динамическое изменение настроек iptables, выполните команду | |
- | 6. Чтобы SSHGuard имел право доступа на динамическое изменение настроек iptables, | + | < |
- | + | ||
- | выполните команду | + | |
- | + | ||
- | #chmod +s / | + | |
7. Сохраните внесенные в правила изменения командой | 7. Сохраните внесенные в правила изменения командой | ||
- | + | < | |
- | #service iptables save | + | |
либо | либо | ||
- | + | < | |
- | #iptables-save > / | + | |
8. Теперь выполните запуск SSHGuard командой | 8. Теперь выполните запуск SSHGuard командой | ||
+ | < | ||
- | #/ | + | 9. На этом установка SSHGuard завершена. Отныне после каждых 4 неуспешных попыток подключения к VPS IP-адрес нарушителя будет блокироваться. Однако, |
- | + | ||
- | 9. На этом установка SSHGuard завершена. Отныне после каждых 4 неуспешных | + | |
- | + | ||
- | попыток подключения к VPS IP-адрес нарушителя будет блокироваться. Однако, | + | |
- | + | ||
- | созданные настройки будут работать до первой перезагрузки виртуального сервера. | + | |
Восстанавливать их придется командой | Восстанавливать их придется командой | ||
- | #/ | + | < |
- | Чтобы не делать этого каждый раз, можно на сервере создать специальный файл и | + | Чтобы не делать этого каждый раз, можно на сервере создать специальный файл и разместить в нем текст скрипта, |
- | + | 10. Cоздайте файл со скриптом на VPS. Создание такого файла осуществляется командой | |
- | разместить в нем текст скрипта, | + | < |
- | + | ||
- | автоматически. | + | |
- | + | ||
- | 10. Cоздайте файл со скриптом на VPS. Создание такого файла осуществляется | + | |
- | + | ||
- | командой | + | |
- | + | ||
- | #touch / | + | |
После того, как вы открыли файл с названием sshguard, добавьте в него все строки : | После того, как вы открыли файл с названием sshguard, добавьте в него все строки : | ||
- | + | < | |
- | ( ЭТОТ КОД ЛУЧШЕ В КАКУЮ-НИБУДЬ СВЁРНУТУЮ ВКЛАДКУ ЗАСУНУТЬ А ЭТУ | + | |
- | + | ||
- | СТРОЧКУ УДАЛИТЬ) | + | |
#! /bin/sh | #! /bin/sh | ||
- | |||
- | # | ||
- | |||
# chkconfig: 2345 90 25 | # chkconfig: 2345 90 25 | ||
- | |||
- | # | ||
- | |||
### BEGIN INIT INFO | ### BEGIN INIT INFO | ||
- | |||
# Provides: $sshguard | # Provides: $sshguard | ||
- | |||
# Required-Start: | # Required-Start: | ||
- | |||
# Default-Start: | # Default-Start: | ||
- | |||
# Short-Description: | # Short-Description: | ||
- | |||
# Description: | # Description: | ||
- | |||
# on your machine from the log files. When it detects that someone is \ | # 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 \ | # doing something bad to a service, sshguard blocks the IP address of \ | ||
- | |||
# the bad guy with a firewall rule.\ | # the bad guy with a firewall rule.\ | ||
- | |||
# Project page http:// | # Project page http:// | ||
- | |||
# Startup script by an0maly.andr@gmail.com | # Startup script by an0maly.andr@gmail.com | ||
- | |||
# | # | ||
- | |||
#Source function library. | #Source function library. | ||
- | |||
. / | . / | ||
- | |||
D_PATH="/ | D_PATH="/ | ||
- | |||
LOGFILES=(/ | LOGFILES=(/ | ||
- | |||
PIDFILE="/ | PIDFILE="/ | ||
- | |||
PROG=" | PROG=" | ||
- | |||
OPTIONS=" | OPTIONS=" | ||
- | |||
LOGSUCKER_OPT="" | LOGSUCKER_OPT="" | ||
- | |||
check() { | check() { | ||
- | |||
status $D_PATH | status $D_PATH | ||
- | |||
} | } | ||
- | |||
start() { | start() { | ||
- | |||
echo -n $" | echo -n $" | ||
- | |||
if [ -f $PIDFILE ]; then | if [ -f $PIDFILE ]; then | ||
- | |||
echo -n "$PROG already started" | echo -n "$PROG already started" | ||
- | |||
echo_failure | echo_failure | ||
- | |||
echo | echo | ||
- | |||
else | else | ||
- | |||
for lfl in ${LOGFILES[@]}; | for lfl in ${LOGFILES[@]}; | ||
- | |||
if [ ! -f $lfl ]; then | if [ ! -f $lfl ]; then | ||
- | |||
echo -n "$lfl not found!" | echo -n "$lfl not found!" | ||
- | |||
else | else | ||
- | |||
LOGSUCKER_OPT=" | LOGSUCKER_OPT=" | ||
- | |||
fi; | fi; | ||
- | |||
done | done | ||
- | |||
$D_PATH $LOGSUCKER_OPT $OPTIONS -i $PIDFILE 2>/ | $D_PATH $LOGSUCKER_OPT $OPTIONS -i $PIDFILE 2>/ | ||
- | |||
sleep 2 | sleep 2 | ||
- | |||
if [ -f $PIDFILE ]; then | if [ -f $PIDFILE ]; then | ||
- | |||
echo_success | echo_success | ||
- | |||
else | else | ||
- | |||
echo_failure | echo_failure | ||
- | |||
fi; | fi; | ||
- | |||
echo | echo | ||
- | |||
return | return | ||
- | |||
fi; | fi; | ||
- | |||
} | } | ||
- | |||
stop() { | stop() { | ||
- | |||
echo -n $" | echo -n $" | ||
- | |||
killproc -p $PIDFILE | killproc -p $PIDFILE | ||
- | |||
echo | echo | ||
- | |||
return $RETVAL | return $RETVAL | ||
- | |||
} | } | ||
- | |||
case " | case " | ||
- | |||
start) | start) | ||
- | |||
start | start | ||
- | |||
;; | ;; | ||
- | |||
stop) | stop) | ||
- | |||
stop | stop | ||
- | |||
;; | ;; | ||
- | |||
status) | status) | ||
- | |||
check | check | ||
- | |||
;; | ;; | ||
- | |||
restart) | restart) | ||
- | |||
stop | stop | ||
- | |||
start | start | ||
- | |||
;; | ;; | ||
- | |||
*) | *) | ||
- | |||
echo $" | echo $" | ||
- | |||
;; | ;; | ||
- | |||
esac | esac | ||
- | |||
exit $RETVAL | exit $RETVAL | ||
+ | </ | ||
- | 11. Чтобы операционная система могла прочитать созданный файл, выполните | + | 11. Чтобы операционная система могла прочитать созданный файл, выполните приведенный ниже набор команд: |
- | + | < | |
- | приведенный ниже набор команд: | + | yum install perl |
- | + | perl -pi -e ' | |
- | #yum install perl | + | </ |
- | + | ||
- | #perl -pi -e ' | + | |
12. Дополнительно установите на свой VPS специальную утилиту для чтения логов - | 12. Дополнительно установите на свой VPS специальную утилиту для чтения логов - | ||
- | + | syslog-ng. Ее установка и запуск выполняется следующей последовательностью команд: | |
- | syslog-ng. Ее установка и запуск выполняется следующей последовательностью | + | < |
- | + | cd /root | |
- | команд: | + | wget http:// dl.fedoraproject.org/ |
- | + | yum -y update | |
- | #yum install chkconfig | + | rpm -Uvh / |
- | + | yum repolist | |
- | #cd /root | + | yum check-update |
- | + | sudo sed -i " | |
- | #wget http:// dl.fedoraproject.org/ | + | yum list *syslog-ng* |
- | + | yum install syslog-ng syslog-ng-libdbi | |
- | 8.noarch.rpm | + | chkconfig rsyslog off |
- | + | chkconfig syslog-ng on | |
- | #yum -y update | + | chkconfig --list syslog-ng |
- | + | service rsyslog stop | |
- | #rpm -Uvh / | + | service syslog-ng start |
- | + | </ | |
- | #yum repolist | + | |
- | + | ||
- | #yum check-update | + | |
- | + | ||
- | #sudo sed -i " | + | |
- | + | ||
- | #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: | 13. С помощью редактора nano или vi откройте файл syslog-ng.conf: | ||
- | + | < | |
- | #nano / | + | |
Добавьте в него такие строки: | Добавьте в него такие строки: | ||
- | + | < | |
- | (тоже стоит спрятать в разворачивающуюся вкладку наверное) | + | |
# pass only entries with auth+authpriv facilities from programs other than | # pass only entries with auth+authpriv facilities from programs other than | ||
Строка 318: | Строка 179: | ||
}; | }; | ||
- | log { source(src); | + | log { source(src); |
+ | </ | ||
Сохраните изменения в файле и выполните команду | Сохраните изменения в файле и выполните команду | ||
- | + | < | |
- | #killall -HUP syslog-ng | + | |
14. Остается только выполнить запуск скрипта командами: | 14. Остается только выполнить запуск скрипта командами: | ||
+ | < | ||
+ | service sshguard start </ | ||
- | #chkconfig sshguard on | + | **Debian** |
- | + | ||
- | #service sshguard start | + | |
- | + | ||
- | Debian | + | |
Для Debian процедура установки SSHGuard следующая: | Для Debian процедура установки SSHGuard следующая: | ||
- | |||
1. Выполните команду | 1. Выполните команду | ||
- | + | < | |
- | #apt-get –y install sshguard | + | |
2. Создайте правила в iptables, поочередно выполнив такие команды: | 2. Создайте правила в iptables, поочередно выполнив такие команды: | ||
- | + | < | |
- | #iptables -N sshguard | + | iptables -N sshguard |
- | + | iptables -A INPUT -j sshguard | |
- | #iptables -A INPUT -j sshguard | + | iptables -P INPUT ACCEPT |
- | + | iptables -A INPUT -p tcp --dport 22 -j ACCEPT | |
- | #iptables -P INPUT 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 22 -j ACCEPT | + | iptables -A INPUT -p tcp --dport 443 -j ACCEPT |
- | + | </ | |
- | #iptables -A INPUT -p udp --dport 53 -j ACCEPT | + | Указанный выше набор правил предусматривает разрешение подключения к серверу только через порты 22, 53, 80, 443. Подключения через другие порты будут блокироваться (стоит заметить что Ваш сервер может иметь нестандартный SSH |
- | + | порт 42222 либо 52222)Это лишь пример цепочки правил для iptables. | |
- | #iptables -A INPUT -p tcp --dport 80 -j ACCEPT | + | Вы можете задавать и свои условия проверки. Например, |
- | + | < | |
- | #iptables -A INPUT -p tcp --dport 443 -j ACCEPT | + | |
- | + | ||
- | Указанный выше набор правил предусматривает разрешение подключения к | + | |
- | + | ||
- | серверу только через порты 22, 53, 80, 443. Подключения через другие порты будут | + | |
- | + | ||
- | блокироваться. | + | |
- | + | ||
- | порт 42222 либо 52222) | + | |
- | + | ||
- | Это лишь пример цепочки правил для iptables. Вы можете задавать и свои условия | + | |
- | + | ||
- | проверки. Например, | + | |
- | + | ||
- | условие мониторинга активности на основных портах доступа к серверу: | + | |
- | + | ||
- | #iptables -A INPUT -m multiport -p tcp --destination-ports 21, | + | |
- | + | ||
- | sshguard | + | |
3. Сохраните заданные правила в памяти сервера командой | 3. Сохраните заданные правила в памяти сервера командой | ||
- | + | < | |
- | #iptables-save | + | 4. Чтобы заданная цепочка правил имела действие после перезапуска виртуального сервера, |
- | + | < | |
- | 4. Чтобы заданная цепочка правил имела действие после перезапуска виртуального | + | apt-get install nano |
- | + | nano -w / | |
- | сервера, | + | </ |
- | + | ||
- | установите к себе на VPS предпочитаемый редактор, | + | |
- | + | ||
- | #apt-get install nano | + | |
- | + | ||
- | #nano -w / | + | |
Содержимое файла должно быть таким: | Содержимое файла должно быть таким: | ||
+ | < | ||
#!/bin/sh | #!/bin/sh | ||
- | |||
iptables-restore < / | iptables-restore < / | ||
+ | </ | ||
Сохраните обновления и предоставьте скрипту необходимые права для выполнения: | Сохраните обновления и предоставьте скрипту необходимые права для выполнения: | ||
- | + | < | |
- | #chmod +x / | + | |
5. Передайте заданную ранее цепочку правил в firewall: | 5. Передайте заданную ранее цепочку правил в firewall: | ||
- | + | < | |
- | #iptables-save >/ | + | |
6. Теперь предоставьте SSHGuard права, чтобы была возможность перезаписывать | 6. Теперь предоставьте SSHGuard права, чтобы была возможность перезаписывать | ||
- | |||
правила в iptables: | правила в iptables: | ||
< | < | ||
Строка 484: | Строка 307: | ||
пароля время блокировки возрастает по экспоненте. | пароля время блокировки возрастает по экспоненте. | ||
===== Смотрите также: ===== | ===== Смотрите также: ===== | ||
+ | http:// | ||
---- | ---- |