Я столкнулся с проблемой с моим брандмауэром PF на машине OpenBSD.
С клиента (A) я подключаюсь к серверу (B), используя целевой IP-адрес (SRV-IP-1). Сервер отвечает на мой запрос, но получает ответ с другого IP-адреса (SRV-IP-2).
Брандмауэр отбрасывает ответ, поскольку не может понять, что ответ является частью разговора, исходящего из внутренней сети (он думает, что ответ - это соединение, запущенное извне).
Есть ли способ указать брандмауэру считать ответ действительным, если он поступает, скажем, из «пула» адресов вместо адреса, используемого в качестве цели разговора (SRV-IP-1)? Например, было бы неплохо сопоставить указанный адрес с другими адресами, чтобы «связать» состояние.
Спасибо.
Есть много способов разрешить трафик с пула адресов.
Вы можете использовать подсети CIDR:
pass in on [interface] from 10.0.0.0/8
Вы можете использовать макрос:
allowed-reply = " {10.0.0.1, 10.0.0.3} "
pass in on [interface] from allowed-reply
Другой способ - использовать якоря
Это позволит вам "вкладывать" правила в другое правило ... вроде ...
Документация OpenBSD по PF если очень полезно как есть Веб-сайт Каломеля
Брандмауэр не знает, что сервер B имеет два IP-адреса - он рассматривает каждый IP-адрес как отдельный источник / объект. На схеме ниже показано, что видит ваш брандмауэр.
Чтобы брандмауэр пропускал трафик с этого «другого» компьютера, вам необходимо добавить явные правила, разрешающие зеленый трафик (со второго IP-адреса на произвольные хосты в Интернете) - вы можете сделать это с помощью индивидуальных правил или с помощью таблицы адресов. (см. документация pf для получения дополнительной информации о таблицах).
Лучшее решение, вероятно, состоит в том, чтобы определить, почему вы отправляете ответы с другого адреса, чем тот, на который вы получаете запросы - если вы можете сделать так, чтобы весь трафик проходил на / с одного адреса, вы сможете воспользоваться преимуществами автоматического pf. отслеживание состояния и гораздо более простая среда для управления.