Bạn có thể giới thiệu một giới thiệu tốt cho iptables? [đóng cửa]


15

Tôi phải thiết lập tường lửa trên máy chủ Linux (tất cả kinh nghiệm trước đây của tôi là với Windows). Các quy tắc của tôi có nghĩa là khá đơn giản - cấm tất cả, cho phép một số cổng với tất cả, cho phép một số cổng cho các mạng con IP cụ thể, trong khi mạng nhỏ nhưng phức tạp (mỗi máy chủ có IP trong ít nhất 2 192.168 ... lưới, mọi người đều có thể kết nối nhiều cách khác nhau). Tôi nghĩ rằng việc sử dụng các trình bao bọc iptables có thể làm phức tạp hệ thống giới thiệu một cách hợp lý nhiều thực thể không cần thiết và tốt hơn là giữ cho nó đơn giản và sử dụng iptables trực tiếp.

Bạn có thể giới thiệu một đoạn giới thiệu nhanh về cách viết quy tắc iptables không?

Câu trả lời:


26

Liên kết đến tài liệu chính thức và được đề xuất tồn tại trên trang web Netfilter.

Đây không phải là một chủ đề mới, tài nguyên là vô hạn .

Hầu hết các lệnh cơ bản là khá trực quan và có thể dễ dàng được tham chiếu đến trang chủ .

netfilter, công nghệ cấp kernel cho phép lọc gói, khá tiên tiến. Có các bảng bổ sung có thể quản lý gói, dịch gói và ảnh hưởng đến việc định tuyến. Các iptablestiện ích là công cụ Userland để tương tác với netfilter. Nếu bạn muốn tìm hiểu về chức năng nâng cao, tôi khuyên bạn nên tham khảo tài liệu nói trên. Để biết giới thiệu về các chức năng cơ bản, xin vui lòng đọc thêm.

Để liệt kê tất cả các quy tắc hiện có:

iptables -L -n

-n ngăn iptables giải quyết ips, tạo ra đầu ra nhanh hơn.

Bảng mặc định là filterbảng, đây là bảng được sử dụng để áp dụng các quy tắc tường lửa cơ bản cho ba chuỗi. Ba chuỗi mặc định trong filterbảng là INPUT, OUTPUT, và FORWARD.

Các chuỗi phần lớn là tự giải thích. Chuỗi INPUT ảnh hưởng đến các gói đến, chuỗi OUTPUT ảnh hưởng đến các gói được tạo cục bộ và cuối cùng là FORWARD cho bất kỳ gói nào đi qua hệ thống.

Trong số các mục tiêu bạn có thể chỉ định, bạn có thể DROPgói, có nghĩa là chỉ cần bỏ qua và không trả lời. Bạn có thể REJECTgói, trong đó một phản hồi icmp sẽ được gửi đến nguồn từ chối. Cuối cùng, bạn có thể ACCEPTchúng, cho phép các gói tiếp tục định tuyến.

Thông thường với tường lửa đối diện bên ngoài, lựa chọn mặc định sẽ DROPtrái ngược với REJECT, vì nó làm giảm dấu chân có thể nhìn thấy của mạng của bạn trên Internet. Ví dụ: một IP giới hạn các dịch vụ đối với một máy chủ cụ thể sẽ có ít khả năng hiển thị hơn DROP.

Lưu ý, -Acó nghĩa là nối vào cuối chuỗi. Nếu bạn muốn chèn lên đầu, bạn có thể sử dụng -I. Tất cả các quy tắc được xử lý từ trên xuống. -Dđể xóa.

Đến DROPmột gói đến từ 192.168.235.235:

iptables -A INPUT -s 192.168.235.235 -j DROP

Điều này nhảy đến DROPmục tiêu cho tất cả các giao thức đến từ IP đó.

Chấp nhận:

iptables -A INPUT -s 192.168.235.235 -j ACCEPT

Để ngăn truy cập vào IP đó từ máy chủ hoặc mạng cục bộ của bạn:

iptables -A OUTPUT -d 192.168.235.235 -j DROP

Bạn có thể chỉ định -pgiao thức, -snguồn của gói, -dđích của gói, cổng đích --dport, cổng nguồn --sportvà nhiều cờ khác sẽ ảnh hưởng đến cách các gói được xử lý theo quy tắc.

Nếu INPUTchính sách mặc định của bạn là DROPvà bạn muốn cho phép mọi người trong 192.168.123.0/24mạng con truy cập SSH trên máy chủ của mình thì đây là một ví dụ:

iptables -A INPUT -s 192.168.123.0/24 -p tcp --dport 22 -j ACCEPT

Đúng vậy, bạn cũng có thể sử dụng ký hiệu CIDR !

Nói chung, chính sách mặc định tốt nhất là DROPdành cho tất cả các chuỗi. Mỗi chuỗi có một chính sách mặc định, được chỉ định bởi -Pcờ. Ngay cả khi bạn đã đặt chính sách của mình thành mặc định DROP, bạn vẫn nên có mục cuối cùng trong chuỗi DROP.

Ví dụ: để thay đổi chính sách đối DROPvới các chuỗi INPUT, FORWARD và OUTPUT:

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

Hãy cẩn thận , nếu bạn chỉ định chính sách mặc định của DROP cho INPUT trên hệ thống từ xa mà trước tiên không cho phép bạn truy cập SSH, bạn có thể ngăn mình truy cập hệ thống. Nếu trên một hệ thống từ xa, bạn có thể chỉ định một crontab tạm thời để xóa tất cả các quy tắc cứ sau 5 phút là không an toàn.

Để xóa tất cả các quy tắc và cho phép tất cả lưu lượng truy cập:

iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -X
iptables -F

Lưu ý, -Xloại bỏ tất cả các chuỗi đã tạo. -Ftuôn ra tất cả các quy tắc.

Có các công cụ gốc để lưu và khôi phục các quy tắc. Đặc biệt, iptables-saveiptables-restore. Hầu hết các bản phân phối Linux hiện đại đều có savevà các restorechức năng trong tệp init iptables được cung cấp cùng với hệ thống.

Có các thực tiễn tốt nhất về tường lửa khác, chẳng hạn như bỏ các gói không đúng định dạng và loại lưu lượng không mong muốn khác. Đây là một lợi thế của việc sử dụng tiện ích giao diện người dùng như Shorewall , vì nó sẽ thực hiện nhiều chính sách này theo mặc định. Tuy nhiên, tôi đồng ý với cách tiếp cận của bạn và cũng muốn duy trì trực tiếp các quy tắc của riêng tôi và những thực tiễn tốt nhất này có thể được thực hiện mà không cần kết thúc.


2
Chỉ cần bắt gặp câu trả lời này trong khi tìm kiếm một số thứ iptables ngẫu nhiên ở đây (tôi tìm kiếm SF / SO trước Google nữa!), Và câu trả lời rất chi tiết này dường như xứng đáng được yêu thích hơn, vì vậy tôi đã đưa ra một số!
Andrew Barber

+1 câu trả lời hay. Tôi cũng sẽ đề cập đến Debian WIKI .
michal.kreuzman


1

Tôi thấy https://help.ubfox.com/community/IptablesHowTo hữu ích gần đây. Tôi không nghĩ bất cứ điều gì trong đó đặc biệt là Ubuntu.


Tôi sử dụng Arch trên máy tính xách tay của mình, nhưng Máy chủ Ubuntu Lucid chính xác là nhiệm vụ cần thiết lập. Vì vậy, điều này có thể đến trong tay nếu không lỗi thời (nó giải quyết Ubuntu 8.04 theo như tôi có thể thấy).
Ivan
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.