UMGUM.COM 

Iptables + Ulogd ( Налаживаем сбор сведений об исходящих с Linux-системы сетевых подключениях. )

26 мая 2018  (обновлено 21 июня 2019)

OS: "Linux Debian 7/8/9", "Linux Ubuntu 14/16/18 LTS".
Apps: "Iptables", "Ulogd" & "Bash".

Задача: простейшим образом наладить сбор сведений об исходящих сетевых подключениях, инициированных непосредственно с Linux-сервера и предоставить сводку по направлениям.

Журналирование запросов обрабатываемых сетевым фильтром "Iptables" реализуется очень просто, посредством предваряющего действующие правила вроде "ACCEPT" или "DENY" правилами с немодифицирующей операцией "LOG" - однако в таком случае поток сообщений о событиях будет безальтернативно направлен в системный журнал событий, засоряя его действительно большим количеством данных.

Для вывода сведений о соединениях удобнее использовать специально созданную для этого подсистему "ULOGD (Netfilter Userspace Logging Daemon)", исполненную в виде отдельного принимающего и сохраняющего поступающие данные в настраиваемом журнале событий сервиса, запускаемого вне системного контекста, а также модуля "Iptables", настроенного на отправку этих данных в этот самый сервис "ulogd".


Устанавливаем APT-пакет со всем необходимым (считая, что "Iptables" уже имеется и работает):

# aptitude install ulogd2
# systemctl status ulogd.service

Конфигурационный файл "ulogd" (/etc/ulogd.conf) позволяет настроить самые разные фильтры и направления журналирования, но для нашией простой цели его умолчаний вполне достаточно.

Прежде всего всегда полезно ознакомиться с текущим набором правил сетевого фильтра:

# iptables -L -n -v --line-numbers

Правило вычленения интересующего трафика и его вывода в журнал событий нужно вставлять перед действующими правилами (или единым блоком в начале таблицы, для наглядности).

Можно попробовать вылавливать обращения к определённому перечню сетевых портов:

# iptables -I OUTPUT 1 -m state --state NEW -p tcp ! -d 127.0.0.1 --match multiport --dport 80,443 -j NFLOG

Но для выявления несанкционированного трафика лучше записывать всё, а уже потом выбирать интересное:

# iptables -I OUTPUT 1 -m state --state NEW ! -d 127.0.0.1 -j NFLOG

В серверах базирующихся на "Debian" принято не сохранять без явного на то указания правила сетевой фильтрации - добавим этот функционал:

# aptitude install iptables-persistent
# iptables-save > /etc/iptables/rules.v4

Ротация журналов запросов, создаваемых "ulogd" несколько неоптимальна, на мой взгляд - добавим определённости в настройки:

# vi /etc/logrotate.d/ulogd2 && logrotate -d /etc/logrotate.d/ulogd2

/var/log/ulog/*.log /var/log/ulog/*.pcap {
  size 100M
  rotate 7
  missingok
  notifempty
  compress
  delaycompress
  copytruncate
  su ulog adm
}

Через некоторое время наблюдения за трафиком можно начать анализировать собранные данные. Например, вот так можно получить перечень всех целевых IP-адресов и FQDN (если таковые "резольвятся"):

# tail -5000 /var/log/ulog/syslogemu.log | grep "IN=.*OUT=.*" | awk 'match($0, /DST=[0-9\.]*/) {print substr($0, RSTART, RLENGTH);}' | awk -F = '{print $2}' | sort | uniq | grep -v -E '^(10.|127.|172.16.|192.168.)' | xargs -I {} bash -c "echo -n \"{} - \"; dig -x {} +short +nomultiline | tr -d '\n' | sed 's/\.$//'; echo"


Заметки и комментарии к публикации:


Оставьте свой комментарий ( выразите мнение относительно публикации, поделитесь дополнительными сведениями или укажите на ошибку )