Tôi đang chạy trên Rocky Linux (dựa trên RHEL8) và đang gặp khó khăn với tường lửa và iptables. Chà, dù sao thì cũng không hẳn là iptables... Để tôi giải thích.
Tôi thiết lập cụm K8S trên VMWare ESXi với sáu máy ảo, tất cả đều giống nhau. Tôi cần để chạy tường lửa, với môi trường này. Tôi đang sử dụng Weave CNI, đang sử dụng iptables để tạo các quy tắc mạng của nó.
Đây là những phát hiện ban đầu của tôi:
- trên container docker dệt và Máy chủ VM, iptables với phụ trợ nf_tables được sử dụng
- điều này được xác nhận bởi
iptables -V
đầu ra mang lại cho tôi iptables v1.8.4 (nf_tables)
- tường lửa được thiết lập để sử dụng nftables làm chương trình phụ trợ (
Tường lửa phụ trợ
)
- dịch vụ iptables không tồn tại (
Không thể tìm thấy đơn vị iptables.service.
)
- dịch vụ nftables đã được tải, nhưng không hoạt động
- dịch vụ tường lửa đang chạy
- nếu tôi bắt đầu dịch vụ nftables, dịch vụ tường lửa sẽ bị dừng và ngược lại
Theo sự hiểu biết của tôi về tường lửa, bởi vì nó sử dụng nftables, nên nó hoàn toàn không xóa iptables, theo ý kiến của họ bài viết trên blog về phụ trợ nftables.
Khi dệt đặt quy tắc iptables của nó (đối với chính sách mạng và định tuyến), tôi có thể thấy chúng bằng iptables-save
hoặc bộ quy tắc danh sách nft
. Điều này có nghĩa là ngay cả khi dệt đang sử dụng iptables để đặt quy tắc của nó, thì trên thực tế, chúng được đặt thành nftables.
Bây giờ, vấn đề của tôi là nếu tôi tải lại tường lửa (với tường lửa-cmd --reload
hoặc systemctl tải lại tường lửa.service
) sau khi dệt đặt quy tắc của nó, tất cả các quy tắc đều bị xóa! Tôi có thể xác nhận rằng với iptables-save
hoặc bộ quy tắc danh sách nft
.
Nó có thể liên quan đến việc sử dụng iptables
lệnh thay vì nft
? Ngay cả khi iptables sử dụng chương trình phụ trợ nf_tables?
Xin lưu ý rằng vấn đề này được giải quyết một phần bằng cách dệt, vì chúng giám sát các quy tắc để xem liệu một chuỗi WEAVE-CANARY đặc biệt (trống) có còn tồn tại hay không. Nếu không có, chúng sẽ tạo lại các tuyến định tuyến, nhưng không có gì được thực hiện đối với các quy tắc chính sách mạng. Đây hiện là một yêu cầu tính năng.
Các giải pháp có thể là gì? Tôi đã nghĩ đến việc nối vào dịch vụ tường lửa để thêm ExecStopPre
và ExecReloadPre
để lưu các quy tắc khác ngoài quy tắc của tường lửa vào /etc/sysconfig/nftables.conf
(hoặc một tệp khác, được bao gồm từ đó), nhưng nó hơi khó hiểu và tôi không thích “giải pháp” này. Hơn nữa, tôi thậm chí không chắc rằng điều này sẽ hoạt động, vì dịch vụ nftables đã ngừng hoạt động.
Chỉnh sửa: Tôi đã thực hiện một số thử nghiệm và hành vi thực sự kỳ lạ.
Tôi đã thêm một quy tắc với iptables
: iptables -I INPUT 3 -s 10.1.1.9 -j DROP
, sau đó tải lại tường lửa và quy tắc không còn nữa!
Tôi đã thử tương tự với nft
: nft thêm bộ lọc ip quy tắc INPUT ip saddr 10.1.1.9 drop
, tường lửa đã tải lại và kết quả vẫn như cũ...
Điều này khiến tôi phát điên, tường lửa không nên chạm vào các bảng quy tắc khác ngoài bảng quy tắc của chính nó, nhưng đây không phải là trường hợp ở đây!