Туннель Strongswan IPSEC односторонне блокирует трафик

Я установил рабочий туннель IPSEC между сайтами с strongswan на машине debian 9. Однако у меня есть требование о том, как должен работать трафик: сеть на сайте A может отправлять пакеты в сеть сайта B и получать подтверждения. Сайт B может связываться с сайтом A, только когда соединение открыто. По сути, сайт A может получить доступ к сайту B, но сайт B не может получить доступ к сайту A. Схема инфраструктуры такая:

        SITE A                                              SITE B
NetA--------------GatewayA------Internet------GatewayB-----------------NetB
A.A.A.A/24  A.A.A.254  pub.lic.ip.A   pub.lic.ip.B  B.B.B.254     B.B.B.B/24

У меня есть доступ только к сайту A. Сайт B находится на стороне клиента.

Теперь мне нужно ограничить доступ с сайта B к сайту A. Первым делом я поставил iptables на GatewayA, чтобы в основном принимать пакеты ESTABLISHED и RELATED с сайта B и отбрасывать все остальное. Вот мои iptables:

sudo iptables -L FORWARD
Chain FORWARD (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  B.B.B.B/24        A.A.A.A/24        state RELATED
ACCEPT     all  --  B.B.B.B/24        A.A.A.A/24        state ESTABLISHED
DROP       all  --  B.B.B.B/24        A.A.A.A/24        policy match dir in pol ipsec proto esp
ACCEPT     all  --  B.B.B.B/24        A.A.A.A/24        policy match dir in pol ipsec reqid 2 proto esp
ACCEPT     all  --  A.A.A.A/24        B.B.B.B/24        policy match dir out pol ipsec reqid 2 proto esp
sudo iptables -L INPUT
Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  B.B.B.B/24        A.A.A.A/24        state RELATED
ACCEPT     all  --  B.B.B.B/24        A.A.A.A/24        state ESTABLISHED
DROP       all  --  B.B.B.B/24        A.A.A.A/24        policy match dir in pol ipsec proto esp
ACCEPT     all  --  B.B.B.B/24        A.A.A.A/24        policy match dir in pol ipsec reqid 2 proto esp

Здесь три первых правила для каждой таблицы редактируются вручную, а следующие устанавливаются strongswan / ipsec. В тестовой среде я могу пинговать с сайта A на сайт B, но не с сайта B на сайт A, что мне и нужно.

me@gatewayA:~$ ping A.A.A.1
PING A.A.A.1 (A.A.A.1) 56(84) bytes of data.
64 bytes from A.A.A.1: icmp_seq=1 ttl=63 time=2.25 ms
64 bytes from A.A.A.1: icmp_seq=2 ttl=63 time=1.32 ms
64 bytes from A.A.A.1: icmp_seq=3 ttl=63 time=1.28 ms
64 bytes from A.A.A.1: icmp_seq=4 ttl=63 time=1.56 ms
64 bytes from A.A.A.1: icmp_seq=5 ttl=63 time=1.45 ms
me@gatewayB:~$ ping B.B.B.1
PING B.B.B.1 (B.B.B.1) 56(84) bytes of data.

Теперь по какой-то причине мне нужно перезапустить ipsec:

sudo ipsec restart

Теперь я проверяю my iptables:

sudo iptables -L FORWARD
Chain FORWARD (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  B.B.B.B/24        A.A.A.A/24        policy match dir in pol ipsec reqid 2 proto esp
ACCEPT     all  --  A.A.A.A/24        B.B.B.B/24        policy match dir out pol ipsec reqid 2 proto esp
ACCEPT     all  --  B.B.B.B/24        A.A.A.A/24        state RELATED
ACCEPT     all  --  B.B.B.B/24        A.A.A.A/24        state ESTABLISHED
DROP       all  --  B.B.B.B/24        A.A.A.A/24        policy match dir in pol ipsec proto esp
sudo iptables -L INPUT
Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  B.B.B.B/24        A.A.A.A/24        policy match dir in pol ipsec reqid 2 proto esp
ACCEPT     all  --  B.B.B.B/24        A.A.A.A/24        state RELATED
ACCEPT     all  --  B.B.B.B/24        A.A.A.A/24        state ESTABLISHED
DROP       all  --  B.B.B.B/24        A.A.A.A/24        policy match dir in pol ipsec proto esp

Как видите, перезапуск ipsec изменил iptables, и теперь я могу пинговать обоими способами.

Мне было интересно, есть ли какой-нибудь способ достичь того, чего я хочу, а именно ограничить доступ с сайта B к сайту A, не влияя на обмен данными, идущими от сайта A к сайту B. Возможно, есть способ определить iptables в конфигурации strongswan или, возможно, изменить приоритет правил iptables, чтобы они сохраняли свой порядок при перезагрузке.

0
задан 6 February 2020 в 13:10
1 ответ

Как отмечает ecdsa, мне просто нужно было поместить leftfirewall = no в ipsec. conf, чтобы iptables могли вести себя так, как я хотел.

1
ответ дан 26 February 2020 в 00:36

Теги

Похожие вопросы