sách gpt4 ai đã đi

Hôm nay Fei Ge sẽ chỉ cho bạn cách hiểu các nguyên lý của Iptables!

In lại Tác giả:qq735679552 Thời gian cập nhật: 2022-09-27 22:32:09 30 4
mua khóa gpt4 Nike

CFSDN nhấn mạnh vào việc tạo ra giá trị thông qua mã nguồn mở. Chúng tôi cam kết xây dựng một nền tảng chia sẻ tài nguyên để mọi người làm CNTT có thể tìm thấy thế giới tuyệt vời của riêng mình tại đây.

Đây là bài đăng trên blog của CFSDN. Hôm nay, Fei Ge sẽ chỉ cho bạn cách Iptables hoạt động! Được tác giả sưu tầm và sắp xếp, nếu bạn quan tâm đến bài viết này thì hãy thích nhé.

Hôm nay Fei Ge sẽ chỉ cho bạn cách hiểu các nguyên lý của Iptables!

Xin chào mọi người, tôi là Phí Ca.

Hiện nay việc ứng dụng iptables dường như đang ngày càng trở nên phổ biến hơn. Nó không chỉ xuất hiện trong tường lửa truyền thống, NAT và các chức năng khác mà còn thường thấy trong các dự án Docker, Kubernets và Istio phổ biến hiện nay. Vì lý do này, việc hiểu sâu sắc cách thức hoạt động của iptables là rất có giá trị.

Ngăn xếp mạng của hạt nhân Linux là một thứ thuần túy ở chế độ hạt nhân và được tách biệt khỏi các chức năng cấp độ người dùng. Nhưng để đáp ứng các nhu cầu khác nhau của nhiều cấp độ người dùng, hạt nhân mở ra một số lỗ hổng để người dùng can thiệp. Lớp người dùng có thể thay đổi chế độ làm việc của hạt nhân thông qua một số cấu hình để đáp ứng các nhu cầu đặc biệt.

Linux đặt các bộ lọc netfilter ở nhiều vị trí quan trọng trong các thành phần mạng của hạt nhân. Iptables được triển khai dựa trên netfilter. Do đó, hai thuật ngữ iptables và netfilter đôi khi được sử dụng thay thế cho nhau trong bài viết này.

Tôi cũng đã đọc nhiều bài viết về công nghệ netfilter trên Internet, nhưng tôi nghĩ chúng không đủ rõ ràng. Vậy thì hãy xắn tay áo lên và tự viết một bài nhé. Việc triển khai Netfilter có thể được tóm tắt đơn giản thành bốn bảng và năm chuỗi. Chúng ta hãy cùng xem xét kỹ hơn ý nghĩa của bốn bảng và năm chuỗi.

1. Năm chuỗi trong Iptables

Netfilter trên Linux đã cài năm hook vào nhiều cấp độ quan trọng khác nhau của ngăn xếp giao thức hạt nhân. Mỗi hook tương ứng với một loạt các quy tắc dưới dạng danh sách liên kết, do đó nó thường được gọi là chuỗi năm. Khi gói tin mạng chảy đến các điểm kiểm tra này trong ngăn xếp giao thức, nhiều quy tắc khác nhau được đăng ký trên các hook này sẽ lần lượt được thực thi để đạt được nhiều cách xử lý khác nhau đối với gói tin mạng.

Để hiểu rõ năm chuỗi, Fei Ge tin rằng điều quan trọng là phải tách biệt ba quá trình nhận, gửi và chuyển tiếp hạt nhân.

1.1 Quy trình tiếp nhận

Hàm nhập của Linux trong việc nhận các gói tin mạng ở lớp IP là ip_rcv. MÓC đầu tiên mà mạng gặp phải ở đây là PREROUTING. Khi tất cả các quy tắc trên hook này được xử lý, việc lựa chọn định tuyến sẽ được thực hiện. Nếu phát hiện gói tin mạng đến từ thiết bị này, nó sẽ nhập ip_local_deliver, tại đó nó sẽ gặp lại hook INPUT.

Hôm nay Fei Ge sẽ chỉ cho bạn cách hiểu các nguyên lý của Iptables!

