Apakah lebih baik untuk menetapkan aturan di ip6tables atau menonaktifkan ipv6?

11

Saya memiliki konfigurasi jaringan berikut:

# 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)

Saya memiliki server DHCP di jaringan saya dan saya bisa mendapatkan sewa berikut:

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;
}

Saya bisa 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

Saya tidak bisa melakukan ping ke alamat ipv6 fe80::2e0:4cff:fe75:309:

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

Saya telah menetapkan beberapa aturan 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

Dan itu berfungsi seperti yang diharapkan untuk ipv4. Tetapi ketika saya memeriksa ip6tables, saya dapat melihat beberapa paket pergi ke sana:

# 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

Saya mengikuti panduan ini , dan mereka mengatakan bahwa saya harus menyalin konfigurasi iptables (ipv4) dan menempelkannya di ip6tables (ipv6). Tetapi ketika saya melakukan ini, tidak ada paket yang bisa melewati aturan RELATED,ESTABLISHEDdi tabel ipv6. Semuanya dibatalkan karena kebijakan rantai 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

Seperti yang Anda lihat tidak ada paket output, jadi mengapa pertukaran google dan stack mencoba untuk terhubung ke mesin saya? Dan bagaimana mereka melakukannya karena bahkan saya tidak bisa melakukan ping alamat ipv6 saya?

Mereka juga mengatakan jika ISP saya tidak memiliki ipv6 (dalam sewa, tidak ada entri ipv6) saya harus menonaktifkan ipv6 dan telah melakukan ini sebelumnya dengan menggunakan ipv6.disable=1. Saya mengajukan pertanyaan serupa di meta.stackoverflow.com, dan saya mendapat jawaban bahwa saya seharusnya tidak menonaktifkan ipv6.

Saya tidak tahu harus berbuat apa. Saya memiliki beberapa masalah koneksi, maksud saya kadang-kadang saya tidak dapat mengakses halaman di pertukaran stack, atau google, saya juga memiliki masalah dengan pastebin.com. Dalam setiap kasus ada gejala yang sama - setelah mengetikkan alamat di browser saya, saya harus menunggu beberapa menit untuk mengakses situs dan setelah memuatnya 2-3 kali, saya dapat menjelajahinya dengan bebas, setidaknya untuk periode waktu tertentu.

Mikhail Morfikov
sumber

Jawaban:

13

Alamat IPv6 Anda dimulai dengan fe80:dan karenanya merupakan alamat tautan-lokal. Alamat tersebut hanya dapat digunakan pada tautan yang sama dengan antarmuka jaringan. Karena subnet tautan-lokal yang sama ada di setiap antarmuka jaringan, Anda harus menentukan antarmuka mana yang ingin Anda gunakan. Misalnya ketika Anda ingin melakukan ping ke alamat tautan-lokal.

Coba salah satu ping6contoh berikut . Keduanya melakukan hal yang sama:

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

Ini juga berarti bahwa hanya sistem pada tautan lokal Anda (LAN Anda) yang dapat menggunakan alamat tautan-lokal ini untuk terhubung ke sistem Anda. Router tidak akan merutekan alamat itu. Tidak ada cara Google atau Stack Exchange mengirim lalu lintas IPv6 ke mesin Anda, karena mesin Anda tidak memiliki alamat IPv6 yang dapat dijangkau / dirutekan dari mereka.

Jadi, lalu lintas IPv6 apa yang Anda lihat di antarmuka Anda? Mungkin hal-hal seperti mDNS ( multicast DNS ) dan protokol lain yang dapat terhubung secara otomatis pada tautan lokal. Misalnya Apple Airplay dan Windows Home Group .

