Настройка системы обнаружения и блокирования попыток сканирования портов psad
Введение
Анализируя файлы событий системы любому системному администратору не раз приходилось сталкивается с фактами сканирования портов его системы.
В данной статье рассказывается о том, как с помощью psad (Port Scan Attack Detector) автоматически регистрировать и блокировать попытки сканирования портов вашего компьютера.
Сайт проекта psad находится по адресу http://www.cipherdyne.org/
Установка
На момент написания статьи последняя версия psad была 1.4.8.
Скачаем последнюю версию с сайта http://www.cipherdyne.org/psad/download/
wget http://www.cipherdyne.org/psad/download/psad-1.4.8-1.src.rpm
соберем RPM пакет под ваш дистрибутив
rpmbuild –rebuild psad-1.4.8-1.src.rpm
Установим psad
rpm -ihv /usr/src/redhat/RPMS/i386/psad-1.4.8-1.i386.rpm
Настройка
Перейдите в каталог /etc/sysconfig отредактируйте файл iptables вставив первой строкой правил:
-A INPUT -i eth0 -j LOG --log-level info –log-prefix "Inbound:"
Перезапустите iptables
service iptables restart
Отредактируйте файл /etc/syslog.conf добавив строку:
kern.info /var/lib/psad/psadfifo
Перезапустите демон syslog:
service syslog restart
Перейдите в каталог /etc/psad.
На данный момент нас интересуют опции в файле psad.conf
Я постараюсь кратко описать их назначение.
# Данная директива описывает получателей уведомлений о событиях psad. # Поддерживается указание нескольких email адресов отделенных друг от друга запятой. EMAIL_ADDRESSES root@localhost; #Опция определяет доменное имя компьютера HOSTNAME _CHANGEME_; # Директива HOME_NET определяет локальную сеть. # В данной директиве вы должны указать сети которые проходят через цепочку FORWARD iptables. # Если защищаемый компьютер имеет только один сетевой интерфейс установите данный параметр # равным NOT_USED HOME_NET _CHANGEME_; # Данный параметр указывает какой syslog демон используется в системе. # Возможные значения параметра syslogd,syslog-ng,ulogd,metalog. SYSLOG_DAEMON syslogd; # Директивы описанные ниже определяют уровни по которым будет происходить классификация событий. # Значения после параметра определяют количество пакетов которые должны прийти с атакующего узла # прежде чем psad установит тот, или иной уровень важности собития. DANGER_LEVEL1 5; DANGER_LEVEL2 15; DANGER_LEVEL3 150; DANGER_LEVEL4 1500; DANGER_LEVEL5 10000; # Параметр определяет промежуток времени в секундах, # через который psad будет просматривать новые сообщения от iptables. CHECK_INTERVAL 5; # Определяет количество сетевых портов защищаемого компьютера которые должны быть сканированы # прежде чем psad пошлет уведомление тревоги. По умолчанию значение 1 означает, что должно быть # сканировано более 1 порта (т.е. 2 и более) прежде чем сработает тревога. Можно установить # значение в 0 , но тогда любой пакет пришедший на порт будет генерировать сигнал тревоги. PORT_RANGE_SCAN_THRESHOLD 1; # Если данный параметр установлен в Y тогда информация о сканировании вашего компьютера # никогда не устаревает. Данная опция полезна в случае когда атакующий пытается сканировать каждый # из портов через достаточно длительный промежуток времени. # Стоит учесть, что при установке данного параметра в Y вы заносите атакующего в «черный» список # до перезагрузки psad. ENABLE_PERSISTENCE Y; # Данная опция имеет смысл только при параметре ENABLE_PERSISTENCE равным N; # С помощью данной опции задается интервал в секундах через который информация о сканировании # обнуляется. По умолчанию данный параметр установлен в значение 3600 секунд, # что означает «Если с момента последнего события о сканировании порта атакующим прошло более 1 часа # и более событий сканирования не было, тогда сбросить результаты сканирования» SCAN_TIMEOUT 3600; # Если данный параметр установлен в Y тогда показывать все сигнатуры с момента начала сканирования, # а не только последнюю сигнатуру. SHOW_ALL_SIGNATURES N; # Будут учитываться только те пакеты число хопов при прохождении через сеть у которых # не превышает значения в 20. MAX_HOPS 20; # Данный параметр пытается уменьшить вероятность ошибки в установленных соединениях путем # игнорирования tcp пакетов с установленным битом ack. # Подробнее можно почитать http://www.cipherdyne.org/fwsnort/. IGNORE_CONNTRACK_BUG_PKTS Y; # Данный параметр задает порты сканирование которых не будет учитываться. # Формат параметра таков «протокол/порт,[протокол/порт]». # Например tcp/25, udp/53. IGNORE_PORTS NONE; # Данный параметр задает протоколы которые будут игнорироваться psad при попытках сканирования. IGNORE_PROTOCOLS NONE; # В данном параметре можно указать интерфейсы которые не будут учитываться psad # при попытке сканирования портов на этих интерфейсах. IGNORE_INTERFACES NONE; # Указывает psad игнорировать параметр --log-prefix IGNORE_LOG_PREFIXES NONE; # Задает значение при достижении которого администратору будет послано уведомление, # о сканировании портов на его машине. EMAIL_ALERT_DANGER_LEVEL 1; # Включать в отчет информацию о MAC адресе сканирующего хоcта. ENABLE_MAC_ADDR_REPORTING N; # Включить ограничение на количество уведомлений для каждого сканирующего хоста. # Внимание если вы все таки решите выставить ограничение вполне возможна ситуация при которой # вы не получите уведомление о важном событии т.к. уже будет исчерпано количество попыток. # По умолчанию значение 0 задает отсутствие ограничений на количество сообщений. EMAIL_LIMIT 0; # Посылать администратору уведомление когда будет достигнуто значение EMAIL_LIMIT EMAIL_LIMIT_STATUS_MSG Y; # Посылать уведомление системному администратору при изменении уровня важности событий от # атакующего ваш компьютер хоста. ALERT_ALL Y; # Указывает посылать уведомление о сканировании вашего компьютера на dshield.org. # Там хранится база «черного» списка сканирующих хостов. # Лично мне кажется, что ведение такой базы данных не имеет большого смысла и я рекомендую не # устанавливать данную опцию в Y. # Описание дальнейших опций связанных с dshield.org не считаю нужным приводить здесь. ENABLE_DSHIELD_ALERTS N; # Пожалуй самая полезная опция во всем конфигурационном файле. # При установке данного параметра в Y psad автоматически будет блокировать сканирующий хост. ENABLE_AUTO_IDS N; # Задает значение уровня/ важности при наступлении которого psad будет блокировать атакующего. AUTO_IDS_DANGER_LEVEL 5; # Задает значение времени в секундах на которое будет заблокированн сканирующий хост. AUTO_BLOCK_TIMEOUT 3600; # Включить проверку на совпадение с регулярным выражением в log prefixes для активного ответа. ENABLE_AUTO_IDS_REGEX N; # Блокировать атакующего только в случае если состояние пакетов от атакующего хоста совпадают # с регулярным выражением заданным в данном параметре. Если параметр ENABLE_AUTO_IDS_REGEX # равен N; то данная опция не имеет смысла. AUTO_BLOCK_REGEX ESTABLISHED; # Параметр задает метод которым будет заблокирован трафик от атакующего в случае # параметра ENABLE_AUTO_IDS равного Y. В данном случае трафик от атакующего будет заблокирован # средствами iptables, что по моему мнению кажется наиболее оптимальным способом. IPTABLES_BLOCK_METHOD Y; # Следующие директивы имеют смысл только при установленном параметре IPTABLES_BLOCK_METHOD Y; # Они задают правила которые будут выполняться при осуществлении автоматического блокирования # средствами iptables. # Формат правил такой: # Target,Direction,Table,From_chain,Jump_rule_position,To_chain,Rule_position # Для осмысленного понимания этих на первый взгляд непонятных правил советую порочитать # iptables tutorial http://gazette.linux.ru.net/rus/articles/iptables-tutorial.html. IPT_AUTO_CHAIN1 DROP, src, filter, INPUT, 1, PSAD_BLOCK_INPUT, 1; IPT_AUTO_CHAIN2 DROP, dst, filter, OUTPUT, 1, PSAD_BLOCK_OUTPUT, 1; IPT_AUTO_CHAIN3 DROP, both, filter, FORWARD, 1, PSAD_BLOCK_FORWARD,1; # Данная опция задает поведение psad при запуске, указывая нужно ли обновлять правила для iptables FLUSH_IPT_AT_INIT Y; # При включении данная опция задает альтернативный метод блокировки сканирующего хоста # на основе tcpwrappers. TCPWRAPPERS_BLOCK_METHOD N; # Параметр задает максимальное время на получение ответа от сервиса whois. # Дело в том, что при обнаружении попыток сканирования портов psad определяет к чьей сети # принадлежит ip адрес атакующего хоста и данную информацию включает в email отчет. WHOIS_TIMEOUT 60; # Задает количество определяющее сколько раз psad возьмет данные о whois сервисе из буфера # прежде чем сделает повторный whois запрос. Данный параметр позволяет экономить время и трафик при # определении информации о сети к которой принадлежит атакующий. WHOIS_LOOKUP_THRESHOLD 20; # Задает количество определяющее сколько раз psad возьмет данные о DNS имени атакующего из буфера # прежде чем сделает повторный запрос в DNS серверу . Также как и параметр WHOIS_LOOKUP_THRESHOLD #данный параметр позволяет экономить время и трафик при определении информации о хосте атакующего. DNS_LOOKUP_THRESHOLD 20; # Если установить данный параметр в Y тогда psad при обнаружении попытки сканирования вашего сервера # будет выполнять скрипт, либо внешнюю команду. ENABLE_EXT_SCRIPT_EXEC N; # Данный параметр имеет смысл только при ENABLE_EXT_SCRIPT_EXEC Y; # Данный параметр задает скрипт который будет выполняться при обнаружении попытки сканирования. EXTERNAL_SCRIPT /bin/true; # Данный параметр также имеет смысл только при опции ENABLE_EXT_SCRIPT_EXEC установленной Y; # Параметр задает будет ли внешний скрипт выполняться единожды при обнаружении какого либо # события для хоста или каждый раз. EXEC_EXT_SCRIPT_PER_ALERT N;
Остальные параметры файла psad.conf существенным образом не влияют на поведение psad а задают стандартные пути файлов конфигурации. Я рекомендую оставить их без изменений.
В приведенном ниже примере файла psad.conf предполагается, что защищаемый компьютер:
- имеет один сетевой интерфейс,
- доменное имя example.ru,
- должен автоматически блокировать сканирующий хост средствами iptables на 1 час при достижении атакующим 3 уровня опасности(Danger level),
посылать администратору на email admin@example.ru административные сообщения в случае блокирования атакующего хоста.
EMAIL_ADDRESSES admin@example.ru; HOSTNAME example.ru; HOME_NET NOT_USED; SYSLOG_DAEMON syslogd; DANGER_LEVEL1 5; ### Number of packets. DANGER_LEVEL2 15; DANGER_LEVEL3 150; DANGER_LEVEL4 1500; DANGER_LEVEL5 10000; CHECK_INTERVAL 5; SNORT_SID_STR SID; PORT_RANGE_SCAN_THRESHOLD 20; ENABLE_PERSISTENCE Y; SCAN_TIMEOUT 3600; SHOW_ALL_SIGNATURES Y; MAX_HOPS 20; IGNORE_CONNTRACK_BUG_PKTS Y; IGNORE_PORTS NONE; IGNORE_PROTOCOLS NONE; IGNORE_INTERFACES NONE; IGNORE_LOG_PREFIXES NONE; EMAIL_ALERT_DANGER_LEVEL 3; ENABLE_MAC_ADDR_REPORTING Y; ENABLE_FW_LOGGING_CHECK Y; EMAIL_LIMIT 0; EMAIL_LIMIT_STATUS_MSG Y; ALERT_ALL Y; IMPORT_OLD_SCANS N; ENABLE_DSHIELD_ALERTS N; DSHIELD_ALERT_EMAIL reports@dshield.org; DSHIELD_ALERT_INTERVAL 6; DSHIELD_USER_ID 0; DSHIELD_USER_EMAIL NONE; DSHIELD_DL_THRESHOLD 0; ENABLE_AUTO_IDS Y; AUTO_IDS_DANGER_LEVEL 3; AUTO_BLOCK_TIMEOUT 3600; ENABLE_AUTO_IDS_REGEX N; AUTO_BLOCK_REGEX ESTABLISHED; ENABLE_RENEW_BLOCK_EMAILS N; ENABLE_AUTO_IDS_EMAILS Y; IPTABLES_BLOCK_METHOD Y; IPT_AUTO_CHAIN1 DROP, src, filter, INPUT, 1, PSAD_BLOCK_INPUT, 1; IPT_AUTO_CHAIN2 DROP, dst, filter, OUTPUT, 1, PSAD_BLOCK_OUTPUT, 1; IPT_AUTO_CHAIN3 DROP, both, filter, FORWARD, 1, PSAD_BLOCK_FORWARD, 1; FLUSH_IPT_AT_INIT Y; IPTABLES_PREREQ_CHECK 1; TCPWRAPPERS_BLOCK_METHOD N; WHOIS_TIMEOUT 60; WHOIS_LOOKUP_THRESHOLD 20; DNS_LOOKUP_THRESHOLD 20; ENABLE_EXT_SCRIPT_EXEC N; EXTERNAL_SCRIPT /bin/true; EXEC_EXT_SCRIPT_PER_ALERT N; DISK_CHECK_INTERVAL 300; DISK_MAX_PERCENTAGE 95; DISK_MAX_RM_RETRIES 10; ENABLE_SCAN_ARCHIVE N; TRUNCATE_FWDATA Y; MIN_ARCHIVE_DANGER_LEVEL 1; MAIL_ALERT_PREFIX [psad-alert]; MAIL_STATUS_PREFIX [psad-status]; MAIL_ERROR_PREFIX [psad-error]; MAIL_FATAL_PREFIX [psad-fatal]; PSAD_DIR /var/log/psad; PSAD_RUN_DIR /var/run/psad; PSAD_LIB_DIR /var/lib/psad; SCAN_DATA_ARCHIVE_DIR /var/log/psad/scan_archive; ERROR_DIR /var/log/psad/errs; ANALYSIS_MODE_DIR /var/log/psad/ipt_analysis; SNORT_RULES_DIR /etc/psad/snort_rules; FW_DATA_FILE /var/log/psad/fwdata; ULOG_DATA_FILE /var/log/psad/ulogd.log; FW_CHECK_FILE /var/log/psad/fw_check; DSHIELD_LATEST_EMAIL /var/log/psad/dshield.email; PID_FILE /var/run/psad/psad.pid; CMDLINE_FILE /var/run/psad/psad.cmd; SIGS_FILE /etc/psad/signatures; ICMP_TYPES_FILE /etc/psad/icmp_types; AUTO_DL_FILE /etc/psad/auto_dl; SNORT_RULE_DL_FILE /etc/psad/snort_rule_dl; POSF_FILE /etc/psad/posf; P0F_FILE /etc/psad/pf.os; PSAD_FIFO /var/lib/psad/psadfifo; ETC_HOSTS_DENY /etc/hosts.deny; ETC_SYSLOG_CONF /etc/syslog.conf; ETC_SYSLOGNG_CONF /etc/syslog-ng/syslog-ng.conf; ETC_METALOG_CONF /etc/metalog/metalog.conf; KMSGSD_PID_FILE /var/run/psad/kmsgsd.pid; PSADWATCHD_PID_FILE /var/run/psad/psadwatchd.pid; AUTO_BLOCK_IPT_FILE /var/log/psad/auto_blocked_iptables; AUTO_BLOCK_TCPWR_FILE /var/log/psad/auto_blocked_tcpwr; AUTO_IPT_SOCK /var/run/psad/auto_ipt.sock; FW_ERROR_LOG /var/log/psad/errs/fwerrorlog; PRINT_SCAN_HASH /var/log/psad/scan_hash; PROC_FORWARD_FILE /proc/sys/net/ipv4/ip_forward; PACKET_COUNTER_FILE /var/log/psad/packet_ctr; DSHIELD_COUNTER_FILE /var/log/psad/dshield_ctr; IPT_PREFIX_COUNTER_FILE /var/log/psad/ipt_prefix_ctr; IPT_OUTPUT_FILE /var/log/psad/psad.iptout; IPT_ERROR_FILE /var/log/psad/psad.ipterr; iptablesCmd /sbin/iptables; mknodCmd /bin/mknod; psCmd /bin/ps; mailCmd /bin/mail; sendmailCmd /usr/sbin/sendmail; ifconfigCmd /sbin/ifconfig; killallCmd /usr/bin/killall; netstatCmd /bin/netstat; unameCmd /bin/uname; whoisCmd /usr/bin/whois_psad; dfCmd /bin/df; fwcheck_psadCmd /usr/sbin/fwcheck_psad; psadwatchdCmd /usr/sbin/psadwatchd; kmsgsdCmd /usr/sbin/kmsgsd; psadCmd /usr/sbin/psad;
Запустите сервис psad
service psad start
Для проверки правильности настройки psad просканируйте порты защищаемого вами компьютера при помощи nmap или nessus.
Более подробно о настройках psad можно прочитать на http://www.cipherdyne.org/psad/docs/config.html .
Информацию о том, чем psad отличается от аналогичных продуктов читайте http://www.cipherdyne.org/psad/docs/faq.html.
Может распространяться свободно при указании авторства.
Автор: Фролов Денис
