Tập hợp tối thiểu các quy tắc iptables cho các tác vụ điển hình. Iptables: Bảo mật mạng và lọc gói

Chúc mừng tất cả! Trong việc tiếp tục công chúng Điều này bài viết thực tế về bộ lọc mạng Linux.. Bài báo xem xét ví dụ điển hình của quy tắc iptables thực hiện Trong Linux, cũng như xem xét cách Lưu cấu hình iptables đã tạo.

Đặt netfilter / iptables cho một máy trạm

Hãy bắt đầu với một nhiệm vụ tiểu học - thực hiện màn hình mạng Linux trên máy tính để bàn. Trong hầu hết các trường hợp, trên các bản phân phối máy tính để bàn, Linux không cần sử dụng tường lửa, bởi vì Trên các bản phân phối như vậy, bất kỳ dịch vụ nào nghe các cổng mạng không được tung ra, nhưng vì mục đích phòng ngừa để tổ chức bảo vệ sẽ không quá thừa. Đối với kernel cũng không được bảo hiểm về lỗ hổng. Vì vậy, chúng tôi có Linux, với eth0, nó không quan trọng bởi DHCP hoặc ...

Để cài đặt màn hình mạng Tôi cố gắng bám vào chính sách tiếp theo: để cấm mọi thứ, và sau đó những gì cần phải được giải quyết. Vì vậy, làm trong trường hợp này. Nếu bạn có một hệ thống mới được cài đặt và bạn không cố gắng định cấu hình bộ lọc mạng trên đó, các quy tắc sẽ có về hình ảnh sau:

NetFilter: ~ # iptables -l Đầu vào chuỗi (Chấp nhận chính sách) Mô-ri điểm tham gia Target Opt Opt Opt Opt POURCE (Chấp nhận chính sách) Target Prot Opt Opt Opt Opt Opt Opt Opt Source Điểm đến (chấp nhận chính sách) đích prot opt \u200b\u200bNguồn

Điều này có nghĩa là chính sách mặc định cho bộ lọc bảng. Trong tất cả các chuỗi - Chấp nhận Và không có quy tắc nào khác, bất cứ điều gì cấm. Vì vậy, hãy lần đầu tiên chúng ta cấm mọi thứ và gói hàng (Đừng cố gắng làm điều đó từ xa, ngay lập tức mất quyền truy cập):

NetFilter: ~ # iptables -p đầu vào thả netfilter: ~ # iptables -p đầu ra thả netfilter: ~ # ~ iptables -p chuyển tiếp thả

Chúng tôi cài đặt những đội này Rơi vãi. mặc định. Điều này có nghĩa là bất kỳ gói nào mà quy tắc rõ ràng không được chỉ định rằng nó cho phép nó được loại bỏ tự động. Vì chúng tôi vẫn không chỉ định bất kỳ quy tắc nào - tất cả các gói sẽ bị từ chối, sẽ đến với máy tính của bạn, cũng như những gói mà bạn cố gắng gửi đến mạng. Là một cuộc biểu tình, bạn có thể cố gắng tuyên truyền máy tính của mình thông qua giao diện vòng lặp ngược:

NetFilter: ~ # ping -c2 127.0.0.0 ping 127.0.0.1 (127.0.0.1) 56 (84) byte dữ liệu. Ping: sendmsg: hoạt động không được phép ping: sendmsg: hoạt động không được phép --- số liệu thống kê ping localhost --- 2 gói được truyền, 0 nhận, mất gói 100%, thời gian 1004ms

Trong thực tế, đây là một mạng hoạt động đầy đủ và nó không tốt lắm, bởi vì Một số quỷ được sử dụng để trao đổi giao diện vòng lặp, sau khi các hành động đã thực hiện không còn hoạt động. Điều này có thể phá vỡ công việc của các dịch vụ như vậy. Do đó, trước hết là nhất thiết cho phép truyền gói thông qua giao diện lặp đến và giao diện loopback gửi đi trong các bảng đầu vào (Đối với khả năng nhận gói đã gửi) và Đầu ra. (Đối với khả năng gửi các gói), tương ứng. Vì vậy, hãy chắc chắn:

Netfilter: ~ # iptables -a nhập -Tôi lo -j chấp nhận netfilter: ~ # iptables -a đầu ra -o lo -j chấp nhận

Sau đó, Ping trên Lockochost sẽ hoạt động:

NetFilter: ~ # Ping -C1 127.0.0.0.1 PING 127.0.0.1 (127.0.0.1) 56 (84) byte dữ liệu. 64 byte từ 127.0.0.1 (127.0.0.1): ICMP_SEQ \u003d 1 TTL \u003d 64 Time \u003d 0,116 ms --- 127.0.0.0.1 Thống kê PING --- 1 gói được truyền, 1 nhận, mất gói 0%, thời gian 116ms RTT Min / AVG / MAX / MDEV \u003d 0.116 / 0.116 / 0.116 / 0.116 MS

Nếu bạn tiếp cận cấu hình tường lửa, thì nó không cực kỳ cực kỳ phô trương, sau đó bạn có thể bật hoạt động của giao thức ICMP:

NetFilter: ~ # iptables -a Nhập -p ICMP -J Chấp nhận NetFilter: ~ # iptables -a Output -P ICMP -J Chấp nhận

Nó sẽ là sarete để chỉ định lệnh iptables tương tự sau:

Netfilter: ~ # iptables -a nhập -p ICMP --icmp-type -j Chấp nhận NetFilter: ~ # iptables -a nhập -p ICMP - loại 8 -j Chấp nhận NetFilter: ~ # iptables -a Output -P ICMP -J chấp nhận

Lệnh này sẽ cho phép các loại ICMP của yêu cầu tiếng vang và gói phản hồi Echo sẽ tăng sự an toàn.

Biết rằng máy tính của chúng tôi không bị nhiễm (sau tất cả, điều này là như vậy?) Và nó chỉ thiết lập các hợp chất đi an toàn. Cũng như biết rằng các hợp chất an toàn là các hợp chất từ \u200b\u200bcái gọi là. Dãy cổng ethimer được chỉ định bởi kernel trong tệp / Proc / sys / net / ipv4 / ip_local_port_range,có thể cho phép các hợp chất đi Với các cổng an toàn:

Netfilter: ~ # Cat / Proc / sys / net / ipv4 / ip_local_port_range 32768 61000 netfilter: ~ # iptables -a Output -p TCP --Sport 32768: 61000 -j Chấp nhận NetFilter: ~ # iptables -a Output 32768: 61000 -J Chấp nhận

Nếu bạn tiếp cận các hạn chế của các gói đi không hoang tưởng, thì bạn có thể giới hạn cùng một lệnh iptables cho phép tất cả các kết nối trên lưỡi Op tất cả các giao thức và cổng:

Netfilter: ~ # iptables -a Output -J Chấp nhận NetFilter: ~ # # hoặc chỉ cần đặt chính sách mặc định Chấp nhận cho chuỗi NetFilter đầu ra: ~ # iptables -p đầu ra chấp nhận

Tiếp theo, biết rằng các kết nối mạng NetFilter có 4 tiểu bang ( MớiThành lập,Liên quan I.Không hợp lệ.) Và các kết nối gửi đi mới từ máy tính cục bộ (với trạng thái mới) được phép trong hai lệnh iptables qua, đã cài đặt các hợp chất và bổ sung có trạng thái Thành lập I.Liên quan Theo đó, cũng như biết rằng hệ thống cục bộ xuất hiện, bạn chỉ có thể cho phép những gói TCP và UDP đó vào máy tính của chúng tôi, được yêu cầu bởi các ứng dụng cục bộ:

Netfilter: ~ # iptables -a đầu vào -p TCP -m Tiểu bang --State được thiết lập, liên quan -j Chấp nhận NetFilter: ~ # iptables -a nhập -p-udp -m State --State được thiết lập, Chấp nhận liên quan

Đó thực sự là tất cả! Nếu một số dịch vụ mạng hoạt động trên máy tính để bàn, thì bạn cần thêm các quy tắc thích hợp cho các kết nối đến và để gửi đi. Ví dụ, Đối với SSH Server.chấp nhận và gửi yêu cầu đến 22 cổng TCP, bạn phải thêm phần sau iptables-cynut.:

Netfilter: ~ # iptables -a đầu vào -i eth0 -p tcp --dport 22 -j Chấp nhận NetFilter: ~ # iptables -a Output -o eth0 -p TCP --Sport 22 -J Chấp nhận 22 -J -J chấp nhận

Những, cái đó. Đối với bất kỳ dịch vụ nào, bạn cần thêm một quy tắc vào chuỗi đầu vào và đầu ra, cho phép tiếp nhận và gửi các gói bằng cách sử dụng cổng này để biết giao diện mạng cụ thể (nếu giao diện không chỉ định, nó sẽ được phép nhận / gửi gói trên bất kỳ gói nào giao diện).

Thiết lập NetFilter / iptables để kết nối nhiều máy khách với một kết nối.

Bây giờ chúng ta hãy xem xét chúng ta Linux dưới dạng cổng mạng cục bộ đến mạng Internet bên ngoài. Hãy giả vờ rằng giao diện eth0 kết nối với internet và có IP 198.166.0.200, và giao diện ETH1 được kết nối với mạng cục bộ. và có IP 10.0.0.1. Mặc định, trong nhân Linux gói vận chuyển qua chuỗi chuyển tiếp (gói không nhằm mục đích hệ thống cục bộ) bị vô hiệu hóa. Để bật tính năng này, bạn phải đặt giá trị 1 trong tệp :

