Khi sử dụng quy tắc tường lửa iptables, tại sao phải khẳng định trạng thái MỚI trên tất cả các cổng được phép?


23

Tôi thường thấy iptables được cấu hình để cho phép tất cả các pakets vào các kết nối LIÊN QUAN và các cổng dịch vụ cụ thể cho các kết nối MỚI.

Lý do cho biết MỚI là gì? Nếu một kết nối không phải là MỚI, tôi đoán là LIÊN QUAN, vì vậy quy tắc cổng cụ thể sẽ không thực thi. Vậy tại sao phải xác định rõ ràng các cổng dịch vụ với MỚI và không chỉ là số protocoll và số cổng?

Câu trả lời:


21

Các quy tắc trong tường lửa bộ lọc mạng (iptables) được kiểm tra tuần tự và số phận của gói (ACCEPT, DROP, RE DỰ, v.v.) được xác định trên cơ sở khớp đầu tiên.

Bằng cách làm cho tường lửa trở nên hoàn hảo và quy tắc đầu tiên -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT, phần lớn lưu lượng truy cập hợp pháp đến máy chủ của bạn được chấp nhận sau khi chỉ thông qua quy tắc duy nhất đó. Lưu lượng truy cập đó không cần phải vượt qua bất kỳ quy tắc nào khác.

Tùy thuộc vào kích thước của cơ sở quy tắc của bạn có thể có nghĩa là một sự khác biệt đáng kể trong hiệu suất tường lửa của bạn.

Lưu lượng duy nhất mà tường lửa hiện cần xác thực là các kết nối mới rõ ràng.

Tức là so sánh tường lửa cho một máy chủ web công cộng với quyền truy cập cho một số quản trị web nhỏ từ các máy trạm của họ:

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp -m multiport --dports 80,443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -m iprange --src-range 10.9.8.7-10.9.8.10 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited

Khoảng 99% các gói hợp pháp sẽ thuộc về các kết nối được thiết lập, chỉ đạt quy tắc đầu tiên. Trong số các gói không khớp với quy tắc đó, phần lớn phải là các kết nối mới đến trang web của bạn, mô-đun đa lõi có thể cấp quyền truy cập vào HTTP hoặc HTTPS theo một quy tắc duy nhất. Các quản trị web đăng nhập từ một số máy trạm có địa chỉ cố định bằng ssh và sftp và mọi thứ khác đều bị từ chối.

Tường lửa nơi các quy tắc được sắp xếp hợp lý bởi cổng TCP:

-A INPUT -p tcp  -m tcp --dport 22  --source 10.9.8.7 -j ACCEPT
-A INPUT -p tcp  -m tcp --dport 22  --source 10.9.8.8 -j ACCEPT
-A INPUT -p tcp  -m tcp --dport 22  --source 10.9.8.9 -j ACCEPT
-A INPUT -p tcp  -m tcp --dport 22  --source 10.9.8.10 -j ACCEPT
-A INPUT -p tcp  -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp  -m tcp --dport 443 -j ACCEPT

Ở đây , mỗi gói cho máy chủ web HTTP của bạn sẽ cần phải được kiểm tra theo 5 quy tắc trước khi quyền truy cập được cấp. Và với nhiều dịch vụ chạy trên máy chủ có thể dễ dàng trở thành 50 quy tắc hoặc nhiều hơn nữa khi bạn sử dụng fail2ban hoặc các sản phẩm tương tự.


1
Một câu trả lời xuất sắc (+1 từ tôi!) Ngoại trừ việc bạn nói " quyền truy cập được cho phép trên cơ sở kết hợp đầu tiên ". Nếu trận đấu đầu tiên xảy ra là DROP hoặc RE DỰ ÁN, điều này sẽ không cho phép truy cập; nếu đó là một LOG thì bạn phải tiếp tục tìm một trận đấu sau đó; và nếu chuỗi tùy chỉnh tham gia, mọi thứ có thể trở nên khá baroque. Tôi muốn nói thay rằng " số phận của gói được xác định trên cơ sở khớp đầu tiên ".
MadHatter hỗ trợ Monica

5
Bạn có thể phản ánh về trường hợp related/establisheddòng có mặt nhưng các quy tắc tiếp theo không khẳng định NEW?
Daniel Widrick

13

NEW có nghĩa là gói đã bắt đầu một kết nối mới.

Nó được xử lý bởi các mô-đun hạt nhân được gọi là ip_conntrack_*làm cho Tường lửa của bạn có trạng thái . Tường lửa nhà nước có thể xem dòng giao thông.

Nếu bạn chỉ định giao thức và số cổng, Tường lửa của bạn không ở trạng thái nhưng không trạng thái. Có nghĩa là nó chỉ hạn chế hoặc chặn các gói. Những loại tường lửa này không nhận thức được luồng dữ liệu.

Một ví dụ điển hình là FTP: FTP hoạt động sử dụng cổng 21 cho kênh điều khiển nhưng sau đó sử dụng cổng 20 cho kênh dữ liệu. Trong trường hợp Tường lửa có trạng thái, bạn không cần phải mở cổng 20 một cách rõ ràng vì nó có liên quan đến một liên kết được thiết lập mới trước đó trên cổng 21.

Đây là một trích đoạn của iptablestrang người đàn ông:

MỚI - có nghĩa là gói đã bắt đầu một kết nối mới hoặc liên kết với một kết nối chưa thấy các gói theo cả hai hướng.

THÀNH LẬP - có nghĩa là gói được liên kết với một kết nối đã thấy các gói theo cả hai hướng.

LIÊN QUAN - có nghĩa là gói đang bắt đầu một kết nối mới, nhưng được liên kết với một kết nối hiện có, chẳng hạn như truyền dữ liệu FTP hoặc lỗi ICMP.


1
Cơ chế nào sẽ 'kết hợp' cổng 20 với cổng 21? Kết nối IP đã mở có thể được chuyển sang cổng khác không?
dronus

nf_conntrack_ftp.ko
mateusza

7
-A INPUT -m tcp -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -DROP

Bộ quy tắc trên sẽ cho phép các gói tới cổng TCP 22 với trạng thái INVALIDthông quaACCEPT

Không hợp lệ : Nếu không có trạng thái nào trước đó áp dụng thì gói đó ở trạng thái INVALID. Điều này có thể được gây ra bởi các loại đầu dò mạng lén lút khác nhau hoặc có thể có nghĩa là bạn đang hết các mục CONNTRACK (mà bạn cũng sẽ thấy trong nhật ký của mình). Hoặc nó có thể chỉ đơn giản là hoàn toàn lành tính.

/unix/57423/how-to-understand-why-the-packet-was-considered-invalid-by-the-iptables


Khẳng định STATE NEWđảm bảo rằng các gói INVALID không bị nhầm lẫn.

Và để làm rõ nghĩa:

  • MỚI : Đây là một kết nối mới
  • THÀNH LẬP : Đây là một gói liên quan đến một kết nối hiện tại
  • LIÊN QUAN : Đây là một kết nối mới, nhưng đã được xác nhận bởi một kết nối hiện có
  • INVALID : Không có điều nào ở trên áp dụ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.