iptables: Bộ lọc kịch bản cách thức của Wikipedia hoặc bộ lọc *, quy tắc, cách CAM KẾT?


7

Tôi đang cố gắng tìm ra cách NAT và iptables hoạt động. Trong khi tôi đang trong giai đoạn thử và sai khi tìm hiểu về nó, tôi đã tìm thấy hai howtos hơi mâu thuẫn.

Một cách sử dụng một tập lệnh để gọi iptablescác quy tắc lần lượt. Tập lệnh dường như được đặt tên và lưu trữ sao cho nó được thực thi sớm trong quá trình khởi động hệ thống và tôi nghĩ một vấn đề có thể là các tập lệnh khác có thể được gọi sau nó và hoàn tác ý định của nó. Tôi thậm chí nghĩ rằng tôi đã làm điều này một lần một cách tình cờ khi tôi lưu và đổi tên tập lệnh gốc (00-tường lửa) bằng cách sử dụng bản sao lưu (00-tường lửa cũ). Kịch bản ví dụ hình thành nên cách:

#!/bin/sh

PATH=/usr/sbin:/sbin:/bin:/usr/bin

#
# delete all existing rules.
#
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X

# Always accept loopback traffic
iptables -A INPUT -i lo -j ACCEPT


# Allow established connections, and those not coming from the outside
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW -i ! eth1 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Allow outgoing connections from the LAN side.
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

# Masquerade.
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

# Don't forward from the outside to the inside.
iptables -A FORWARD -i eth1 -o eth1 -j REJECT

# Enable routing.
echo 1 > /proc/sys/net/ipv4/ip_forward

Một cách khác không sử dụng tập lệnh mà là tập tin có một số quy tắc lọc được xác định. Nó trông như thế này:

*filter

# Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT

# Accepts all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Allows all outbound traffic
# You could modify this to only allow certain traffic
-A OUTPUT -j ACCEPT

# Allows HTTP and HTTPS connections from anywhere (the normal ports for websites)
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT

# Allows SSH connections 
# THE -dport NUMBER IS THE SAME ONE YOU SET UP IN THE SSHD_CONFIG FILE
-A INPUT -p tcp -m state --state NEW --dport 30000 -j ACCEPT

# Now you should read up on iptables rules and consider whether ssh access 
# for everyone is really desired. Most likely you will only allow access from certain IPs.

# Allow ping
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

# log iptables denied calls (access via 'dmesg' command)
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7

# Reject all other inbound - default deny unless explicitly allowed policy:
-A INPUT -j REJECT
-A FORWARD -j REJECT

COMMIT

Những ưu và nhược điểm của cả hai cách thiết lập iptables là gì? Thông tin cơ bản được đánh giá cao vì tôi khá mới đối với toàn bộ. Ví dụ: tôi không biết ai đang đọc tệp từ hướng dẫn sau và cách xử lý. Cảm giác của tôi cho tôi biết cách thứ hai gợi ý một giải pháp tốt hơn, nhưng tại sao chính xác?

Câu trả lời:


5

Tôi đã sử dụng cả hai kỹ thuật trong quá khứ. Những ngày này, tôi đang hướng về một sự kết hợp của cả hai.

Nếu quy tắc của bạn có năm hoặc sáu quy tắc đơn giản, một trong hai phương pháp đều ổn. Mọi thứ bắt đầu trở nên thú vị khi bạn có các quy tắc lớn: cài đặt lớn, hộp tường lửa của bạn thực hiện một chút định tuyến, v.v.

Chỉ cần nhớ, bạn có thể tự bắn vào chân mình bất kể bạn tải bộ quy tắc của mình như thế nào. :)

Dựa trên kịch bản

Bạn tạo một tập lệnh bash, tập lệnh Perl, tập lệnh Python - địa ngục, viết chương trình Lisp hoặc Befunge cho tất cả mọi người quan tâm! Trong tập lệnh, bạn tạo tất cả các quy tắc Netfilter bạn muốn.

