Назад | Перейти на главную страницу

Фильтрация входящих пакетов Strongswan VPN с помощью iptables

Я использую 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