Назад | Перейти на главную страницу

Почему некоторый исходящий IP-трафик не содержит информации об UID?

Я веду исходящий журнал на своем сервере с помощью IPTABLES со следующей строкой, которая должна предоставлять информацию UID для всего регистрируемого трафика:

-A OUTPUT -j LOG --log-prefix "IPTABLES(O): " --log-level info --log-uid

Однако время от времени я получал логи без UID вроде этого:

IPTABLES (O): IN = OUT = eth0 SRC = 1.2.3.4 DST = 5.6.7.8 LEN = 83 TOS = 0x00 PREC = 0x00 TTL = 64 ID = 54321 DF PROTO = TCP SPT = 50505 DPT = 443 WINDOW = 342 RES = 0x00 ACK PSH FIN URGP = 0

По каким причинам исходящий трафик не содержит информации об UID?

Одна из обычных причин - это завершение последовательности FIN ACK. Как только клиентское приложение вызывает close () для TCP-сокета, на сервер отправляется пакет ACK + FIN, и клиентская программа завершается. На данный момент нет процесса, связанного с TCP-соединением, но он еще не завершен.

При применении фильтра владельца к пакетам ACCEPT обычно добавляется правило с состоянием ESTABLISHED, чтобы охватить эти «остаточные пакеты».

iptables -A OUTPUT -p tcp --dport 443 -m owner --uid-owner foo -j ACCEPT
iptables -A OUTPUT -p tcp --dport 443 -m state --state ESTABLISHED -j ACCEPT