Những mặt tích cực:

  • Tính trực tiếp. Bạn đang thử nghiệm các quy tắc và bạn chỉ cần sao chép và dán các quy tắc hoạt động từ dòng lệnh thẳng vào tập lệnh.
  • Tường lửa động. Một khách hàng của tôi chạy các thiết lập OpenVPN cho các khách hàng của riêng họ và mỗi khách hàng có phiên bản OpenVPN của riêng họ vì lý do bảo mật, tường lửa và kế toán. Tường lửa phòng thủ đầu tiên cần mở các cổng OpenVPN một cách linh hoạt cho mỗi bộ (IP, cổng). Vì vậy, tập lệnh tường lửa phân tích tệp kê khai của cấu hình OpenVPN và tự động chọc các lỗ cần thiết. Một số khác lưu trữ chi tiết máy chủ web trên LDAP; tập lệnh iptables truy vấn máy chủ LDAP và tự động cho phép xâm nhập vào máy chủ web. Trên các cài đặt lớn, đây là một lợi ích tuyệt vời.
  • Sự thông minh. Các tập lệnh tường lửa của tôi cho phép quản trị từ xa, ngay cả khi không tắt quản lý: sau khi bộ quy tắc được tải, nếu nhà điều hành không phản hồi trong vài phút, bộ quy tắc sẽ được đưa trở lại công cụ cuối cùng được biết. Nếu vì một lý do nào đó mà thất bại quá, có một lỗi thứ ba (và thứ tư) về việc giảm bảo mật.
  • Thông minh hơn: bạn có thể mở quyền truy cập SSH vào netblock của mình ở đầu tập lệnh, sau đó hủy bỏ nó ở cuối tập lệnh (và cho phép các phiên SSH được lọc). Vì vậy, nếu kịch bản của bạn thất bại, bạn vẫn có thể vào đó.
  • Ví dụ trực tuyến. Vì một số lý do, hầu hết các ví dụ mà tôi đã thấy trực tuyến đã sử dụng các yêu cầu iptables(điều này có thể bị ảnh hưởng bởi thực tế là một vài thiết lập tường lửa đầu tiên của tôi đã có trước iptables-savevà cả Netfilter - nhưng đó là một câu chuyện khác)

Nhược điểm:

  • Một lỗi cú pháp trong tập lệnh và bạn bị khóa khỏi tường lửa. Một số thông minh ở trên là xuống kinh nghiệm đau đớn. :)
  • Tốc độ. Trên boxen Linux nhúng, tập lệnh bash (hoặc thậm chí dấu gạch ngang) sẽ là một thứ chậm, chậm để chạy. Chậm đến mức, tùy thuộc vào chính sách bảo mật của bạn, bạn có thể cần xem xét thứ tự bổ sung quy tắc - bạn có thể có một lỗ hổng ngắn trong phòng thủ của mình, và thế là đủ. Tải quy tắc không nơi nào gần nguyên tử.
  • Phức tạp. Vâng, bạn có thể làm những điều tuyệt vời, nhưng vâng, bạn cũng có thể làm cho kịch bản quá phức tạp để hiểu hoặc duy trì.

Dựa trên quy tắc

Thêm quy tắc của bạn vào tệp quy tắc, sau đó sử dụng iptables-restoređể tải tệp (hoặc chỉ lưu quy tắc hiện có của bạn bằng cách sử dụng iptables-save). Đây là những gì Debian làm theo mặc định.

Ưu điểm:

  • Tốc độ. iptables-restorelà một chương trình C, và nó rất nhanh so với các kịch bản shell. Sự khác biệt là rõ ràng ngay cả trên các máy tốt, nhưng nó có độ lớn nhanh hơn trên phần cứng khiêm tốn hơn.
  • Thường xuyên. Định dạng dễ hiểu hơn, về cơ bản là tự ghi lại tài liệu (một khi bạn đã quen với các đặc thù của Netfilter).
  • Đó là Công cụ tiêu chuẩn, nếu bạn quan tâm đến điều đó.
  • Nó lưu tất cả các bảng Netfilter. Quá nhiều công cụ Netfilter (bao gồm iptables) chỉ hoạt động trên filterbàn và bạn có thể quên bạn có những công cụ khác theo ý của bạn (với các quy tắc có thể có hại trong đó). Bằng cách này, bạn có thể xem tất cả các bảng.

