Cách chính tắc để lưu trữ các quy tắc iptables là gì


8

iptables, tường lửa Linux tiêu chuẩn, không lưu quy tắc giữa các lần khởi động lại. Bạn phải tự chăm sóc điều này. Có rất nhiều cách để làm điều này. Cách kinh điển để làm điều này là gì? Thực hành tốt nhất là gì?

Tôi sẽ trả lời với giải pháp của riêng tôi, nhưng tôi quan tâm đến các giải pháp khác / tốt hơn.


Câu trả lời:


6

Dưới đây là một số quy tắc ví dụ. Lưu chúng vào /etc/iptables.rules

# Generated by iptables-save v1.3.6 on Wed Oct 24 17:07:29 2007
*filter
:INPUT ACCEPT [89458:132056082]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [263904:15667452]
-A INPUT -i lo -j ACCEPT 
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT 
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7 
-A INPUT -j DROP 
COMMIT
# Completed on Wed Oct 24 17:07:29 2007

thêm dòng này vào cuối / etc / mạng / giao diện

pre-up iptables-restore < /etc/iptables.rules

1
Tôi sẽ chỉ ra rằng đây là dành riêng cho Ubuntu. Đối với các biến thể Red Hat và Fedora, thay vào đó bạn sẽ xem xét / etc / sysconfig / iptables.
esm

Ý bạn là thay vì /etc/iptables.rules? Điều đó không được xác định bởi Ubuntu, tôi đã chọn nó.
amarillion

4
Tôi đã đề cập đến việc bổ sung vào / etc / mạng / giao diện; lời xin lỗi của tôi, tôi nên đã rõ ràng hơn. Fedora và RHEL có một bản inits (được đặt tên một cách khéo léo là "iptables";), nếu được bật, về cơ bản sẽ thực hiện khôi phục iptables của / etc / sysconfig / iptables.
esm

3

Chúng tôi sử dụng rất nhiều quy tắc iptables , vì vậy để dễ dàng quản trị, chúng tôi thực hiện như sau:

  • Tất cả các quy tắc được gọi từ tập lệnh - tập lệnh được gọi từ /etc/init.d/firewall (tập lệnh tùy chỉnh)
  • Một tệp gồm tên máy chủ / tên mạng (biến địa chỉ ip) được giữ và được bao gồm trong mọi tập lệnh iptables để thống nhất.
  • các tập lệnh riêng biệt được giữ cho mỗi mạng con (ví dụ: private / DMZ / VPN, v.v.) để làm cho mọi thứ dễ tìm thấy hơn. Các quy tắc thuộc 2 tập lệnh (chẳng hạn như các quy tắc hạn chế giao tiếp b / w riêng tư và DMZ) được đặt trong tập lệnh của mạng "an toàn" hơn
  • bất cứ khi nào có thể, các vòng lặp và các vòng lặp lồng nhau được sử dụng để giữ cho các đoạn script càng ngắn càng tốt.
  • mỗi quy tắc hoặc thay đổi mới được ghi lại bằng các bình luận trước phần thích hợp của tập lệnh.

Tôi không biết liệu đây có phải là cách tốt nhất để làm việc này không, nhưng nó đã hoạt động tốt với chúng tôi.


3

Mặc dù đúng là phụ thuộc vào môi trường và nền tảng, tôi đã thấy hai cách tiếp cận tốt, tùy thuộc vào nền tảng:

  • RHEL / CentOS: lưu trữ tất cả các quy tắc trong một tệp / etc / sysconfig / iptables được đọc bởi tập lệnh khởi động iptables.

  • Debian / Ubuntu: lưu trữ tất cả các quy tắc trong các tệp dành riêng cho dịch vụ trong thư mục /etc/iptables.d/. Ví dụ: /etc/iptables.d/port_http, /etc/iptables.d/port_dns, trong đó port_service ánh xạ tới tên dịch vụ trong / etc / services.

Trong cả hai trường hợp, tệp hoặc tệp được quản lý bởi một công cụ cấu hình như Chef hoặc Puppet và được đọc bởi tập lệnh khởi động 'chính' cho iptables chạy khi khởi động.


2
Tôi sẽ rất cẩn thận với việc đặt tên trong ví dụ Debian / Ubuntu của bạn. Đây là loại nơi bạn muốn đặt tiền tố tên quy tắc của mình bằng 00, 04, 22, v.v. Có rất nhiều quy tắc iptables phụ thuộc vào thứ tự và nếu bạn tải chúng theo thứ tự sai, bạn sẽ có đồ hỏng Tôi khuyên bạn nên lưu trữ chúng trong một tệp trừ khi bạn thực sự biết bạn đang làm gì.
Christopher Cashell

1

Ngoài iptables-save(và iptables-restore), các chương trình tường lửa phức tạp được xử lý tốt hơn với các chương trình chuyên dụng. Ví dụ: chúng tôi đã sử dụng shorewall("iptables được thực hiện dễ dàng") để định cấu hình iptables.

