Google
 
Web avtobazar.com.ua
Portsentry
Введение

Сканирование портов является одним из самых распространенных и простых способов узнать, какая операционная система установлена на компьютере, какие службы
запущены в данный момент и получить другую информацию о компьютере, подключенном к Internet , которая может быть использована для взлома и проникновения.
Существует много программ для обнаружения сканирования портов. Но обнаружения не достаточно. "Должна последовать адекватная реакция"(с)В.В.Путин.
"Адекватная реакция" может заключаться в отправке в сторону сканирующего тебя человека неправильного фрагментированного пакета, ответного сканирования
портов, установки на него firewall'а и т.д. Также желательно, чтоб он получил недостоверную информацию об открытых портах на твоем компьютере. Все это и
многое другое позволяет делать прекрасная программа Psionic Software Portsentry.

Основные возможности Portsentry:

          обнаруживает практически все известные виды сканирования Unix-машин: TCP connect(), SYN/half-open, Null, XMAS и т.д.
       в реальном времени блокирует хост сканировщика посредством установленного на атакуемом компьютере firewall'а (для Linux 2.2.x - ipchains),
       команду запуска которого можно задать в файле конфигурации.
       записывает в логи посредством syslogd информацию об атаке.
        вызывает любую указанную тобой в файле конфигурации программу, в ответ на сканирование или подключение к защищенному portsentry порту,
       параметрами программы могут являтся IP-адрес атакующего хоста и атакуемый порт.

Начало







Установка

Portsentry в исходниках можно бесплатно скачать на сайте Psionic Software. На момент написания данной статьи последней версией программы была 1.0.
Скачать можно здесь.

После того, как скачаешь, распакуй сохраненный файл.
 

tar xfz portsentry-1.0.tar.gz
 

В текущем каталоге появится директория portsentry-1.0. Она должна содержать следующие файлы:
 

CHANGES - история изменений программы от версии к версии
CREDITS - файл с благодарностями всем кто помог в создании или тестировании программы
LICENSE - лицензия
Makefile - без комментариев...:)
README.COMPAT - список операционных систем на которых тестировалась работа программы
README.install - инструкция по установке и настройке
README.methods - описание различных методов защиты портов
README.stealth - описание обнаруживаемых методов Stealth-сканирования
ignore.csh - скрипт для автоматического создания файла portsenry.ignore - для компьютеров, не имеющих постоянного IP-адреса, может быть включен, например,
в файл /etc/ppp/ip-up
portsentry.c - часть исходника программы
portsentry.conf - файл конфигурации
portsentry.h - часть исходника программы
portsentry.ignore - файл с IP-адресами компьютеров, чье подключение к закрытым портам не должно блокироваться. По умолчанию содержит 127.0.0.1 и 0.0.0.0
portsentry_config.h - часть исходника программы, содержащая различные опции конфигурации
portsentry_io.c - часть исходника программы
portsentry_io.h - часть исходника программы
portsentry_tcpip.h - часть исходника программы
portsentry_util.c - часть исходника программы
portsentry_util.h - часть исходника программы
 

Первым делом загляни в 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
 

Какие типы и уровни значимости логов бывают, можно посмотреть, набрав man 3 syslog. CONFIG_FILE можно изменить на что-нибудь типа
/etc/portsentry.conf. Но лучше оставь как есть, так как придется также менять и Makefile, в котором указано, что файл конфигурации и файл программы
копируется в один и тот же каталог. Проверь, есть ли у тебя в /etc файл hosts.deny. В большинстве дистрибутивов он там и находится. Если в другом
месте - измени значение WRAPPER_HOSTS_DENY. Поподробнее о hosts.deny можно почитать, набрав man hosts.deny. Значение MAXSTATE
зависит только от того, как часто ты перегружаешь свой компьютер, так как данные о подключавшихся хостах уничтожаются при каждой загрузке программы.

После того, как закончишь с portsentry_config.h, можно будет изменить Makefile. Менять здесь можно только INSTALLDIR и CHILDDIR,
остальное лучше оставить неизменным. По умолчанию INSTALLDIR равен /usr/local/psionic, а CHILDDIR - /portsenry. Таким образом программа
и файлы конфигураций будут копироватся в /usr/local/psionic/portsentry.

Теперь можешь смело набрать:
 

make linux
 

для того, чтоб откомпилировать программу под Linux. Если компиляция прошла нормально, можно набрать:
 

make install
 

из-под root'а для установки Portsentry.

Если ты не менял путь для установки, то у тебя в /usr/local должен появится каталог psionic, в котором есть директория portsentry, содержащая
три файла: portsentry - сама программа, portsentry.conf и portsentry.ignore.
 
 

Начало







Настройка

Теперь ты можешь настроить работу Portsentry по своему усмотрению. Файл portsentry.conf содержит директивы конфигурации следующего формата:
 

