Là tốt hơn để đặt quy tắc trong ip6tables hoặc vô hiệu hóa ipv6?


11

Tôi có cấu hình mạng sau:

# ifconfig -a
eth0      Link encap:Ethernet  HWaddr 00:e0:1c:73:02:09
          inet addr:10.1.4.41  Bcast:10.1.255.255  Mask:255.255.0.0
          inet6 addr: fe80::2e0:4cff:fe75:309/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:858600 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1069549 errors:0 dropped:0 overruns:5 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:142871181 (136.2 MiB)  TX bytes:717982640 (684.7 MiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:37952 errors:0 dropped:0 overruns:0 frame:0
          TX packets:37952 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:3396918 (3.2 MiB)  TX bytes:3396918 (3.2 MiB)

Tôi có máy chủ DHCP trong mạng của mình và tôi có thể nhận được hợp đồng thuê sau:

lease {
  interface "eth0";
  fixed-address 10.1.4.41;
  option subnet-mask 255.255.0.0;
  option routers 10.1.255.253;
  option dhcp-lease-time 120;
  option dhcp-message-type 5;
  option domain-name-servers 82.160.125.52,213.199.198.248,82.160.1.1;
  option dhcp-server-identifier 192.168.22.22;
  renew 3 2014/01/01 18:34:41;
  rebind 3 2014/01/01 18:35:30;
  expire 3 2014/01/01 18:35:45;
}

Tôi có thể ping 127.0.0.1, ::1, 10.1.4.41:

$ ping 10.1.4.41
PING 10.1.4.41 (10.1.4.41) 56(84) bytes of data.
64 bytes from 10.1.4.41: icmp_seq=1 ttl=64 time=0.065 ms
64 bytes from 10.1.4.41: icmp_seq=2 ttl=64 time=0.075 ms
64 bytes from 10.1.4.41: icmp_seq=3 ttl=64 time=0.085 ms
^C
--- 10.1.4.41 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.065/0.075/0.085/0.008 ms

$ ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.066 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.056 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.055 ms
^C
--- 127.0.0.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.055/0.059/0.066/0.005 ms

$ ping6 ::1
PING ::1(::1) 56 data bytes
64 bytes from ::1: icmp_seq=1 ttl=64 time=0.052 ms
64 bytes from ::1: icmp_seq=2 ttl=64 time=0.049 ms
64 bytes from ::1: icmp_seq=3 ttl=64 time=0.037 ms
^C
--- ::1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.037/0.046/0.052/0.006 ms

Tôi không thể ping địa chỉ ipv6 fe80::2e0:4cff:fe75:309:

$ ping6 fe80::2e0:4cff:fe75:309
connect: Invalid argument

Tôi đã đặt một số quy tắc iptables (ipv4):

# iptables -S
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
-N TCP
-N UDP
-A INPUT -i eth0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i tun0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
-A OUTPUT -m conntrack --ctstate INVALID -j DROP

Và nó hoạt động như mong đợi cho ipv4. Nhưng khi tôi kiểm tra ip6tables, tôi có thể thấy một số gói ở đó:

# ip6tables -nvL
Chain INPUT (policy ACCEPT 381 packets, 27624 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 390 packets, 26296 bytes)
 pkts bytes target     prot opt in     out     source               destination

Tôi đã làm theo hướng dẫn này và họ nói rằng tôi nên sao chép cấu hình iptables (ipv4) và dán nó vào ip6tables (ipv6). Nhưng khi tôi làm điều này, không có gói nào có thể đi qua quy tắc RELATED,ESTABLISHEDtrong bảng ipv6. Tất cả chúng đều bị loại bỏ vì chính sách chuỗi INPUT ( DROP).

# ip6tables -nvL
Chain INPUT (policy DROP 5 packets, 360 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     all      eth0   *       ::/0                 ::/0                 ctstate RELATED,ESTABLISHED
    0     0 ACCEPT     all      lo     *       ::/0                 ::/0
    0     0 ACCEPT     all      tun0   *       ::/0                 ::/0                 ctstate RELATED,ESTABLISHED
    0     0 DROP       all      *      *       ::/0                 ::/0                 ctstate INVALID
    0     0 UDP        udp      *      *       ::/0                 ::/0                 ctstate NEW
    0     0 TCP        tcp      *      *       ::/0                 ::/0                 tcp flags:0x17/0x02 ctstate NEW
    0     0 REJECT     tcp      *      *       ::/0                 ::/0                 reject-with tcp-reset
    0     0 REJECT     udp      *      *       ::/0                 ::/0                 reject-with icmp6-port-unreachable

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DROP       all      *      *       ::/0                 ::/0                 ctstate INVALID

Chain TCP (1 references)
 pkts bytes target     prot opt in     out     source               destination

Chain UDP (1 references)
 pkts bytes target     prot opt in     out     source               destination

Như bạn có thể thấy không có gói đầu ra, vậy tại sao google và stack exchange cố gắng kết nối với máy của tôi? Và làm thế nào để họ làm điều đó bởi vì thậm chí tôi không thể ping địa chỉ ipv6 của mình?

Họ cũng nói rằng nếu ISP của tôi không có ipv6 (trong hợp đồng thuê, không có mục ipv6) tôi nên vô hiệu hóa ipv6 và đã làm điều này trước khi sử dụng ipv6.disable=1. Tôi đã hỏi câu hỏi tương tự tại meta.stackoverflow.com, và tôi nhận được câu trả lời rằng tôi không nên tắt ipv6.

Tôi không có ý tưởng gì để làm. Tôi có một số vấn đề về kết nối, ý tôi là đôi khi tôi không thể truy cập các trang khi trao đổi ngăn xếp hoặc google, tôi cũng gặp vấn đề với pastebin.com. Trong mỗi trường hợp có cùng một triệu chứng - sau khi nhập một địa chỉ trong trình duyệt của tôi, đôi khi tôi phải chờ vài phút để truy cập trang web và sau khi tải lại 2-3 lần, tôi có thể duyệt nó một cách tự do, ít nhất là cho một khoảng thời gian nhất định.

Câu trả lời:


13

Địa chỉ IPv6 của bạn bắt đầu bằng fe80:và do đó là một địa chỉ liên kết cục bộ. Các địa chỉ như vậy chỉ có thể sử dụng trên cùng một liên kết với giao diện mạng. Bởi vì cùng một subnet link-local tồn tại trên tất cả các mạng giao diện bạn sẽ phải chỉ định giao diện bạn muốn sử dụng. Ví dụ: khi bạn muốn ping một địa chỉ liên kết cục bộ.

Hãy thử một trong những ping6ví dụ sau . Cả hai đều làm như vậy:

ping6 fe80::2e0:4cff:fe75:309%eth0
ping6 -I eth0 fe80::2e0:4cff:fe75:309

Điều này cũng có nghĩa là chỉ các hệ thống trên liên kết cục bộ (LAN của bạn) mới có thể sử dụng địa chỉ liên kết cục bộ này để kết nối với hệ thống của bạn. Bộ định tuyến sẽ không định tuyến các địa chỉ đó. Không có cách nào Google hoặc Stack Exchange gửi lưu lượng IPv6 đến máy của bạn, bởi vì máy của bạn không có địa chỉ IPv6 có thể truy cập / có thể định tuyến từ chúng.

Vì vậy, lưu lượng IPv6 bạn đang thấy trên giao diện của bạn là gì? Có lẽ những thứ như mDNS ( DNS đa hướng ) và các giao thức khác có thể tự động kết nối trên liên kết cục bộ. Ví dụ: Apple AirplayWindows Home Group .

Quy tắc tường lửa của bạn đang thiếu một điều rất quan trọng : ICMPv6. IPv6 sử dụng ICMP nhiều hơn so với IPv4 và không cho phép các gói ICMP có thể làm tê liệt nghiêm trọng lưu lượng truy cập của bạn vì bạn sẽ không nhận được thông báo lỗi liên quan đến lưu lượng đó. Điều này có thể gây ra sự chậm trễ / thời gian chờ lâu. Cho phép lưu lượng truy cập ICMPv6 thường không bị tổn thương, vì vậy bạn có thể thêm điều này vào quy tắc tường lửa của mình:

ip6tables -A INPUT -p icmpv6 -j ACCEPT

Nếu bạn muốn chặn các ping6gói (mặc dù tôi không thực sự hiểu tại sao mọi người vẫn làm điều đó vào những ngày này, điều đó làm cho việc gỡ lỗi kết nối khó khăn hơn rất nhiều), bạn có thể thêm điều này như trước ACCEPTdòng trước :

ip6tables -A INPUT -p icmpv6 --icmpv6-type 128 -j DROP

Điều này chủ yếu quan trọng khi bạn có được kết nối IPv6 toàn cầu thực sự với máy của mình, nhưng sẽ không hại nếu bạn đã chuẩn bị cho điều đó :-)


1
Bây giờ tôi hiểu rồi. Tôi đã thêm icmpv6quy tắc nhưng giới hạn ở 20 / phút và tôi có thể thấy các gói đó ở đó. ping6 -I eth0 fe80::2e0:4cff:fe75:309cũng hoạt động.
Mikhail Morfikov

2

Tôi luôn đảm nhận vị trí, khi quản lý các hệ thống, rằng bất cứ điều gì tôi không cần phải cung cấp rõ ràng cho các dịch vụ trên hệ thống đó, đều nên tắt nó đi. Triết lý này đi vào tất cả mọi thứ cho dù đó là:

  • hủy cài đặt phần mềm không cần thiết
  • vô hiệu hóa máy tính để bàn GUI trên máy chủ
  • vô hiệu hóa và / hoặc loại trừ phần cứng không liên tục
  • vô hiệu hóa IPv6
  • vô hiệu hóa các dịch vụ không liên tục
  • Vân vân.

Tôi có cùng một triết lý, nhưng trong trường hợp này tôi thực sự không biết phải làm gì. Một số người nói rằng tôi nên vô hiệu hóa ipv6, những người khác nói điều gì đó khác biệt. Tôi có vấn đề ngay cả khi ipv6 bị vô hiệu hóa.
Mikhail Morfikov

@MikhailMorfikov - ISP của bạn có thực hiện bất kỳ proxy / NAT nào không khi khách hàng của họ sử dụng IPv6 chỉ để truy cập vào ISP. Tôi không nghĩ đây là vấn đề với bạn, nếu không bạn sẽ có địa chỉ IPv6 nhưng chỉ nghĩ về nó.
slm

Tôi không biết, có lẽ tôi nên hỏi họ, và có lẽ họ sẽ làm gì đó và khắc phục vấn đề.
Mikhail Morfikov

2

Họ cũng nói rằng nếu ISP của tôi không có ipv6 (trong hợp đồng thuê, không có mục nhập ipv6) tôi nên tắt ipv6 và đã thực hiện việc này trước đây bằng cách sử dụng ipv6.disable = 1. Tôi đã hỏi câu hỏi tương tự tại meta.stackoverflow.com và tôi nhận được câu trả lời rằng tôi không nên tắt ipv6.

tất nhiên bạn sẽ không thấy hợp đồng thuê địa chỉ IPv6 với DHCP - đó là những gì DHCPv6 dành cho: DHCP và DHCPv6 không tương thích.

Khi tắt IPv6 hay không: Nếu bạn không cần và ISP của bạn chưa cung cấp, hãy tắt nó đi nhưng chuẩn bị cho việc giới thiệu . Điều này bao gồm xóa / thiết kế lại mọi thứ liên quan rõ ràng đến IP kế thừa, chẳng hạn như địa chỉ IP được mã hóa cứng hoặc sử dụng phát sóng.

Apropose tắt IPv6: hãy cẩn thận, ví dụ Microsoft coi IPv6 là một phần không thể thiếu của hệ điều hành, do đó, tắt IPv6 ở đó có thể ảnh hưởng đến sự hỗ trợ mà bạn nhận được từ họ.

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.