Hướng dẫn cho Người mới bắt đầu về iptables, Tường lửa Linux

Iptables là một tiện ích tường lửa cực kỳ linh hoạt được xây dựng cho hệ điều hành Linux. Cho dù bạn là một người mới làm quen với Linux hay một quản trị viên hệ thống, có thể có một số cách mà iptables có thể là một công dụng tuyệt vời đối với bạn. Đọc tiếp khi chúng tôi hướng dẫn bạn cách định cấu hình tường lửa Linux linh hoạt nhất.

ảnh chụp bởi ezioman.

Về iptables

iptables là một tiện ích tường lửa dòng lệnh sử dụng chuỗi chính sách để cho phép hoặc chặn lưu lượng. Khi một kết nối cố gắng tự thiết lập trên hệ thống của bạn, iptables sẽ tìm kiếm một quy tắc trong danh sách của nó để khớp với nó. Nếu không tìm thấy, nó sẽ sử dụng hành động mặc định.

iptables hầu như luôn được cài đặt sẵn trên bất kỳ bản phân phối Linux nào. Để cập nhật / cài đặt nó, chỉ cần truy xuất gói iptables:

sudo apt-get install iptables

Có các lựa chọn thay thế GUI cho iptables như Firestarter, nhưng iptables không thực sự khó khăn như vậy khi bạn có một vài lệnh. Bạn cần hết sức cẩn thận khi định cấu hình các quy tắc iptables, đặc biệt nếu bạn đang SSH vào một máy chủ, vì một lệnh sai có thể khóa bạn vĩnh viễn cho đến khi nó được sửa theo cách thủ công tại máy thực.

Các loại chuỗi

iptables sử dụng ba chuỗi khác nhau: đầu vào, chuyển tiếp và đầu ra.

Đầu vào - Chuỗi này được sử dụng để kiểm soát hành vi cho các kết nối đến. Ví dụ: nếu người dùng cố gắng SSH vào PC / máy chủ của bạn, iptables sẽ cố gắng khớp địa chỉ IP và cổng với một quy tắc trong chuỗi đầu vào.

Ở đằng trước - Chuỗi này được sử dụng cho các kết nối đến không thực sự được phân phối cục bộ. Hãy nghĩ về một bộ định tuyến - dữ liệu luôn được gửi đến nó nhưng hiếm khi thực sự dành cho chính bộ định tuyến; dữ liệu chỉ được chuyển tiếp đến mục tiêu của nó. Trừ khi bạn đang thực hiện một số loại định tuyến, NATing hoặc điều gì đó khác trên hệ thống của bạn yêu cầu chuyển tiếp, bạn thậm chí sẽ không sử dụng chuỗi này.

Có một cách chắc chắn để kiểm tra xem hệ thống của bạn có sử dụng / cần chuỗi chuyển tiếp hay không.

iptables -L -v

Ảnh chụp màn hình ở trên là của một máy chủ đã chạy được vài tuần và không có hạn chế về kết nối đến hoặc đi. Như bạn thấy, chuỗi đầu vào đã xử lý 11GB gói và chuỗi đầu ra đã xử lý 17GB. Mặt khác, chuỗi chuyển tiếp không cần xử lý một gói tin duy nhất. Điều này là do máy chủ không thực hiện bất kỳ loại chuyển tiếp nào hoặc được sử dụng làm thiết bị chuyển tiếp.

Đầu ra - Chuỗi này được sử dụng cho các kết nối đi. Ví dụ: nếu bạn cố gắng ping howtogeek.com, iptables sẽ kiểm tra chuỗi đầu ra của nó để xem các quy tắc liên quan đến ping và howtogeek.com trước khi đưa ra quyết định cho phép hoặc từ chối nỗ lực kết nối.

Báo trước

Mặc dù ping một máy chủ bên ngoài có vẻ giống như một thứ gì đó chỉ cần duyệt qua chuỗi đầu ra, hãy nhớ rằng để trả về dữ liệu, chuỗi đầu vào cũng sẽ được sử dụng. Khi sử dụng iptables để khóa hệ thống của bạn, hãy nhớ rằng nhiều giao thức sẽ yêu cầu giao tiếp hai chiều, vì vậy cả chuỗi đầu vào và đầu ra sẽ cần được định cấu hình đúng cách. SSH là một giao thức phổ biến mà mọi người quên cho phép trên cả hai chuỗi.