Hãy cùng xem xét mã chi tiết, trước tiên hãy xem ip_rcv.

  1. //tệp: net/ipv4/ip_input.c
  2. số nguyên ip_rcv(cấu trúc sk_buff *skb, ......){
  3. ......
  4. trở lại NF_HOOK(NFPROTO_IPV4, NF_INET_PRE_ROUTING, skb, dev, VÔ GIÁ TRỊ,
  5. ip_rcv_kết thúc);
  6. }

Hàm NF_HOOK sẽ thực thi nhiều quy tắc khác nhau được đăng ký trong nhiều bảng khác nhau trong pre_routing trong iptables. Khi xử lý hoàn tất, hãy nhập ip_rcv_finish. Việc định tuyến sẽ được thực hiện trong chức năng này. Đây là lý do tại sao chuỗi PREROUTING được đặt tên như vậy, vì nó được thực thi trước khi định tuyến.

  1. //tệp: net/ipv4/ip_input.c
  2. tĩnh số nguyên ip_rcv_finish(cấu trúc sk_buff *skb){
  3. ...
  4. nếu (!skb_dst(skb)) {
  5. số nguyên lỗi = ip_route_input_noref(skb, iph->daddr, iph->saddr,
  6. iph->tos, skb->dev);
  7. ...
  8. }
  9. ...
  10. trở lại dst_đầu vào(skb);
  11. }

Nếu phát hiện dữ liệu được nhận trên thiết bị cục bộ, hàm ip_local_deliver sẽ được nhập. Sau đó, hook LOCAL_IN sẽ được thực thi lại, đây chính là thứ mà chúng ta gọi là chuỗi INPUT.

  1. //tệp: net/ipv4/ip_input.c
  2. số nguyên ip_local_deliver(cấu trúc sk_buff *skb){
  3. ......
  4. trở lại NF_HOOK(NFPROTO_IPV4, NF_INET_LOCAL_IN, skb, skb->dev, VÔ GIÁ TRỊ,
  5. ip_local_deliver_finish);
  6. }

Tóm tắt đơn giản về luồng xử lý dữ liệu nhận được là: Chuỗi PREROUTING -> phán đoán định tuyến (là máy cục bộ) -> Chuỗi INPUT -> ...

1.2 Quá trình gửi

Khi Linux gửi một gói tin mạng, điều đầu tiên nó làm là chọn tuyến đường để gửi, sau đó HOOK đầu tiên nó gặp là OUTPUT, rồi nó đi vào chuỗi POSTROUTING.

Hôm nay Fei Ge sẽ chỉ cho bạn cách hiểu các nguyên lý của Iptables!

Chúng ta hãy xem mã nguồn. Hàm nhập cho lớp mạng là ip_queue_xmit.

  1. //tệp: net/ipv4/ip_output.c
  2. số nguyên ip_queue_xmit(cấu trúc sk_buff *skb, cấu trúc flowi *fl)
  3. {
  4. // Quá trình định tuyến
  5. // Sau khi chọn, ghi lại thông tin định tuyến vào skb
  6. rt = (cấu trúc rtable *)__sk_dst_check(sk, 0);
  7. nếu (rt == VÔ GIÁ TRỊ) {
  8. // Nếu không có bộ nhớ đệm, hãy tìm kiếm mục tuyến đường
  9. rt = ip_route_output_ports(...);
  10. sk_setup_caps(sk, &rt->dst);
  11. }
  12. skb_dst_set_noref(skb, &rt->dst);
  13. ...
  14. //gửi
  15. ip_local_out(skb);
  16. }

Ở đây, việc lựa chọn định tuyến được thực hiện trước, sau đó hàm lớp IP __ip_local_out được nhập.

  1. //tệp: net/ipv4/ip_output.c
  2. số nguyên __ip_local_out(cấu trúc sk_buff *skb)
  3. {
  4. cấu trúc iphdr *iph = ip_hdr(skb);
  5. iph->tot_len = htons(skb->len);
  6. ip_send_check(iph);
  7. trở lại nf_móc(NFPROTO_IPV4, NF_INET_LOCAL_OUT, skb, VÔ GIÁ TRỊ,
  8. skb_dst(skb)->dev, đầu ra dst);
  9. }

NF_HOOK ở trên sẽ gửi các gói tin đến chuỗi NF_INET_LOCAL_OUT (OUTPUT). Sau khi thực hiện, nhập dst_output.

  1. //tệp: include/net/dst.h
  2. tĩnh trực tuyến số nguyên dst_output(cấu trúc sk_buff *skb)
  3. {
  4. trở lại skb_dst(skb)->đầu ra(tiếng Anh);
  5. }

