Перейти к содержанию

Рекомендуемые сообщения

Опубликовано

Antiscan - простой инструмент для выявления и блокировки IP с подозрительной активностью (например, сканеры портов и служб).

Предыстория от @FLK, поясняющая актуальность данного инструмента:

Цитата

Проблема массового сканирования портов становится очень актуальной при наличии белого статического адреса и открытых наиболее используемых портов (например 22, 80, 443), "смотрящих" в интернет. Раньше я не обращал внимание даже на количество подключений в разделе Диагностика - Активные подключения. Но недавно я решил посмотреть как там обстоят дела. И ужаснулся, когда увидел там цифру приближающуюся к 3000... 
Как правило при этом есть 3 типа проблемы, которые я наблюдал:
1) когда вас сканирует 1 ip, но при этом он может создавать очень много одновременных подключений (для примера 22.154.203.43 создаст 100 подключений к 443 порту)...
2) когда вас сканирует целая подсеть, но каждый ip создаёт при этом по 1 подключению (для примера - 202.124.233.5 создаст 1 подключение, 202.124.233.6 - 1 подключение, 202.124.233.7 - 1 подключение и т.д.)
3) когда вас сканирует 1 ip, создавая 1 подключение
Из перечисленных только третий вариант самый безобидный, как правило такое сканирование не раздражает и заканчивается быстро, да и отличить его от легитимного подключения крайне сложно. А вот с первым и вторым вариантом надо было как-то бороться.
В итоге я подал идею @dimon27254 как избавиться от этих надоедливых сканировщиков, а он уже стал ее реализовывать...
Мы начали с простых правил iptables, пробовали разные варианты, смотрели как это будет работать на практике на своих роутерах, в итоге получился достаточно рабочий интрумент, о котором и расскажет сам автор (которому я лично выражаю огромную благодарность) более подробно...

Antiscan представляет собой небольшой скрипт на shell с config-файлом и хук-скриптом netfilter.d. Предназначен для устройств Keenetic/Netcraze, поддерживающих Entware.

Возможности:
1) Блокировка хостов, открывающих множество соединений с одного IP-адреса.
2) Блокировка хостов, открывающих единичные соединения с множества IP, принадлежащих одной подсети /24.

Требования для корректной работы скрипта:
1) Установленный компонент "Модули ядра для подсистемы Netfilter" (начиная с версии ПО 4.3 доступен без "Протокол IPv6").
2) Предварительно настроенный и готовый к работе cron. Можно воспользоваться простой и понятной инструкцией: https://web.archive.org/web/20231004003915/https://forums.zyxmon.org/viewtopic.php?f=5&t=5257

Установка:
1. Скачать пакет из вложения и загрузить на устройство/внешний накопитель.
2. Выполнить команду:

opkg install "/путь_к_пакету/antiscan_1.0_all.ipk"

3. Указать unix-имена интерфейсов интернет-подключений в файле "/opt/etc/ascn.conf". В 4.3+ просмотр unix-имен интерфейсов доступен по команде:

show interface {интерфейс} system-name

4. Запустить командой:

/opt/etc/init.d/S99ascn start

Важно: Antiscan является IPv4-only. В настоящее время поддержка IPv6 не планируется к реализации.

Принцип работы:

Спойлер

1) При запуске скрипта создаются 3 ipset: ascn_ips, ascn_candidates и ascn_subnets.
ascn_ips - для блокировки ip, создавших множество соединений.
ascn_candidates - накапливает все ip, открывавшие соединения к указанным в ascn.conf портам.
ascn_subnets - для блокировки подсетей, хосты которых открывали единичные соединения с множества IP.

2) При превышении установленного общего порога одновременных соединений или количества соединений за определенное время, IP будет занесен в ascn_ips и заблокирован.

3) По расписанию запускается задача, обрабатывающая накопленные IP в ascn_candidates: 
3.1) Если количество адресов в одной подсети /24 превышает установленный в ascn.conf порог - вся подсеть /24 заносится в ascn_subnets и блокируется.
3.2) IP, принадлежащие заблокированным подсетям, удаляются из ascn_candidates, а оставшиеся продолжают накапливаться до следующей обработки.

Описание параметров в ascn.conf:

Спойлер
# Общие настройки:
# Перечень интерфейсов, на которых работает Antiscan. Множество интерфейсов указывается через пробел, пример: "eth3 eth2.2 ppp0":
ISP_INTERFACES="eth3" 

# Перечень портов, на которых работает Antiscan. Множество портов указывается через запятую, пример: "22,80,443":
PORTS="22,80,443"

# Настройки ограничения множественных соединений:
# Время наблюдения за новыми соединениями от IP в секундах:
RECENT_CONNECTIONS_TIME=30 

# Пороговое значение новых соединений за период RECENT_CONNECTIONS_TIME, после которого IP будет заблокирован:
RECENT_CONNECTIONS_HITCOUNT=15    

# Общий лимит множественных соединений с одного адреса, после которого он будет заблокирован:
RECENT_CONNECTIONS_LIMIT=20 

# Длительность блокировки IP в секундах:     
RECENT_CONNECTIONS_BANTIME=864000   

# Настройки ограничения соединений с разных IP:
# Срок хранения IP-адресов-кандидатов на блокировку:
DIFFERENT_IP_CANDIDATES_STORAGETIME=864000

