iptables: sự khác biệt giữa các gói MỚI, THÀNH LẬP và LIÊN QUAN


46

Một phần của tường lửa trên máy chủ:

iptables -A INPUT -p tcp --dport 22 -m state NEW --state -m recent --set

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 100 --hitcount 10 -j DROP

Khi tôi tìm kiếm trực tuyến, tôi luôn thấy MỚI được sử dụng theo quy tắc đó nhưng tôi gặp khó khăn trong việc hiểu tại sao THÀNH LẬP và LIÊN QUAN không được sử dụng.

Như thế này :

iptables -A INPUT -p tcp --dport 22 -m state NEW,ESTABLISHED,RELATED --state -m recent --set

iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED,RELATED -m recent --update --seconds 100 --hitcount 10 -j DROP

Ai đó có thể giải thích cho tôi khi chính xác một gói MỚI thay đổi thành THÀNH LẬP VÀ LIÊN QUAN?

Câu trả lời:


46

Xem xét một gói MỚI một cuộc gọi điện thoại trước khi người nhận đã nhận. Một gói THÀNH LẬP là "Xin chào". Và một gói LIÊN QUAN sẽ là nếu bạn đang gọi để nói với họ về e-mail mà bạn sắp gửi cho họ. (Email được LIÊN QUAN.)

Trong trường hợp tương tự của tôi không tốt lắm, tôi cá nhân nghĩ rằng các trang nam xử lý nó tốt:

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 không thấy các gói theo cả hai hướng và

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.

iptables (8) - Trang người dùng Linux


9
Vì tò mò, bạn có biết làm thế nào nó xác định các gói LIÊN QUAN? Có một số cơ chế mà các ứng dụng có thể sử dụng để báo hiệu cho iptables rằng một kết nối sẽ là một kết nối có liên quan, hay nó hoàn toàn là một phần của trạng thái của iptables?
Matthew Scharley

9
Nó được xử lý bởi một loạt các mô-đun hạt nhân gọi là ip_conntrack_ *, mỗi mô-đun được viết cho một giao thức cụ thể sử dụng các kết nối không liên quan (như FTP). Để trả lời câu hỏi của bạn, tôi nghĩ bạn sẽ cần tải một mô-đun tương tự cho ứng dụng của mình.
Kyle Smith

4
Ok, cảm ơn bạn. Nhưng quay trở lại quy tắc với MỚI trong đó, không phải là một gói có thể được tạo ra trông giống như nó đã được THÀNH LẬP và liệu có bị chặn bởi quy tắc này không?
Kris

2
@Kris: Thật khó để giả mạo các gói gửi đi, vì vậy theo cách diễn đạt của trang man trong câu trả lời, tôi không thấy cách nào. Bạn đúng là có thể giả mạo một gói trông giống như bị ràng buộc bởi một kết nối mở, nhưng ngay cả khi không có tường lửa, ngăn xếp TCP sẽ chỉ thả gói xuống sàn nếu không biết về kết nối mở từ người gửi. Nếu đây là trên một bức tường lửa trên một router, nó vẫn có thể duy trì trạng thái này bằng cách kiểm tra SYN/ ACK/ RST/ etc gói khi chúng đi qua router, và tôi mong đợi iptables để làm điều này.
Matthew Scharley

2
@Kris: Một cái gì đó tương tự như thế này (mặc dù không giống hệt về mặt kỹ thuật) được VNC Software sử dụng như TeamViewer để đào hầm thông qua tường lửa / bộ định tuyến. Quá trình này được gọi là đục lỗ . Nói tóm lại, bạn có một PC chủ (có thể đứng sau một tường lửa hạn chế) mà bạn muốn kết nối từ một thiết bị khác (thông qua internet). Cả hai PC đều mở một kết nối riêng lẻ đến một máy chủ riêng biệt (ví dụ: Máy chủ TeamViewer), "trung gian" giữa chúng, do đó, nó nhìn vào tường lửa của chúng như thể các gói có liên quan với nhau và do đó các PC đó có thể thiết lập kết nối riêng với nhau khác
Levite

14

Asumming cho cả máy chủ và máy khách một hạn chế INPUTvà mở OUTPUT, tức là:

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT

Và từ iptables-extend (8) qua ví dụ về FTP ở chế độ hoạt động:

1. MỚI

MỚI 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 không thấy các gói theo cả hai hướng.

Máy khách trên cổng 50000(bất kỳ cổng không có đặc quyền ngẫu nhiên nào) kết nối với máy chủ FTP trên cổng 21, máy chủ sẽ cần ít nhất điều này để chấp nhận kết nối đến này:

iptables -A INPUT --dport 21 -m state --state NEW -j ACCEPT

2. THÀNH LẬP

THÀNH LẬP 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.

Bây giờ về phía khách hàng, ông mở một kết nối đi đến máy chủ trên cổng 21sử dụng một cổng địa phương 50000và ông cần iptables sau để cho phép các phản ứng đến từ server (21)đến client (50000):

sudo iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT

3. LIÊN QUAN

LIÊN QUAN Gói tin đ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.

Bây giờ sau khi kết nối FTP đã được thiết lập và kết nối dữ liệu sắp được thực hiện, máy khách sẽ mở một ổ cắm máy chủ (vâng, với máy khách FTP đang hoạt động sẽ trở thành máy chủ cho kết nối dữ liệu) trên cổng 60000(theo hiểu biết của tôi, khách hàng sẽ đánh dấu cổng này 60000như RELATEDkết nối khác từ 50000->21) và sẽ gửi số cổng này đến máy chủ bằng PORTlệnh FTP . Sau đó, máy chủ FTP sẽ mở một kết nối mới từ cổng của nó 20sang cổng 60000trên máy khách, và giờ đây, máy khách yêu cầu những điều sau đây để cho phép kết nối mới này thành công:

sudo iptables -A INPUT -m state --state RELATED -j ACCEPT

Cuối cùng, để làm việc này, bạn cần kích hoạt ip_conntrack_ftpmô-đun hạt nhân để cho phép hệ thống đánh dấu các kết nối / gói là RELATED(đây là sự hiểu biết của tôi, tôi đã không đào sâu về vấn đề này quá nhiều):

modprobe ip_conntrack_ftp

thành lập chỉ yêu cầu dòng chảy một chiều có nguồn gốc địa phương trước đây, không bắt tay 3 chiều tcp, sự hiểu biết của tôi có đúng không?
sdaffa23fdsf

Cảm ơn câu trả lời, vì đã thiết lập, bạn đã nói "iptables cho phép phản hồi đến từ máy chủ (21) đến máy khách (50000)" nếu nó là máy chủ TỪ đến máy khách tại sao lại INPUT chứ không phải OUTPUT?
Medya

@Medya, vì từ góc độ máy khách, các gói được gửi từ máy chủ (21) đến máy khách (50000) là các gói đến, vì vậy đối với máy khách, nó là một INPUT.
Jaime Hablutzel
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.