web-dev-qa-db-ja.com

ip6tablesでルールを設定するか、ipv6を無効にする方が良いですか?

次のネットワーク構成があります。

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

ネットワークにDHCPサーバーがあり、次のリースを取得できます。

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

_127.0.0.1_、_::1_、_10.1.4.41_に対してpingを実行できます。

_$ 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
_

Ipv6アドレスをpingできない_fe80::2e0:4cff:fe75:309_:

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

私はいくつかの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
_

そして、それはipv4で期待通りに機能します。しかし、ip6tablesをチェックすると、いくつかのパケットがそこに行くのがわかります。

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

私は this ガイドに従って、iptables(ipv4)構成をコピーしてip6tables(ipv6)に貼り付ける必要があると言っています。しかし、これを行うと、パケットはipv6テーブルのルール_RELATED,ESTABLISHED_を通過できません。 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
_

ご覧のとおり、出力パケットがないので、なぜgoogleおよびstack exchangeが私のマシンに接続しようとするのでしょうか。そして、私は自分のipv6アドレスをpingできないので、どうやってそれを行うのですか?

彼らはまた、私のISPにipv6がない場合(リースでは、ipv6エントリがない)と言っています。ipv6を無効にする必要があり、以前に_ipv6.disable=1_を使用してこれを行っていました。 _meta.stackoverflow.com_でも同様の質問をしましたが、ipv6を無効にすべきではないという回答を得ました。

私は何をすべきかわからない。接続に問題があります。スタック交換やGoogleでページにアクセスできないことがあります。Pastebin.comにも問題があります。どちらの場合も同じ症状があります-ブラウザにアドレスを入力した後、サイトにアクセスするために数分待たなければならないことがあり、2〜3回リロードした後、少なくとも1秒間は自由に閲覧できます。一定期間。

11

IPv6アドレスはfe80:で始まるため、リンクローカルアドレスです。このようなアドレスは、ネットワークインターフェイスと同じリンクでのみ使用できます。すべてのネットワークインターフェイスに同じリンクローカルサブネットが存在するため、使用するwhichインターフェイスを指定する必要があります。たとえば、リンクローカルアドレスにpingを送信する場合です。

次のping6の例のいずれかを試してください。どちらも同じです:

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

つまり、ローカルリンク(LAN)上のシステムだけがこのリンクローカルアドレスを使用してシステムに接続できます。ルーターはこれらのアドレスをルーティングしません。 GoogleまたはStack ExchangeがIPv6トラフィックをマシンに送信する方法はありません。これは、マシンに到達可能/ルーティング可能なIPv6アドレスがないためです。

それで、あなたはあなたのインターフェースでどんなIPv6トラフィックを見ていますか?おそらく、mDNS( マルチキャストDNS )や、ローカルリンクに自動的に接続できるその他のプロトコルなどです。たとえば、 Apple Airplay および Windows Home Group です。

ファイアウォールルールに非常に重要なものが欠けています:ICMPv6。 IPv6はICMPをIPv4よりも多く使用します。ICMPパケットを許可しないと、トラフィックに関連するエラーメッセージが表示されないため、トラフィックが大幅に低下する可能性があります。これにより、長い遅延/タイムアウトが発生する可能性があります。通常、ICMPv6トラフィックを許可しても問題はないので、これをファイアウォールルールに追加できます。

ip6tables -A INPUT -p icmpv6 -j ACCEPT

ping6パケットをブロックしたい場合(私は最近人々がなぜそうしているのか本当に理解していませんが、接続のデバッグを非常に難しくしています)、前のACCEPT行の前にこれを追加できます:

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

これは、マシンへの実際のグローバルIPv6接続を取得する場合に最も重要ですが、すでにその準備をしていれば問題ありません:-)

13
Sander Steffann

彼らはまた、私のISPにipv6がない場合(リースには、ipv6エントリがない)と言っています。ipv6を無効にする必要があり、以前にipv6.disable = 1を使用してこれを行っていました。 meta.stackoverflow.comで同様の質問をしたところ、ipv6を無効にすべきではないという回答を得ました。

もちろん、DHCPを使用したIPv6アドレスリースは表示されません。これがDHCPv6の目的です。DHCPとDHCPv6には互換性がありません。

IPv6をオフにするかどうかについて:IPv6が必要なく、ISPからまだ提供されていない場合は、オフにしてくださいただし、その導入に備えて。これには、ハードコードされたIPアドレスやブロードキャストの使用など、レガシーIPに明示的に依存するすべてのものを削除/再設計することが含まれます。

適切にIPv6をオフにする:たとえば、MicrosoftはIPv6をオペレーティングシステムの不可欠な部分と見なしているため、IPv6をオフにすると、それらから得られるサポートに影響を与える可能性があることに注意してください。

2
countermode

私は、システムを管理するときは常に、私がしてはいけないことは何でも明示的にシステムにサービスを提供する必要があるため、オフにする必要があるという立場を取ります。この哲学は、それが次のいずれであっても、すべてに当てはまります。

  • 不要なソフトウェアのアンインストール
  • サーバーのGUIデスクトップを無効にする
  • 不要なハードウェアを無効化および/または除外する
  • iPv6を無効にする
  • 不要なサービスを無効にする
  • 等.
2
slm