Цель: убедиться, что весь трафик принудительно проходит через 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 для мобильных данных, и здесь еще нет Wi-Fi.
Я бы не стал использовать 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