iptables - форсирует весь трафик через VPN (и отбрасывает весь трафик при отсутствии VPN-соединения)
Цель: убедиться, что весь трафик передается через VPN-туннель со всех сетевых интерфейсов (wlan0,rmnet0,rmnet1), то есть весь трафик сбрасывается, если он не подключен к VPN. Другими словами, интернет-трафик не должен быть разрешен, и приемлем только трафик через VPN.
Пока что... Android-устройство с iptables бинарным, wlan & 3G соединением VPN-шлюз @ 10.10.10.10 (не реальный адрес).
iptables -P OUTPUT DROP
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i tun0 -m conntrack --ctstate NEW -j ACCEPT
iptables -A INPUT -j DROP
iptables -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o tun0 -m conntrack --ctstate NEW -j ACCEPT
iptables -A OUTPUT -d 10.10.10.10 -m conntrack --ctstate NEW -j ACCEPT
iptables -A OUTPUT -j DROP
Результаты:
Трафик, кажется, заблокирован - но также и соединение с VPN.
Есть идеи? Примите во внимание, что это только интерфейс мобильной передачи данных rmnet0, и здесь пока нет WiFi.
1 ответ
Я бы не использовал conntrack в этом сценарии, но гораздо проще
iptables -A INPUT -i tun0 -j ACCEPT
iptables -A INPUT -s 10.10.10.10 -j ACCEPT
iptables -A OUTPUT -o tun0 -j ACCEPT
iptables -A OUTPUT -d 10.10.10.10 -j ACCEPT
Нет необходимости отслеживания соединения. Вам также не нужно DROP
правила в конце, кстати, -P ... DROP
заботится об этом.
Вам также необходимо убедиться, что вы используете IP-адрес VPN-сервера в своей конфигурации, в противном случае вам также придется включить DNS в белый список:
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --sport 53 -j ACCEPT