Я пытаюсь реализовать набор правил iptables для OpenVPN:

  1. Все (без исключения) проходит через OpenVPN
  2. Если OpenVPN не работает или недоступен, все (без исключения) не могут получить доступ к Интернету
  3. Локальный доступ всегда возможен, независимо от статуса OpenVPN

Лучшее (из шести примеров), которое я видел до сих пор, это то, что он все еще разрешает доступ к Интернету, когда VPN не работает через ipv6:

# Clean down existing rules
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -F
iptables -t mangle -F
iptables -F
iptables -X
ip6tables -P INPUT ACCEPT
ip6tables -P FORWARD ACCEPT
ip6tables -P OUTPUT ACCEPT
ip6tables -t nat -F
ip6tables -t mangle -F
ip6tables -F
ip6tables -X

# Allow loopback device (internal communication)
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Allow all local traffic.
iptables -A INPUT -s 192.168.0.0/16 -j ACCEPT
iptables -A OUTPUT -d 192.168.0.0/16 -j ACCEPT

# Allow VPN establishment
iptables -A OUTPUT -p udp --dport 1194 -j ACCEPT
iptables -A INPUT -p udp --sport 1194 -j ACCEPT

# Accept all TUN connections (tun = VPN tunnel)
iptables -A OUTPUT -o tun+ -j ACCEPT
iptables -A INPUT -i tun+ -j ACCEPT

# Set default policies to drop all communication unless specifically allowed
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

Если я попытаюсь полностью заблокировать весь трафик ipv6 (что предлагается в нескольких примерах), я не смогу подключиться ни к чему:

# Set default policies to drop all communication unless specifically allowed
ip6tables -P INPUT DROP
ip6tables -P OUTPUT DROP
ip6tables -P FORWARD DROP

Если я пытаюсь отразить то, что находится в разделе ipv4, то у меня есть это:

# Allow loopback device (internal communication)
ip6tables -A INPUT -i lo -j ACCEPT
ip6tables -A OUTPUT -o lo -j ACCEPT

# Allow all local traffic.
# (Skipped as I don't know how to do this)

# Allow VPN establishment
ip6tables -A OUTPUT -p udp --dport 1194 -j ACCEPT
ip6tables -A INPUT -p udp --sport 1194 -j ACCEPT

# Accept all TUN connections (tun = VPN tunnel)
ip6tables -A OUTPUT -o tun+ -j ACCEPT
ip6tables -A INPUT -i tun+ -j ACCEPT

Теперь я не могу подключиться ни к чему, и curl https://ipinfo.io/ip просто зависает.

Как я могу это исправить?

2 ответа2

0

Ваш пример сценария очищает все правила для наборов правил IPv4 и IPv6 ... но не добавляет никаких правил для IPv6.

Обратите внимание, как раздел "Очистка существующих правил" вызывает как iptables и ip6tables , возвращая оба брандмауэра в состояние по умолчанию "широко открытое". Однако остальные разделы вообще ничего не делают с ip6tables.

0

Оказывается, я бы не занес в белый список DNS-серверы службы VPN. Как только я это сделал, я смог без проблем занести ipv6 в черный список.

Ради полноты, это то, что я наконец получил на работу. Три вещи, которые нужно иметь в виду:

  1. Вам следует заменить [Primary DNS IP here] и [Secondary DNS IP here] IP-адресами DNS-серверов, которые вы планируете использовать
  2. Не забудьте отредактировать /etc/resolvconf.conf чтобы добавить IP-адреса в # 1 в качестве серверов имен и внести в черный список свои собственные, чтобы избежать утечек DNS.
  3. Это предполагает, что ваш локальный трафик имеет диапазон IP-адресов, начиная с 192.168 . Если нет, вам нужно изменить это.

Код следующим образом:

# Remove any existing rules
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -t nat -F
sudo iptables -t mangle -F
sudo iptables -F
sudo iptables -X
sudo ip6tables -P INPUT ACCEPT
sudo ip6tables -P FORWARD ACCEPT
sudo ip6tables -P OUTPUT ACCEPT
sudo ip6tables -t nat -F
sudo ip6tables -t mangle -F
sudo ip6tables -F
sudo ip6tables -X

# Allow loopback device (internal communication)
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT

# Allow all local traffic
sudo iptables -A INPUT -s 192.168.0.0/16 -j ACCEPT
sudo iptables -A OUTPUT -d 192.168.0.0/16 -j ACCEPT

# Allow DNS (could be VPN provider or someone like Cloudflare's 1.1.1.1)
iptables -A OUTPUT -d [Primary DNS IP here] -j ACCEPT
iptables -A OUTPUT -d [Secondary DNS IP here] -j ACCEPT

# Allow related and established connections
sudo iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

# Allow VPN establishment
sudo iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
sudo iptables -A INPUT -p udp --sport 53 -j ACCEPT
sudo iptables -A OUTPUT -p udp --dport 1198 -j ACCEPT
sudo iptables -A INPUT -p udp --sport 1198 -j ACCEPT

# Accept all tun0 (VPN tunnel) connections
sudo iptables -A OUTPUT -o tun0 -j ACCEPT
sudo iptables -A INPUT -i tun0 -j ACCEPT

# Drop everything else (ipv4)
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT DROP
sudo iptables -P FORWARD DROP

# Drop everything (ipv6)
sudo ip6tables -P INPUT DROP
sudo ip6tables -P OUTPUT DROP
sudo ip6tables -P FORWARD DROP

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .