EN EN

Что такое rp_filter и для чего он нужен?

Опубликовано 15.07.2025

В мире Linux и сетевых технологий существует множество неочевидных, но критически важных настроек ядра. Одна из таких настроек — rp_filter. Этот параметр, часто остающийся без внимания, играет ключевую роль в сетевой безопасности и корректной маршрутизации пакетов. Давайте разберемся, что это такое, как он работает и почему его понимание важно для каждого системного администратора.

Что такое rp_filter?

rp_filter расшифровывается как Reverse Path Filtering (фильтрация обратного пути). Это механизм ядра Linux, который проверяет входящие сетевые пакеты, чтобы убедиться, что они пришли с того интерфейса, на который, согласно таблицам маршрутизации, можно было бы отправить ответный пакет.

Проще говоря: когда на сетевой интерфейс приходит пакет, rp_filter смотрит, а можно ли было бы с этого сервера отправить ответ на IP-адрес отправителя этого пакета через тот же самый интерфейс, на который пакет пришёл.

Представьте аналогию: Вы получаете письмо, на котором в качестве обратного адреса указана улица “Ленина, дом 5”. Ваша почтовая служба проверяет: если бы вы отправляли письмо на “Ленина, дом 5”, вы бы отправили его через то же почтовое отделение, из которого только что получили это письмо? Если да, то всё в порядке. Если нет (например, “Ленина, дом 5” находится в другом городе, и для отправки туда письма используется совершенно другое почтовое отделение), то это письмо считается подозрительным.

Для чего нужен rp_filter? (Основная цель: Анти-спуфинг)

Главная цель rp_filter — это защита от IP-спуфинга (IP spoofing). IP-спуфинг — это техника, при которой злоумышленник подделывает исходный IP-адрес сетевых пакетов, выдавая себя за другой компьютер. Это может использоваться для:

  • DDoS-атак: Скрытие истинного источника атаки.
  • Обхода сетевых фильтров: Представление себя доверенным узлом.
  • Man-in-the-Middle атак: Перехват и модификация трафика.

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

Режимы работы rp_filter

rp_filter настраивается для каждого сетевого интерфейса отдельно (например, eth0, eth1) и может принимать одно из трех значений:

  • 0 (Disabled): Отключено. Фильтрация обратного пути не выполняется. Все пакеты принимаются независимо от обратного пути. Не рекомендуется для большинства сред, так как делает систему уязвимой к спуфингу.
  • 1 (Strict mode - Режим строгой проверки): Включен строгий режим RFC3704. Система проверяет, что ответ на входящий пакет мог бы быть отправлен только через тот же интерфейс, на который пакет пришёл, и что это был бы лучший маршрут до источника пакета. Если нет, пакет отбрасывается.
    • Преимущества: Максимальная защита от спуфинга.
    • Недостатки: Может вызывать проблемы в сложных сетевых конфигурациях, таких как асимметричная маршрутизация (когда входящий трафик идет по одному пути, а исходящий — по другому), а также при использовании некоторых видов балансировки нагрузки.
  • 2 (Loose mode - Режим свободной проверки): Включен свободный режим RFC3704. Система проверяет, что ответ на входящий пакет мог бы быть отправлен через любой интерфейс на этом сервере. Если есть хоть один маршрут до источника пакета, пакет принимается.
    • Преимущества: Хороший компромисс между безопасностью и гибкостью. Предоставляет защиту от спуфинга, но допускает асимметричную маршрутизацию и другие сложные сетевые сценарии.
    • Недостатки: Менее строгая защита, чем в режиме 1.

Где находится и как настроить?

Параметры rp_filter находятся в /proc/sys/net/ipv4/conf/. Вы можете увидеть их для каждого интерфейса и для всех интерфейсов сразу:

  • /proc/sys/net/ipv4/conf/all/rp_filter (применяется ко всем интерфейсам по умолчанию, если не переопределено для конкретного)
  • /proc/sys/net/ipv4/conf/default/rp_filter (значение по умолчанию для новых интерфейсов)
  • /proc/sys/net/ipv4/conf/<interface_name>/rp_filter (например, /proc/sys/net/ipv4/conf/eth0/rp_filter)

Проверить текущее значение (например, для eth0):

cat /proc/sys/net/ipv4/conf/eth0/rp_filter

Изменить значение временно (до перезагрузки):

echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 1 > /proc/sys/net/ipv4/conf/eth0/rp_filter

Изменить значение постоянно (после перезагрузки):

Для этого используйте sysctl. Откройте или создайте файл конфигурации (например, /etc/sysctl.d/99-rpfilter.conf):

net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.eth0.rp_filter = 1 # Если нужно специфичное значение для интерфейса

Затем примените изменения:

sudo sysctl -p /etc/sysctl.d/99-rpfilter.conf

Или просто sudo sysctl -p для применения всех файлов в sysctl.d.

Рекомендации по настройке

  • Для большинства серверов (один интерфейс, нет асимметричной маршрутизации): Используйте rp_filter = 1 (строгий режим). Это обеспечивает наилучшую защиту от спуфинга.
    net.ipv4.conf.all.rp_filter = 1
    net.ipv4.conf.default.rp_filter = 1
    
  • Для серверов с асимметричной маршрутизацией, несколькими IP-адресами на интерфейс, или сложными сетевыми конфигурациями (например, балансировщики нагрузки, VPN-серверы, некоторые виртуальные машины): Рассмотрите rp_filter = 2 (свободный режим). Он предоставляет разумный уровень защиты, но позволяет входящему трафику приходить по одному пути, а исходящему — идти по другому.
    net.ipv4.conf.all.rp_filter = 2
    net.ipv4.conf.default.rp_filter = 2
    
  • Никогда не используйте rp_filter = 0, если у вас нет очень веских причин и вы полностью не осознаете риски.

Заключение

rp_filter — это мощный инструмент для повышения сетевой безопасности вашего Linux-сервера за счет защиты от IP-спуфинга. Правильная настройка этого параметра критически важна, особенно в публично доступных средах. Всегда начинайте с наиболее строгого режима (1) и ослабляйте его до 2 только в случае возникновения проблем с легитимным трафиком в сложных сетевых конфигурациях. Помните: понимание сетевых настроек ядра — это ключ к стабильной и защищенной инфраструктуре.

Похожие посты

Свяжитесь со мной

Обсудим ваш проект и найдём подходящее решение