Некоторые из IP открывают тысячи соединений моего сервера. У меня есть сервер Ubuntu 14. Я проверяю общее количество соединений, используя следующую команду:
netstat -an | grep tcp | awk '{print $ 5}' | cut -f 1 -d: | сортировать | uniq -c | сортировать -n
Затем я использую следующее правило iptables, чтобы заблокировать IP-адрес преступника.
iptables -I INPUT 1 -s xxxx -j DROP
Все работает нормально и блокирует IP-адрес. Тем не менее, я не могу оставаться в сети 24/7 для мониторинга сервера. Мне было интересно, есть ли сценарий Shell, который я могу использовать, чтобы сделать это автоматически? Например, если IP-адрес открывает более X соединений в любое время, он должен автоматически быть заблокирован по вышеуказанному правилу iptables.
command-line
scripts
iptables
connection
user3404047
источник
источник
Ответы:
Прежде всего, не изобретайте велосипед. Это именно то, что
denyhosts
для:Насколько я знаю,
denyhosts
это только дляssh
соединений, но есть также,fail2ban
что имеет дело почти со всем:Оба доступны в репозиториях:
Вы также можете написать это, если хотите. Что-то вроде:
Он
awk
извлечет IP-адреса и посчитает их, а также напечатает только те из них, которые появляются более одногоmax
раза (здесь-vmax=100
, измените их соответственно) Затем IP-адреса передаются в цикл while, который запускает соответствующееiptables
правило.Чтобы запустить это 24/7, я бы сделал cronjob, который запускает команду выше каждую минуту или около того. Добавить эту строку в
/etc/crontab
источник
fail2ban
не менее, это не только для SSH. Он также отлично работает для порта 80. Смотрите, например, здесь , здесь и здесь .Возможный альтернативный вариант - идентифицировать и разрешить проблемные IP-адреса в рамках набора правил iptables, используя
recent
модуль. Задачей этого метода является ограничение по умолчанию для количества посещений по умолчанию, равное 20, поэтому необходимо либо отклониться от значений по умолчанию, либо создать счетчики переноса более высокого уровня для достижения более высокой точки срабатывания счетчика обращений.Приведенный ниже пример взят из моего набора правил iptables и запретит IP-адрес чуть более чем на 1 день, если он установит 80 новых TCP-соединений через порт 80 менее чем за 12 минут. Попав в список плохих парней, любая попытка подключения обнулит счетчик 1 дня до 0. Этот метод может привести к максимуму 400 ударам, прежде чем потребуется расширение до другого переноса (и я проверил другую цепочку переносов). Обратите внимание, что опубликованный код имеет инфраструктуру, которая будет использоваться для запрета на длительный период времени при нескольких кратковременных срабатываниях. В настоящее время я настроен на длительный бан при первом срабатывании.
источник