Lấy tuyến đường trước đó ở đây và gọi đầu ra đã chọn để gửi. sẽ vào ip_output.

  1. //tệp: net/ipv4/ip_output.c
  2. số nguyên ip_output(cấu trúc sk_buff *skb)
  3. {
  4. ...
  5. //Gửi lại cho netfilter và gọi lại ip_finish_output sau khi hoàn tất
  6. trở lại NF_HOOK_COND(NFPROTO_IPV4, NF_INET_POST_ROUTING, skb, VÔ GIÁ TRỊ, phát triển,
  7. ip_finish_đầu ra,
  8. !(IPCB(skb)->cờ & IPSKB_REROUTED));
  9. }

Tóm lại, quá trình gửi các gói dữ liệu là: lựa chọn định tuyến -> chuỗi OUTPUT -> chuỗi POSTROUTING -> ...

1.3 Quá trình chuyển tiếp

Trên thực tế, ngoài các tiến trình nhận và gửi, hạt nhân Linux còn có thể hoạt động như một bộ định tuyến. Nó sẽ nhận các gói tin mạng (không thuộc về chính nó), sau đó chọn thiết bị card mạng thích hợp theo bảng định tuyến để chuyển tiếp.

Trong quá trình này, nửa đầu của quá trình tiếp nhận dữ liệu được thực hiện. Trong ip_rcv, nó đi qua chuỗi PREROUTING, sau khi định tuyến, nó thấy rằng gói tin không dành cho thiết bị này, do đó nó sẽ vào hàm ip_forward để chuyển tiếp, tại đó nó sẽ gặp lại chuỗi FORWARD. Cuối cùng, nó sẽ vào ip_output để gửi thực tế và gặp chuỗi POSTROUTING.

Hôm nay Fei Ge sẽ chỉ cho bạn cách hiểu các nguyên lý của Iptables!

Chúng ta hãy xem qua mã nguồn và trước tiên nhập mục lớp IP ip_rcv, tại đó chúng ta sẽ thấy chuỗi PREROUTING.

  1. //tệp: net/ipv4/ip_input.c
  2. số nguyên ip_rcv(cấu trúc sk_buff *skb, ......){
  3. ......
  4. trở lại NF_HOOK(NFPROTO_IPV4, NF_INET_PRE_ROUTING, skb, dev, VÔ GIÁ TRỊ,
  5. ip_rcv_kết thúc);
  6. }

Sau khi tất cả các quy tắc trong chuỗi PREROUTING được xử lý, nó sẽ chuyển đến ip_rcv_finish, nơi lựa chọn tuyến đường được thực hiện, và sau đó chuyển đến dst_input.

  1. //tệp: include/net/dst.h
  2. tĩnh trực tuyến số nguyên dst_input(cấu trúc sk_buff *skb)
  3. {
  4. trở lại skb_dst(skb)->đầu vào(skb);
  5. }

Các bước của quy trình chuyển tiếp này hoàn toàn giống với quy trình tiếp nhận. Tuy nhiên, đường dẫn hạt nhân lại khác với lệnh gọi phương thức nhập ở trên. Những người không thuộc thiết bị này sẽ không nhập ip_local_deliver mà sẽ nhập ip_forward.

  1. //tệp: net/ipv4/ip_forward.c
  2. số nguyên ip_forward(cấu trúc sk_buff *skb)
  3. {
  4. ......
  5. trở lại NF_HOOK(NFPROTO_IPV4, NF_INET_FORWARD, skb, skb->dev,
  6. rt->dst.dev, ip_forward_finish);
  7. }

Trong ip_forward_finish, thông tin sẽ được gửi đến hàm gửi ip_output của lớp IP.

  1. //tệp: net/ipv4/ip_output.c
  2. số nguyên ip_output(cấu trúc sk_buff *skb)
  3. {
  4. ...
  5. //Gửi lại cho netfilter và gọi lại ip_finish_output sau khi hoàn tất
  6. trở lại NF_HOOK_COND(NFPROTO_IPV4, NF_INET_POST_ROUTING, skb, VÔ GIÁ TRỊ, phát triển,
  7. ip_finish_đầu ra,
  8. !(IPCB(skb)->cờ & IPSKB_REROUTED));
  9. }

Trong ip_output bạn sẽ gặp chuỗi POSTROUTING. Quá trình tiếp theo giống như nửa sau của quá trình gửi.

Để tóm tắt quá trình chuyển tiếp dữ liệu: chuỗi PREROUTING -> phán đoán định tuyến (không phải thiết bị này, tìm bước nhảy tiếp theo) -> chuỗi FORWARD -> chuỗi POSTROUTING -> ...

1.4 tóm tắt iptables

Sau khi hiểu được ba quy trình nhận, gửi và chuyển tiếp, chúng ta hãy tóm tắt lại ba quy trình trên.

Hôm nay Fei Ge sẽ chỉ cho bạn cách hiểu các nguyên lý của Iptables!

Quá trình nhận dữ liệu trải qua 1 và 2, quá trình gửi trải qua 4 và 5, và quá trình chuyển tiếp trải qua 1, 3 và 5. Với hình ảnh này, chúng ta có thể hiểu rõ hơn mối quan hệ giữa iptables và kernel.

2. Bốn bảng Iptables

Ở phần trước, chúng tôi đã giới thiệu năm chuỗi trong iptables. Mỗi chuỗi có thể bao gồm nhiều quy tắc. Khi NF_HOOK thực thi chuỗi này, nó sẽ lần lượt duyệt qua các quy tắc theo thứ tự ưu tiên. Nếu có quy tắc đáp ứng các điều kiện, hành động tương ứng với quy tắc đó sẽ được thực hiện.

Hôm nay Fei Ge sẽ chỉ cho bạn cách hiểu các nguyên lý của Iptables!

Các quy tắc này có thể là raw, mangle, nat và filter tùy theo mục đích khác nhau.

Vai trò của bảng hàng là bỏ qua việc xử lý các bảng khác đối với các gói tin vi phạm quy tắc và có mức độ ưu tiên cao nhất.

Chức năng của bảng mangle là sửa đổi một số bit cờ của gói dữ liệu theo các quy tắc, chẳng hạn như TTL.

Chức năng của bảng nat là thực hiện chuyển đổi địa chỉ mạng.

Chức năng của bảng lọc là lọc các gói tin nhất định, đây là cơ sở hoạt động của tường lửa.

Ví dụ, trong các quy tắc của chuỗi PREROUTING, các hàm row, mangle và nat có thể được thực thi tương ứng.

Hôm nay Fei Ge sẽ chỉ cho bạn cách hiểu các nguyên lý của Iptables!

Chúng ta hãy cùng thảo luận xem tại sao không phải là cả bốn bảng. Điều này là do các chức năng khác nhau, không phải tất cả các chức năng đều có thể sử dụng đầy đủ năm chuỗi.

Mục đích của bảng Raw là bỏ qua các bảng khác, do đó chỉ cần kiểm tra bảng này ngay khi bắt đầu quá trình nhận và gửi, do đó chỉ cần các hook PREROUTING và OUTPUT.

Bảng Mangle có thể sửa đổi các gói tin mạng ở bất kỳ vị trí nào, do đó nó sử dụng tất cả các vị trí hook.

NAT được chia thành hai loại: SNAT (Nguồn NAT) và DNAT (Đích NAT), có thể hoạt động ở bốn vị trí: PREROUTING, INPUT, OUTPUT và POSTROUTING.

Bộ lọc chỉ cần hoạt động theo ba bước INPUT, OUTPUT và FORWARD là đủ.

Nhìn chung, mối quan hệ giữa bốn chuỗi và năm bảng được thể hiện như hình dưới đây.

Hôm nay Fei Ge sẽ chỉ cho bạn cách hiểu các nguyên lý của Iptables!

Tôi xin nói thêm một chút ở đây. Mỗi không gian tên có các quy tắc iptables độc lập riêng. Hãy lấy NAT làm ví dụ. Khi kernel duyệt qua các quy tắc NAT, nó sẽ lấy chúng từ ipv4.nat_table của net (biến không gian tên). Cuối cùng, NF_HOOK sẽ thực thi hàm nf_nat_rule_find.

  1. //tệp: net/ipv4/netfilter/iptable_nat.c
  2. tĩnh chưa ký số nguyên nf_nat_rule_find(...)
  3. {
  4. cấu trúc net *net = nf_ct_net(ct);
  5. chưa ký số nguyên trở về;
  6. //Quan trọng!!!!!! nat_table được lưu trữ trong không gian tên
  7. ret = ipt_do_table(skb, hooknum, TRONG, ngoài, net->ipv4.nat_table);
  8. nếu (ret == NF_ACCEPT) {
  9. nếu (!nf_nat_initialized(ct, HOOK2MANIP(hooknum)))
  10. ret = alloc_null_binding(ct, hooknum);
  11. }
  12. trở lại trở về;
  13. }

