Quản lý quy tắc song song cho ivables ipv4 và ipv6?


10

Gần đây chúng tôi đã bắt đầu thử nghiệm với IPv6 và một trong những vấn đề đầu tiên chúng tôi phải giải quyết là xử lý một bộ quy tắc tường lửa (Linux iptables / ip6ables) hoàn toàn riêng biệt cho hai ngăn xếp giao thức. Logic tường lửa của chúng tôi chủ yếu dựa trên một số mạng dành riêng cho mục đích (ví dụ: 10.0.0.0/24 là mạng máy trạm nhân viên, 10.1.0.0/24 là mạng cơ sở dữ liệu, 10.2.0.0/24 là mạng máy chủ web, v.v. ) và logic cho cả IPv6 và IPv4 sẽ phần lớn giống nhau, các tiền tố mạng khác nhau modulo.

Mọi người đang làm gì để quản lý loại tình huống này? Lý tưởng nhất là tôi muốn có thể tạo cả hai quy tắc iptables và ip6table từ cùng một tệp nguồn. Tôi đã kết hợp một thứ gì đó bằng cách sử dụng bash, nhưng nó không hẳn là đẹp và tôi nghi ngờ rằng một giải pháp tốt hơn phải tồn tại ở đâu đó ngoài kia.

Tôi sẽ đặc biệt quan tâm đến một giải pháp dựa trên Puppet sử dụng tốt các cơ chế phụ thuộc của Puppet để thực hiện thứ tự quy tắc tương đối (hoặc các nhóm quy tắc).

Câu trả lời:


5

Firewall Builder có chính xác những gì bạn cần. Bạn có thể tạo một bộ quy tắc, đánh dấu nó là "ipv4 + ipv6 kết hợp" và đặt các mạng ipv4 và ipv6 của bạn được gán cho cùng một phân đoạn (chẳng hạn như "mạng cơ sở dữ liệu" etC) trong cùng một quy tắc. Chương trình sau đó tạo hai cấu hình iptables riêng biệt cho một ipv4 và một cho ipv6. Chương này của Hướng dẫn người dùng minh họa điều này, mặc dù nó sử dụng danh sách truy cập bộ định tuyến của Cisco làm ví dụ. Nó hoạt động chính xác như nhau cho iptables.

http://www.fwbuilder.org/4.0/docs/usftimeguide5/combined-ipv4-ipv6-rule-set.html


4

Gần đây tôi cũng đã phải đối mặt với việc tạo iptables-quy tắc cho cả hai, IPv4 và IPv6. Sau một số tìm kiếm, tôi đã kết thúc việc sử dụng chi nhánh IPv6 FireHOL của Phil Whineray .

FireHOL là một trình tạo tường lửa iptables tạo ra tường lửa lọc gói iptables trạng thái, trên các máy chủ và bộ định tuyến Linux với bất kỳ số giao diện mạng, bất kỳ số tuyến, bất kỳ số dịch vụ nào được cung cấp, bất kỳ số lượng phức tạp nào giữa các biến thể của dịch vụ (bao gồm cả tích cực và tiêu cực biểu thức). (Nguồn: trang web FireHOL)

Thật không may, phiên bản chính thức thiếu hỗ trợ cho IPv6. Nhưng Phil Whineray đã thêm hỗ trợ trong một chi nhánh không chính thức.

Một số ví dụ về cách cấu hình trông như thế nào:

# allowing outgoing http and https requests for ipv4 and ipv6 (default setting when nothing is specified):
client "http https" accept

# allow incoming ssh only on ipv4
ipv4 server ssh accept

# allow incoming IMAP requests only for ipv6
ipv6 server imap accept

Bạn có thể kiểm tra chi nhánh firehol này tại:

git clone git://repo.or.cz/fireholvi.git

Tài liệu bổ sung có thể được tìm thấy tại tài liệu chính thức của FireHOL hoặc tại Readme bổ sung về IPv6 .

Cá nhân tôi có lẽ sẽ thận trọng khi sử dụng nó trên một máy sản xuất trong đó việc có tường lửa đáng tin cậy 100% là rất quan trọng. Nhưng nó vẫn đáng xem.


3

Vì lợi ích của việc tiếp tục truyền giáo về nguyên nhân, tôi đề nghị tận dụng Puppet để thực hiện việc nâng đỡ của bạn. Hiện tại không có một kịch bản tốt để xử lý các quy tắc iptables 4 và 6, nhưng sẽ không có quá nhiều thách thức để viết một trong hai khi bạn điều chỉnh ngôn ngữ.

