Trang chủ » làm thế nào để » Hướng dẫn cho người mới bắt đầu về iptables, Tường lửa Linux

    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 các hệ điều hành Linux. Cho dù bạn là người đam mê Linux mới hay quản trị viên hệ thống, có thể có một số cách mà iptables có thể là một ứng dụng tuyệt vời cho bạn. Đọc tiếp khi chúng tôi chỉ cho bạn cách định cấu hình tường lửa Linux linh hoạt nhất.

    ảnh chụp bởi người Iran.

    Về iptables

    iptables là một tiện ích tường lửa dòng lệnh sử dụng các 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 một quy tắc trong danh sách của nó để khớp với nó. Nếu nó không tìm thấy, nó dùng đến 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 lấy gói iptables:

    sudo apt-get cài đặt iptables

    Có các lựa chọn thay thế GUI cho iptables như Firestarter, nhưng iptables thực sự không khó lắm khi bạn có một vài lệnh. Bạn muốn cực kỳ cẩn thận khi định cấu hình quy tắc iptables, đặc biệt nếu bạn SSH vào 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 thủ công tại máy vật lý.

    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 quy tắc trong chuỗi đầu vào.

    Phía 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ự được 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 một cái 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 trong vài tuần và không có giới hạn đối với các kết nối đến hoặc đi. Như bạn có thể 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. Đ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 đang được sử dụng làm thiết bị chuyển qua.

    Đầ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.

    Hãy cẩn thận

    Mặc dù ping máy chủ bên ngoài có vẻ như chỉ cần đi 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 rất 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 phải được cấu hình đúng. 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.

    Chuỗi chính sách Hành vi mặc định

    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 được định cấu hình để làm gì với lưu lượng 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 sạch hơn. Trong ảnh chụp màn hình đó, các chuỗi của chúng tôi hiện đang tìm cách chấp nhận lưu lượng truy cập.

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

    iptables - CHÍNH XÁC VÀO CHẤP NHẬN
    iptables - CHẤP NHẬN ĐẦU RA CHÍNH XÁC
    iptables - CHẤP NHẬN R FOR RÀNG

    Theo mặc định theo quy tắc chấp nhận, sau đó bạn có thể sử dụng iptables để từ chối địa chỉ IP cụ thể hoặc số cổng, 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ẽ nhận được các lệnh đó trong 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 để loại bỏ. Làm điều này có lẽ chỉ hữu ích cho các máy chủ chứa thông tin nhạy cảm và chỉ bao giờ có cùng địa chỉ IP kết nối với chúng.

    iptables - INPUT DROP
    iptables - Polip OUTPUT DROP
    iptables - chính thức 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 để nó 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 tôi sẽ giới thiệu 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 - Thả kết nối, hành động như không bao giờ 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 để thể hiện sự khác biệt giữa ba quy tắc này là hiển thị giao diện khi PC cố gắng ping máy Linux với iptables được định cấu hình cho mỗi một trong các cài đặt này.

    Cho phép kết nối:

    Mất 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ỉ cụ thể, phạm vi địa chỉ và cổng. Trong các ví dụ này, chúng tôi sẽ đặt 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 các 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 của nó và đi qua từng quy tắc cho đến khi tìm thấy một quy tắc phù hợp. Nếu bạn cần chèn một quy tắc trên một quy tắc khác, bạn có thể sử dụng iptables -I [chuỗi] [số] để chỉ định số cần có trong danh sách.

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

    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ừ một loạt các đị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 ký hiệu netmask hoặc ký hiệu gạch chéo tiêu chuẩn để chỉ định phạm vi đị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 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 Cảnh 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 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 chứ không phải 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

    Kết nối các quốc gia

    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ào hệ thống của mình, 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, nếu bạn chỉ muốn SSH vào hệ thống của mình thì sao? Không thêm quy tắc vào chuỗi đầu ra cũng cho phép các nỗ lực SSH đi?

    Đó là nơi các trạng thái kết nối xuất hiện, cung cấp cho bạn khả năng bạn cần cho phép giao tiếp hai chiều nhưng chỉ cho phép kết nối một chiều được thiết lập. Hãy xem ví dụ này, trong đó các kết nối SSH TỪ 10.10.10.10 được cho phép, nhưng các 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 giao tiếp SSH có thể giữa hai máy chủ này.

    iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m state --state MỚI, THÀNH LẬP -j CHẤP NHẬN

    iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state --state THÀNH LẬP -j CHẤP NHẬN

    Lưu thay đổi

    Các thay đổi bạn thực hiện đối với quy tắc iptables của bạn 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 / dịch vụ iptables lưu

    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 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, và 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 cấu hình, bạn có thể ban hành lệnh flush.

    iptables -F