Các container Docker hoạt động dựa trên không gian tên, do đó mỗi container Docker có thể được cấu hình với các quy tắc iptables độc lập của riêng nó.

3. Ví dụ về việc sử dụng Iptables

Sau khi đọc hai phần trước, mọi người đã hiểu cách triển khai bốn bảng và năm liên kết. Tiếp theo, chúng ta hãy xem cách sử dụng iptables trong thực tế thông qua một số hàm thực tế.

3.1 tự nhiên

Giả sử chúng ta có một máy chủ Linux, địa chỉ IP eth0 của nó là 10.162.0.100, thông qua địa chỉ IP này chúng ta có thể truy cập vào các máy chủ khác. Bây giờ chúng ta đã tạo một môi trường mạng ảo Docker net1 trên máy này và card mạng veth1 của nó có IP là 192.168.0.2.

Nếu bạn muốn 192.168.0.2 truy cập mạng bên ngoài, bạn cần thiết bị trong không gian tên mạng máy chủ để hỗ trợ chuyển tiếp các gói tin mạng. Vì đây là địa chỉ riêng tư nên chỉ có máy Linux này biết nên không thể truy cập vào máy chủ bên ngoài. Lúc này, nếu bạn muốn net1 truy cập 10.162.0.101 bình thường, bạn phải thực hiện SNAT - thay thế địa chỉ nguồn khi chuyển tiếp.

Hôm nay Fei Ge sẽ chỉ cho bạn cách hiểu các nguyên lý của Iptables!

SNAT hoạt động sau khi định tuyến và trước khi các gói tin mạng được gửi, tức là trong chuỗi POSTROUTING. Chúng tôi thêm quy tắc iptables sau vào không gian tên máy chủ. Quy tắc này xác định rằng nếu nguồn là 192.168.0 và đích không phải là br0, thì phán quyết thay thế IP nguồn sẽ được thực hiện.

  1. # iptables -t nat -A POSTROUTING -s 192.168.0.0/24 ! -o br0 -j MASQUERADE

Với quy tắc này, chúng ta hãy xem xét toàn bộ quy trình phát hành gói.

Khi một gói dữ liệu được gửi, trước tiên nó sẽ được gửi từ veth đến br0. Vì br0 nằm trong không gian tên của máy chủ, lệnh này sẽ thực thi đến chuỗi POSTROUTING. Trong chuỗi này, chúng ta có quy tắc snat vừa được cấu hình. Theo quy tắc này, hạt nhân sẽ thay thế 192.168.0.2 (không được thế giới bên ngoài biết) trong gói tin mạng bằng IP 10.162.0.100 của máy chủ (được thế giới bên ngoài biết). Ngoài ra, hãy theo dõi trạng thái liên kết.

Hôm nay Fei Ge sẽ chỉ cho bạn cách hiểu các nguyên lý của Iptables!

Sau đó, máy chủ sẽ đưa ra quyết định dựa trên bảng định tuyến của riêng nó, chọn thiết bị gửi mặc định và gửi gói tin ra khỏi card mạng eth0 cho đến khi đạt đến 10.162.0.101.

Tiếp theo, 10.162.0.100 sẽ nhận được gói phản hồi từ 10.162.0.101. Vì việc theo dõi liên kết đã được ghi lại ở bước trước nên máy chủ biết rằng gói tin trả lời là dành cho 192.168.0.2. Sau đó đảo ngược quá trình thay thế và gửi trả về veth chính xác thông qua br0.

Theo cách này, veth1 trong môi trường net1 có thể truy cập các dịch vụ mạng bên ngoài.

3.2 Thay thế địa chỉ đích DNAT