Nhược điểm:

  • Thiếu linh hoạt.
  • Với việc thiếu các tính năng tạo khuôn mẫu / tham số / tính năng động, việc lặp lại có thể dẫn đến các quy tắc ít bảo trì hơn và dẫn đến các lỗi quy tắc lớn. Bạn không muốn những thứ đó.

Một giải pháp lai - Tốt nhất của cả hai thế giới

Tôi đã phát triển cái này một thời gian trong Thời gian rảnh rỗi của tôi. Tôi đang lên kế hoạch sử dụng cùng một thiết lập dựa trên tập lệnh mà tôi có bây giờ, nhưng một khi bộ quy tắc được tải, nó sẽ lưu nó iptables-savevà sau đó lưu trữ nó cho lần sau. Bạn có thể có một quy tắc động với tất cả các lợi ích của nó, nhưng nó có thể được tải thực sự nhanh chóng khi, ví dụ, hộp tường lửa khởi động lại.


1

Một cái trông giống như đầu ra iptables-savevà do đó, đầu vào iptables-restoređược sử dụng để lưu và khôi phục (ví dụ: khi khởi động hệ thống) trạng thái hiện tại của tường lửa bộ lọc mạng.

Các iptableslệnh thao tác các bức tường lửa netfilter. Nó có thể được sử dụng để thực hiện một thay đổi duy nhất trong cấu hình tường lửa trực tiếp, ví dụ: thêm một quy tắc duy nhất, nhưng cũng sửa đổi hoặc xóa quy tắc.

để bạn tạo cấu hình mà bạn mong muốn với iptables, sau đó lưu cấu hình kết quả với iptables-save. Và thực hiện khôi phục cấu hình đó sau khi khởi động lại.

Hoặc tập lệnh các lệnh iptables bạn đã sử dụng để tạo tường lửa đó: Công -Ftắc sẽ xóa tường lửa tạo một bảng trống và sau đó thêm các quy tắc trong tập lệnh là một cách thay thế cho việc sử dụng lệnh iptables-restore sẽ dẫn đến trạng thái kết thúc tương tự.


1

Tôi đồng ý với @zebonaut ở chỗ bạn cần xem xét cẩn thận để đảm bảo rằng tường lửa / bộ định tuyến của bạn được bảo vệ đầy đủ trong quá trình khởi động và cả trong khi tải các quy tắc. Tôi đã kết thúc việc xây dựng các tập lệnh tạo tường lửa của riêng mình và khi tôi đã kiểm tra nó, tôi sao chép vào tập lệnh tường lửa. Nếu hai cái khác nhau thì một công việc định kỳ sẽ chạy công việc. Vì vậy, nếu tôi bị khóa, tôi có thể quay lại. Điều này rất hiếm khi các quy tắc đầu tiên cho phép lưu lượng truy cập được thiết lập / liên quan. Tôi có một chuỗi con khác nhau cho mỗi giao diện để chuyển tiếp và nhập liệu, nó giúp việc gỡ lỗi dễ dàng hơn.

Tôi có một tệp cài đặt riêng cho phép / vô hiệu hóa một số truy cập nhất định, tệp cài đặt được lật giữa chế độ ban ngày và ban đêm để khóa con tôi khỏi internet khi chúng nên ngủ trên giường! Đương nhiên, tôi cũng có thể ghi đè và khóa chúng bất cứ lúc nào tôi muốn :-)

Kịch bản tương tự xử lý ipv4 và ipv6. Nếu tôi sử dụng tên máy chủ, tôi đặt nó vào / etc / hosts hoặc tệp cài đặt thay vì dựa vào DNS, vì nếu DNS phá vỡ cấu hình tường lửa sẽ bị hỏng.

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.