У меня есть VPN, и мой сервер часто отправляет данные на частный IP-адрес, который маршрутизируется через VPN. Когда OpenVPN устанавливается или умирает, он включает / отключает маршруты.
Я хочу обнулить этот частный IP-адрес, выходящий из основного интернет-интерфейса (eth0). Есть ли простой способ сделать это, не мешая командам маршрута, поступающим из программного обеспечения VPN?
Iptables этого не сделает. Я попытался
iptables -A OUTPUT -i eth0 -p tcp -d 192.168.0.0/16 -j REJECT
Но iptables не работает при указании интерфейса в выходной цепочке.
Кто-нибудь знает, есть ли способ добавить фиктивный маршрут только к определенному интерфейсу (eth0), не мешая другим интерфейсам, которые могут использовать этот маршрут?
Ps- Я знаю, что 192.168.0.0/16 не маршрутизируется в ИНТЕРНЕТ, но по соображениям безопасности хочу гарантировать, что никакие данные не будут выходить в той редкой возможности, когда другой локальный сервер или сетевое устройство начнет прослушивать частную подсеть.
Спецификация вашего интерфейса в правиле iptables обратная.
Вы указали:
iptables -A OUTPUT -i eth0 -p tcp -d 192.168.0.0/16 -j REJECT
С помощью -i
соответствует трафику, который входит система на названном интерфейсе.
Вместо этого вы хотите сопоставить трафик уходящий система на названном интерфейсе, что выполняется с помощью -o
.
iptables -A OUTPUT -o eth0 -p tcp -d 192.168.0.0/16 -j REJECT
(И вы, вероятно, не хотите -p tcp
там, иначе может пройти не-TCP трафик.)
У вас уже есть необходимый ответ с помощью iptables.
Если вы хотите сделать это с помощью маршрутов, хороший способ - создать маршрут для 192.168.0.0/16, и ваш vpn-сервер отправит вам два более конкретных маршрута, в вашем случае эти два маршрута будут 192.168.0.0. / 17 и 192.168.128.0/17
Маршрут / 16 будет фиксированным и нулевым:
ip route add blackhole 192.168.0.0/16
И ваш сервер vpn (или сценарий vpn-up) предоставит вам другие:
ip route add 192.168.0.0/17 via <VPNGW>
ip route add 192.168.128.0/17 via <VPNGW>
Это на самом деле то, что def1
опция в OpenVPN позволяет переопределить шлюз по умолчанию, не вмешиваясь в существующие маршруты.
В дополнение к ответу Майкла, я думаю, следует заблокировать трафик в FORWARD
цепь, так как OUTPUT
цепочка применяется только к локально сгенерированным пакетам и исходящим от межсетевого экрана. Насколько мне известно, это не относится к маршрутизируемым пакетам.