Tiếp tục với ví dụ ở phần trước, giả sử chúng ta muốn cung cấp dịch vụ trên cổng 80 trên địa chỉ 192.168.0.2. Tương tự như vậy, các máy chủ bên ngoài không thể truy cập địa chỉ này. Vào thời điểm này, cần phải thay thế địa chỉ đích DNAT. Khi gói dữ liệu đến, địa chỉ đích của nó cần được thay thế bằng 192.168.0.2:80.

Hôm nay Fei Ge sẽ chỉ cho bạn cách hiểu các nguyên lý của Iptables!

DNAT hoạt động trong chuỗi đầu tiên nơi hạt nhân nhận được gói tin mạng, đó là PREROUTING. Chúng tôi thêm quy tắc DNAT, cấu hình cụ thể như sau.

  1. # iptables -t nat -A PREROUTING ! -i br0 -p tcp -m tcp --dport 8088 -j DNAT --đến đích 192.168.0.2:80

Khi một gói tin mạng từ thế giới bên ngoài đến eth0. Vì eth0 nằm trong không gian tên của máy chủ nên nó sẽ được thực thi tới chuỗi PREROUTING.

Quy tắc này xác định rằng nếu yêu cầu TCP dành cho cổng 8088, địa chỉ đích sẽ được thay thế bằng 192.168.0.2:80. Sau đó, gói dữ liệu được chuyển tiếp qua br0 (192.168.0.1) và gói dữ liệu sẽ đến 192.168.0.2:80, nơi thực sự cung cấp dịch vụ.

Hôm nay Fei Ge sẽ chỉ cho bạn cách hiểu các nguyên lý của Iptables!

Cũng sẽ có các bản ghi theo dõi liên kết trong DNAT, do đó địa chỉ nguồn trong gói tin trả về từ 192.168.0.2 đến 10.162.0.101 sẽ được thay thế bằng 10.162.0.100:8088. Sau đó, 10.162.0.101 nhận được gói tin và luôn nghĩ rằng nó thực sự đang giao tiếp với 10.162.0.100:8088.

Theo cách này, veth1 trong môi trường net1 cũng có thể cung cấp dịch vụ cho mạng bên ngoài. Trên thực tế, Docker độc lập sử dụng cấu hình SNAT và DNAT được giới thiệu trong hai phần này để giao tiếp qua mạng.

3.3 bộ lọc

Bảng Lọc chủ yếu thực hiện chức năng lọc các gói tin mạng. Giả sử chúng ta tìm thấy một IP độc hại đang điên cuồng yêu cầu máy chủ của chúng ta, làm ảnh hưởng đến dịch vụ. Sau đó chúng ta có thể sử dụng bộ lọc để cấm nó. Nguyên lý hoạt động của nó là đưa ra phán đoán tại vị trí chuỗi INPUT của gói tin đã nhận và nếu đó là yêu cầu độc hại, nó sẽ bị loại bỏ ngay lập tức mà không cần xử lý. Tránh việc phải chuyển đến các lớp cao hơn và lãng phí tài nguyên CPU.

Hôm nay Fei Ge sẽ chỉ cho bạn cách hiểu các nguyên lý của Iptables!

Chi tiết phương pháp cấu hình cụ thể như sau:

  1. # iptables -I ĐẦU VÀO -s 1.2.3.4 -j LÀM RƠI //Bị cấm
  2. # iptables -D ĐẦU VÀO -s 1.2.3.4 -j LÀM RƠI //Bỏ chặn

Tất nhiên, bạn cũng có thể chặn một phân đoạn IP nhất định.

  1. # iptables -I ĐẦU VÀO -s 121.0.0.0/8 -j LÀM RƠI //Bị cấm
  2. # iptables -I ĐẦU VÀO -s 121.0.0.0/8 -j LÀM RƠI //Bỏ chặn

Ví dụ, giả sử bạn không muốn bất kỳ ai tùy ý ssh vào máy chủ của bạn và chỉ cho phép IP của bạn truy cập vào máy chủ. Sau đó chỉ cần giải phóng IP của bạn và vô hiệu hóa tất cả các IP khác.

  1. # iptables -t lọc -I INPUT -s 1.2.3.4 -p tcp --dport 22 -j CHẤP NHẬN
  2. # iptables -t lọc -I INPUT -p tcp --dport 22 -j THẢ

3.4 thô

