Quy tắc Iptables LOG bên trong một không gian tên mạng


9

Tôi đang cố gắng thiết lập các quy tắc iptables cho một container docker. Tôi đang sử dụng nsenter để thực thi lệnh iptables bên trong không gian tên mạng của bộ chứa:

# 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

Cách tiếp cận này hoạt động hoàn hảo ngoại trừ các LOGquy tắc. Những người dường như không đăng nhập bất cứ nơi nào. Lưu ý rằng quy tắc tương tự được áp dụng cho hệ thống máy chủ hoạt động và ghi nhật ký /var/log/kern.log.

Tôi có thể tìm đầu ra của các quy tắc đăng nhập đó ở đâu? Đây có phải là một vấn đề / giới hạn của không gian tên mạng?


Cập nhật: Tôi đã thử NFLOGthay thế nhưng nó vẫn không hoạt động
Fabian Jakobs

Tôi đã thực hiện một thử nghiệm bằng cách sử dụng bộ chứa docker dựa trên centos 7 và nó hoạt động, máy chủ lưu trữ là một centos, thử nghiệm tương tự với máy chủ Ubuntu Ubuntu 15.04 và container ub Ubuntu 12.04.5 không hoạt động, dù sao bạn cũng cần chắc chắn, syslog đang chạy trong máy chủ của bạn.
c4f4t0r

Tôi đang sử dụng Debian wheezy làm máy chủ lưu trữ và Ubuntu 14.04 trong một thùng chứa. Ở đó nó không hoạt động. Tôi đang tự hỏi có gì khác ở đó.
Fabian Jakobs

bạn đã tìm thấy giải pháp chưa?
gucki

@gucki Tôi không tìm thấy giải pháp để làm cho nó hoạt động bên trong không gian tên. Tôi di chuyển các quy tắc đăng nhập bên ngoài của container.
Fabian Jakobs

Câu trả lời:


8

Như Donald đã đề cập, các quy tắc LOG của iptables bên trong các container bị chặn theo mặc định.

Trong hạt nhân <= 4.10, không thể điều chỉnh hành vi này mà không vá nhân. Như agrrd đã đề cập, một cách giải quyết là chạy ulogd trong mỗi container và sử dụng các quy tắc NFLOG (hoặc ULOG) của iptables thay vì quy tắc LOG.

Tuy nhiên, kể từ kernel 4.11, chạy echo 1 > /proc/sys/net/netfilter/nf_log_all_netnstrên máy chủ (bên ngoài vùng chứa) sẽ khiến các quy tắc LOG của iptables bên trong tất cả các container được ghi vào máy chủ. (Xem Cam kết hạt nhân này.)



1

Tôi đã có thể đăng nhập các quy tắc iptables cho các container docker bằng cách cài đặt ulogd và thay thế "-j LOG" bằng "-j ULOG". Các gói phù hợp được ghi vào thư mục / var / log / ulog


Bạn đã cài đặt ulogd trên máy chủ (không cung cấp đầu ra từ quy tắc) oder bên trong container (không khởi động)?
Phillipp

0

Tôi đã thấy một ví dụ (không liên quan đến kernel) khi sử dụng -v /dev/log:/dev/log. Tôi tự hỏi nếu bạn cần phải làm một cái gì đó tương tự ..

Ngoài ra, tôi thấy rằng bạn đang sử dụng nsenter chứ không phải docker exec: bạn đang chạy phiên bản docker nào?


Nó cũng không hoạt động khi hoàn toàn không sử dụng docker, nhưng được tạo thủ công từ dòng lệnh.
gucki

Bạn muốn / Proc / kmsg hoặc / dev / kmsg và docker ngăn chặn hiệu quả việc bạn gắn nó vào container.
Phillipp
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.