Достали всякие малолетние придурки, сканящие порты да радостно брутфорсящие ssh... Ну правда достали. Порылся в инете нашёл пару решений. Самым толковым, на мой взгляд, оказалось PortSentry (сайт, к сожалению сдох - http://www.psionic.com/ ). Правда, в портах, оно водится.
Code
/usr/home/lissyara/>cd /usr/ports /usr/ports/>make search name='PortSentry' Port: portsentry-1.1 Path: /usr/ports/security/portsentry Info: Port scan detection and active defense Maint: ports@FreeBSD.org B-deps: R-deps: WWW:
/usr/ports/>cd /usr/ports/security/portsentry /usr/ports/security/portsentry/>make && make install && make clean
Приводим конфиг программы - /usr/local/etc/portsentry.conf - к такому виду:
Code
# TCP-порты которые должен слушать PortSentry - тут нельзя указывать # порты, которые заняты приложениями - тока свободные. Проверить, # что занято можно примерно так: # sockstat | grep udp | grep -v 127.0.0.1 | awk '{print $6}' | sort | uniq -c # или так, для tcp: # sockstat | grep tcp | grep -v 127.0.0.1 | awk '{print $6}' | sort | uniq -c TCP_PORTS="1,11,15,23,79,81,111,119,540,635,1080,1524,2000,5742,6667,8080,8085" # UDP-порты для прослушивания UDP_PORTS="1,7,9,69,513,635,640,641,700"
# Верхний порт диапазона, если используется метод # Advanced Stealth Scan Detection Options - но я его не юзаю, # по причине, что снаружи можно подключаться тока к # ограниченному списку портов - поэтому слушать весь # диапазон от 1 до 1024 просто бесполезно.... ADVANCED_PORTS_TCP="1024" ADVANCED_PORTS_UDP="1024" # порты исключаемые из прослушивания при работе в Адванцед моде ADVANCED_EXCLUDE_TCP="113,139" ADVANCED_EXCLUDE_UDP="520,138,137,67"
# Список игнорируемых хостов (как бы они себя не вели, # и какие б действия не предпринимали, к ним не будут # применяться меры противодействия) IGNORE_FILE="/usr/local/etc/portsentry.ignore" # Список хостов, которые были внесены в блэклист # (история работы программы) HISTORY_FILE="/usr/local/etc/portsentry.history" # строка по которой строится имя файла куда писать # заблокированные хосты BLOCKED_FILE="/usr/local/etc/portsentry.blocked"
# резольвить IP хостов в имена, или нет. Рекомендуется не # резольвить - лишняя нагрузка на сервер... RESOLVE_HOST = "1"
# Какие телодвижения предпринимать при обнаружении сканирования: # 0 = ничё не делать - некатит, такая опция <img rel="usm" src="http://necromancers.clan.su/sml/Sypsena.gif" border="0" align="absmiddle" alt=":)"> # 1 = заблокировать хост и запустить внешнюю команду # 2 = только запустить внешнюю команду BLOCK_UDP="1" BLOCK_TCP="1"
# команда на блокирование хоста. я использую IPFW поэтому им и блокирую. # а вообще рекомендую посмотреть пример конфига, котороый идёт с программой # там есть и другие варианы, в частностью с помощью роутинга... KILL_ROUTE="/sbin/ipfw add 2 deny all from $TARGET$:255.255.255.255 to any"
# Если поставить 1 то вначале запускается KILL_RUN_CMD а потом # уже KILL_ROUTE, ну и наоборот если 0 KILL_RUN_CMD_FIRST = "0" # Внешняя команда выполняемая при обнаружении сканирования портов, # я написал скриптик, шлющий мне письмо... KILL_RUN_CMD="/usr/script/work/scan_port_mail.sh $TARGET$ $PORT$"
# Сколько портов будет позволено отсканить прежде чем будет выполнено # действие. 0 - реагирует сразу после первого же порта, 1 - на втором, # 2 - на третьем, 3 - .... SCAN_TRIGGER="0"
# Какой `баннер` вешать на порты слушаемые PortSentry. Вообще, это делать не # рекомендуется, т.к. может разозлить нападающего... #PORT_BANNER="*** YOUR CONNECTION ATTEMPT HAS BEEN LOGGED..."
И файл со списком игнорируемых хостов и сетей - /usr/local/etc/portsentry.ignore:
Code
# Файл с игнорируемыми хостами для PortSentry # Забиваются либо хосты, либо сеть/маска # по одному на строчку.
127.0.0.1/32 0.0.0.0 192.168.20.0/24
Затем создаём директорию, где хранится указанный в конфиге скрипт
# стругаем себе письмо echo " какой-то придурок пытался сканить порты. Имя машины: ${local_mashine} Отсканеные порты: ${scanned_port}
Данные кулхацкера: IP: ${hacker_IP} DNS: ${hacker_DNS}
======= Мудак заблокирован. " | mail -s port_scanned_on_${local_mashine} ${main_e_mail}
Теперь надо в файрволле открыть снаружи порты, которые слушает PortSentry, это кусок моего файрволла:
Code
# для сканируемых портов правила. Для TCP разбиты на # две группы по причине, что ipfw не позволяет перечислять # больше 10 портов за раз. ${FwCMD} add allow tcp from any to ${IpOut} \ 1,11,15,23,79,81,111,119,540,635 via ${LanOut} ${FwCMD} add allow tcp from any to ${IpOut} \ 1080,1524,2000,5742,6667,8080,8085 via ${LanOut} ${FwCMD} add allow udp from any to ${IpOut} \ 1,7,9,69,513,635,640,641,700 via ${LanOut}
Ну и всё. Если есть возможность пробуем снаружи, если нету, то изнутри, предвартельно убрав свою сеть из списка игнорируемых (на крайний случай с локалхоста, убрав его из этого списка, и презапустив прогу), и наблюдаем в /var/log/messages такие сообщения: Feb 20 12:17:52 bsd-411 portsentry[288]: adminalert: PortSentry is now active and listening.
Quote
Feb 20 12:19:02 bsd-411 portsentry[286]: attackalert: Connect from host: 192.168.20.254/192.168.20.254 to TCP port: 1 Feb 20 12:19:02 bsd-411 portsentry[286]: attackalert: Host 192.168.20.254 has been blocked via dropped route using command: "/sbin/ipfw add 1 deny all from 192.168.20.254:255.255.255.255 to any" Feb 20 12:19:02 mail2 portsentry[286]: attackalert: External command run for host: 192.168.20.254 using command: "/usr/script/work/scan_port_mail.sh 192.168.20.254 1"
Правила в файрволле так и будут висеть до перезагрузки или перезапуска файрволла. При этом если их убрать, но программу не перезапустить, то снова для этого хоста правило не добавится:
Quote
Feb 20 12:19:55 bsd-411 portsentry[286]: attackalert: Connect from host: 192.168.20.254/192.168.20.254 to TCP port: 1 Feb 20 12:19:55 bsd-411 portsentry[286]: attackalert: Host: 192.168.20.254 is already blocked. Ignoring
Советую внимательно сверить списки открытых портов и слушаемых portSentry, наличие таких строк
говорит о вашей попытке повесить прослушку на занятый порт. ___________________________________________________________________________________________________ Все взято от сюда. Там много что интересного для FreeBSD.
а сам гайд написал некий lissyara
Сообщение отредактировал Djaba - Вторник, 29.03.2011, 20:19