NetFilter: ~ # echo 1\u003e / Proc / sys / net / ipv4 / ip_forward

Đến gói chuyển tiếp Được bảo tồn sau khi khởi động lại, bạn cần trong tập tin /etc/sysctl.conf. Rassate (hoặc chỉ thêm) chuỗi net.ipv4.ip_forward \u003d 1..

Vì vậy, chúng tôi có một địa chỉ bên ngoài (198.166.0.200), trên mạng cục bộ, có một số khách hàng giả định có và gửi yêu cầu đến mạng bên ngoài. Nếu các khách hàng này được gửi đến các yêu cầu mạng bên ngoài thông qua cổng "như", không có chuyển đổi, máy chủ từ xa sẽ không thể trả lời chúng, vì Địa chỉ đảo ngược sẽ là người nhận từ "LAN". Để sơ đồ này hoạt động chính xác, bạn phải thay thế địa chỉ của người gửi, đến địa chỉ bên ngoài của cổng Linux. Điều này đạt được với chi phí (Masquerading) trong, trong.

Netfilter: ~ # iptables -a chuyển tiếp -m Conntrack --ctstate được thiết lập, liên quan -j Chấp nhận NetFilter: ~ # iptables -a Chuyển tiếp -m Conntrack - UCTATE New -I eth1 -s 10.0.0.1/24 -j Chấp nhận NetFilter: ~ # Apptabler -p forward thả netfilter: ~ # iptables -t nat -a postouting -o eth0 -j Superquerade

Vì vậy, theo thứ tự từ trên xuống, chúng tôi cho phép các hợp chất đã được thiết lập trong chuỗi về phía trước., bộ lọc bảng., sau đó chúng tôi cho phép bạn cài đặt các kết nối mới trong chuỗi về phía trước., bộ lọc bảng.phát ra từ giao diện eth1 và từ mạng ngày 10.0.0.1/24. Tất cả các gói khác đi qua chuỗi về phía trước. - Hủy bỏ. Tiếp theo, chúng tôi thực hiện mặt nạ (menu con địa chỉ của người gửi gói trong các tiêu đề) của tất cả các gói đi từ giao diện eth0.

Ghi chú. Có một số khuyến nghị chung: Sử dụng quy tắc hóa trang -J cho các giao diện với IP tự động (ví dụ: bởi DHCP từ nhà cung cấp). Với IP tĩnh, -j Superman có thể được thay thế bằng giao diện IP_ Snat-Soume-Snat-sang tương tự_eth0. Ngoài ra, Snat có thể "nhớ" về các kết nối được thiết lập với sự không có sẵn ngắn hạn của giao diện. So sánh Masquerade và Snat trong bảng:

Ngoài các quy tắc này, bạn cũng có thể thêm các quy tắc để lọc các gói được thiết kế cho máy chủ cục bộ - như được mô tả trong. Đó là, thêm cấm và cho phép các quy tắc cho các hợp chất đến và đi:

Netfilter: ~ # iptables -p nhập đầu vào netfilter: ~ # iptables -p đầu ra thả netfilter: ~ # iptables -a nhập -i lo -j Chấp nhận NetFilter: ~ # iptables -a Output -o lo -j Chấp nhận NetFilter: ~ # Iptables -a đầu vào -p icmp --icmp-typeilter: ~ # iptables -a đầu vào -p icmp --icmp-type 8 -j Chấp nhận NetFilter: ~ # iptables -đa icmp -j chấp nhận Netfilter: ~ # Cat / Proc / sys / net / ipv4 / ip_local_port_range 32768 61000 netfilter: ~ # iptables -a Output -p TCP --Sport 32768: 61000 -j Chấp nhận NetFilter: ~ # iptables -a Output 32768: 61000 -J Chấp nhận NetFilter: ~ # iptables -a đầu vào -p TCP -M Tiểu bang --State được thiết lập, liên quan -j Chấp nhận NetFilter: ~ # iptables -a Input -PHOUT -P Tiểu bang UDP -M - Liên quan - J chấp nhận

Kết quả là, nếu một trong các máy chủ mạng cục bộ, ví dụ: 10.0.0.2, sẽ cố gắng liên hệ với một trong các máy chủ Internet, ví dụ: 93.158.134.3 (Ya.ru), khi nào, địa chỉ nguồn của chúng sẽ được thay thế bằng Địa chỉ bên ngoài của cổng trong chuỗi của Bảng Postouting NAT, nghĩa là IP 10.0.0.0 sẽ được thay thế vào năm 198.166.0.200. Từ quan điểm của máy chủ từ xa (ya.ru), nó sẽ trông giống như một cổng liên kết trực tiếp với nó. Khi máy chủ từ xa bắt đầu truyền dữ liệu phản hồi, nó sẽ giải quyết chúng là cổng, đó là 198.166.0.200. Tuy nhiên, trên cổng, địa chỉ đích của các gói này sẽ được thay thế bằng 10.0.0.2, sau đó các gói sẽ được truyền đến người nhận này trên mạng cục bộ. Đối với một phép biến đổi ngược, không có quy tắc bổ sung nào nên được chỉ định - nó sẽ làm như vậy hoạt động hóa trangMà nhớ máy chủ nào từ mạng cục bộ đã gửi yêu cầu và lưu trữ lưu trữ nào cần thiết để trả lại câu trả lời có liên quan.

Ghi chú: Nó là mong muốn được chấp nhận bí mật trước tất cả các lệnh iptables Làm sạch các chuỗi trong đó các quy tắc sẽ được thêm vào:

NetFilter: ~ # iptables -f Tên hộp kiểm

Cung cấp quyền truy cập vào các dịch vụ trên cổng

Giả sử rằng một dịch vụ nhất định đã được tung ra trên cổng của chúng tôi, phải chịu trách nhiệm về các yêu cầu từ Internet. Giả sử nó hoạt động trên một số cổng TCP nn. Để cung cấp quyền truy cập vào dịch vụ này, bạn phải sửa đổi bảng bộ lọc trong chuỗi đầu vào (để có khả năng lấy các gói mạng được gửi đến dịch vụ cục bộ) và bảng bộ lọc trong chuỗi đầu ra (để giải quyết các phản hồi với các yêu cầu được yêu cầu).

Vì vậy, chúng tôi có, đó là mascaradit (thay thế địa chỉ của người gửi cho thời gian) gói vào mạng bên ngoài. Và nó cho phép bạn lấy tất cả các kết nối được thiết lập. Việc cung cấp quyền truy cập vào dịch vụ sẽ được thực hiện bằng các quy tắc giải quyết sau:

NetFilter: ~ # iptables -a đầu vào -p tcp --dport nn -j Chấp nhận NetFilter: ~ # iptables -a Output -P TCP --Sport Nn -J Chấp nhận

Các quy tắc này cho phép các kết nối TCP đến cổng NN và các kết nối TCP gửi đi từ cổng NN. Ngoài ra, bạn có thể thêm các tham số giới hạn bổ sung, chẳng hạn như chỉ cho phép các kết nối đến từ giao diện ngoài eth0 (phím -THI0.) Vân vân.

Cung cấp quyền truy cập vào các dịch vụ trên mạng cục bộ

Giả sử mạng cục bộ của chúng tôi có một máy chủ có ip x.y.y.z.1, phải phản hồi các yêu cầu mạng từ mạng bên ngoài trên cổng TCP XXX. Để đọc một máy khách từ xa sang IP bên ngoài sang cổng XXX, phản hồi hiện tại của dịch vụ từ mạng cục bộ, bạn phải gửi yêu cầu đến cổng IP bên ngoài XXX sang máy chủ phù hợp trên mạng cục bộ. Điều này đạt được bằng cách sửa đổi địa chỉ của người nhận trong gói đến cổng được chỉ định. Hành động này được gọi là DNAT và được sử dụng trong chuỗi Prerouting trong bảng NAT. Cũng như cho phép thông qua gói này trong chuỗi chuyển tiếp trong bảng bộ lọc.

Một lần nữa, hãy đi dọc đường. Vì vậy, chúng tôi có, đó là mascaradit (thay thế địa chỉ của người gửi cho thời gian) gói vào mạng bên ngoài. Và nó cho phép bạn lấy tất cả các kết nối được thiết lập. Việc cung cấp quyền truy cập vào dịch vụ sẽ được thực hiện bằng các quy tắc giải quyết sau:

Netfilter: ~ # iptables -t nat-prrouting -p tcp -d 198.166.0.200 --dport xxx -j dnat - đến đích XYZ1 NetFilter: ~ # iptables -a chuyển tiếp -i eth0 -p TCP -D XYZ 1 - -Dport xxx -j chấp nhận

Lưu các quy tắc đã nhập khi khởi động lại

