Назад | Перейти на главную страницу

Правила межсетевого экрана IPv6

У меня есть капля DigitalOcean, которая используется для нескольких вещей, в первую очередь в качестве веб-хоста и SMTP-сервера. Недавно я начал заниматься IPv6 и успешно настроил его на VPS; ping6 отлично работает с google.com и т. д. Локальная сеть LAN настроена на IPv6 через slaac и может без проблем пинговать и подключаться к капле DO.

У меня проблемы с настройкой ip6tables. Я выполнил базовую конфигурацию, которая разрешает только SSH, Web и SMTP, но после добавления правил все перестает иметь возможность подключаться к VPS через IPv6. Как только я смываю столы, все в порядке. Также кажется, что если я настраиваю соединение (например, web или ssh) перед добавлением правил, соединения работают после добавления правил, это ненадолго. Я не уверен, что блокирует соединения на данный момент, любые рекомендации были бы полезны.

ip6tables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
  pkts bytes target     prot opt in     out     source               destination         
 1880  121K ACCEPT     all      *      *       ::/0                 ::/0                 ctstate RELATED,ESTABLISHED
    2   136 ACCEPT     all      lo     *       ::/0                 ::/0                
    1    84 ACCEPT     tcp      *      *       ::/0                 ::/0                 tcp dpt:22
    0     0 ACCEPT     tcp      *      *       ::/0                 ::/0                 tcp dpt:25
    0     0 ACCEPT     tcp      *      *       ::/0                 ::/0                 tcp dpt:80
    1    80 ACCEPT     tcp      *      *       ::/0                 ::/0                 tcp dpt:443
    0     0 ACCEPT     tcp      *      *       ::/0                 ::/0                 tcp dpt:587
  774 55932 DROP       all      *      *       ::/0                 ::/0                

Chain FORWARD (policy ACCEPT 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         
 2537  168K ACCEPT     all      *      *       ::/0                 ::/0

ОБНОВИТЬ: Добавлен оператор журнала для записи некоторых журналов, затем продолжился и попытался подключиться к SSH от клиента, который, как я знаю, не работал. Он не подключался, и я сдался, подождав, может быть, 10 секунд.

Mar 29 08:57:55 cloud kernel: [170352.518576] IN=eth0 OUT= MAC=33:33:ff:e2:40:01:84:b5:9c:f9:18:30:86:dd SRC=fe80:0000:0000:0000:0000:0000:0000:0001 DST=ff02:0000:0000:0000:0000:0001:ffe2:4001 LEN=72 TC=192 HOPLIMIT=255 FLOWLBL=0 PROTO=ICMPv6 TYPE=135 CODE=0 
Mar 29 08:57:56 cloud kernel: [170353.518091] IN=eth0 OUT= MAC=33:33:ff:e2:40:01:84:b5:9c:f9:18:30:86:dd SRC=fe80:0000:0000:0000:0000:0000:0000:0001 DST=ff02:0000:0000:0000:0000:0001:ffe2:4001 LEN=72 TC=192 HOPLIMIT=255 FLOWLBL=0 PROTO=ICMPv6 TYPE=135 CODE=0 
Mar 29 08:57:57 cloud kernel: [170354.517936] IN=eth0 OUT= MAC=33:33:ff:e2:40:01:84:b5:9c:f9:18:30:86:dd SRC=fe80:0000:0000:0000:0000:0000:0000:0001 DST=ff02:0000:0000:0000:0000:0001:ffe2:4001 LEN=72 TC=192 HOPLIMIT=255 FLOWLBL=0 PROTO=ICMPv6 TYPE=135 CODE=0 
Mar 29 08:57:59 cloud kernel: [170356.517573] IN=eth0 OUT= MAC=33:33:ff:e2:40:01:84:b5:9c:f9:18:30:86:dd SRC=fe80:0000:0000:0000:0000:0000:0000:0001 DST=ff02:0000:0000:0000:0000:0001:ffe2:4001 LEN=72 TC=192 HOPLIMIT=255 FLOWLBL=0 PROTO=ICMPv6 TYPE=135 CODE=0 

Почему SRC fe80::1? Это определенно не исходный IP-адрес, с которого я подключаюсь (сокращенный префикс 2600:1700). Кроме того, летнее время ff02::1:ffe2:4001 который, похоже, тоже настроен на интерфейсе:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 04:01:3a:XX:XX:XX brd ff:ff:ff:ff:ff:ff
    inet 104.236.XXX.XXX/18 brd 104.236.XXX.XXX scope global eth0
       valid_lft forever preferred_lft forever
    inet6 2604:a880:800:XXXX::YYYY:4001/64 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::601:3aff:fe85:dd01/64 scope link 
       valid_lft forever preferred_lft forever

ip -6 route
2604:a880:800:10::/64 dev eth0 proto kernel metric 256  pref medium
fe80::/64 dev tun0 proto kernel metric 256  pref medium
fe80::/64 dev tap0 proto kernel metric 256  pref medium
fe80::/64 dev eth0 proto kernel metric 256  pref medium
default via 2604:a880:800:XXXX::1 dev eth0 metric 1024  pref medium

Как просили, ip6tables-save

ip6tables-save
# Generated by ip6tables-save v1.6.0 on Thu Mar 29 09:03:33 2018
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 587 -j ACCEPT
-A INPUT -j LOG
-A INPUT -j DROP
-A OUTPUT -j ACCEPT
COMMIT
# Completed on Thu Mar 29 09:03:33 2018

Все узлы IPv6 имеют локальные адреса канала, которые находятся в fe80::/10 сеть. Узлы будут использовать локальную адресацию для различных вещей, которые остаются в локальной ссылке (она не может быть маршрутизирована), поэтому вы должны разрешить такую ​​адресацию в своих правилах.

IPv6 не поддерживает широковещательную рассылку, поэтому активно использует многоадресную рассылку. Узлы будут иметь несколько одноадресных / произвольных адресов на интерфейсе, и узел должен подписаться на многоадресный адрес запрошенного узла для каждого из этих адресов. Многоадресный адрес запрошенного узла основан на последних 24 битах одноадресного адреса, поэтому, если все ваши одноадресные / многоадресные адреса имеют одни и те же последние 24 бита, тогда у вас будет только одна многоадресная группа запрошенного узла для интерфейса (это идеал).

IPv6 Neighbor Discover использует многоадресный адрес запрошенного узла. Поскольку IPv6 не имеет широковещательной передачи, ARP не используется для связывания адреса уровня 2 с адресом уровня 3. IPv6 использует для этого ND, который использует многоадресный адрес запрошенного узла.