Kho lưu trữ git công cộng của Mediawiki là một kho mẫu cấu hình tuyệt vời và bao gồm một lớp iptables sẽ cung cấp một cơ sở tốt để bắt đầu. Theo mặc định, bạn có thể chỉnh sửa nó để áp dụng các quy tắc cho cả hai ngăn xếp và có cờ cho các quy tắc khác nhau khi bạn dựa trên các quy tắc của IPv4 hoặc IPv6.

Phần thưởng cuối cùng ở phần cuối này là các quy tắc tường lửa cho một dịch vụ có thể được ghi vào định nghĩa dịch vụ và tự động triển khai và xóa khi dịch vụ được triển khai hoặc xóa.


Tôi sẽ xem qua một chút. Tôi đã không bị ấn tượng cho đến nay với các giải pháp dựa trên rối điển hình để quản lý iptables. Đặc biệt, tất cả chúng dường như thực hiện việc đặt hàng một cách rõ ràng, thông qua tên tệp của các tệp phân đoạn hoặc thông qua các chỉ mục rõ ràng được cung cấp trong quy tắc Puppet, thay vì sử dụng các cơ chế giải quyết phụ thuộc của Puppet, đó là điều tôi thực sự muốn. Nếu giải pháp được liên kết ở đây tránh được những vấn đề này thì tôi sẽ làm tất cả.
larsks

@larsks Tôi đồng ý và đã thất vọng tương tự rằng một giải pháp chung tốt chưa được phát hành ... nhưng có lẽ đã đến lúc tôi tự làm điều đó. Con rối sẽ cho phép sử dụng before => Resource['declared_name']định nghĩa trên bất kỳ định nghĩa nào, vì vậy bạn có thể ra lệnh cho chúng sử dụng một triển khai không cố gắng sắp xếp mọi thứ với các đoạn. Việc sử dụng tốt Augueas cho cấu trúc cũng sẽ ngăn chặn vấn đề này - hãy đưa ra nhận xét về cây hàng đầu của bạn và thứ tự của bạn bên dưới mà bạn muốn.
Jeff Ferland

Những nỗ lực của riêng tôi trong việc giải quyết điều này đã không đi được rất xa. Những gì tôi đã làm bây giờ là (a) cài đặt các đoạn vào thư mục con và sau đó (b) sử dụng RCorder để đặt chúng vào thứ tự phụ thuộc. Nó hoạt động, nhưng vì nó chỉ dựa vào việc quản lý các tệp phân đoạn nên nó không cho vay vào môi trường ipv4 / ipv6 hỗn hợp. Tôi chưa thực sự xem xét kỹ việc sử dụng Augeas để giúp giải quyết vấn đề. Tôi sẽ tò mò nếu bạn có bất kỳ mã nguyên mẫu nào ngoài đó.
larsks

2

Trả lời câu hỏi của riêng tôi ở đây, nhưng tôi nghĩ thông tin này có thể được quan tâm chung:

Trong khi xem xét câu hỏi này, tôi tình cờ thấy ufw (FireWall không biến đổi) từ những người Ubuntu. Với IPV6 được kích hoạt trong cấu hình ufw, ufw sẽ quản lý các quy tắc iptables và ip6tables song song. Điều này có nghĩa là bạn có thể làm một cái gì đó như thế này:

# ufw allow ssh/tcp

Và kết thúc với:

# ufw status
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
22/tcp                     ALLOW       Anywhere (v6)

Kết quả trong các quy tắc iptables / ip6tables trông như thế này:

# iptables-save | grep 'dport 22'
-A ufw-user-input -p tcp -m tcp --dport 22 -j ACCEPT
# ip6tables-save | grep 'dport 22'
-A ufw6-user-input -p tcp -m tcp --dport 22 -j ACCEPT

Ufw cũng hỗ trợ các cấu hình ứng dụng, cho phép bạn tạo các nhóm cổng được đặt tên. Bạn có thể làm được việc này:

# ufw allow 'WWW Full'

Và cuối cùng mở cả hai cổng 80 và 443 (cho cả IPv4 và IPv6).

Tôi chỉ mới bắt đầu nhìn vào nó, nhưng có vẻ như nó khá hợp nhau.


0

Vì nó vẫn còn thiếu trong danh sách: Shorewall là một công cụ cấu hình bộ lọc gói giàu tính năng được áp dụng rộng rãi và được cập nhật thường xuyên. Nó đã hỗ trợ IPv6 được một thời gian rồi.


1
Tôi hiểu rằng "shorewall" chỉ là ipv4 và "shorewall6" chỉ là ipv6, người ta phải sử dụng cả hai để bao quát cả hai giao thức. Họ có thể chia sẻ một cấu hình chung?
larsks
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.