Я использую VPN-сервер Strongswan на машине Debian Squeeze. Входящие VPN-клиенты получают IP-адрес подсети 192.168.99.0/24.
Поскольку я использую эту VPN в основном для шифрования при использовании незашифрованных WLAN, я использую исходный NAT в Интернет с помощью iptables. (Я предпочитаю NAT источника, потому что у сервера есть статический адрес ipv4.)
На данный момент я использую следующую команду iptables
# used for StrongSWAN
iptables -t nat -I POSTROUTING -s 192.168.99.0/24 -o eth0 -j SNAT --to-source <public IP adress of server>
Мой вопрос: при использовании этого правила каждый трафик, входящий из этой подсети 192.168.99.0/24, теперь принимается и преобразуется через NAT. Я хотел бы уточнить, что этим правилом принимается только трафик, который вошел на сервер через этот VPN-туннель.
В классической настройке маршрутизатора с двумя сетевыми устройствами я бы проверил входящее устройство для этого. Есть ли что-то эквивалентное в Strongswan (например, виртуальные сетевые устройства)?
Как я могу отфильтровать пакеты, которые достигли сервера через туннель, чтобы только эти пакеты обрабатывались NAT?
Вам следует взглянуть на модуль политики для iptables, который сопоставляет пакеты на основе их отношения к политикам IPsec (см. man 8 iptables
или man 8 iptables-extensions
подробнее).
Как лучше всего применять модуль, действительно зависит от того, как настроена остальная часть вашего брандмауэра и каковы ваши точные требования. Например, установка политики по умолчанию (брандмауэр) для INPUT
и FORWARD
цепи к DROP
(обратите внимание, когда вы делаете это через SSH, так как вы потенциально можете заблокировать вас из своей машины), а затем используйте скрипт обновления по умолчанию strongSwan (leftfirewall=yes
) в основном сделает за вас все, что связано с туннелями IPsec. Сценарий автоматически добавит правильные правила ввода и пересылки (с использованием модуля политики), чтобы разрешить трафик только из / в туннелируемую подсеть через туннели IPsec (фактически, для дорожных воинов будут разрешены только назначенные IP-адреса, даже не вся подсеть) .
Если вы не хотите делать это, вы можете добавить некоторые правила вручную. С помощью следующих параметров вы можете сопоставить пакеты, полученные через любое соединение IPsec (используйте --dir in|out
указать направление):
-m policy --dir in --pol ipsec
Поэтому, если вы просто хотите отбрасывать пакеты с исходным IP-адресом из указанной подсети, которые НЕ пришли через IPsec, вы можете добавить следующие правила:
iptables -A INPUT -s 192.168.99.0/24 ! -m policy --dir in --pol ipsec -j DROP
iptables -A FORWARD -s 192.168.99.0/24 ! -m policy --dir in --pol ipsec -j DROP