Правила хитрые, но с комментариями. По сути тут даже не защита от перебора паролей, а полный запрет для всех чужих IP, разрешен лишь белый список и всего 3 попытки ввести неверный пароль.
Скрипт - bash.
#!/bin/bash
# Даем 3 попытки стукнуться в ssh, иначе баним на 10 минут
iptables -A INPUT -p TCP -i eth0 --syn --dport 22 -m recent --name radiator --set
iptables -A INPUT -p TCP -i eth0 --syn --dport 22 -m recent --name radiator --update --seconds 600 --hitcount 2 -j DROP
## Местоположение файлов
WHITELIST=guest.txt
## Белый список ip, с которых можно зайти по ssh:
for x in `grep -v ^# $WHITELIST | awk '{print $1}'`; do
echo "Разрешение $x..."
iptables -A INPUT -p tcp --dport 22 --src $x -j ACCEPT
done
## Блокируем все IP, которые не в белом списке
iptables -A INPUT -p tcp --dport 22 -j DROP
## Даем 3 попытки стукнуться в ssh, иначе баним на 10 минут
#iptables -A INPUT -p TCP -i eth0 --syn --dport 22 -m recent --name radiator --set
#iptables -A INPUT -p TCP -i eth0 --syn --dport 22 -m recent --name radiator --update --seconds 600 --hitcount 2 -j DROP
exit 0
Небольшое пояснение - ssh должен быть запущен на стандартном, 22 порту. Правила смотрят на количество отправленных пакетов syn - установку соединения. Если соединение не удалось установить - значит ssh сбрасывает его, обычно из-за неверного пароля или имени пользователя. Как видно из правила, мы слушаем интерфейс eth0, если сервер смотрит в сеть другим интерфейсом - его надо изменить. В файл guest.txt можно класть как одиночные ip, так и сразу с маской сети, главное - каждый ip или подсеть в новой строке.
Так же можно защищать и FTP, и любые другие подобные сервисы, если по каким-то причинам не установлен fail2ban. Правило было подсказано на linux.org.ru и доработано мной
Скрипт - bash.
#!/bin/bash
# Даем 3 попытки стукнуться в ssh, иначе баним на 10 минут
iptables -A INPUT -p TCP -i eth0 --syn --dport 22 -m recent --name radiator --set
iptables -A INPUT -p TCP -i eth0 --syn --dport 22 -m recent --name radiator --update --seconds 600 --hitcount 2 -j DROP
## Местоположение файлов
WHITELIST=guest.txt
## Белый список ip, с которых можно зайти по ssh:
for x in `grep -v ^# $WHITELIST | awk '{print $1}'`; do
echo "Разрешение $x..."
iptables -A INPUT -p tcp --dport 22 --src $x -j ACCEPT
done
## Блокируем все IP, которые не в белом списке
iptables -A INPUT -p tcp --dport 22 -j DROP
## Даем 3 попытки стукнуться в ssh, иначе баним на 10 минут
#iptables -A INPUT -p TCP -i eth0 --syn --dport 22 -m recent --name radiator --set
#iptables -A INPUT -p TCP -i eth0 --syn --dport 22 -m recent --name radiator --update --seconds 600 --hitcount 2 -j DROP
exit 0
Небольшое пояснение - ssh должен быть запущен на стандартном, 22 порту. Правила смотрят на количество отправленных пакетов syn - установку соединения. Если соединение не удалось установить - значит ssh сбрасывает его, обычно из-за неверного пароля или имени пользователя. Как видно из правила, мы слушаем интерфейс eth0, если сервер смотрит в сеть другим интерфейсом - его надо изменить. В файл guest.txt можно класть как одиночные ip, так и сразу с маской сети, главное - каждый ip или подсеть в новой строке.
Так же можно защищать и FTP, и любые другие подобные сервисы, если по каким-то причинам не установлен fail2ban. Правило было подсказано на linux.org.ru и доработано мной