Tất cả các quy tắc được nhập trong bảng điều khiển - sau khi khởi động lại hệ điều hành sẽ được đặt lại về trạng thái ban đầu (đã đọc - đã xóa). Để mà lưu tất cả các lệnh iptables đã nhậpCó một số cách. Ví dụ: một trong số đó là đặt tất cả các quy tắc tường lửa trong tệp khởi tạo. Nhưng phương pháp này có một nhược điểm đáng kể: toàn bộ khoảng thời gian từ việc khởi động hệ thống con mạng, cho đến khi khởi chạy dịch vụ cuối cùng và sau đó tập lệnh RC.Local từ SystemV sẽ không được bảo vệ khỏi SystemV. Hãy tưởng tượng một tình huống, ví dụ, nếu bất kỳ dịch vụ nào (ví dụ nfs) bắt đầu sau đó và khi nào nó được khởi động, bất kỳ lỗi nào sẽ xảy ra trước khi bắt đầu tập lệnh RC.local. Theo đó, RC.Local không bao giờ bắt đầu và hệ thống của chúng tôi biến thành một lỗ lớn hơn.

Do đó, ý tưởng tốt nhất sẽ là khởi tạo quy tắc NetFilter / iptables Trong khi tải. Để làm điều này, trong Debian có một công cụ tuyệt vời - thư mục /etc/network/if-up.d/Trong đó bạn có thể đặt các kịch bản sẽ bắt đầu khi bắt đầu mạng. Và cũng có những đội iptables-lưu.iptables-khôi phục.Việc giữ lại tạo một quy tắc NetFilter kết xuất từ \u200b\u200bhạt nhân trên và khôi phục các quy tắc của dây, tương ứng.

Vì thế, applables lưu thuật toán cạnh tranh tiếp theo:

  • Cấu hình màn hình mạng theo cách sử dụng của riêng bạn
  • tạo một quy tắc đã tạo trên lệnh iptables-save\u003e /etc/iptables.rules
  • tạo nên nhập kịch bản Tạo kết xuất ở đầu mạng (trong thư mục /etc/network/if-up.d/) và không quên thực hiện:
# Cat /etc/network/if-up.d/firewall #! / bin / bash / sbin / iptables-Khôi phục< /etc/iptables.rules exit 0 # chmod +x /etc/network/if-up.d/firewall

Quy tắc bãi rác nhận được iptables-lưu lệnh Nó có một định dạng văn bản, tương ứng, phù hợp để chỉnh sửa. Cú pháp đầu ra lệnh iptables-lưu lần tiếp theo:

# Được tạo bởi iptables-save v1.4.5 vào ngày 24 tháng 12 22:35:13 2011 * bộ lọc: chấp nhận đầu vào: chấp nhận chuyển tiếp ....... # bình luận -a input -i lo -j chấp nhận -a đầu vào! -Tôi lo -d 127.0.0.0/8 -j Từ chối ........... .4.5 trên Sat ngày 24 tháng 12 22:35:13 2011 * RAW ...... cam kết

Hàng bắt đầu bằng # - Nhận xét, hàng trên * - Đây là tên của các bảng, giữa tiêu đề của bảng và từ Cam kết. Các tham số được truyền đến lệnh iptables được chứa. Tham số cam kết. - Cho biết việc hoàn thành các tham số cho bảng đã đề cập ở trên. Các hàng bắt đầu bằng chuỗi biểu định đại tràng có chứa bảng này ở định dạng:

: Chính sách chuỗi [Gói: byte]

Ở đâu chuỗi - Tên chuỗi, chính trị - Chính sách chuỗi mặc định cho bảng này, sau đó đo và byte gói tại thời điểm thực hiện lệnh.

Ở Redhat. tính năng lưu trữ lệnh iptables thực thi khi bắt đầu và dừng mạng thực thi tệp / etc / sysconfig / iptables. Và việc quản lý tập tin này nằm ở Demon iptables.

Như một tùy chọn khác để lưu các quy tắc, bạn có thể xem xét sử dụng tham số lên. trong tập tin / etc / mạng / giao diện Với một đối số ở dạng tệp lưu trữ lệnh iptables, hỏi các quy tắc cần thiết.

Kết quả

Hôm nay nó sẽ là đủ. Các triển khai phức tạp hơn của tường lửa, tôi chắc chắn sẽ được xuất bản trong các bài viết sau.

Trân trọng, MC.SIM!

Vì vậy, hôm nay chúng ta sẽ đối phó với loại quái thú nào là iptables này và làm thế nào để đối phó với anh ta, thắng và kiềm chế? :)

Iptables - tiện ích dòng lệnh, là giao diện tiêu chuẩn cho hoạt động của tường lửa (tường lửa hoặc tường lửa) Netfilter cho linux lõi, bắt đầu bằng phiên bản 2.4. Để sử dụng tiện ích iptables yêu cầu các đặc quyền siêu người dùng (root).

Đôi khi, dưới từ iptables, bản tường lửa netfilter có nghĩa là. Với nó, có thể quản lý đủ để quản lý đủ (trong trường hợp này, việc xử lý các gói vào chúng tôi hoặc phát ra từ chúng tôi).

Ví dụ: bạn có thể cấm một truy cập Internet vào Internet, cho một người khác chỉ cho phép truy cập vào các trang web, "khơi dậy" thứ ba (gán) một cổng được xác định trước và các gói đáng ngờ sẽ gửi lại cho người gửi (hãy tự phá vỡ chính mình) . Bạn có thể gửi "trên thông tin dịch vụ Fly" của các gói IP (người gửi, người nhận, TTL, v.v.) và nhiều hơn nữa, sẽ không xuất hiện ngay lập tức.

Điều gì, đầu tiên, bạn nên biết về tường lửa, - chúng được thiết kế để bảo vệ, vì vậy bạn cần nhớ cứng đến mức quy tắc cuối cùng ( chính sách) Nó phải "cấm phần còn lại." Thứ hai, nhưng vẫn không kém phần quan trọng - luôn nhẹ nhàng chỉnh sửa các quy tắc hoặc telnet.

Các trường hợp khi các quy tắc điều khiển từ xa được cấu hình và sau khi áp dụng các quy tắc, quản trị viên không bị ảnh hưởng là "Cắt" từ máy chủ không được xác định! Và, nếu máy chủ là hai bước, và nếu nó ở đâu đó trong Vương quốc Trident?


Nguyên tắc hoạt động của tường lửa

Khi gói đến tường lửa của chúng tôi, lần đầu tiên nó rơi vào, chặn trình điều khiển thích hợp và sau đó được truyền đến kernel. Tiếp theo, gói vượt qua một số bảng, sau đó được truyền đến một ứng dụng cục bộ hoặc được tạo lại cho một máy khác.

Thứ tự của gói được hiển thị trong bảng dưới đây:

Bươc Bàn Chuỗi Ghi chú
1 Cáp (I.E. Internet)
2 Giao diện mạng (ví dụ: eth0)
3 Mangle. Prerouting. Thông thường chuỗi này được sử dụng để thực hiện các thay đổi đối với tiêu đề gói, ví dụ, để thay đổi các bit TOS, v.v.
4 Nat. Prerouting. Chuỗi này được sử dụng để phát các địa chỉ mạng (trâu địa chỉ mạng đích). Dịch địa chỉ mạng nguồn được thực hiện sau, trong một chuỗi khác. Bất kỳ loại lọc nào trong chuỗi này chỉ có thể được thực hiện trong trường hợp đặc biệt.
5 Quyết định định tuyến tiếp theo, tức là. Tại thời điểm này, nó được quyết định nơi một gói là một ứng dụng cục bộ hoặc một nút mạng khác.
6 Mangle. Ở đằng trước Tiếp theo, gói rơi vào chuỗi chuyển tiếp bảng Mangle, chỉ nên được sử dụng trong các trường hợp đặc biệt khi cần thiết để thực hiện một số thay đổi trong tiêu đề gói giữa hai quyết định định tuyến.
7 Lọc. Ở đằng trước Chỉ những gói đi đến một máy chủ khác, tất cả việc lọc lưu lượng truy cập quá cảnh đang rơi vào chuỗi chuyển tiếp. Đừng quên rằng lưu lượng trong cả hai hướng đi qua chuỗi này. Hãy chắc chắn có tính đến hoàn cảnh này khi viết quy tắc lọc.
8 Mangle. Postoutout. Chuỗi này được thiết kế để thay đổi gói gói sau khi quyết định định tuyến cuối cùng được thực hiện.
9 Nat. Postoutout. Chuỗi này được thiết kế chủ yếu cho dịch địa chỉ mạng nguồn. Không sử dụng nó để lọc mà không cần bất kỳ nhu cầu. Masquerading cũng được thực hiện ở đây.
10 Giao diện mạng đầu ra (ví dụ: eth1)
11 Cáp (hãy để nó là LAN)

Như bạn có thể thấy, gói vượt qua một số giai đoạn trước khi nó được truyền thêm. Trên mỗi giai đoạn, gói có thể được dừng lại, cho dù đó là một chuỗi iptables hoặc bất cứ thứ gì khác, nhưng chúng tôi chủ yếu quan tâm đến iptables.

Lưu ý rằng không có chuỗi cụ thể cho các giao diện cá nhân hoặc một cái gì đó như thế. Chuỗi chuyển tiếp được tổ chức tất cả các gói di chuyển qua bộ định tuyến tường lửa của chúng tôi. Không sử dụng chuỗi đầu vào để lọc các gói quá cảnh, chúng chỉ đơn giản là không rơi ở đó. Sau chuỗi này, chỉ có dữ liệu dành cho cùng một máy chủ đang di chuyển.


Iptables quy tắc

