Установка Port Sentry

21 Aug 2009 | Автор: dd |

Если поглядеть логи доступа любого сервера, каким либо боком торчащего в интернет, то обнаружится, что атаки по портам излюбленная тематика интернет-фриков, которые по-видимому могу круглосуточно шакалить в поиске какого нибудь, криво сконфигурированного сервера. Естественно, что предотвращению этих угроз служат полноценный IPS модули и сервера, но в большинстве своем они являются платными решениями, а т.к. нас интересует по возможности халявные продукты, то при настройке файервола или какого либо инет-сервера, я прикручиваю Port Sentry, некий аналог IPS, систему по обнаружению сканирования портов.

Интерактивная защита позволяет отнести систему к IPS, т.к. система поддерживает: обнаруживает почти все известные типы сканирования: TCP connect(), SYN/half-open, Null, XMAS и многое другое; позволяет настроить свой механизм работы таким образом, что при обнаружении сканирования путем запуска произвольного скрипта может блокировать атакующего по IP, или отправлять его в т.н черные дыры; ведет логирование всех попыток установления соединения.

На данный момент программу можно скачать с сайта Source Forge и на данный момент доступна бета-версия 1.2. Скачав распаковываем архив, и изучаем файл portsentry_config.h , содержащий в себе параметры конфигурации установки.

/* Путь к конфигурационному файлу. При изменении необходимо тоже самое сделать в Makefile */
#define CONFIG_FILE “/usr/local/psionic/portsentry/portsentry.conf”
/* Путь к файлам hosts.deny для tcpwrapper. Стандартное местоположение в /etc */
#define WRAPPER_HOSTS_DENY “/etc/hosts.deny”
/* Задаем тип логов для syslogd*/
#define SYSLOG_FACILITY LOG_DAEMON
/* Задаем уровень важности логов демона для  syslogd*/
#define SYSLOG_LEVEL LOG_NOTICE
/* Максимальное количество запоминаемых для проверки повторного подключения хостов */
#define MAXSTATE 50

Изменив все по нашему желанию, проделываем стандартную процедуру:
# make && make install && make clean

После установки настраиваем систему, посредством редактирования /usr/local/etc/portsentry.conf

############################ /usr/local/etc/portsentry.conf ############################
# TCP-порты которые прослушивает PortSentry – здесь нужно указывать неиспользуемые приложениями порты.
# Проверить какие порты заняты можно примерно так:
# sockstat | grep {tcp}:{udp} | 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
ADVANCED_PORTS_TCP=”1024″
ADVANCED_PORTS_UDP=”1024″
# порты исключаемые из прослушивания при работе в Advanced Stealth Scan Detection
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 = никаких действий, кроме записи в лог
# 1 = заблокировать хост и запустить внешнюю команду
# 2 = только запустить внешнюю команду
BLOCK_UDP=”1″
BLOCK_TCP=”1″

# команда на блокирование хоста. поскольку мы собираемся использовать IPFW , то и танцуем от стенки, также есть возможность прикрутить ipchains и просто сторонние программы, вплоть до rm -Rf / ;)
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/home/script/work/scan_port_mail.sh $TARGET$ $PORT$”

# Сколько портов будет позволено отсканить прежде чем будет выполнено действие.
# 0 – реагирует после первой не угаданной цифры
# 1 – на втором
# 2 – на третьем и т.д
SCAN_TRIGGER=”0″

# Какой `баннер` вешать на порты прослушиваемые PortSentry.
PORT_BANNER=”.. WE ARE WRITING YOUR ADDRESS IN CIA LOG ..”

############################

В файле portsentry.ignore мы упоминаем  IP-адреса компьютеров, которые не должны быть блокированы при подключении к отслеживаемому порту. По умолчанию, в файле заданы два IP-адреса: 127.0.0.1 и 0.0.0.0. туда следует добавить внутреннюю сеть и свои сервера.

После этого создаем указанный в конфиге внешний скрипт для отправки почты:

