Назад Оглавление Вперед

Глава 10 Программы обеспечения безопасности (Утилиты контроля) - PortSentry

В этой главе
Linux sXid
Конфигурация
Административные средства sXid
Linux Logcheck
Конфигурация
Linux PortSentry
Конфигурация
Запуск PortSentry

Linux PortSentry

Краткий обзор.

Брандмауэры помогают нам защитить сеть от вторжений. С их помощью мы выбираем какие порты открыть, а какие нет. Никто снаружи нашей сети не владеет информацией об этом, но может попытаться организовать атаку при помощи программ сканирования портов. Они покажут какие порты у нас открыты.

Как сказано во введение к PortSentry:

Сканирование портов это симптом больших проблем, которые вас ждут. Это часто является предвестником атак. PortSentry - это программа созданная для определения и ответа на сканирование портов в реальном времени. Когда сканирование обнаружено могут последовать следующие ответы:

Цель этой программы - дать администратору информацию о том, что их сервер исследуется.

Эти инструкции предполагают.
Unix-совместимые команды.
Путь к исходным кодам "/var/tmp" (возможны другие варианты).
Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.
Все шаги инсталляции осуществляются суперпользователем "root".
PortSentry версии 1.0

Пакеты.
Домашняя страница Logcheck: http://www.psionic.com/abacus/portsentry/
Вы должны скачать: portsentry-1.0.tar.gz

Тарбол.

Хорошей идеей будет создать список файлов установленных в вашей системе до инсталляции PortSentry и после, в результате, с помощью утилиты diff вы сможете узнать какие файлы были установлены. Например,

