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

Как запретить пересылку пакетов на адреса частной сети через интерфейс

На моем сервере у меня есть маршрут по умолчанию для интерфейса eth0. Он имеет публичный интернет-адрес и обращен к сети интернет-провайдера. У меня включена пересылка пакетов и несколько локальных интерфейсов / мостов с частными 10.x.x.x адреса. Кроме того, маскируются все пакеты, исходящие в сеть провайдера. Проблема: если я правильно понял, ни одного пакета не существует 192.168.x.x адрес будет перенаправлен через интерфейс общедоступного сервера (восходящий канал) моему интернет-провайдеру. Это нежелательно.

Как я могу настроить Linux для предотвращения пересылки любых пакетов с адресом частной сети через общедоступный сетевой интерфейс? Думаю, простого добавления одного правила iptables было бы недостаточно, потому что существует несколько стандартных пространств частных сетей (10.x.x.x, 192.16.x.x, 172.16.x.x и, возможно, другие. Также адреса ipv6 в стороне). Есть ли для этого какие-либо подключаемые модули / системные политики iptables? Я ожидал, что какая-то системная политика пометит интерфейс как восходящий канал, который выходит в Интернет.

Обоснование: моему интернет-провайдеру не нравятся какие-либо пакеты с целевым диапазоном частных сетей. Я использую DNS-сервер, доступ к которому осуществляется через VPN для моей работы. Поэтому, когда VPN выходит из строя, мой интернет-провайдер получает DNS-запросы на адреса частной сети и блокирует все интернет-соединение. Говорят, это сделано в целях безопасности (на тот случай, если какой-то вирус перезаписывает мой системный DNS на собственный).

У вас есть один интерфейс с публичным номером eth0, который является вашим маршрутом по умолчанию, и вы не хотите, чтобы трафик перенаправлялся из каких-либо интерфейсов с частными номерами из общедоступного. Пытаться

iptables -A FORWARD -o eth0 -j REJECT

Размещение правила в нужном месте в вашем FORWARD цепочка оставлена ​​в качестве упражнения. Вы также должны иметь возможность обобщить оттуда до ipv6.

редактировать: вы можете отключить переадресацию v4 с помощью echo 0 > /proc/sys/net/ipv4/ip_forward, и все пересылки v6 с echo 0 > /proc/sys/net/ipv6/conf/all/forwarding. Но вы не сказали, что хотите переадресовать всю пересылку, просто пересылку "от или до адресов частной сети через публичный сетевой интерфейс". Я не знаю ни одного /proc структура, чтобы отключить пересылку только трафика RFC1918, и я был бы удивлен, если бы он был.

Любой пакет, который не соответствует правилу маршрутизации в системе, будет направлен на маршрут по умолчанию, если таковой имеется. По умолчанию, если вам назначен IP-адрес в данной сети, будет добавлено правило маршрутизации, автоматически перенаправляющее этот трафик на назначенный интерфейс. Если ваш сервер не находится в тех сетях, которые вы хотите заблокировать, тогда рекомендуется проверить все, что генерирует этот трафик, чтобы полностью избавиться от него, иначе он все равно будет беспокоить вас на ваших локальных сетевых устройствах.

Диапазоны IP-адресов частной сети IANA довольно хорошо определены, и их всего 4, что видно даже на этот статья в Википедии. Я предлагаю вам добавить правила блокировки исходящего трафика брандмауэром в эти сетевые диапазоны в качестве пунктов назначения после разрешения диапазонов, которые вы фактически используете.

Примеры команд iptables:

iptables -A FORWARD -d 10.0.0.0/8 -j REJECT
iptables -A FORWARD -d 172.16.0.0/12 -j REJECT
iptables -A FORWARD -d 192.168.0.0/16 -j REJECT
ip6tables -A FORWARD -d fd00::/8 -j REJECT

Примечание. Трафик, предназначенный для этих диапазонов, пропускается интернет-провайдерами, так как им некуда будет его перенаправить. Однако некоторые из них могут налагать ограничения на ваш трафик, если вы утекаете эти пакеты. Кроме того, если вы опасаетесь проверки трафика или утечки информации на уровне интернет-провайдера, это далеко не единственное, что вам нужно сделать, чтобы обезопасить себя.