네트워크 네임 스페이스 내부의 iptables LOG 규칙


9

도커 컨테이너에 iptables 규칙을 설정하려고합니다. 컨테이너의 네트워크 네임 스페이스 내에서 iptables 명령을 실행하기 위해 nsenter 를 사용 하고 있습니다.

# 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

이 방법은 LOG규칙을 제외하고는 완벽하게 작동합니다 . 그들은 어디에도 기록하지 않는 것 같습니다. 호스트 시스템에 적용되는 것과 동일한 규칙이 작동하고에 로그인합니다 /var/log/kern.log.

해당 로그 규칙의 출력을 어디에서 찾을 수 있습니까? 네트워크 네임 스페이스의 알려진 문제 / 제한입니까?


업데이트 : NFLOG대신 시도 했지만 여전히 작동하지 않습니다.
Fabian Jakobs

centos 7을 기반으로 한 도커 컨테이너를 사용하여 테스트를 수행했으며 작동합니다. 호스트는 centos입니다. 우분투 우분투 15.04 호스트 및 우분투 12.04.5 컨테이너와 동일한 테스트가 작동하지 않습니다. 어쨌든 syslog 호스트에서 실행 중입니다.
c4f4t0r

컨테이너로 데비안 wheezy를 호스트로 사용하고 우분투 14.04를 사용하고 있습니다. 작동하지 않습니다. 나는 무엇이 다른지 궁금합니다.
Fabian Jakobs 님이

이것에 대한 해결책을 찾았습니까?
gucki

@gucki 네임 스페이스 내에서 작동하게하는 솔루션을 찾지 못했습니다. 로깅 규칙을 컨테이너 외부로 옮겼습니다.
Fabian Jakobs

답변:


8

Donald가 언급했듯이 컨테이너 내부의 iptables LOG 규칙은 기본적으로 억제됩니다.

커널 <= 4.10에서는 커널을 패치하지 않으면이 동작을 조정할 수 없습니다. agrrd가 언급했듯이 해결 방법은 각 컨테이너에서 ulogd를 실행하고 LOG 규칙 대신 iptables NFLOG (또는 ULOG) 규칙을 사용하는 것입니다.

그러나 커널 4.11 echo 1 > /proc/sys/net/netfilter/nf_log_all_netns부터는 컨테이너 외부에서 호스트를 실행 하면 모든 컨테이너 내부의 iptables LOG 규칙이 호스트에 기록됩니다. (이 커널 커밋을 참조하십시오.)



1

ulogd를 설치하고 "-j LOG"를 "-j ULOG"로 바꾸어 docker 컨테이너에 대한 iptables 규칙을 기록 할 수있었습니다. 일치하는 패킷은 / var / log / ulog 디렉토리에 기록됩니다


컨테이너 내부의 호스트에 ulogd를 설치 했습니까 (규칙에서 출력되지 않음) 시작하지 않습니까?
Phillipp

0

을 사용하는 예제 (커널 관련이 아님)를 보았습니다 -v /dev/log:/dev/log. 비슷한 일을해야하는지 궁금합니다 ..

또한, 나는 당신이 아닌 nsenter를 사용하고 있음을 알고 있습니다 docker exec: 어떤 버전의 docker를 실행하고 있습니까?


도커를 전혀 사용하지 않을 때도 작동하지 않지만 명령 줄에서 수동으로 netns를 사용하십시오.
gucki

/ proc / kmsg 또는 / dev / kmsg를 사용하면 docker가 컨테이너에 컨테이너를 마운트하지 못하게 효과적으로 방지합니다.
Phillipp
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.