iptables скрывает серверную часть, но теряет адрес клиента
🛡 iptables скрывает серверную часть, но теряет адрес клиента
iptables может перенаправить трафик на серверную часть через DNAT в PREROUTING, а обратный путь организовать с помощью SNAT в POSTROUTING. После SNAT сервер видит адрес прокси. Исходный IP потерян.
В статье на Хабре разбирают перенаправление HTTPS на 443/tcp, произвольного TCP-порта 9000 и UDP-порта 27015. Для транзита нужны разрешающие правила в FORWARD и включённый
net.ipv4.ip_forward. Но эти настройки не передают приложению IP клиента.
Для HTTP нужен другой путь: завершать клиентское соединение на прокси уровня L7, пока тот ещё видит исходный адрес. Например, в Nginx задают proxy_set_header X-Real-IP $remote_addr; и proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;. Серверная часть должна доверять этим заголовкам только от прокси, иначе клиент сможет подделать X-Forwarded-For. Для TCP можно использовать PROXY protocol v2, но только если его поддерживают оба конца; произвольный UDP он не решает.
Я бы разделял HTTP и обычный TCP/UDP, а не пытался выжать из iptables возможности L7. Скрыть адрес серверной части — ещё не значит сохранить полезные данные о сети.
#iptables #Nginx #NAT #проксированиеТакие разборы выходят в канале каждый день — коротко и со ссылкой на первоисточник.