Các quy tắc trong bảng Raw có thể bỏ qua quá trình xử lý của các bảng khác. Trong bảng NAT, để đảm bảo việc thay thế địa chỉ có thể được hoàn thành bình thường cho lưu lượng truy cập cả hai chiều, trạng thái liên kết sẽ được theo dõi và ghi lại. Một bản ghi tương ứng sẽ được tạo cho mỗi kết nối. Sử dụng hai lệnh sau để xem.

  1. # conntrack -L
  2. # mèo /proc/net/ip_conntrack

Tuy nhiên, trong tình huống lưu lượng truy cập cao, có thể xảy ra sự cố hồ sơ theo dõi kết nối bị đầy. Tôi đã từng gặp phải sự cố khi thử nghiệm một máy duy nhất có hàng triệu kết nối đồng thời, trong đó số lượng kết nối vượt quá nf_conntrack_max và không thể thiết lập kết nối mới.

  1. # ip_conntrack: bàn đầy, thả gói tin

Nhưng thực tế, nếu bạn không sử dụng chức năng NAT, chức năng theo dõi liên kết có thể bị tắt chẳng hạn.

  1. # iptables -t raw -A PREROUTING -d 1.2.3.4 -p tcp --dport 80 -j KHÔNG CÓ RACK
  2. #iptables-A PHÍA TRƯỚC -m trạng thái --state KHÔNG ĐƯỢC THEO DÕI -j CHẤP NHẬN

3.5 mangle

Khi bộ định tuyến chuyển tiếp một gói tin mạng, giá trị ttl sẽ giảm đi 1. Khi giá trị bằng 0, bộ định tuyến cuối cùng sẽ dừng chuyển tiếp gói tin. Nếu bạn không muốn tuyến đường này ảnh hưởng đến ttl, bạn có thể thêm 1 vào bảng mangel để bù lại.

  1. # ptables -t mangle -A PREROUTING -i eth0 -j TTL --ttl-inc 1

Giá trị TTL của tất cả các gói tin đến từ giao diện eth0 được tăng thêm 1 để bù cho giá trị mặc định trừ 1 cho chuyển tiếp định tuyến.

Tóm tắt

Iptables là một công cụ rất phổ biến và quan trọng. Các chức năng cơ bản của Linux như tường lửa và NAT đều được triển khai dựa trên nền tảng này. Bạn cũng có thể thấy nó thường xuyên trong các dự án Docker, Kubernets và Istio phổ biến. Vì lý do này, việc hiểu sâu sắc cách thức hoạt động của iptables là rất có giá trị.

Hôm nay, chúng ta đã tìm hiểu vị trí của năm chuỗi từ ba tiến trình khác nhau của quá trình nhận, gửi và chuyển tiếp hạt nhân trong phần đầu tiên.

Hôm nay Fei Ge sẽ chỉ cho bạn cách hiểu các nguyên lý của Iptables!

Sau đó, một chiều hướng khác của iptables theo góc nhìn chức năng được mô tả: bảng. Mỗi bảng đăng ký các quy tắc riêng của mình tại nhiều vị trí móc. Khi một gói tin được xử lý, quy tắc sẽ được kích hoạt và thực thi. Nhìn chung, mối quan hệ giữa bốn chuỗi và năm bảng được thể hiện như hình dưới đây.

Hôm nay Fei Ge sẽ chỉ cho bạn cách hiểu các nguyên lý của Iptables!

Cuối cùng, chúng tôi đưa ra các ví dụ ứng dụng đơn giản trên các bảng raw, mangle, nat và filter. Tôi hy vọng rằng qua bài học ngày hôm nay, bạn có thể hiểu đầy đủ về iptables. Tôi tin rằng điều này sẽ giúp ích rất nhiều cho công việc của bạn.

Liên kết gốc: https://mp.weixin.qq.com/s/O084fYzUFk7jAzJ2DDeADg.

Cuối cùng, bài viết này sẽ nói về việc sắp ra mắt. Hôm nay, Brother Fei sẽ chỉ cho bạn cách hiểu các nguyên tắc của Iptables! Đây là phần cuối của bài viết. Nếu bạn muốn biết thêm về nó, hôm nay Fei Ge sẽ chỉ cho bạn cách hiểu các nguyên tắc của Iptables! Vui lòng tìm kiếm các bài viết trên CFSDN hoặc tiếp tục duyệt các bài viết liên quan. Tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .

30 4 0
qq735679552
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com