Question Iptables LOG à l'intérieur d'un espace de noms réseau


J'essaie de configurer des règles iptables pour un conteneur Docker. j'utilise entrer pour exécuter la commande iptables à l'intérieur de l'espace de noms réseau du conteneur:

# log access to port 8080
PID=$(docker inspect --format "{{.State.Pid}}" $ID)
/home/ubuntu/nsenter -n -t $PID iptables -A OUTPUT -o eth0 -p tcp -m tcp --dport 8080 -j LOG

Cette approche fonctionne parfaitement sauf pour LOG règles. Ceux-ci ne semblent se connecter nulle part. Notez que la même règle appliquée au système hôte fonctionne et se connecte à /var/log/kern.log.

Où puis-je trouver le résultat de ces règles de journalisation? Est-ce un problème connu / une limitation des espaces de noms réseau?


7
2018-05-13 13:44


origine


Mise à jour: j'ai essayé NFLOG mais ça ne marchera toujours pas - Fabian Jakobs
J'ai fait un test en utilisant un conteneur docker basé sur centos 7 et cela fonctionne, l'hôte est un centos, le même test avec ubuntu Ubuntu 15.04 host et le conteneur ubuntu 12.04.5 ne fonctionne pas. est en cours d'exécution dans votre hôte. - c4f4t0r
J'utilise Debian Wheezy en tant qu'hôte et Ubuntu 14.04 dans un conteneur. Là ça ne marche pas. Je me demande ce qui est différent là-bas. - Fabian Jakobs
Avez-vous trouvé une solution à cela? - gucki
@gucki Je n'ai pas trouvé de solution pour que cela fonctionne dans l'espace de noms. J'ai déplacé les règles de journalisation à l'extérieur du conteneur. - Fabian Jakobs


Réponses:


La conception des cibles LOG iptables à partir de l'intérieur d'un espace de noms réseau est supprimée par conception pour empêcher les conteneurs de doser leur hôte en surchargeant ses tampons de journal.

commettre l'introduction du changement

ligne de code source pertinente dans le noyau actuel


3
2018-03-03 07:08





Comme Donald l'a mentionné, les règles LOG d'iptables à l'intérieur des conteneurs sont supprimées par défaut.

Dans les noyaux <= 4.10, ce comportement ne pouvait pas être ajusté sans patcher le noyau. Comme mentionné plus haut, une solution consiste à exécuter ulogd dans chaque conteneur et à utiliser les règles iptables NFLOG (ou ULOG) au lieu des règles LOG.

Cependant, à partir du noyau 4.11, en cours d’exécution echo 1 > /proc/sys/net/netfilter/nf_log_all_netns sur l'hôte (en dehors du conteneur), les règles iptables LOG de tous les conteneurs se connecteront à l'hôte. (Voir cet engagement de noyau.)


2
2017-07-19 15:23





J'ai pu enregistrer les règles iptables pour les conteneurs Docker en installant ulogd et en remplaçant "-j LOG" par "-j ULOG". Les paquets correspondants sont consignés dans le répertoire / var / log / ulog


1
2018-02-24 15:58



Avez-vous installé ulogd sur l'hôte (ne donne aucun résultat de la règle) ou à l'intérieur du conteneur (qui ne démarre pas)? - Phillipp


J'ai vu un exemple d'utilisation (non liée au noyau) -v /dev/log:/dev/log. Je me demande si vous devez faire quelque chose de similaire.

En outre, je vois que vous utilisez nsenter plutôt que docker exec: quelle version de docker utilisez-vous?


0
2018-05-22 18:34



Il ne fonctionne pas non plus lorsque vous n'utilisez pas docker, mais effectuez un réseau manuellement à partir de la ligne de commande. - gucki
Vous auriez besoin de / proc / kmsg ou / dev / kmsg et docker vous empêchera effectivement de le monter dans le conteneur. - Phillipp