Tôi sẽ cung cấp một ví dụ về phần cấu hình của tôi trên bộ định tuyến: vlan332 là một giao diện thông qua đó tôi truy cập Internet, Vlan333 - truy cập vào mạng cục bộ của nhà cung cấp cục bộ và 172.30.2.5 - máy tính của tôi.

#Nat.
Iptables -t nat -a postouting -o vlan332 -j Masquerade
Iptables -t nat -a postouting -o vlan333 -j Superman

#Torrent.
Iptables -a prerouting -t nat -p tcp --dport 9000 -i vlan332 -j dnat --to 172.30.2.5

#Open cổng.
Iptables -a nhập -p tcp --dport 53 -j Chấp nhận #DNS TCP
Iptables -a nhập -p udp --dport 53 -j Chấp nhận #DNS UDP
Iptables -a nhập -p tcp --dport 80 -j chấp nhận máy chủ #web

# Tất cả những người khác đến "thả" (xóa)
Iptables -a đầu vào -i vlan332 -j Thả

Vậy tất cả những điều này có ý nghĩa gì? Trước hết, để thuận tiện cho việc đọc, tôi đã chia cấu hình trên "phần" theo nhận xét, I.E. Trong một phần, quy tắc cho NAT, đối với các cổng khác của các cổng (PAT), trong phần ba - cho phép các cổng của máy chủ, v.v.

Xem xét quy tắc thứ nhất và thứ hai (chúng chỉ khác nhau trong giao diện mạng):

iptables -t nat -a postouting -o vlan332 -j Masquerade

Dựa trên nó, chúng tôi thêm một quy tắc mới cho việc hậu xử lý (-a postouting) vào bảng NAT, sẽ tồn tại vào thời điểm thực hiện lệnh trong chuỗi (i.e. - ở cuối). Quy tắc sẽ được áp dụng trên giao diện VLAN332 gửi đi (-O VLAN332) và sẽ được truyền đến hóa trang (-Jquerade) những NAT đó.

Trong ngôn ngữ của con người, tất cả mọi thứ sẽ đi ra từ giao diện Vlan332 sẽ ẩn đằng sau NAT "ohm. Điều này có nghĩa là khi bạn thoát bộ định tuyến của chúng tôi, địa chỉ của người gửi sẽ biểu thị máy chủ của chúng tôi và không phải là máy tính cuối cùng của người dùng mà người dùng mà yêu cầu đã được gửi. Khi câu trả lời đến yêu cầu sẽ được tiến hành một quy trình ngược và gói sẽ được chuyển đến người gửi ban đầu. Điều đó sẽ cần phải được chi tiết trong bài viết về NAT.

Hãy để chúng tôi chuyển sang nhóm quy tắc tiếp theo, cụ thể là các phần được dán nhãn là "torrent". Phần này cung cấp các quy tắc để chuyển tiếp cổng (PAT - dịch địa chỉ cổng), I.E. Để Internet từ internet kết nối với cổng trên máy tính phía sau bộ định tuyến của chúng tôi. Nếu không có điều này, nhiều ứng dụng, chẳng hạn như mạng chia sẻ tệp Torrent, DC ++ và một số ứng dụng yêu cầu các kết nối đến từ Internet sẽ không thể hoạt động chính xác. Chúng tôi sẽ phân tích quy tắc về ví dụ về các cổng chuyển tiếp (đích) cho torrent máy khách

iptables -a prerouting -t nat -p tcp --dport 9000 -i vlan332 -j dnat --to 172.30.2.5

Như trong quy tắc trước, chúng tôi chỉ định một bảng và chuỗi (-a prerouting -t NAT), chỉ định loại giao thức hợp lệ. Trong quy tắc TCP hiện tại (-P TCP) (trong quy tắc UDP khác, mặc dù chúng có thể được chỉ định trong cùng một quy tắc, tôi không may không hoạt động với tài liệu chính thức và tôi chưa tìm được giải pháp).

Cổng đích 9000 (- -dport 9000), giao diện đến Vlan332. Hành động của DNAT (-J DNAT) Chúng tôi chỉ ra rằng bạn cần thay thế địa chỉ của người nhận vào lúc 172.30.2.5 (- đến 172.30.2.5) I.E. - Máy tính của chúng tôi. Hóa ra: Tất cả các kết nối đến thông qua giao thức TCP trên cổng 9000 chuyển hướng đến IP 172.30.2.5.

iptables -a nhập -p tcp --dport 53 -j Chấp nhận #DNS TCP

Cho biết chuỗi đầu vào, giao thức TCP, cổng ở số 53 (được sử dụng cho các dịch vụ DNS) và hành động - cho phép. Bạn có thể nhận thấy rằng UDP được sử dụng cho các yêu cầu DNS và nó sẽ đúng. Để truyền thông tin về các vùng (Tên miền) TCP được sử dụng và vì máy chủ của tôi là chính cho một số vùng, tôi đã cho phép truy cập qua TCP.

Quy tắc cuối cùng, như tôi đã nói ở trên, nên là một lệnh cấm mọi thứ khác không thuộc các bộ lọc. tôi đã viết iptables -a đầu vào -i vlan332 -j Thả những, cái đó. Tất cả các gói đến trên giao diện Vlan332 Xóa.

Vì người cứu hỏa này không có cấu hình cố định, thì khi khởi động lại quy tắc phải được quản lý thủ công. Đây không phải là vấn đề, vì có các tập lệnh shell (tương tự các tệp BAT và CMD trong Windows) và khi thực hiện chúng sẽ chạy các lệnh, chúng được viết trong đó.

Để thực hiện việc này, hãy tạo một tệp trong thư mục etc có tên FireWall.sh với lệnh nano /etc/firewall.sh, i.e. Mở nó ngay lập tức trong biên tập viên. Chúng tôi thực hiện tất cả các quy tắc bạn cần và lưu nó bằng cách nhấn Ctrl + X.