ОПЦИЯ="значение"
 

Опции поддерживаются такие:

TCP_PORTS
       Здесь через запятую перечисляются TCP-порты, которые проверяются Portsentry. При подключении к ним, Portsentry записывает в информацию об
       этом в логи, затем выполняет команду, заданную пользователем, после этого блокирует хост посредством ipchains. Опция используется при работе в
       режиме Classic и Enhanced Stealth Scan Detection Mode. Желательно всегда оставлять порт 1 открытым, т.к. большинство сканировщиков портов начинают
       проверять с 1 и далее. Это способствует более быстрому обнаружению сканирования. TCP-порты, открытые другими программами (25 при загруженном
       sendmail, 80 при загруженном httpd и т.д.) в этот список включатся не должны.

       TCP_PORTS="1,11,15,79,111,119,143,540,635"

UDP_PORTS
       То же что и TCP_PORTS, но для UDP-портов.

       UDP_PORTS="1,7,9,69,161,162,513,635,640,641"

ADVANCED_PORTS_TCP
       Значение этой опции определяет верхнюю границу множества TCP-портов, которые проверяются Portsentry при работе в режиме Advanced Stealth Scan
       Detection Mode. Нижней границей является 1, т.е. при значении ADVANCED_PORTS_TCP равное 1024 проверяется подключение к любому порту в
       промежутке от 1 до 1024.

       ADVANCED_PORTS_TCP="1023"

ADVANCED_PORTS_UDP
       То же, что и ADVANCED_PORTS_TCP, но для UDP-портов.

       ADVANCED_PORTS_UDP="1023"

ADVANCED_EXCLUDE_TCP
       TCP-порты, которые исключаются из промежутка 1..ADVANCED_PORTS_TCP, т.е. из списка портов, предназначенных для проверки. Здесь обязательно нужно
       перечислить TCP-порты, открытые работающими программами.

       ADVANCED_EXCLUDE_TCP="23,25,80,110,113,139"

ADVANCED_EXCLUDE_UDP
       То же, что и ADVANCED_EXCLUDE_TCP, но для UDP-портов.

       ADVANCED_EXCLUDE_UDP="520,138,137,67"

IGNORE_FILE
       Имя и путь к файлу с IP-адресами хостов, которые не блокируются при подключении к порту, проверяемому Portsentry.

       IGNORE_FILE="/usr/local/psionic/portsentry/portsentry.ignore"

HISTORY_FILE
       Имя и путь к файлу с историей работы Portsentry. В файл записывается время блокирования, имя и IP хоста, атакованный порт, протокол (TCP или
       UDP). Файл не создается заново при каждом запуске.

       HISTORY_FILE="/usr/local/psionic/portsentry/portsentry.history"

BLOCKED_FILE
       Строка, из которой формируется имя и путь к файлам, куда записывается информация о блокированных хостах. Имя файла формируется так
       BLOCKED_FILE.РЕЖИМ_РАБОТЫ, где режим работы может быть tcp, udp, stcp, sudp, atcp, audp, т.е. если BLOCKED_FILE равен
       /usr/local/psionic/portsentry/portsentry.blocked, а режим работы audp, то имя файла будет
       /usr/local/psionic/portsentry/portsentry.blocked.audp.

       BLOCKED_FILE="/usr/local/psionic/portsentry/portsentry.blocked"

BLOCK_TCP
       Эта опция в зависимости от значения, задает ответную реакцию Portsentry на сканирование портов: 0 - не блокировать хост, не запускать заданную
       пользователем команду, 1 - блокировать хост и запустить команду, 2 - только запустить заданную команду. Команда задается при помощи опции
       KILL_RUN_CMD.

       BLOCK_TCP="1"

BLOCK_UDP
       То же, что и BLOCK_TCP, но для UDP.

       BLOCK_UDP="1"

KILL_ROUTE
       Эта опция задает команду, которую надо выполнить для блокирования атакующего хоста, установив на него firewall или удалив его сетку из таблицы
       роутинга. Для указания IP-адреса используется переменная $TARGET$. Переменная $PORT$ используется для указания порта, к которому было подключение.

       KILL_ROUTE="/sbin/ipchains -I input -s $TARGET$ -j DENY -l"

KILL_HOSTS_DENY
       Эта опция задает строку, которая вписывается в /etc/hosts.deny, для блокирования доступа к сервисам, запускаемым через inetd.

       KILL_HOSTS_DENY="ALL: $TARGET$"

KILL_RUN_CMD
       С помощью этой опции можно определить команду, запускаемую до блокирования хоста. Можно поставить туда отправку e-mail'а администратору или запуск
       нюка в сторону сканировщика.:)

       KILL_RUN_CMD="teardrop 192.168.0.1 $TARGET$ -s $PORT$ -t 139 -n 5000"