Hành vi mặc định của chuỗi chính sách

Trước khi đi vào và định cấu hình các quy tắc cụ thể, bạn sẽ muốn quyết định xem bạn muốn hành vi mặc định của ba chuỗi là gì. Nói cách khác, bạn muốn iptables làm gì nếu kết nối không khớp với bất kỳ quy tắc hiện có nào?

Để xem chuỗi chính sách của bạn hiện đang được định cấu hình để làm gì với lưu lượng truy cập chưa từng có, hãy chạy iptables -L chỉ huy.

Như bạn có thể thấy, chúng tôi cũng đã sử dụng lệnh grep để cung cấp cho chúng tôi đầu ra rõ ràng hơn. Trong ảnh chụp màn hình đó, các chuỗi của chúng tôi hiện được cho là chấp nhận lưu lượng truy cập.

Nhiều khi không, bạn sẽ muốn hệ thống của mình chấp nhận các kết nối theo mặc định. Trừ khi bạn đã thay đổi các quy tắc chuỗi chính sách trước đó, cài đặt này phải được định cấu hình. Dù bằng cách nào, đây là lệnh chấp nhận các kết nối theo mặc định:

iptables - CHẤP NHẬN ĐẦU VÀO chính sách


iptables - CHẤP NHẬN ĐẦU RA chính sách


iptables - CHÍNH SÁCH CHẤP NHẬN MỞ RỘNG

Bằng cách mặc định cho quy tắc chấp nhận, sau đó bạn có thể sử dụng iptables để từ chối các địa chỉ IP hoặc số cổng cụ thể, trong khi tiếp tục chấp nhận tất cả các kết nối khác. Chúng tôi sẽ thực hiện các lệnh đó sau một phút.

Nếu bạn muốn từ chối tất cả các kết nối và chỉ định thủ công những kết nối nào bạn muốn cho phép kết nối, bạn nên thay đổi chính sách mặc định của chuỗi của mình để loại bỏ. Làm điều này có lẽ sẽ chỉ hữu ích cho các máy chủ chứa thông tin nhạy cảm và chỉ có cùng địa chỉ IP kết nối với chúng.

iptables - CHÍNH SÁCH ĐẦU VÀO DROP


iptables - CHÍNH SÁCH ĐẦU RA DROP


iptables - chính sách FORWARD DROP

Phản hồi dành riêng cho kết nối

Với các chính sách chuỗi mặc định của bạn được định cấu hình, bạn có thể bắt đầu thêm quy tắc vào iptables để iptables biết phải làm gì khi gặp kết nối từ hoặc đến một địa chỉ IP hoặc cổng cụ thể. Trong hướng dẫn này, chúng ta sẽ xem xét ba "câu trả lời" cơ bản và thường được sử dụng nhất.

Chấp nhận - Cho phép kết nối.

Rơi vãi - Bỏ kết nối, hành động như thể nó chưa từng xảy ra. Điều này là tốt nhất nếu bạn không muốn nguồn nhận ra hệ thống của bạn tồn tại.

Từ chối - Không cho phép kết nối nhưng gửi lại lỗi. Điều này là tốt nhất nếu bạn không muốn một nguồn cụ thể kết nối với hệ thống của mình nhưng bạn muốn họ biết rằng tường lửa của bạn đã chặn họ.

Cách tốt nhất để chỉ ra sự khác biệt giữa ba quy tắc này là hiển thị nó trông như thế nào khi PC cố gắng ping một máy Linux có cấu hình iptables cho từng cài đặt này.

Cho phép kết nối:

Bỏ kết nối:

Từ chối kết nối:

Cho phép hoặc Chặn các kết nối cụ thể

Với các chuỗi chính sách của bạn đã được định cấu hình, giờ đây bạn có thể định cấu hình iptables để cho phép hoặc chặn các địa chỉ, dải địa chỉ và cổng cụ thể. Trong các ví dụ này, chúng tôi sẽ đặt các kết nối thành RƠI VÃI, nhưng bạn có thể chuyển chúng sang CHẤP NHẬN hoặc là TỪ CHỐI, tùy thuộc vào nhu cầu của bạn và cách bạn định cấu hình chuỗi chính sách của mình.