Aturan firewall Anda hilang hal yang sangat penting: ICMPv6. IPv6 lebih banyak menggunakan ICMP daripada IPv4, dan tidak membiarkan paket ICMP dapat melumpuhkan lalu lintas Anda karena Anda tidak akan menerima pesan kesalahan yang terkait dengan lalu lintas itu. Ini dapat menyebabkan penundaan lama / batas waktu. Mengizinkan lalu lintas ICMPv6 biasanya tidak ada salahnya, jadi Anda bisa menambahkan ini ke aturan firewall Anda:

ip6tables -A INPUT -p icmpv6 -j ACCEPT

Jika Anda ingin memblokir ping6paket (walaupun saya tidak begitu mengerti mengapa orang-orang masih melakukannya hari ini, itu membuat konektivitas debug jauh lebih sulit) Anda dapat menambahkan ini seperti sebelum ACCEPTbaris sebelumnya :

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

Ini sebagian besar penting ketika Anda mendapatkan konektivitas IPv6 global nyata ke mesin Anda, tetapi tidak ada salahnya jika Anda sudah bersiap untuk itu :-)

Sander Steffann
sumber
1
Aku mengerti sekarang. Saya menambahkan icmpv6aturan tetapi terbatas pada 20 / mnt, dan saya bisa melihat bahwa paket-paketnya ada. ping6 -I eth0 fe80::2e0:4cff:fe75:309juga berfungsi.
Mikhail Morfikov
2

Saya selalu mengambil posisi, ketika mengelola sistem, bahwa apa pun yang saya tidak perlu secara eksplisit menyediakan layanan pada sistem tersebut, harus dimatikan. Filosofi ini berlaku untuk semua hal, entah itu:

  • batalkan pemasangan perangkat lunak yang tidak perlu
  • menonaktifkan desktop GUI di server
  • menonaktifkan dan / atau mengecualikan perangkat keras yang tidak digunakan
  • menonaktifkan IPv6
  • menonaktifkan layanan uncessary
  • dll.
slm
sumber
Saya memiliki filosofi yang sama, tetapi dalam hal ini saya benar-benar tidak tahu harus berbuat apa. Beberapa orang mengatakan bahwa saya harus menonaktifkan ipv6, yang lain mengatakan sesuatu yang berbeda. Saya memiliki masalah bahkan ketika ipv6 dinonaktifkan.
Mikhail Morfikov
@MikhailMorfikov - apakah ISP Anda melakukan proxy / NAT di mana mereka membuat pelanggan mereka menggunakan IPv6 hanya untuk mengakses ke ISP. Saya tidak berpikir ini masalah bagi Anda, kalau tidak Anda akan memiliki alamat IPv6 tetapi hanya memikirkannya.
slm
Saya tidak tahu, mungkin saya harus bertanya kepada mereka, dan mungkin mereka akan melakukan sesuatu dan memperbaiki masalah.
Mikhail Morfikov
2

Mereka juga mengatakan jika ISP saya tidak memiliki ipv6 (dalam sewa, tidak ada entri ipv6) saya harus menonaktifkan ipv6 dan telah melakukan ini sebelumnya dengan menggunakan ipv6.disable = 1. Saya mengajukan pertanyaan serupa di meta.stackoverflow.com, dan saya mendapat jawaban bahwa saya seharusnya tidak menonaktifkan ipv6.

tentu saja Anda tidak akan melihat sewa alamat IPv6 dengan DHCP - itulah tujuan DHCPv6: DHCP dan DHCPv6 tidak kompatibel.

Pada mematikan IPv6 atau tidak: Jika Anda tidak membutuhkannya dan ISP Anda belum menyediakannya, matikan tetapi bersiap untuk pengenalannya . Ini termasuk untuk menghapus / mendesain ulang segala sesuatu yang bergantung secara eksplisit pada IP lama, seperti alamat IP yang dikodekan keras atau menggunakan siaran.

Jika Anda mematikan IPv6: berhati-hatilah karena misalnya Microsoft menganggap IPv6 sebagai bagian integral dari sistem operasi, jadi mematikan IPv6 di sana mungkin memengaruhi dukungan yang Anda dapatkan dari mereka.

countermode
sumber