Я делаю выход, входящий в систему мой сервер с помощью IPTABLES со следующей строкой, которая, как предполагается, предоставляет информацию о UID обо всем трафике, который зарегистрирован:
-A OUTPUT -j LOG --log-prefix "IPTABLES(O): " --log-level info --log-uid
Однако время от времени я получил бы журналы без UID как это:
IPTABLES (O): В = 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