Dưới đây là một số quy tắc của cấu hình làm việc mà bạn có thể có ích trong việc sử dụng hàng ngày. Dòng đầu tiên (#! / Bin / sh) là bắt buộc, vì nó chỉ ra những gì bạn cần để giải thích các hướng dẫn này.

#! / bin / sh
PATH \u003d / usr / sbin: / sbin: / bin: / usr / bin

# Xóa tất cả các quy tắc hiện có cho tất cả các bảng và chuỗi
Iptables -f.
Iptables -t nat -f
Iptables -t mangle -f
Iptables -x.

# Cho phép bất kỳ lưu lượng truy cập
Iptables -a nhập -Tôi lo -j chấp nhận # loopback (loopback)
Iptables -a đầu vào -i eth0 -j Chấp nhận # Giao diện nội bộ trong LAN
Iptables -a đầu vào -i eth2 -j Chấp nhận # Giao diện trong LAN 2

#Nat.
Iptables -t nat -a postouting -o vlan332 -j Masquerade # bao gồm NAT về phía Internet
Iptables -t Nat -a Postouting -o Vlan333 -J Masquerade # bao gồm NAT đối với nhà cung cấp (Mạng nhà cung cấp)

#Cổng chuyển tiếp
#Torrent.
iptables -a prerouting -t NAT -P TCP --Dport 9000 -I Vlan332 -J DNAt --to 172.30.5 # Cổng chuyển tiếp trên IP
Iptables -a prerouting -t nat -p udp --dort 9000 -i vlan332 -j dnat --to 172.30.2.5

#Vpn kết nối, quyền kết nối thông qua PPP và TP.
Iptables -a đầu vào -p tcp -m tcp --dport 1723 -J chấp nhận
Iptables -a đầu vào -p-gre -m trạng thái liên quan đến, được thành lập -J Chấp nhận

# Mở cổng máy chủ
Iptables -a nhập -p tcp --dport 23 -j chấp nhận # Cho phép truy cập qua ssh

# Mọi thứ khác đang đến để loại bỏ ("thả" - loại bỏ)
Iptables -a đầu vào -i vlan332 -j Thả

# Bật chuyển tiếp, mà không có định tuyến gói này sẽ không xảy ra
Echo 1\u003e / Proc / sys / net / ipv4 / ip_forward

Sau đó, chúng tôi thực hiện tệp thực thi, tức là:
chmod + x /ets/firewall.sh (Hành hình).

Đối với tệp này hoạt động tự động khi khởi động, hãy truy cập đường dẫn vào tệp "Tự động tải". Mở nano /etc/rc.local và thêm vào để thoát 0 hàng /etc/firewall.sh Nếu bạn cần sử dụng Vlan (giao diện và mạng ảo), thì bạn cần phải đăng ký dòng này trong tệp / ets / mạng / giao diện như Up sh / et /firewall.sh để giao diện Vlan, ví dụ:

# Vlan đến inet
Tự động Vlan332.
Iface vlan332 inet tĩnh
Địa chỉ xxx.xxx.xxx.xxx.
Netmask 255.255.255.252.
# Gateway xxx.xxx.xxx.xxx.
Vlan_raw_device eth1.
Lên sh /ets/firewall.sh.

Điều này là do lần đầu tiên nó sẽ vượt qua "Tự động tải" và chỉ sau một thời gian VLAN của chúng tôi sẽ được nâng lên và nếu không có giao diện, thì quy tắc sẽ không được tạo.

Thật không may, không thể mô tả công việc của Fireevol tuyệt vời này. Tôi không có cơ hội, nhưng nó có tài liệu tuyệt vời bằng tiếng Nga (bản dịch của hướng dẫn phát ban ban đầu), đây là địa chỉ của nó.

Sẽ không có nhiều công việc, đọc thậm chí là một phần của nó hoặc đặt một nhiệm vụ cụ thể, giải quyết hầu hết các vấn đề liên quan đến tường lửa này và các quy tắc viết độc lập.

Tường lửa đáng tin cậy là một trong những khía cạnh quan trọng nhất để bảo vệ bất kỳ hệ điều hành hiện đại nào. Hầu hết các bản phân phối Linux chứa một số công cụ tường lửa khác nhau. Hướng dẫn này được dành riêng cho một trong những iptables phổ biến nhất.

Vì vậy, iptables là một tường lửa tiêu chuẩn bao gồm trong hầu hết các bản phân phối Linux mặc định (NFTables được phát triển để thay thế nó). Trong thực tế, iptables là giao diện người dùng để quản lý hệ thống NetFilter, lần lượt, điều khiển ngăn xếp mạng Linux. Iptables so sánh mỗi gói đến với một tập hợp các quy tắc đã cài đặt, sau đó quyết định phải làm gì với nó hơn nữa.

Bài phát biểu là về cách thức hoạt động của Iptables. Bài viết này tập trung vào các ví dụ thực tế thể hiện việc tạo ra một bộ quy tắc cơ bản cho Ubuntu Server 14.04.

Lệnh cơ bản iptables.

Phần này chứa các lệnh cơ bản mà bạn có thể tạo một bộ quy tắc phức tạp và quản lý toàn bộ giao diện iptables.

Nhớ lại: Các lệnh iptables cần được đưa ra với các đặc quyền gốc. Điều này có nghĩa là bạn cần thực hiện một trong những thao tác sau:

  • Đăng nhập như một người dùng root;
  • sử dụng su hoặc sudo -i để triển khai vỏ gốc;
  • bắt đầu tất cả các lệnh với sudo (được khuyến nghị trong Ubuntu).

Hướng dẫn này áp dụng tùy chọn cuối cùng.

Vì vậy, trước tiên bạn cần xem danh sách các quy tắc iptables hiện tại. Để làm điều này, hãy sử dụng cờ -l:

sudo iptables -l.
Đầu vào chuỗi (chấp nhận chính sách)


Đích prot opt \u200b\u200bđiểm đích
Đầu ra chuỗi (chấp nhận chính sách)
Đích prot opt \u200b\u200bđiểm đích

Như bạn có thể thấy, danh sách chứa ba chuỗi mặc định (đầu vào, đầu ra và chuyển tiếp), mỗi chuỗi là chính sách mặc định (hiện tại nó được chấp nhận). Bạn cũng có thể xem tên của các cột. Nhưng danh sách này không có các quy tắc, vì Ubuntu đến mà không có một tập hợp các quy tắc mặc định.

Sử dụng cờ -s, danh sách này có thể được xem ở định dạng khác, phản ánh các lệnh cần thiết để kích hoạt các quy tắc và chính sách:

sudo iptables -s.
-P chấp nhận đầu vào
-P chuyển tiếp chấp nhận
Đầu ra -P chấp nhận

Để sao chép cấu hình, bạn chỉ cần nhập sudo iptables ở đầu mỗi chuỗi kết quả. (Tùy thuộc vào cấu hình, quy trình này có thể phức tạp hơn một chút khi được kết nối từ xa; nếu các quy tắc cho phép kết nối hiện tại chưa được đặt, bạn không nên cài đặt các chính sách thả).

Để thiết lập lại các quy tắc hiện tại (nếu có), hãy nhập:

sudo iptables -f.

Một lần nữa, ở giai đoạn này, chính sách mặc định là rất quan trọng, bởi vì nó sẽ không thay đổi với sự trợ giúp của nhóm trước đó, mặc dù thực tế là tất cả các quy tắc sẽ bị xóa khỏi chuỗi.

Trước khi đặt lại các quy tắc khi bạn kết nối từ xa, hãy đảm bảo rằng chính sách Accice được cài đặt trong chuỗi đầu vào và đầu ra. Điều này được thực hiện như thế này:

sudo iptables -p đầu vào chấp nhận
Sudo iptables -p đầu ra chấp nhận
Sudo iptables -f.

Bằng cách tạo quy tắc cho phép kết nối từ xa, bạn có thể cài đặt chính sách thả. Vì vậy, chúng tôi tiến hành trực tiếp để tạo ra các quy tắc.

Tạo quy tắc iptables.

Như đã đề cập ở trên, hướng dẫn này tập trung vào làm việc với chuỗi đầu vào, vì nó chịu trách nhiệm cho lưu lượng đến. Trước tiên, bạn cần xem xét quy tắc đã được đề cập, quy tắc cho phép kết nối SSH hiện tại.

Có vẻ như thế này:

sudo iptables -a đầu vào -m Conntrack --ctate được thiết lập, liên quan -J chấp nhận

Tất nhiên, lúc đầu nó có vẻ vô cùng khó khăn; Để hiểu quy tắc này, hãy đọc các thành phần của nó:

  • -Một đầu vào.: Flag -a thêm ( nối thêm.) Quy tắc ở cuối chuỗi. Phần này của lệnh báo cáo iptables về nhu cầu thực hiện quy tắc ở cuối chuỗi đầu vào.
  • -m Conntrack.: Ngoài tập hợp các chức năng cơ bản, ipples cũng có một tập hợp các tiện ích mở rộng hoặc các mô-đun chịu trách nhiệm cho các tính năng bổ sung của tường lửa. Phần này của lệnh cho thấy người dùng cần quyền truy cập vào các chức năng của mô-đun Conntrack. Mô-đun này cho phép bạn sử dụng các lệnh quyết định phải làm gì với một gói dựa trên mối quan hệ của nó với các kết nối trước đó.
  • -Các.: Một trong những lệnh có sẵn khi gọi mô-đun Conntrack. Lệnh này cho phép bạn theo dõi tỷ lệ gói đến các gói khác được xem trước đó. Nó được đặt thành các giá trị được thiết lập (cho phép bạn chấp nhận các gói là một phần của kết nối hiện có) và liên quan (lấy các gói được liên kết với hợp chất đã được cài đặt). Đây là một phần của quy tắc rằng phiên SSH hiện tại chịu trách nhiệm cho phiên SSH hiện tại.
  • như J.Chấp nhận: Cho biết hành động (mục tiêu) cần được thực hiện trên gói đáp ứng quy tắc. Trong trường hợp này, iptables sẽ nhận được các gói phản ứng với các tiêu chí trước đó.

Quy tắc này nên được đặt ngay từ đầu để đảm bảo rằng các hợp chất hiện có trùng với các quy tắc, được thông qua và thoát khỏi chuỗi mà không đạt đến quy tắc thả.

Yêu cầu một danh sách các quy tắc, bạn có thể thấy các thay đổi:

sudo iptables -l.
Đầu vào chuỗi (chấp nhận chính sách)
Đích prot opt \u200b\u200bđiểm đích
Chấp nhận tất cả - bất cứ nơi nào bất cứ nơi nào ctstate liên quan, thành lập
Chuỗi chuyển tiếp (chấp nhận chính sách)
Đích prot opt \u200b\u200bđiểm đích
Đầu ra chuỗi (chấp nhận chính sách)
Đích prot opt \u200b\u200bđiểm đích

Sau khi đọc cú pháp cơ bản, hãy tạo thêm một vài quy tắc lưu trữ kết nối.

Thông qua các kết nối quan trọng khác

Trước đó, iptables đã nhận được một lệnh để không thả tất cả các kết nối hiện tại, cũng như lấy tất cả các kết nối liên quan đến chúng. Bây giờ bạn cần tạo các quy tắc chấp nhận các hợp chất không phản ứng với các tiêu chí trên.

Để lại hai cổng Mở: Cổng SSH (Hướng dẫn sử dụng cổng mặc định - 22; nếu giá trị này đã được thay đổi, đừng quên giới thiệu một giá trị mới); Ngoài ra, giả sử rằng trên máy tính này, máy chủ web đang chạy trên cổng 80 theo mặc định (không thêm quy tắc này nếu không).

Vì vậy, các dòng cần được sử dụng để tạo các quy tắc như vậy:

sudo iptables -a đầu vào -p tcp --dort 22 -j chấp nhận
Sudo iptables -a đầu vào -p tcp --dport 80 -j chấp nhận

Như bạn có thể thấy, chúng rất giống với quy tắc đầu tiên; Có lẽ họ thậm chí còn có một cấu trúc đơn giản hơn. Tùy chọn mới:

  • p.tCP.: Tùy chọn này bỏ qua các gói bằng TCP (Giao thức định hướng luồng, được hầu hết các ứng dụng sử dụng, vì nó cung cấp kết nối đáng tin cậy).
  • dport.: Tùy chọn này có sẵn khi sử dụng cờ TCP. Nó chỉ ra cổng đến mà cổng gói phải khớp. Quy tắc đầu tiên bỏ qua các gói TCP được gửi đến cổng 22 và quy tắc thứ hai lấy lưu lượng TCP đến cổng 80.

Bây giờ bạn cần tạo một quy tắc chấp nhận khác để đảm bảo rằng máy chủ đang hoạt động đúng. Như một quy tắc, các dịch vụ tương tác bằng các gói trao đổi; Để thực hiện việc này, họ sử dụng giao diện Pseudo mạng của giao tiếp vòng - thiết bị được gọi là Loopback, hướng lưu lượng truy cập trở lại nguồn của nó và không cho các máy tính khác.

Đó là, nếu dịch vụ 1 cần thiết lập kết nối với dịch vụ 2, hãy lắng nghe các kết nối trên cổng 4555, sau đó dịch vụ 1 gửi gói đến cổng 4555 bằng thiết bị loopback. Hành vi này phải được giải quyết vì đây là một điều kiện quan trọng đối với hoạt động thích hợp của nhiều chương trình.

Để làm điều này, thêm quy tắc sau:

sudo iptables -i đầu vào 1 -i lo -j chấp nhận

Nó khác với các quy tắc trước đó; Hãy xem xét nó chi tiết hơn:

  • TÔI.Đầu vào 1.: Flag -i nói quy tắc chèn (chèn) iptables. Cờ này khác với Flag -a (chỉ đơn giản mang quy tắc đến cuối chuỗi); Nó chỉ ra một chuỗi mà quy tắc cần được thêm và vị trí của quy tắc trong đó. Trong trường hợp này, quy tắc phải được chèn vào lúc bắt đầu chuỗi đầu vào, do đó tất cả các quy tắc di chuyển trên một vị trí. Quy tắc này phải được đặt ở đầu chuỗi, vì đây là một trong những quy tắc cơ bản và không nên phụ thuộc vào phần còn lại.
  • tÔI.lO.: Thành phần quy tắc này bỏ qua các gói sử dụng giao diện lo ("lo" là tên khác cho thiết bị loopback). Điều này có nghĩa là bất kỳ gói nào sử dụng giao diện này phải được chấp nhận.

Để xem các quy tắc hiện tại, hãy sử dụng cờ -S, vì cờ -l không xuất ra một số thông tin (ví dụ: giao diện mà quy tắc được đính kèm, điều này rất quan trọng trong trường hợp quy tắc cuối cùng):

sudo iptables -s.
-P chấp nhận đầu vào
-P chuyển tiếp chấp nhận
Đầu ra -P chấp nhận
-Một nhập -Tôi lo -j chấp nhận
-Một đầu vào -m Conntrack --ctate liên quan, được thành lập -J Chấp nhận
-Một đầu vào -p tcp -m tcp --dort 22 -j chấp nhận
-Một nhập -p TCP -M TCP --DPort 80 -J Chấp nhận

Tạo quy tắc thả

Vì vậy, tại thời điểm 4 quy tắc đã được tạo ra rằng lấy các gói dựa trên các tiêu chí nhất định. Tuy nhiên, bây giờ máy chủ không chặn bất kỳ gói nào khác.

Nếu gói hàng truyền qua chuỗi đầu vào và không phản hồi với bất kỳ quy tắc nào trong bốn quy tắc, chính sách mặc định sẽ được thực thi (Chấp nhận), cách này hoặc người khác sẽ lấy gói này. Bây giờ nó cần phải được thay đổi.

Điều này có thể được thực hiện theo hai cách có đủ sự khác biệt đáng kể.

Cách đầu tiên là chỉnh sửa chính sách mặc định của chuỗi đầu vào; Để làm điều này, loại:

sudo iptables -p giọt đầu vào

Chính sách này sẽ theo dõi và đặt lại tất cả các gói không đáp ứng bất kỳ quy tắc chuỗi đầu vào nào. Một trong những hậu quả của loại xây dựng này là nó sẽ giảm các gói ngay cả sau khi đặt lại các quy tắc.

Tất nhiên, nó tăng cường bảo mật máy chủ; Tuy nhiên, điều này có thể đòi hỏi hậu quả nghiêm trọng nếu người dùng không có cách nào khác để kết nối với máy chủ. Hầu hết các nhà cung cấp dịch vụ lưu trữ thường cung cấp một bảng điều khiển web để kết nối với máy chủ trong trường hợp các vấn đề như vậy. Một bảng điều khiển như vậy hoạt động như một kết nối cục bộ ảo, vì iptables sẽ không phản hồi với nó.

Nó có thể được thực hiện để máy chủ tự động đặt lại kết nối nếu các quy tắc bị xóa. Điều này sẽ làm cho máy chủ được bảo vệ nhiều hơn và khó truy cập. Điều đó cũng có nghĩa là có thể thực hiện các quy tắc ở cuối chuỗi, đồng thời tất cả các gói không mong muốn sẽ được thiết lập lại.

Cách tiếp cận thay thế như sau: Ở cuối chuỗi, bạn cần thực hiện quy tắc thả tất cả các gói không phù hợp, trong khi vẫn duy trì chính sách chấp nhận.

Để trả về chính sách chấp nhận chuỗi đầu vào, loại:

sudo iptables -p đầu vào chấp nhận

Bây giờ bạn có thể nhập kết thúc chuỗi này, điều này sẽ thiết lập lại tất cả các gói không phù hợp:

sudo iptables -a nhập -j thả

Trong điều kiện hoạt động bình thường, kết quả sẽ giống hệt như khi sử dụng chính sách thả. Quy tắc này đặt lại từng gói đạt đến nó, giúp ngăn các gói vào máy chủ không đáp ứng các quy tắc được thiết lập.

Về cơ bản, cách tiếp cận thứ hai được áp dụng nếu bạn cần lưu chính sách chấp nhận, cần lưu lượng truy cập. Đó là, ngay cả khi tất cả các quy tắc được đặt lại, người dùng có thể truy cập máy trên mạng. Cách tiếp cận này cho phép bạn thực hiện các bước mặc định mà không phải thay đổi chính sách sẽ được áp dụng cho chuỗi trống.

Tất nhiên, điều đó cũng có nghĩa là bất kỳ quy tắc nào cần được thêm vào cuối chuỗi phải là trước quy tắc đặt lại. Điều này có thể được thực hiện hoặc tạm thời xóa quy tắc đặt lại:

sudo iptables -d nhập -j thả
sudo iptables -a đầu vào new_ mồi
Sudo iptables -a nhập -j thả

hoặc chèn một quy tắc mới vào cuối chuỗi (nhưng trước quy tắc đặt lại), chỉ định số dòng. Để thực hiện một quy tắc trong chuỗi 4, gõ:

sudo iptables -i đầu vào 4 new_port

Nếu có nhiều quy tắc, nó khá có vấn đề để tính số dòng thủ công; Trong trường hợp này, iptables có thể được đánh số chuỗi:

sudo iptables -l - dòng
Đầu vào chuỗi (Chính sách thả)

1 chấp nhận tất cả - bất cứ nơi nào bất cứ nơi nào
2 chấp nhận tất cả - bất cứ nơi nào bất cứ nơi nào ctstate liên quan, thành lập
3 Chấp nhận TCP - bất cứ nơi nào bất cứ nơi nào TCP DPT: SSH
4 Chấp nhận TCP - bất cứ nơi nào bất cứ nơi nào TCP DPT: HTTP
Chuỗi chuyển tiếp (chấp nhận chính sách)
Num Target Prot Opt Opt Điểm đích
Đầu ra chuỗi (chấp nhận chính sách)
Num Target Prot Opt Opt Điểm đích

Điều này cho phép bạn đảm bảo rằng quy tắc được thực hiện cho chuỗi mong muốn.

Tiết kiệm iptables.

Theo mặc định, tất cả các quy tắc chưa được lưu có hiệu lực cho đến khi máy chủ khởi động lại; Ngay sau khi khởi động lại, các quy tắc chưa được lưu sẽ bị mất.

Trong một số trường hợp, nó hữu ích vì nó có thể cho người dùng vô tình chặn mình, truy cập máy chủ. Tuy nhiên, trong hầu hết các trường hợp, nó vẫn thuận tiện hơn để lưu các quy tắc và tải chúng khi máy chủ được khởi động.

Điều này có thể được thực hiện theo nhiều cách; Dễ dàng nhất trong số họ là sử dụng gói iptables-dai dẳng, có thể được tải xuống từ kho Ubuntu mặc định:

sudo apt-get update
Sudo apt-get install iptables-dai dẳng

Trong quá trình cài đặt, gói sẽ chỉ định có lưu quy tắc hiện tại để tải tự động thêm; Nếu các quy tắc hiện tại đã được thử nghiệm (cho phép bạn tạo các kết nối SSH) và đáp ứng tất cả các yêu cầu, chúng có thể được lưu.

Sau khi hoàn thành việc cài đặt, một dịch vụ mới có tên là iptables-dai dẳng sẽ được khởi chạy khi máy chủ được khởi động lại và gia hạn các quy tắc được thiết lập.

CÁC KẾT QUẢ

Hướng dẫn này giúp cấu hình tường lửa theo yêu cầu của người dùng. Tất nhiên, vẫn còn rất nhiều tiện ích tương tự và một số trong số chúng có thể dễ sử dụng hơn; Tuy nhiên, iptables là một trong những công cụ tốt nhất, nếu chỉ vì nó thể hiện một số cấu trúc NetFilter cơ bản và được bao gồm trong nhiều hệ thống.

Tags:

Trong Linux xây dựng tường lửa có tên NetFilter. Theo trang web chính thức của dự án:

netFilter Đây là một tập hợp các thông điệp hệ thống bên trong nhân Linux cho phép các mô-đun kernel đăng ký các hàm gọi lại từ ngăn xếp mạng. Chức năng gọi lại đã đăng ký xử lý mỗi gói đi qua ngăn xếp mạng.

Tường lửa Linux được điều khiển bởi chương trình iptables, có các chức năng lọc IPv4, các bộ lọc ip6Tables IPv6. Hướng dẫn này cho biết cách học cách sử dụng NetFilter (iptables) trong CentOS / RHEL / Fedora / RedHat Enterprise Linux. Trong bài viết này, bạn có thể tìm thấy các ví dụ chính của cài đặt iptables trong Linux để bảo vệ chống xâm nhập.

Ví dụ về việc sử dụng iptables

  • Hầu hết các hành động được liệt kê trong bài viết này được viết với giả định rằng chúng sẽ được hoàn thành từ gốc của người dùng từ Bash hoặc bất kỳ vỏ hiện đại nào khác. Không nhập lệnh trên hệ thống từ xa, vì bạn có thể vô hiệu hóa quyền truy cập.
  • Đối với mục đích trình diễn, tôi đã sử dụng Ubuntu 10.04, nhưng các đội phải làm việc với bất kỳ phân phối hiện đại nào.
Hiển thị trạng thái tường lửa của bạn
Nhập lệnh root sau:
# iptables -l -n -v
Trả lời gần đúng:
Đầu vào chuỗi (Chính sách chấp nhận 0 gói, 0 byte) PKTS Byte Target Opt Opt Out Nguồn đến chuỗi Chuyển tiếp (Chính sách chấp nhận 0 gói, 0 byte) PKTS Byte Target Opt Out Out Out Out Mang nối chuỗi đầu ra (Chính sách chấp nhận 0 gói, 0 byte ) PKTS Byte Target Prot Opt Opt In Out Source Destination
Một phản ứng như vậy có nghĩa là tường lửa không hoạt động.
Và, ví dụ, như vậy sẽ chỉ ra rằng tường lửa trong Linux đang hoạt động:

Đầu vào chuỗi (Chính sách chấp nhận các gói 1810K, 126m byte) PKTS BYES Target Prot Opt Out Nation 7418K 1070M Chấp nhận UDP - * 0,0.0.0/0 0.0.0.0/0 UDP DPT: 1194 881 52520 Chấp nhận TCP - ETH0 * 0.0. 0,0 / 0 0.0.0 / 0 TCP DPT: 2222 Cờ: 0x17 / 0x02 Trạng thái Chuỗi mới Chuyển tiếp (Chính sách chấp nhận gói 5628K, 4828 byte) PKTS Byte Target Prot Opt Opt Out Nguồn điểm 0 0 Chấp nhận TCP - ETH0 TUN0 0.0 .0.0 0 0,0.0.0/0 TCP DPT: 1111 Tiểu bang Mới, Liên quan, Thành lập 599K 539m Chấp nhận UDP - eth0 * 0,0.0.0/0 10.1.1.6 UDP DPT: 1112 Bang mới, liên quan, đầu ra chuỗi được thiết lập (Chính sách chấp nhận gói 4959k, byte 880m ) PKTS Byte Target Prot Opt Opt In Out Source Destination
Các phím trong ví dụ có nghĩa là:

  • Như l: Hiển thị danh sách các quy tắc.
  • Ở v: Hiển thị thông tin chi tiết. Khóa này sẽ hiển thị tên của giao diện, các tham số của các quy tắc và mặt nạ TOS. Gói và quầy byte cũng sẽ được hiển thị trong danh sách, với hậu tố "K", "M" hoặc "G" tùy thuộc vào yếu tố cần thiết.
  • n.: Không giải quyết các địa chỉ IP, hiển thị kỹ thuật số. Tăng tốc đầu ra.
Để xem các quy tắc với số số, hãy thêm khóa-dòng - ví dụ:
# iptables -n -l -v - số dòng
Để xem quy tắc đầu vào hoặc đầu ra, loại:
# iptables -l nhập -n -v # iptables -l đầu ra -n -v - số dòng
Dừng, khởi động lại, khởi chạy tường lửa
Nếu bạn có CentOS / RHEL / Fedora Linux, hãy nhập:
# Dịch vụ iptables stop # dịch vụ iptables bắt đầu # dịch vụ iptables khởi động lại
Để đọc các quy tắc iptables với các công cụ riêng, hãy nhập:
# iptables -f # iptables -x # iptables -t Nat -f # iptables -t nat -x # iptables -t mangle -f # iplables -t mangle -x # iptables -x -POBUME chấp nhận # iptables -p ender chấp nhận # aptables -p đầu ra chấp nhận # iptables -p chuyển tiếp chấp nhận
Các phím trong ví dụ có nghĩa là:
  • Như nhau: Xóa tất cả các quy tắc (xả).
  • X.: Xóa chuỗi
  • t. <таблица>: Chọn một bảng và xóa các quy tắc.
  • P.: Cài đặt chính sách mặc định (ví dụ: thả, từ chối hoặc chấp nhận).
Xóa các quy tắc của tường lửa
Để hiển thị số dòng, cùng với một thông tin khác theo các quy tắc hiện có, hãy nhập:
# iptables -l đầu ra -n - số-số # iptables -l đầu ra -n - số-dòng | Ít hơn # iptables -l đầu ra -n - số dòng | GREP 8.8.8.8.
Bạn sẽ nhận được một danh sách IP. Nhìn vào số bên trái và nhập số để xóa nó. Ví dụ: xóa dòng số 4, nhập:
# iptables -d đầu vào 4
Hoặc tìm nguồn ip 202.54.1.1 và xóa khỏi quy tắc:
# iptables -d đầu vào -s 202.54.1.1 -j Thả
Chìa khóa trong ví dụ có nghĩa là:
  • D.: Xóa một hoặc nhiều quy tắc khỏi chuỗi đã chỉ định
Thêm quy tắc tường lửa
Để chèn một hoặc nhiều quy tắc trong chuỗi đã chỉ định, như một quy tắc, cú pháp sau được sử dụng. Đầu tiên tìm ra số dòng:
# iptables -l nhập -n - số dòng
Kết luận ví dụ:
Đầu vào chuỗi (Drop chính sách) Num Target Prot Opt Nguồn Nguồn 1 Drop All - 202.54.1.0.0.0.0/0 2 chấp nhận tất cả - 0,0.0.0/0 0.0.0.0/0 Tiểu bang Mới, Thành lập
Để chèn một quy tắc từ 1 đến 2, hãy nhập:
# iptables -i đầu vào 2 -s 8.8.8.8 -j Thả
Để xem các quy tắc cập nhật, nhập:
# iptables -l nhập -n - số dòng
Kết luận ví dụ:
Chuỗi đầu vào (Drop chính sách) Num Target Prot Opt Opt Source Destination 1 Drop All - 202.54.1.0.0.0.0/0 2 Thả tất cả - 8.8.8.8 0.0.0.0/0 3 chấp nhận tất cả - 0,0.0.0/0 0.0. 0,0 / 0 tiểu bang mới, thành lập
Lưu quy tắc của tường lửa
Để lưu các quy tắc tường lửa trong CentOS / RHEL / Fedora Linux, hãy nhập:
# Dịch vụ iptables tiết kiệm
Trong các bản phân phối khác
iptables-save\u003e /root/my.acction.firewall.Rules
hoặc là
Iptables-lưu.
Khôi phục các quy tắc của tường lửa
Để khôi phục các quy tắc tường lửa từ tệp /root/my.acction.firewall.rules, hãy nhập:
# Iptables-khôi phục< /root/my.active.firewall.rules
Để khôi phục các quy tắc tường lửa trong CentOS / RHEL / Fedora Linux, hãy nhập:
# Dịch vụ iptables khởi động lại
Cài đặt toàn bộ tường lửa mặc định
Chặn tất cả lưu lượng:
# iptables -p đầu vào thả # iptables -p đầu ra thả # iptables -p chuyển tiếp thả # iptables -l -v -n -n
Chỉ chặn lưu lượng truy cập đến:
# iptables -p đầu vào thả # iptables -p chuyển tiếp thả # iptables -p đầu ra chấp nhận
Đã khóa địa chỉ mạng mạng cục bộ trên giao diện phác thảo
Giả mạo IP - Một cuộc tấn công bao gồm việc sử dụng các gói IP được gửi bởi nạn nhân, dưới dạng địa chỉ trả về của địa chỉ IP của máy chủ mà nó tin tưởng. Các gói có địa chỉ nguồn không gouned phải bị từ chối bằng cú pháp sau:
# iptables -a đầu vào -i eth1 -s 192.168.0.0/224 -j thả # iptables -a nhập -i eth1 -s 10.0.0.0 / 8 -j thả
Phạm vi địa chỉ IPv4 cho các mạng riêng (đảm bảo chúng bị chặn trên giao diện bên ngoài)
  • 10.0.0.0 / 8 -J (A)
  • 172.16.0.0/12 (b)
  • 192.168.0 / 0. © ©.
  • 224.0.0.0 / 4 (Multicast D)
  • 240.0.0.0/5 (e)
  • 127.0.0.0/8 (loopback)
Chặn địa chỉ IP.
Để chặn địa chỉ IP 1.2.3.4, nhập:
# iptables -a đầu vào -s 1.2.3.4 -j Thả
Khóa yêu cầu cổng đến
Để chặn tất cả các yêu cầu đến cổng 80, nhập:
# iptables -a nhập -p tcp --dport 80 -j thả # iptables -a nhập -i eth1 -p tcp --dport 80 -j thả
Để chặn cổng 80 chỉ dành cho địa chỉ IP 1.2.3.4, nhập:
# iptables -a đầu vào -p tcp -s 1.2.3.4 --dport 80 -j thả # iptables -a nhập -i eth1 -p tcp -s 192.168.1.0/24 --dport 80 -j Thả
Chặn địa chỉ IP đi
Để chặn lưu lượng gửi đi của một máy chủ hoặc tên miền nhất định, chẳng hạn như một trang web, nhập:
Host -t một trang web
Câu trả lời sẽ là:
Có địa chỉ 95.211.41.31 Trang web
Viết địa chỉ IP của bạn và nhập lệnh sau để chặn tất cả lưu lượng đi từ 95.211.41.31:
# iptables -a đầu ra -d 95.211.41.31 -j Thả
Bạn có thể sử dụng mặt nạ:
# iptables -a đầu ra -d 192.168.1.0/24 -j thả # iptables -a đầu ra -o eth1 -d 192.168.1.0/224 -j Thả
Bạn cũng có thể sử dụng một tên miền, nhập:
# iptables -a đầu ra -p tcp -d www..en -j thả
Mặc dù tài liệu được viết rằng việc sử dụng một tên miền thay vì IP không được khuyến nghị.
Ghi nhật ký và chặn các gói
Nhập lệnh sau để đăng nhập và chặn trò chơi IP vào giao diện mở có tên ETH1:
# iptables -a input -i eth1 -s 10.0.0.0.0.0.0.0 -j log --log-prefix "ip_spoof a:" # iptables -a nhập -i eth1 -s 10.0.0.0.0 -j
Theo mặc định, mọi thứ đều đăng nhập vào một tệp / Var / log / tin nhắn.

Nhận xét từ:

Tốt hơn là không làm như vậy, nhất là đối với giao thông trái một cách rõ ràng. Nhật ký chỉ có thể được chèn nghiêm ngặt với giới hạn -m, nếu không, bất kỳ cuộc tấn công DOS nào sẽ hiệu quả hơn so với: Trên thực tế, một kẻ tấn công gián tiếp có một đường dẫn trực tiếp của tác động mạnh mẽ trực tiếp đến hệ thống tệp máy chủ.
Làm thế nào để viết chính xác hơn dưới đây
Ghi nhật ký và chặn các gói với số lượng các mục nhật ký hạn chế
Tham số -m có thể giới hạn số lượng các mục trong bản ghi được tạo ra trên một đơn vị thời gian. Này được sử dụng để ngăn chặn lũ lụt ở các log file. Để ghi lại không quá 7 bản ghi trong 5 phút, hãy nhập:
# Iptables -a đầu vào -i eth1 -s 10.0.0.0/8 -m Giới hạn --limit 5 / M --limit-Burst 7 -J log --Log-Tiền tố "IP_SPOOF A:" # Iptables -a -i đầu vào ETH1 -S 10.0.0.0 / 8 -J DROP
Chặn hoặc quyền lưu lượng truy cập từ địa chỉ MAC
Sử dụng cú pháp sau:
# Iptables -a -m Input Mac --mac-Nguồn 00: 19: 99: 3c: AB: 23 -J Drop ## * Chỉ chấp nhận giao cho TCP Port # 8080 Từ Mac 00: 19: 99: 3C: AB: 22 * ## # iptables -a đầu vào -p TCP - Port-Port 22 -m Mac --Mac-nguồn 00: 19: 99: 3c: AB: 22 -J Chấp nhận
Cấm hoặc bật yêu cầu ICMP cho PING
Nhập lệnh sau để chặn các yêu cầu ICMP:
# Iptables -a nhập -p-icmp - -icmp-type-exple -j drop # iptables -a nhập -i eth1 -p -p icmp-type-in \u200b\u200becho-yêu cầu -j Drop
Phản hồi Ping cũng có thể được giới hạn ở một số mạng hoặc máy chủ nhất định:
# iptables -a đầu vào -s -s 192.168.1.0/24 -p ICMP - Biểu tượng tiếng vang loại -icmp -j Chấp nhận
Ví dụ sau chỉ mất một loại yêu cầu ICMP hạn chế:
### ** Giả Đó Mặc định Input Policy Set để Drop ** ############# iptables -a -p Input ICMP --icmp-Type Echo-Trả lời -JCCEPT iptables -a đầu vào - p ICMP --icmp kiểu điểm-unreachable -j chấp nhận iptables -a đầu vào -p icmp --icmp kiểu thời gian vượt quá -j chấp nhận ## ** tất cả các máy chủ của chúng ta để đáp ứng với ping ** ## iptables -a đẦU vÀO -P icmp - aicmp-type-yêu cầu -j chấp nhận
Mở phạm vi địa chỉ IP
Sử dụng cú pháp sau để mở phạm vi địa chỉ IP:
## Chỉ chấp nhận kết nối với Cổng TCP 80 (Apache) nếu IP nằm trong khoảng thời gian từ 192.168.1.100 và 192.168.1.200 ## iptables -a nhập -p TCP - Cổng TCP - Cổng 80 -m -m-Phạm vi 192.168.100- 192.168.1.200 -J chấp nhận
## ví dụ Nat ## iptables -t nat -a postruting -j SNAT --Để-Nguồn 192.168.1.20-192.168.1.25
Đóng hoặc mở các cổng thông thường
Dưới đây là cú pháp để mở và đóng các cổng cổng TCP và UDP:
Thay thế Chấp nhận bằng Port Drop to Block: ## Mở cổng SSH TCP Cổng 22 ## iptables -a Input -M Tiểu bang - NEW -M TCP -P TCP --DPort 22 -J Chấp nhận iptables -a Nhập vào năm 192.168. 1.0 / 24 -m Nhà nước --state NEW -p TCP --DPORT 22 -J Chấp nhận ## mở Cup (Dịch vụ In ấn) UDP / TCP Port 631 cho Lan Users ## iptables -A ĐẦU VÀO -S 192.168.1.0/24 - P UDP -M UDP --DPort 631 -J Chấp nhận iptables -a đầu vào -s -s 192.168.1.0/24 -P TCP -M TCP --Dport 631 -J Chấp nhận ## Cho phép đồng bộ hóa thời gian qua NTP cho người dùng LAN (Mở cổng UDP 123) ## iptables -a đầu vào -s 192.168.1.0/24 -m Nhà nước --state NEW -p UDP --DPORT 123 -J Chấp nhận ## TCP Port mở 25 (SMTP) cho tất cả ## iptables -a đầu vào M Nhà nước --state NEW -p TCP --DPORT 25 -J Chấp nhận # mở DNS server cổng For All ## iptables -a -m Input State --state NEW -p UDP --DPORT 53 -J Chấp nhận iptables -a Input - m Nhà nước --state NEW -p TCP --DPORT 53 -J Chấp nhận ## mở HTTP / HTTPS (Apache) server Cảng to All ## iptables -A ĐẦU vÀO NHÀ nƯỚC -M --state NEW -p TCP --DPORT 80 - J Chấp nhận iptables -a đầu vào -m Tiểu bang - NEW -P TCP --DPort 443 -J Chấp nhận ## Mở TCP Cổng 110 (POP3) cho tất cả ## iptables -a Input -M Tiểu bang --State New -P TCP --DPort 110 -J chấp nhận ## mở cổng TCP 143 (IMAP) cho TẤT CẢ ## iptables -a -m Input State --state NEW -p TCP --DPORT 143 -J chấp nhận ## Open Access để Samba file server cho Lan Chỉ ## iptables -A Input -s -m 192.168.1.0/224 Nhà nước --Sstate New -p TCP --DPORT 137 -J Chấp nhận iptables -a Input -s 192.168.1.0/24 -m Nhà nước --state NEW -p TCP - DPORT 138 -J Chấp nhận iptables -a Input -S 192.168.1.0/224 -m Nhà nước --Sstate New -p TCP --DPORT 139 -J Chấp nhận iptables -a Input -S 192.168.1.0/24 -m Nhà nước --state NEW -P TCP --DPORT 445 -J Chấp nhận ## mở Tiếp cận Proxy server cho Lan Chỉ ## Iptables -a đầu vào -s -m 192.168.1.0/224 Nhà nước --state NEW -p TCP --DPORT 3128 - J Chấp nhận ## Mở quyền truy cập vào máy chủ MySQL cho người dùng LAN chỉ ## iptables -i Nhập -p TCP --Dport 3306 -J Chấp nhận
Giới hạn số lượng kết nối đồng thời đến máy chủ cho mỗi khách hàng bằng IP
Bạn có thể sử dụng mô-đun Connlimit để cung cấp các hạn chế đó. Để hạn chế không quá 3 kết nối SSH để lưu trữ, hãy nhập:
# iptables -a nhập -p tcp --synen --dport 22 -m Connlimit --connlimit-trên 3 -J từ chối
Cài đặt các yêu cầu HTTP đến 20:
# Iptables -p tcp --dport --syn 80 -m ConnLimit --conNLIMIT-TRÊN 20 --ConnLimit-Mask 24 -J Drop
Tham số trong ví dụ,
  • --Connlimit-trên 3: Số các hợp chất hiện có trên 3 tương ứng với 3.
  • --Connlimit-mask 24: Nghiền máy chủ bằng cách