Мой сервер подключается к каким-то странным ресурсам через OpenVPN, и каждый раз, когда клиент OpenVPN запускается, ovpn
интерфейс поднят.
Я хочу предоставить этому интерфейсу только выбранные порты (скажем, MySQL), поэтому у меня есть это правило в моих iptables:
iptables -A INPUT -i ovpn -p tcp --dport 3306 -j ACCEPT
Однако, поскольку клиент OpenVPN может отключаться и повторно подключаться без вмешательства, идентификатор ссылки (как показано ip link show ovpn
) может измениться.
Будет ли указанное выше правило iptables работать после того, как ссылка исчезнет и появится снова (с другим идентификатором)?
Да, он продолжит работать, потому что iptables не использует индекс интерфейса, но выполняет сравнение строки с именем текущего интерфейса при оценке -i
/--in-interface
параметр. На самом деле это кажется всегда оценивается, даже если параметр не указан, но встроенная функция вполне оптимизирован.
Напротив, столы (нынешний кандидат, преемник iptables) предлагает два разных выражения: iifname
: прямой эквивалент -i
, сравнивая текущее имя, и iif
сравнение индекса интерфейса, что может вызвать проблемы в вашем случае использования. когда iptables переводится на столы (либо используя iptables-translate или iptables-nft для нового API iptables-over-kernel-nftables), -i
переводится на iifname
как и ожидалось для совместимости.
Да, это будет. Правила не удаляются при удалении указанного интерфейса.
Более того, существуют групповые правила, например, вы можете указать «любой интерфейс pppX» с соответствием -i ppp+
или -o ppp+
. Интерфейса с таким именем нет вообще, поэтому он ни на что не ссылается. Но если будет трафик, связанный с интерфейсом ppp2, то такое правило будет немедленно применяться.
В общем, не важно, было ли правило создано до появления интерфейса или после него.