Các công cụ đơn giản hơn cũng có sẵn, như Firestarterkmyfirewall .


6
Tôi không đồng ý. Các trường hợp đơn giản có thể dễ dàng xử lý bằng các chương trình chuyên dụng, nhưng đối với quy tắc phức tạp, tôi không thể nghĩ gì rõ ràng hơn iptables (rõ ràng hơn có nghĩa là không mơ hồ, không cần thiết cho người mới bắt đầu)
Mikeage

2
Phụ thuộc vào lý do tại sao bạn muốn đơn giản hóa các quy tắc. Tôi nghĩ rằng tệp iptables.rules có thể hoàn toàn dễ đọc. Điều quan trọng là tận dụng các đối số bình luận để hiểu tất cả.
spoulson

Tôi không đồng ý với sự bất đồng của bạn. Nếu bạn tập trung vào việc làm cho các lệnh iptables của bạn có thể đọc được, bạn sẽ không đặt hàng chúng hoặc sử dụng chuỗi để các quy tắc có hiệu quả nhất có thể.
Zoredache

1
Zoredache - Tôi nghĩ Mikeage đúng hơn sai ở đây. Các quy tắc iptables có thể khá rõ ràng, mặc dù chúng sẽ khó đọc đối với một người kém kỹ năng như tôi). Tôi không nghĩ Mikeage sẽ dễ đọc.
Michael Kohne

1

Điều này phụ thuộc vào phân phối bạn sử dụng. Một số bản phân phối, đặc biệt là các bản phân phối dựa trên bản phân phối Red Hat giữ các quy tắc iptables tự động nhưng trong thư mục đặc biệt của riêng nó. Tôi quen thuộc nhất với RHEL và các quy tắc iptables có thể được tìm thấy tại / etc / sysconfig / iptables. Làm quen với cú pháp quy tắc iptables lúc đầu có thể khó khăn nhưng khá dễ dàng một khi bạn nắm bắt được nó.

Trang web netfilter có rất nhiều tài liệu về iptables bao gồm một số giới thiệu. Nếu bạn muốn đọc một chút, bạn có thể tìm thấy rất nhiều thông tin tốt ở đây: http://www.netfilter.org/documentation/


Trên redhat bạn cũng có thể muốn giữ / etc / sysconfig / system-config-securitylevel cập nhật. Đây là nơi system-config-securitylevel-tui có các quy tắc từ lúc khởi động. Nếu bạn không cập nhật / etc / sysconfig / system-config-securitylevel, nếu ai đó chạy system-config-securitylevel-tui, bạn có thể mất các quy tắc được lưu trữ trong / etc / sysconfig / iptables.
Jason Tan

1

Câu hỏi này rất gần với một bản sao của 4934 và nó có liên quan đến 397 .

Tôi sử dụng firehol kết hợp với giao diện web mà tôi đã phát triển để quản lý tệp cấu hình.

Tôi thực sự thích firehol, nó cung cấp một cú pháp đơn giản hơn sau đó sử dụng iptables trực tiếp.

  • Bạn có thể sử dụng lệnh gỡ lỗi firehol để chính xác những gì lệnh iptables được tạo
  • Nếu bạn gặp lỗi trong cấu hình của mình và bạn khởi động tường lửa, firehol sẽ phát hiện lỗi và trở lại trạng thái trước đó.
  • Firehol có lệnh 'thử' mà bạn có thể sử dụng để khởi động tường lửa từ xa, nếu các thay đổi của bạn phá hủy kết nối của bạn, firehol sẽ trở lại trạng thái trước đó, nếu bạn không giết kết nối của mình thì nó sẽ yêu cầu bạn xác nhận thay đổi.
  • Firehol có một tập hợp lớn các dịch vụ được xác định trước, do đó bạn không cần phải nhớ chính xác cổng nào bạn phải có cổng nào để mở cho một số giao thức tối nghĩa.

1

Chúng tôi sử dụng một init-script tùy chỉnh, tất nhiên. Tôi có thể sử dụng các vòng lặp for để lặp qua danh sách các cổng, phân tích các tệp cấu hình khác như người dùng vpn, v.v ... Tuyệt vời!

Và iptables-restore chắc chắn là cách tiết kiệm "kinh điển" nhất.

Những gì tôi muốn thêm:

Xin lưu ý rằng phiên bản hiện tại của iptables sẽ cho mỗi lần gọi yêu cầu kernel trả lại danh sách đầy đủ các chuỗi. Sau đó, nó sẽ làm cho một thay đổi bạn yêu cầu nó làm. Sau đó, nó sẽ tải lên danh sách một lần nữa.

Đây là chậm (O (n ^ 2)), đối với chúng tôi, nó cần 5 giây, quá dài ;-)

Nếu bạn sử dụng iptables-restore, tất cả sẽ diễn ra trong một thao tác nhanh.

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.