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
# 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
# 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
}
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"