До инсталляции:
find /* > Portsentry1

После инсталляции:
find /* > Portsentry2

Для получения списка установленных файлов:
diff Portsentry1 Portsentry2 > Portsentry-Installed

Раскрываем тарбол (tar.gz).

[root@deep /]# cp portsentry-version.tar.gz /var/tmp/
[root@deep /]# cd /var/tmp
[root@deep tmp]# tar xzpf portsentry-version.tar.gz

Компиляция и оптимизация.

Вы должны редактировать файл "Makefile" PortSentry, чтобы определить инсталляционные пути, флаги компиляции и оптимизации для вашей системы. Место, куда будет установлен PortSentry должно соответствовать структуре расположения системных файлов Red Hat.

Шаг 1.

Переместитесь в новый каталог PortSentry и выполните следующие команды:

Редактируйте файл Makefile (vi Makefile) и измените следующие строки:

CC = cc
Должна читаться:
CC = egcs

CFLAGS = -O
Должна читаться:
CFLAGS = -O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions -Wall

INSTALLDIR = /usr/local/psionic
Должна читаться:
INSTALLDIR = /usr/ psionic

Вышеприведенные изменения настраивают на использование компилятора egcc, включают оптимизационные флаги подходящие для вашей системы и определяют месторасположение файлов PortSentry, которое вы выберите.

Шаг 2.

Так как мы использовали альтернативное месторасположение файлов (не /usr/local/psionic), нужно изменить путь к конфигурационному файлу PortSentry в основном заголовочном файле "portsentry_config.h".

Перемещаемся в новый каталог PortSentry и редактируем файл portsentry_config.h (vi portsentry_config.h), изменяя следующие строки:

#define CONFIG_FILE "/usr/local/psionic/portsentry/portsentry.conf"
Должен читаться:
#define CONFIG_FILE "/usr/psionic/portsentry/portsentry.conf"

Шаг 3

Инсталируем Portsentry на вашей системе.

[root@deep portsentry-1.0]# make linux
[root@deep portsentry-1.0]# make install

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

Очистка после работы

[root@deep /]# cd /var/tmp
[root@deep tmp]# rm -rf portsentry-version/ portsentry-version_tar.gz

Команда "rm", использованная выше, будет удалять все исходные коды, которые мы использовали при компиляции и инсталляции PortSentry. Она также удалит .tar.gz архив из каталога /var/tmp.

Конфигурации.

"/usr/psionic/portsentry/portsentry.conf" - это основной конфигурационный файл для PortSentry; вы можете определить какие порты нужно слушать, какие IP адреса отклонены, контролируются, игнорируются, для каких отключается автоматический ответ и т.д. Для большей информации читайте файл "README.install" в каталоге с исходными кодами PortSentry.

Редактируйте файл portsentry.conf (vi /usr/psionic/portsentry.conf) и проверьте/измените опции, которые вам нужны:

# Конфигурация PortSentry # # $Id: portsentry.conf,v 1.13 1999/11/09 02:45:42 crowland Exp crowland $ # # ВАЖНОЕ ЗАМЕЧАНИЕ: Вы не можете добавить пробелы между номерами # портов. # # По умолчанию настройки портов позволяют захватывать большое количество # основных проверок # # Все элементы должны быть в кавычках. ####################### # Конфигурации портов # ####################### # # # Несколько примеров настроены для классического и основного Stealth # режимов # # Я люблю всегда сохранить некоторые порты в нижнем конце диапазона. # Это позволит быстро обнаружить последовательное сканирование портов # и обычно эти порты не используются (например, tcpmux порт 1) # # ** Пользователи X-Windows **: Если вы запускаете X на вашем сервере, вам # нужно быть уверенным, что PortSentry не привязан к порту 6000 (или порту # 2000 для пользователей OpenWindows). # Сделав это вы обеспечите правильный старт X-клиента. # # Эти привязанные порты игнорируются для режима Advanced Stealth Scan # Detection Mode. # # Раскомментируйте это для чрезвычайного анализа: #TCP_PORTS="1,7,9,11,15,70,79,80,109,110,111,119,138,139,143,512,513,514,515 ,540,635,1080,1524,2000,2001,4000,4001,5742,6000,6001,6667,12345,12346,20034, 30303,32771,32772,32773,32774,31337,40421,40425,49724,54320" #UDP_PORTS="1,7,9,66,67,68,69,111,137,138,161,162,474,513,517,518,635,640,64 1,666,700,2049,32770,32771,32772,32773,32774,31337,54321" # # Используйте их, если вы только хотите знать: TCP_PORTS="1,11,15,79,111,119,143,540,635,1080,1524,2000,5742,6667,12345, 12346,20034,31337,32771,32772,32773,32774,40421,49724,54320" UDP_PORTS="1,7,9,69,161,162,513,635,640,641,700,32770,32771,32772,32773,3 2774,31337,54321" # # Используйте это только для bare-bones #TCP_PORTS="1,11,15,110,111,143,540,635,1080,524,2000,12345,12346,20034,32 771,32772,32773,32774,49724,54320" #UDP_PORTS="1,7,9,69,161,162,513,640,700,32770,32771,32772,32773,32774,313 37,54321" ########################################### # Опции Advanced Stealth Scan Detection # ########################################### # # Это номера портов, которые PortSentry должен контролировать в # Advanced mode. # Любые порты "ниже" этого числа будут контролироваться. Оставьте это # для контроля всего ниже 1023. # # На многих Linux системах нельзя привязать порты выше 61000. Это # потому, что эти порты используются как часть IP маскарадинга. Я не # рекомендую вам привязываться к этим номерам портов. Реальность: Я не # рекомендую использовать порты за 1023, так как это будет приводить к # ошибочным предупреждениям. Вы были предупреждены! # Не пишите мне если у вас возникли проблемы, потому что я просто # высказываю вам свое мнение. Не используйте выше 1023 порта. # # ADVANCED_PORTS_TCP="1023" ADVANCED_PORTS_UDP="1023" # # Это поле говорит PortSentry, что порты (за исключением прослушиваемых # демонами) игнорируются. Это полезно для услуг, вызываемых ident, # например FTP, SMTP и wrappers, которые могут остаться не # запущенными. # # По установленным здесь портам PortSentry будет просто не отвечать # на входящие запросы. Фактически, PortSentry будет их обрабатывать как # будто они привязаны к демонам. Заданные по умолчанию порты могут # выступать в отчетах, как возможно ложные сигналы тревоги и # вероятно должны быть оставлены для всез кроме особо изолированных систем # # TCP ident и NetBIOS сервисы ADVANCED_EXCLUDE_TCP="113,139" # UDP route (RIP), NetBIOS, bootp broadcasts. ADVANCED_EXCLUDE_UDP="520,138,137,67" ###################### # Конфигурационные файлы # ###################### # # Игнорируемые компьютеры IGNORE_FILE="/usr/psionic/portsentry/portsentry.ignore" # Компьютеры, которым было отказано в доступе (из истории работы) HISTORY_FILE="/usr/psionic/portsentry/portsentry.history" # Компьютеры доступ которым заблокирован только в этой сессии # (времмено до следующей перезагрузки) BLOCKED_FILE="/usr/psionic/portsentry/portsentry.blocked" ################### # Опции ответов # ################### # Опции ликвидации атакующего. Каждое из этих действий будет # выполняться если будет обнаружена атака. Если вы не хотите отдельную # опцию, то комментируйте ее и она будет пропущена. # # Переменная $TARGET$ будет замещена целью атаки, когда атака обнаружена. # Переменная $PORT$ будет заменятьс портом, который был сканирован. # ################## # Опции игнорирования # ################## # Эти опции позволяют вам допустить автоматический параметры ответа для # UDP/TCP. Это бывает полезно, если вы хотите получить предупреждение о # соединениях, но не хоти реагировать на определенный протокол. # Для предотвращения возможных Denial of service атак через UDP и # определение stealth сканирования для TCP, вы можете пожелать отключить # блокирование, но оставить предупреждение. # Лично я предпочитаю ждать начала возникновения проблем до того как # что-нибудь предпринять, так как большинство атакующих ничего не делают. # Третья опция позволяет вам запускать внешнюю команду в случае # сканирования. Это может быть полезно, например, для администраторов, # которые хотят блокировать TCP, но для UDP будет высылаться # предупреждения и т.д. # # # 0 = Не блокировать UDP/TCP сканирование. # 1 = Блокировать UDP/TCP сканирование. # 2 = Запуск внешней команды (KILL_RUN_CMD) BLOCK_UDP="1" BLOCK_TCP="1" ################### # Сброс маршрутов # ################### # Эти команды используются для удаления маршрута или # хоста в локальную таблицу фильтрации. # # Шлюз (333.444.555.666) идеально должен быть неработающий хост # в локальной подсети. На некоторых хостах вместо него используется # localhost (127.0.0.1), что дает тот же эффект. ЗАМЕТИМ ЧТО # 333.444.555.66 НЕ БУДЕТ РАБОТАТЬ, ИЗМЕНИТЕ ЭТО!! # # ВСЕ ОПЦИИ ОТКЛЮЧЕНИЯ МАРШРУТОВ ИЗНАЧАЛЬНО # ЗАКОММЕНТИРОВАНЫ. Убедитесь, что вы раскомменировали # правильные строки для вашей ОС. Если вашей ОС нет в списке # и вы точно знаете команды сбрасывающие маршруты, то, # пожалуйста, пришлите их мне. ТОЛЬКО ОДНА KILL_ROUTE ОПЦИЯ # МОЖЕТ БЫТЬ ИСПОЛЬЗОАНА ОДНОВРЕМЕННО, ТАК ЧТО # НЕ РАСКОММЕНТИРУЙТЕ БОЛЬШЕ ОДНОЙ СТРОКИ. # # ЗАМЕЧАНИЕ: route команды это наименее оптимальная дорога блокирования # и она не предоставляет полной защиты от UDP атак и # будет спокойно создавать предупреждения для UDP и stealth сканирований. # Я всегда рекомендую вам использовать пакетный фильтр, потому что это # соответствует замыслу. # # Общий #KILL_ROUTE="/sbin/route add $TARGET$ 333.444.555.666" # Общий для Linux #KILL_ROUTE="/sbin/route add -host $TARGET$ gw 333.444.555.666" # Новые версии Linux поддерживают сейчас флаг reject. Это лучше, чем # вышестоящая опция KILL_ROUTE="/sbin/route add -host $TARGET$ reject" # Общие для BSD (BSDI, OpenBSD, NetBSD, FreeBSD) #KILL_ROUTE="/sbin/route add $TARGET$ 333.444.555.666" # Общий для Sun #KILL_ROUTE="/usr/sbin/route add $TARGET$ 333.444.555.666 1" # NEXTSTEP #KILL_ROUTE="/usr/etc/route add $TARGET$ 127.0.0.1 1" # FreeBSD (Оттестировано не достаточно хорошо) #KILL_ROUTE="route add -net $TARGET$ -netmask 255.255.255.255 127.0.0.1 -blackhole" # Digital UNIX 4.0D (OSF/1 / Compaq Tru64 UNIX) #KILL_ROUTE="/sbin/route add -host -blackhole $TARGET$ 127.0.0.1" # Общие HP-UX #KILL_ROUTE="/usr/sbin/route add net $TARGET$ netmask 255.255.255.0 127.0.0.1" ## # Использование пакетного фильтра более предпочтительный метод. Ниже # перечисленные строки подходят для многих ОС. Помните, вы можете # раскомментировать только одну строку. # Опции KILL_ROUTE. ## ############### # TCP Wrappers# ############### # Этот текст описывает внесение в файл hosts.deny для использования wrappers. # Зжесь приводятся два формата TCP wrappers: # # Формат 1: Старый стиль - по умолчанию, когда хост не допускает обработки # параметров. # KILL_HOSTS_DENY="ALL: $TARGET$" # # Формат 2: Новый стиль - включены расширенной обработки. # Вы можете просмотреть опции расширенной обработки, чтобы # быть уверенными, что все перед символами "%" стоит символ "\" # (например, \%c \%h ) # #KILL_HOSTS_DENY="ALL: $TARGET$ : DENY" ################### # Внешние команды # ################### # Эта команда выполняется когда хост подключен, это может быть то, что вам # нужно (пэйджер и т.д.). Эта команда выполняется перед очисткой маршрута. # Я НЕ РЕКОМЕНДУЮ ПОМЕЩАТЬ КАКИЕ-ЛИБО КАРАТЕЛЬНЫЕ # ДЕЙСТВИЯ ПРОТИВ ХОСТА СКАНИРУЮЩЕГО ВАС. TCP/IP это # протокол без подтверждения подлинности и люди могут организовать # сканирование из ниоткуда. Единственное, что можно безопасно запустить # это скрипт обратной проверки, который использует классический -tcp режим. This # Этот режим требует полного соединения и очень труден для обмана (spoof). # #KILL_RUN_CMD="/some/path/here/script $TARGET$ $PORT$" ##################### # Значение триггеров сканирования # ##################### # Введите число соединений к портам, когда вам будет дано предупреждение. # По умолчанию значение равно 0 - незамедлительная реакция. # Значения 1 или 2 будут уменьшать количество ложных срабатываний. В более # высоком значение нет необходимости. Это значение должно быть определено, # но как правило можно оставить 0. # # ЗАМЕЧАНИЕ: Если вы используете продвинутые опции определения, вам # нужно быть внимательным, чтобы не создать ситуацию "спускового крючка, # требующего легкого нажатия". Поскольку расширенный режим будет # реагировать на любой удаленный компьютер соединяющийся с интервалом # ниже определенного здесь, вы при определенных обстоятельствах # действительно разорвете что-нибудь. (например, кто-то невинно пытается # соединиться с вами через SSL [TCP порт 443] и вы сразу блокируете его). # Так что будьте внимательны. # SCAN_TRIGGER="0" ###################### # Секция заголовка (banner) порта # ###################### # # Введите здесь текст, который вы хотите показать человеку отключаемого # PortSentry. Я не рекомендую насмехаться над человек, так как это может его # разозлить. Оставьте эти строки закомментироваными, чтобы отключить эту # возможность. # # Режим определения Stealth сканирования не использует эту возможность. # PORT_BANNER="** UNAUTHORIZED ACCESS PROHIBITED *** YOUR CONNECTION ATTEMPT HAS BEEN LOGGED. GO AWAY." # EOF

Сейчас, вы должны проверить/изменить права установленные по умолчанию из соображения безопасности:

[root@deep /]# chmod 600 /usr/psionic/portsentry/portsentry.conf Конфигурирование файла "/usr/psionic/portsentry/portsentry.ignore".

В файл "/usr/psionic/portsentry/portsentry.ignore" вы добавляете компьютеры, которые должны быть проигнорированы если они соединяются к порту. Он всегда должен содержать localhost адрес (127.0.0.1) и адреса локальных машин. Не рекомендуется помещать в него все компьютеры из вашей локальной сети. Редактируйте фай portsentry.ignore file (vi /usr/psionic/portsentry.ignore) и добваьте в него все хосты, которые будут пропущены:

# Положите сюда адреса хостов, которые мы никогда не будем блокировать.
# Здесь должны находится адреса всех локальных интерфейсов на
# защищаемом сервере (например, virtual host, mult-home)
# Сохраните здесь 127.0.0.1 и 0.0.0.0.
127.0.0.1
0.0.0.0

Сейчас, мы должны проверить/изменить права доступа из соображений безопасности: [root@deep /]# chmod 600 /usr/psionic/portsentry/portsentry.ignore

Запуск PortSentry.

Программа PortSentry может быть сконфигурирована для работы в шести различных режимах, но запущена только для проверки одного протокольного режима за раз. Чтобы было более правильно, вы можете запустить одни TCP режим и один UDP режим, так как два TCP и один UDP, для примера, не работает. Доступные режимы:

?portsentry -tcp (основной port-bound TCP режим)
?portsentry -udp (основной port-bound UDP режим)
?portsentry -stcp (определение Stealth TCP сканирования)
?portsentry -atcp (продвинутое определение TCP stealth сканирования)
?portsentry -sudp (определение "Stealth" UDP сканирования)
?portsentry -audp (продвинутое определение UDP сканирования)

В моем случае я предпочитаю запускать TCP в протокольном режиме "продвинутое определение TCP stealth сканирования " и UDP в протокольном режиме "определение Stealth UDP сканирования ". Для получения большей информации о других протокольных режимах пожалуйста читайте "README.install" и "README.stealth" файлы в каталоге с исходными кодами PortSentry. Для TCP режима я выбираю:

- atcp - продвинутое определение TCP stealth сканирования
В режиме продвинутого определения TCP stealth сканирования, PortSentry будет вначале смотреть какие порты вы запустили на сервере, а затем выведет их из под наблюдения и начнет следить за остальными портами. Это очень полезно и очень быстро реагирует на сканирование портов. Этот режим, также, потребляет мало времени CPU.

Для UDP режима я выбрал:

-sudp - режим определения "Stealth" UDP сканирования
В режиме определения "Stealth" UDP сканирования UDP порты сперва будут формироваться в список, а затем контролироваться.

Для запуска PortSentry в двух вышеприведенных режимах используйте команды:

[root@deep /]# /usr/psionic/portsentry/portsentry -atcp
[root@deep /]# /usr/psionic/portsentry/portsentry -sudp

ЗАМЕЧАНИЕ: Вы можете добавить вышеприведенные строки в файл "/etc/rc.d/rc.local", чтобы они автоматически запускались при каждой перезагрузке системы.

Инсталлированные файлы. > /usr/psionic > /usr/psionic/portsentry > /usr/psionic/portsentry/portsentry.conf > /usr/psionic/portsentry/portsentry.ignore > /usr/psionic/portsentry/portsentry
Назад Оглавление Вперед