Lưu ý: Trong những ví dụ này, chúng tôi sẽ sử dụng iptables -A để nối các quy tắc vào chuỗi hiện có. iptables bắt đầu ở đầu danh sách và đi qua từng quy tắc cho đến khi tìm thấy quy tắc phù hợp. Nếu bạn cần chèn một quy tắc bên trên một quy tắc khác, bạn có thể sử dụng iptables -I [chuỗi] [số] để chỉ định số nó sẽ có trong danh sách.

Kết nối từ một địa chỉ IP duy nhất

Ví dụ này cho thấy cách chặn tất cả các kết nối từ địa chỉ IP 10.10.10.10.

iptables -A INPUT -s 10.10.10.10 -j DROP

Kết nối từ nhiều địa chỉ IP

Ví dụ này cho thấy cách chặn tất cả các địa chỉ IP trong phạm vi mạng 10.10.10.0/24. Bạn có thể sử dụng mặt nạ mạng hoặc ký hiệu gạch chéo tiêu chuẩn để chỉ định dải địa chỉ IP.

iptables -A INPUT -s 10.10.10.0/24 -j DROP

hoặc là

iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP

Kết nối với một cổng cụ thể

Ví dụ này cho thấy cách chặn các kết nối SSH từ 10.10.10.10.

iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP

Bạn có thể thay thế “ssh” bằng bất kỳ giao thức hoặc số cổng nào. Các -p tcp một phần của mã cho iptables biết loại kết nối mà giao thức sử dụng. Nếu bạn đang chặn một giao thức sử dụng UDP thay vì TCP, thì -p udp thay vào đó sẽ là cần thiết.

Ví dụ này cho thấy cách chặn kết nối SSH từ bất kỳ địa chỉ IP nào.

iptables -A INPUT -p tcp --dport ssh -j DROP

Các trạng thái kết nối

Như chúng tôi đã đề cập trước đó, rất nhiều giao thức sẽ yêu cầu giao tiếp hai chiều. Ví dụ: nếu bạn muốn cho phép kết nối SSH với hệ thống của mình, các chuỗi đầu vào và đầu ra sẽ cần một quy tắc được thêm vào chúng. Nhưng, điều gì sẽ xảy ra nếu bạn chỉ muốn SSH vào hệ thống của mình được cho phép? Không thêm quy tắc vào chuỗi đầu ra cũng cho phép các lần thử SSH gửi đi?

Đó là nơi xuất hiện các trạng thái kết nối, cung cấp cho bạn khả năng cần thiết để cho phép giao tiếp hai chiều nhưng chỉ cho phép thiết lập kết nối một chiều. Hãy xem ví dụ này, trong đó các kết nối SSH TỪ 10.10.10.10 được phép, nhưng kết nối SSH ĐẾN 10.10.10.10 thì không. Tuy nhiên, hệ thống được phép gửi lại thông tin qua SSH miễn là phiên đã được thiết lập, điều này giúp cho việc giao tiếp SSH giữa hai máy chủ này có thể thực hiện được.

iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m trạng thái - trạng thái MỚI, THÀNH LẬP -j CHẤP NHẬN

iptables -A OUTPUT -p tcp - thể thao 22 -d 10.10.10.10 -m trạng thái - trạng thái LẬP TỨC -j CHẤP NHẬN

Lưu thay đổi

Các thay đổi mà bạn thực hiện đối với các quy tắc iptables của mình sẽ bị loại bỏ vào lần tiếp theo khi dịch vụ iptables được khởi động lại trừ khi bạn thực hiện lệnh để lưu các thay đổi. Lệnh này có thể khác nhau tùy thuộc vào phân phối của bạn:

Ubuntu:

sudo / sbin / iptables-save

Mũ đỏ / CentOS:

/ sbin / service iptables save

Hoặc là

/etc/init.d/iptables lưu

Các lệnh khác

Liệt kê các quy tắc iptables hiện được định cấu hình:

iptables -L

Thêm -v tùy chọn sẽ cung cấp cho bạn thông tin gói và byte, đồng thời thêm -n sẽ liệt kê mọi thứ bằng số. Nói cách khác - tên máy chủ, giao thức và mạng được liệt kê dưới dạng số.

Để xóa tất cả các quy tắc hiện được định cấu hình, bạn có thể đưa ra lệnh tuôn ra.

iptables -F


$config[zx-auto] not found$config[zx-overlay] not found