# mkdir -p /usr/home/script/work/
# cd /usr/home/script/work/
# touch scan_port_mail.sh
# chmod +x scan_port_mail.sh

###################### /usr/home/script/work/scan_port_mail.sh ######################
#!/bin/sh -xv
# оповещение по почте о попытках сканирования хостов

# вводим переменные:
main_e_mail=”root@sane4ka.ru”
attak_date=”`date +%Y-%m-%d`”
attak_time=”`date +%H:%M:%S`”
local_mashine=”`uname -n`”

# достаём хост с которого сканили
hacker_IP=$1
scanned_port=$2

# определяем DNS-атакующего
hacker_DNS=`host ${hacker_IP} | awk ‘{print $5}’`

# ваяем тревожную мессагу
echo ” обнаружена попытка сканирования .
Имя машины:             ${local_mashine}
Отсканенные порты:       ${scanned_port}

Прикрепляем данные атакующего:
IP:     ${hacker_IP}
DNS:    ${hacker_DNS}

=======
Атака заблокирована.
” | mail -s port_scanned_on_${local_mashine} ${main_e_mail}

############################

В случае фаервола естественно необходимо открыть прослушиваемые порты, для более успешной рыбалки.

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

Classic
Работая в данном режиме Portsentry открывает порты, указанные в TCP_PORTS или UDP_PORTS и находится в состоянии ожидания соединения. При попытке подключения к перечисленному порту происходит блокирование удаленного хоста. В этом режиме  Portsentry не реагирует на Stealth-сканирование. Данный режим работы задается опциями командной строки: -tcp и -udp , для TCP и UDP-портов соответственно.

Enhanced Stealth Scan Detection
Данный режим используется для проверки перечисленных в TCP_PORTS или UDP_PORTS портов на предмет подключения или сканирования. Отличительная черта, то что палит практически все типы Stealth-сканирования, а не ограничивается только сканирование подключением. Порты, в отличие от предыдущего режима открытыми не держит, посему атакующий получает достоверную информацию об открытых портах. Задается ключиками командной строки: -stcp и -sudp , для TCP и UDP-портов соответственно.

Advanced Stealth Scan Detection
Данный режим используется для проверки всех портов входящих в пул от 1 до ADVANCED_PORT_TCP (для TCP) или ADVANCED_PORT_UDP (для UDP). Порты, открытые работающими на хосте программами и перечисленные в ADVANCED_EXLUDE_TCP(для TCP) или ADVANCED_EXCLUDE_UDP(для UDP) не проверяются. Любой хост, попытавшийся подключится к порту из этого промежутка, мгновенно блокируется. Наиболее удобный для использования метод, т.к. реакция на сканирование или попытку подключения у данного метода самая быстрая, а также в этом режиме используется гораздо меньше процессорного времени, чем в остальных. Задается ключами из коммандной строки: -atcp и -audp , TCP и UDP-портов соответственно.

Таким образом Portsentry можно запускать в следующих режимах:

/usr/local/psionic/portsentry/portsentry -tcp
Classic Mode для TCP-портов
/usr/local/psionic/portsentry/portsentry -udp
Classic Mode для UDP-портов
/usr/local/psionic/portsentry/portsentry -stcp
Enhanced Stealth Scan Detection для TCP-портов
/usr/local/psionic/portsentry/portsentry -sudp
Enhanced Stealth Scan Detection для UDP-портов
/usr/local/psionic/portsentry/portsentry -atcp
Advanced Stealth Scan Detection для TCP-портов
/usr/local/psionic/portsentry/portsentry -audp
Advanced Stealth Scan Detection для UDP-портов

Команду запуска можно добавить в rc.conf или же создать запускающий файлик

*** При установках и последующем написании how-to были использованы материалы сайтов:
Opennet.ru
Lissyara.su

VN:F [1.9.21_1169]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.21_1169]
Rating: -1 (from 1 vote)

Теги: ,

Ваш отзыв