# Пороговое значение IP-кандидатов, начиная с которого будет создана подсеть для блокировки:
DIFFERENT_IP_THRESHOLD=5

# Длительность блокировки подсети в секундах:
SUBNETS_BANTIME=864000

Период чтения списка кандидатов по умолчанию равен 1 минуте. Вы можете его изменить, отредактировав задачу в crontab.
Текст задачи:

*/1 * * * * /opt/etc/init.d/S99ascn read_candidates &

Использование S99ascn:

{start|stop|restart|status|list|reload|update_rules|read_candidates}
start                 начать работу скрипта (создать правила, ipset'ы, начать сбор IP)
stop                  остановить работу скрипта (удалить правила, очистить ipset'ы, отменить блокировку)
restart               остановить и заново начать работу скрипта
status                отобразить статус Antiscan и количество заблокированных IP, подсетей
list {ips|subnets}    отобразить список и количество заблокированных IP/подсетей
reload                обновить конфигурацию Antiscan (перечитать файл ascn.conf)
update_rules          проверить наличие правил iptables, и добавить их при отсутствии (для hook-скрипта netfilter.d)
read_candidates       обработать список адресов кандидатов для блокировки по подсетям (запускается вручную или по расписанию)

Исходный код доступен на github:
https://github.com/dimon27254/antiscan

Замечания, предложения, и конструктивная критика по работе инструмента приветствуется :)

antiscan_1.0_all.ipk

Опубликовано (изменено)

От себя добавлю - штука эта имеет "накопительный" эффект - чем дольше работает, тем меньше мух летит на роутер)))) Главное не заиграться и самого себя в бан не отправить))))

Себе поставил

DIFFERENT_IP_THRESHOLD=3
Изменено пользователем FLK
Опубликовано
20 минут назад, FLK сказал:

От себя добавлю - штука эта имеет "накопительный" эффект - чем дольше работает, тем меньше мух летит на роутер)))) Главное не заиграться и самого себя в бан не отправить))))

Себе поставил

DIFFERENT_IP_THRESHOLD=3

Список заблокированных хостов и подсетей хранится в ОЗУ ? Или на флешке?

 

Опубликовано
1 минуту назад, MDP сказал:

Список заблокированных хостов и подсетей хранится в ОЗУ ? Или на флешке?

Списки заблокированных хостов и подсетей представляют собой ipset. Они не сохраняются где-либо в памяти роутера/флешки, и при каждой перезагрузке будут наполняться заново по мере поступления запросов на порты.

Опубликовано
5 минут назад, dimon27254 сказал:

Списки заблокированных хостов и подсетей представляют собой ipset. Они не сохраняются где-либо в памяти роутера/флешки, и при каждой перезагрузке будут наполняться заново по мере поступления запросов на порты.

Так...очень интересно, а реализовать сохранение в какой нибудь файл с некой периодичностью, а после перезагрузки формировать ipset из файла обратно реализуемо?

Опубликовано
1 минуту назад, MDP сказал:

Так...очень интересно, а реализовать сохранение в какой нибудь файл с некой периодичностью, а после перезагрузки формировать ipset из файла обратно реализуемо?

В целом, такое возможно. Однако, изначально я решил это не реализовывать, так как потребуется постоянная периодическая запись ipset на флешку/внутреннюю память, что может негативно сказаться на их ресурсе.

Опубликовано

...ещё бы сюда какую нибудь финтифлюшку приделать для защиты от брутфорсинга )))) ...вообще была бы "бомба". 

я осознаю , что без анализа логов на предмет авторизации отдельных служб такого не сделать...да и есть отдельные приложения типа fail2ban...

Опубликовано
1 минуту назад, MDP сказал:

...ещё бы сюда какую нибудь финтифлюшку приделать для защиты от брутфорсинга )))) ...вообще была бы "бомба". 

я осознаю , что без анализа логов на предмет авторизации отдельных служб такого не сделать...да и есть отдельные приложения типа fail2ban...

Тут только от надоедливых сканеров)

Опубликовано
7 минут назад, MDP сказал:

...ещё бы сюда какую нибудь финтифлюшку приделать для защиты от брутфорсинга )))) ...вообще была бы "бомба". 

я осознаю , что без анализа логов на предмет авторизации отдельных служб такого не сделать...да и есть отдельные приложения типа fail2ban...

зачем? это ведь уже есть из коробки

Опубликовано
Только что, Denis P сказал:

зачем? это ведь уже есть из коробки

Хотелось бы перманентно блокировать...а тут до перезагрузки, или только на некоторый временной интервал.

 

Опубликовано
1 минуту назад, MDP сказал:

Хотелось бы перманентно блокировать...а тут до перезагрузки, или только на некоторый временной интервал.

Перманентная блокировка может сыграть злую шутку в неподходящий момент.. а если вы случайно сами себя удаленно заблокируете?

Опубликовано (изменено)
13 минут назад, MDP сказал:

Хотелось бы перманентно блокировать...а тут до перезагрузки, или только на некоторый временной интервал.

 

если сильно хочется, можно системные наборы себе в файл хоронить, их легко опознать по признаку _NDM_BFD

Изменено пользователем Denis P

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...

Важная информация

На этом сайте используются файлы cookie. Нажимая "Я принимаю" или продолжая просмотр сайта, вы разрешаете их использование: Политика конфиденциальности.