PSAD — утилита для определения попыток сканирования открытых портов, при обнаружении таковых — отправляет оповещение на почту и может заблокировать атакующий хост.
Для определения сканирования — использует указанную в конфигурации службу логирования, в данном случае — rsyslog
.
Устанавливаем:
# yum -y install psad
Редактируем /etc/rsyslog.conf
.
Добавляем строку:
# for PSAD kern.info | /var/lib/psad/psadfifo
IPTABLES генерирует очень много записей, поэтому, что бы не забивать /var/log/messages
— настроим логирование в отдельный файл.
Создаём файл /etc/rsyslog.d/iptables.conf
с таким содержимым:
:msg, contains, "Iptables: " /var/log/iptables.log & ~
Перезапускаем:
# service rsyslog restart Shutting down system logger: [ OK ] Starting system logger: [ OK ]
Проверяем содержимое в файле /var/log/iptables.log
— идут ли записи.
Редактируем /etc/psad/psad.conf
.
# устанавливаем ящик, на который будут отправляться уведомления EMAIL_ADDRESSES [email protected]; # имя хоста HOSTNAME venti; # если только один интерфейс - ставим none HOME_NET NOT_USED # Данный параметр указывает какая служба 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; # Данный параметр задает порты, сканирование которых не будет учитываться. # Формат параметра таков «протокол/порт,[протокол/порт]». # Например 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; # если установлено в Y - будет оправлять уведомления о каждом подозрительного пакете # для каждого конкретного IP # иначе - только при достижении этим IP нового DANGER_LEVEL ALERT_ALL Y; # если установлено в Y - psad после перезагрузки будет импортировать # старые записи для IP # а не создавать новые IMPORT_OLD_SCANS Y; # отправлять ли сообщения о новых сканирующих хостаз # на сервис http://www.dshield.org/ ENABLE_DSHIELD_ALERTS N; # автоматически блокировать сканирующий хост # на время тестирования - лучше установить в N # и подождать хотя бы пару часов, что бы определить все # "чистые" хосты, на пакеты которых реагирует psad # и добавить их в whitelist ENABLE_AUTO_IDS N; # Задает значение уровня/важности, при наступлении которого psad будет блокировать атакующего. AUTO_IDS_DANGER_LEVEL 5; # Задает значение времени в секундах, на которое будет заблокирован сканирующий хост. AUTO_BLOCK_TIMEOUT 3600; # метод блокировки - через IPTABLES IPTABLES_BLOCK_METHOD Y; # номер правила в цепочках INPUT, OUTPUT, и FORWARD, которое будет присваиваться новым правилам # добавленным psad IPTABLES_AUTO_RULENUM # меняем /var/log/messages на наш отдельный файл IPT_SYSLOG_FILE /var/log/iptables.log; # Если установить данный параметр в 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;
Запускаем:
# service psad start [ OK ]
Добавляем правила в фаервол:
# iptables -I INPUT 1 -j LOG --log-prefix "Iptables: " # iptables -I FORWARD 1 -j LOG --log-prefix "Iptables: "
Обратите внимание на порядок правил — LOG
должен быть перед всеми DROP
или REJECT
.
Сохраняем:
# service iptables save iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
Обновляем сигнатуры psad
:
# psad --sig-update
Перезапускаем:
# service psad restart Stopping psad: [ OK ] Starting psad: [ OK ]
С другой машины сканируем
# nmap -PN -sS 77.***.***20 Starting Nmap 5.51 ( http://nmap.org ) at 2014-10-05 17:22 EEST Nmap scan report for 77.***.***20 Host is up (0.0010s latency). Not shown: 999 filtered ports PORT STATE SERVICE 22/tcp open ssh MAC Address: 08:00:27:BD:FA:D9 (Cadmus Computer Systems) Nmap done: 1 IP address (1 host up) scanned in 5.26 seconds
Проверяем статус psad
:
# psad -S [-] psad: pid file /var/run/psad/psadwatchd.pid does not exist for psadwatchd on localhost [+] psad (pid: 1961) %CPU: 1.3 %MEM: 1.8 Running since: Sun Oct 5 17:22:48 2014 Command line arguments: [none specified] Alert email address(es): root@localhost [+] Version: psad v2.2.3 [+] Top 50 signature matches: [NONE] [+] Top 25 attackers: [NONE] [+] Top 20 scanned ports: [NONE] [+] iptables log prefix counters: [NONE] Total protocol packet counters: [+] IP Status Detail: SRC: 77.***.***40, DL: 3, Dsts: 1, Pkts: 289, Total protocols: 1, Unique sigs: 0, Email alerts: 0, Local IP DST: 77.***.***40, Local IP Scanned ports: TCP 4-61900, Pkts: 289, Chain: INPUT, Intf: eth1 Total scanned IP protocols: 1, Chain: INPUT, Intf: eth1 Total scan sources: 1 Total scan destinations: 1 [+] These results are available in: /var/log/psad/status.out
Что бы добавить исключения — отредактируйте файл /etc/psad/auto_dl
.
Например, что бы «забыть» про адрес 77.***.***.40 (на котором находится Nagios, использующий Nmap
, и psad
его считает «атакующим» из-за постоянной передачи пакетов):
77.***.***.40 0;
Что бы игнорировать подсеть — добавляем:
77.***.***.0/24 0;
Ссылки по теме
http://redhat-club.org