SCAN_TRIGGER
       Данная опция задает количество разрешенных подключений к проверяемым Portsentry портам одного и того же хоста, прежде, чем Portsentry
       начнет действовать. 0 определяет немедленную реакцию.

       SCAN_TRIGGER="0"

PORT_BANNER
       Задает сообщение, которое будет выводится при подключении к проверяемому Portsentry порту. Автор Portsentry Craig H. Rowland в инструкции
       по установке пишет, что не рекомендует вставлять туда какое либо сообщение, т.к. это может разозлить или раззадорить сканировщика и подтолкнуть его
       к дальнейшим действиям. Решать тебе...:)

       PORT_BANNER="** UNAUTHORIZED ACCESS PROHIBITED *** YOUR CONNECTION ATTEMPT HAS BEEN LOGGED. GO AWAY."
 

Пример portsentry.conf:
 

TCP_PORTS="1,11,15,79,111,119,143,540,635,1080,1524,2000,5742,6667,12345,12346"
UDP_PORTS="1,7,9,69,161,162,513,635,640,641,700,32770,32771,32772,32773,32774"
ADVANCED_PORTS_TCP="1023"
ADVANCED_PORTS_UDP="1023"
ADVANCED_EXCLUDE_TCP="23,25,80,110,113,139"
ADVANCED_EXCLUDE_UDP="520,138,137,67"
IGNORE_FILE="/usr/local/psionic/portsentry/portsentry.ignore"
HISTORY_FILE="/usr/local/psionic/portsentry/portsentry.history"
BLOCKED_FILE="/usr/local/psionic/portsentry/portsentry.blocked"
BLOCK_UDP="1"
BLOCK_TCP="1"
KILL_ROUTE="/sbin/ipchains -I input -s $TARGET$ -j DENY -l"
KILL_HOSTS_DENY="ALL: $TARGET$"
KILL_RUN_CMD="echo Ports Scaning from $TARGET$ on $PORT$ | mail root"
SCAN_TRIGGER="0"
 

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

Начало


Запуск

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

Classic
       При работе в этом режиме Portsentry открывает порты, указанные в TCP_PORTS или UDP_PORTS и ждет соединениния. При попытке подключится
       к такому порту происходит блокировка удаленного хоста. В данном режиме работы Portsentry не реагирует на Stealth-сканирование. Данный режим
       работы задается опциями командной строки: -tcp - для TCP-портов и -udp - для UDP-портов.
Enhanced Stealth Scan Detection
       Этот режим используется для проверки перечисленных в TCP_PORTS или UDP_PORTS портов на предмет подключения или сканирования. Удобен тем,
       что выявляет практически все виды Stealth-сканирования, а не только сканирование подключением. Порты, в отличие от режима Classic не держит
       открытыми, поэтому сканировщик получает достоверную информацию об открытых портах. Задается опциями командной строки: -stcp - для TCP-портов и
       -sudp - для UDP-портов.
Advanced Stealth Scan Detection
       Этот режим используется для проверки всех портов в промежутке от 1 до ADVANCED_PORT_TCP (для TCP) или ADVANCED_PORT_UDP (для UDP).
       Порты, открытые другими программами и перечисленные в ADVANCED_EXLUDE_TCP(для TCP) или ADVANCED_EXCLUDE_UDP(для UDP) исключаются
       из проверки. Любой хост, попытавшийся подключится к порту в этом промежутке, тут же блокируется. Самый удобный для использования метод, т.к.
       реакция на сканирование или подключение у этого метода самая быстрая, а также Portsentry в этом режиме использует меньше процессорного
       времени, чем в других. Задается опциями командной строки: -atcp - для TCP-портов и -audp - для 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-портов

Ты можешь добавить вызов Portsentry в /etc/rc.d/rc.local или создать для него отдельный скрипт запуска в /etc/rc.d/init.d/. Можно
запускать его только при подключении к Internet, добавив вызов в /etc/ppp/ip-up, а при отключении - выгружать, добавив что-нибудь типа killall
-9 portsentry в /etc/ppp/ip-down.

Начало


Заключение

Установка и настройка, как и использование Portsentry очень просты. Но расположение файлов не совсем удачное, на мой взгляд. Я немного изменил
исходники, изменил Makefile, создал SysV Init - скрипт для запуска. Теперь файлы portsentry.conf и portsentry.ignore копируются в /etc, сама
программа в /usr/sbin, а файлы portsentry.history и portsentry.blocked.* создаются в /var/log/portsentry. В /etc/rc.d/init.d
создается скрипт запуска portsentry. Этот вариант Portsentry можно скачать здесь. Там также есть RPM и SRPM.
 
 

(c)Ерижоков А.А., 2000.
Использование данного документа разрешено только с согласия автора и с указанием первоисточника: DH's Linux Site