Устанавливать и настраивать будем на примере "Debian Stratch 9".
PSAD анализирует журнал логов iptables для обнаружения сканирования портов и другого подозрительного трафика.
Для использования более свежей версии, чем в офф. репозиториях Debian, можно воспользоваться готовым установщиком. Download psad.
- Для компиляции из исходников, нам может понадобится набор компиляторов - GNU Compiler Collection (gcc) и утилита make;
# apt-get update && apt-get install gcc make
- Для установки psad могут потребоваться следующие пакеты:
# apt-get install libbit-vector-perl libcarp-clan-perl libdate-calc-perl libdate-calc-xs-perl libiptables-chainmgr-perl libnet-ip-perl libunix-syslog-perl psmisc whois postfix mailutils
- А так-же пакет net-tools, для работы ifconfig;
# apt-get install net-tools
# wget http://cipherdyne.org/psad/download/psad-2.4.5.tar.gz
# tar -zxvf psad-2.4.5.tar.gz
# cd psad-2.4.5
# ./install.pl
- Команды для работы с демоном psad;
# service psad start|stop|status|restart
# /bin/systemctl start|stop|status|restart psad
- Полное удаление psad и всех его компонентов;
# ./install.pl --uninstall
Обновляем список зеркал и устанавливаем psad:
# apt-get update && apt-get install psad
Останавливаем сервис:
# /etc/init.d/psad stop
Настраиваем Rsyslog:
Если в "psad.conf" переменная "ENABLE_SYSLOG_FILE" задана как "N".
# nano /etc/rsyslog.conf
# PSAD
kern.info |/var/lib/psad/psadfifo
- перезапускаем демон
/etc/init.d/rsyslog restart
Устанавливаем уровень опасности для ip адресов:
Задаем localhost и DNS серверы нашего хостинг провайдера ( обычно это ns1, ns2, ns3, указываются у регистратора домена ) ну и все что лежит тут: "/etc/resolv.conf".
# nano /etc/psad/auto_dl
127.0.0.1 0;
ip_ns1 0;
ip_ns2 0;
ip_ns3 0;
nameserver1 0;
nameserver2 0;
Настраиваем сервис в psad.conf:
Переменные на которые стоит обратить внимание при настройке конфигурационного файла.
Про "psad.conf" можно почитать тут - psad Configuration Variables. Важно! в Debian, демон "syslog", называется "rsyslogd".
# nano /etc/psad/psad.conf
EMAIL_ADDRESSES user@domen.ru; Почтовый адрес для отправки уведомлений.
HOSTNAME unix; Имя хоста.
HOME_NET any; Домашняя сеть.
EXTERNAL_NET any; Внешняя сеть.
- По умолчанию ENABLE_INTF_LOCAL_NETS включен, поэтому psad автоматически обнаруживает все подключенные подсети и подставляет их в переменную HOME_NET.
ENABLE_INTF_LOCAL_NETS Y;
IFCFGTYPE ifconfig; Используемая конфигурация для сетевых интерфейсов.
PORT_RANGE_SCAN_THRESHOLD 1; Минимальный диапозон портов, который м.б. проверен прежде чем psad отправит предупреждение.
ALERTING_METHODS noemail; Вкл/откл. методов отчетности. "nosyslog" | "ALL" | "noemail" Можно указывать ч.з. запятую.
- Если переменная "ENABLE_SYSLOG_FILE" задана как "N", то psad сделает реконфиг syslog для записи данных журнала iptables в /var/lib/psad/psadfifo, где сообщения передаются на kmsgsd и записываются в /var/log/psad/fwdata для последующего анализа psad.
ENABLE_SYSLOG_FILE Y;
IPT_WRITE_FWDATA Y;
IPT_SYSLOG_FILE /var/log/messages; Файл для анализа psad сообщений журнала.
- Эта переменная используется только в том случае, когда переменная "ENABLE_SYSLOG_FILE" установлена как "N". Это в свою осчередь означает, что унаследован демон kmsgsd.
SYSLOG_DAEMON syslogd; Тип используемого демона syslog. Возможные значения syslogd, syslog-ng, ulogd, metalog.
MAX_HOPS 20; Значение TTL для пакетов.
- Особенно полезна для предотвращения детонации портов.
IGNORE_PORTS tcp/22, tcp/80, tcp/443; Набор портов для игнорирования.
- "MIN_DANGER_LEVEL" должно быть установлено < или = значению переменной "EMAIL_ALERT_DANGER_LEVEL"
MIN_DANGER_LEVEL 1; Минимальный уровень опасности, когда при сканировании портов, ведение журнала или предупреждения будут игнорироваться.
EMAIL_ALERT_DANGER_LEVEL 1; Уведомления по E-MAIL если уровень опасности > или = этому значению.
- Если данный протокол не используется в системе, то данную возможность можно отключить.
ENABLE_IPV6_DETECTION N; Вкл/Откл. обнаружение вредоносной активности по протоколу IPV6.
EMAIL_LIMIT 0; Отправлять не более этого кол-ва писем для одного источника сканирования IP.
ENABLE_AUTO_IDS Y; Вкл/Откл. автоматической блокировки и управление правилами iptables.
AUTO_IDS_DANGER_LEVEL 1; Блокировать весь трафик с нарушающего IP, если "DANGER_LEVEL" > или = этому значению.
AUTO_BLOCK_TIMEOUT 3600; Таймаут автоматического блокирования IP в сек. 0 - Навсегда.
ENABLE_AUTO_IDS_EMAILS Y; Если значение N, то автоматические уведомления на почту будут отключены.
Обновляем сигнатуры срабатывания защиты:
# psad --sig-update
Настраиваем iptables:
Будем придерживаться правила, все что не разрешено для входящих соединений "INPUT", запрещено =) Совет! 22 порт лучше перенести куда-нибудь подальше и включить авторизацию по ключам.
- Разрешаем все входящие запросы на внутренний интерфейс lo, а также разрешаем принимать пакеты уже установленных соединений, + разрешаем все входящие соеденения на tcp=port,
# iptables -A INPUT -i lo -j ACCEPT
# iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
- Далее одной строчкой,
# iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT
- или так,
# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# iptables -A INPUT -p tcp --dport 443 -j ACCEPT
- Если присутствуют еще необходимые сервисы (порты), то
# iptables -A INPUT -p tcp --dport PORT -j ACCEPT
- 2 нижних правила необходимы для psad, обязательно должны быть до DROP,
# iptables -A INPUT -j LOG
# iptables -A FORWARD -j LOG
- Запрещаем все что не разрешено для входящих,
# iptables -P INPUT DROP
- Првоверяем и сохраняем,
# iptables -nL или # iptables -S
# iptables-save
- Для сброса установленной цепочки правил выполним,
# iptables -P INPUT ACCEPT
# iptables -F
Чтобы настройки iptables сохранялись после перезагрузки:
# apt-get install iptables-persistent
Запускаем демон psad:
# /etc/init.d/psad start
Расширенные команды:
- Просмотр всей статистики,
# psad -S или # psad --Status
- Очистить все правила AUTO_IDS,
# psad -F или # psad --Flash
- Добавить/удалить блокировку IP,
# psad --fw-block-ip <ip>
# psad --fw-rm-block-ip <ip>
- Детальная информация по возможным командам,
# man psad
Готово! Осталось запустить nmap и проверить работоспособность =)) Забегая вперд, скажу, что есть еще
port-knocking…
FWSnort: [link]
Fwsnort анализирует файлы правил, включенные в систему обнаружения вторжений SNORT, и строит эквивалентный набор правил iptables для максимально возможного количества правил.
Устанавливаем:
# wget http://cipherdyne.org/fwsnort/download/fwsnort-1.6.7.tar.gz
# tar -zxvf fwsnort-1.6.7.tar.gz
# cd fwsnort-1.6.7
# ./install.pl
- Полное удаление fwsnort и всех его компонентов:
# ./install.pl --uninstall
Конфигурационный файл:
# nano /etc/fwsnort/fwsnort.conf
Правила Snort:
Которые будут сгенерированы fwsnort в понятный для iptables синтаксис.
# ls /etc/fwsnort/snort_rules/
attack-responses.rules experimental.rules misc.rules pop2.rules sql.rules web-iis.rules
backdoor.rules exploit.rules multimedia.rules pop3.rules telnet.rules web-misc.rules
bad-traffic.rules finger.rules mysql.rules porn.rules tftp.rules web-php.rules
chat.rules ftp.rules netbios.rules rpc.rules virus.rules x11.rules
ddos.rules icmp-info.rules nntp.rules rservices.rules web-attacks.rules
deleted.rules icmp.rules oracle.rules scan.rules web-cgi.rules
dns.rules imap.rules other-ids.rules shellcode.rules web-client.rules
dos.rules info.rules p2p.rules smtp.rules web-coldfusion.rules
emerging-all.rules local.rules policy.rules snmp.rules web-frontpage.rules
Проверка возможностей iptables:
Для работы со сгенерированными правилами fwsnort.
# fwsnort --ipt-check-capabilities
Создание правил для iptables:
Выбор идет исходя из потребностей в защите работающих сервисов.
# fwsnort --include-type attack-responses,backdoor,bad-traffic,ddos
- После успешного выполнения, мы увидим примерно следующее.
[+] Generated iptables rules for 764 out of 911 signatures: 83.86%
[+] iptables script (individual commands): /var/lib/fwsnort/fwsnort_iptcmds.sh
Применяем сгенерированные правила:
После чего, они добавятся в iptables и будут работать.
# /var/lib/fwsnort/fwsnort_iptcmds.sh
Дополнительные команды:
- Обновление правил;
# fwsnort --update-rules
- Сброс всех действующих правил iptables от fwsnort;
# fwsnort --ipt-flush
P.S. - | Перевод документации | IBM1-IBM2 | DigitalOcean | 8Host |
Аналоги: - | scanlogd | portsentry | xtables-addons для доступа к модулю PSD (Port Scan Detect) | ipkungfu |