J'essaie de configurer des règles iptables pour un conteneur Docker. J'utilise nsenter 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 les 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 la sortie de ces règles de journal? S'agit-il d'un problème / limitation connu des espaces de noms réseau?
networking
iptables
docker
containers
Fabian Jakobs
la source
la source
NFLOG
place mais cela ne fonctionnera toujours pasRéponses:
Comme Donald l'a mentionné, les règles LOG 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é précédemment, une solution de contournement consiste à exécuter ulogd dans chaque conteneur et à utiliser des règles iptables NFLOG (ou ULOG) au lieu des règles LOG.
Cependant, à partir du noyau 4.11, l'exécution
echo 1 > /proc/sys/net/netfilter/nf_log_all_netns
sur l'hôte (en dehors du conteneur) entraînera la journalisation des règles iptables LOG à l'intérieur de tous les conteneurs sur l'hôte. (Voir ce Kernel Commit.)la source
La sortie des cibles iptables LOG de l'intérieur d'un espace de noms réseau est supprimée par conception pour empêcher les conteneurs de DOS leur hôte en remplaçant ses tampons de journal.
s'engager à introduire le changement
ligne de code source pertinente dans le noyau actuel
la source
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 enregistrés dans le répertoire / var / log / ulog
la source
J'ai vu un exemple d'utilisation (non lié au noyau)
-v /dev/log:/dev/log
. Je me demande si vous devez faire quelque chose de similaire ..De plus, je constate que vous utilisez nsenter plutôt que
docker exec
: quelle version de docker utilisez-vous?la source