NAT, фаервол и прокси
Трансляция адресов, правила фильтрации, прямой и обратный прокси.
Учить эту тему-
Что такое NAT и зачем он нужен?
juniorNetwork Address Translation подменяет адрес/порт в пакете
-
Как настроить NAT через iptables и какую таблицу использовать?
middleТаблица `nat`. Выпустить внутреннюю сеть наружу — цепочка POSTROUTING: `iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE`; MASQUERADE подставляет текущий адрес интерфейса и удобен на динамическом IP, при статическом лучше `-j SNAT --to-source 203.0.113.10`. Проброс порта внутрь — цепочка PREROUTING: `iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8080 -j DNAT --to-destination 10.0.0.5:80`, плюс разрешающее правило в цепочке FORWARD таблицы `filter`. Без включённого форвардинга ничего не поедет: `sysctl -w net.ipv4.ip_forward=1` и то же в `/etc/sysctl.d/`. Правила живут до перезагрузки, сохраняй их через `iptables-save` и `netfilter-persistent`; на новых системах то же самое обычно пишут сразу на nftables.
-
Нужен ли NAT с IPv6?
seniorРади экономии адресов не нужен: их хватает, и модель IPv6 предполагает сквозную связность с фильтрацией на файрволе. Прятать сеть за NAT ради безопасности — заблуждение: закрытость даёт stateful-файрвол с правилом «наружу можно, внутрь только по установленным соединениям», а не подмена адресов. NPTv6 (RFC 6296) существует и применяется в узком случае: у площадки провайдерский префикс, который может смениться, и перенумеровывать внутреннюю сеть не хочется. NAT64 вместе с DNS64 решает совсем другую задачу — дать хосту из IPv6-only сети достучаться до ресурсов, у которых есть только IPv4.
-
TCP keepalive не срабатывает за NAT — почему и как чинить?
seniorNAT-устройство держит запись трансляции с таймаутом и молча выкидывает её, когда по потоку долго нет трафика. После этого пакеты по старому соединению уходят в никуда, а обе стороны продолжают считать его живым — классика с зависшей ssh-сессией. Проблема в интервалах: `net.ipv4.tcp_keepalive_time` в Linux по умолчанию 7200 секунд, то есть два часа, а промежуточный роутер забывает поток куда раньше. Лечится снижением интервалов до значения меньше таймаута NAT (`tcp_keepalive_time=300`, `tcp_keepalive_intvl=30`, `tcp_keepalive_probes=5`) и включением keepalive в самом приложении: сокет-опция `SO_KEEPALIVE` по умолчанию выключена. Прикладной heartbeat надёжнее, в SSH это `ServerAliveInterval 30` в `~/.ssh/config`.
-
Что такое firewall и зачем он нужен?
juniorФильтр трафика по правилам (адрес, порт, протокол, состояние). Stateful FW отслеживает соединения, stateless смотрит каждый пакет независимо. На Linux - iptables/nftables, в облаке - Security Groups / Network ACLs.
-
На каком уровне OSI работает TCP, SSH, iptables?
middleTCP — транспортный уровень, L4. SSH — прикладной, L7, работает поверх TCP на порту 22. iptables фильтрует на L3 и L4: адреса, порты, состояние соединения; с модулями вроде `conntrack` для конкретных протоколов и `string` он дотягивается и до содержимого, но полноценным L7-фильтром не становится — это уже задача прокси или WAF. Полезно помнить, что на современных дистрибутивах `iptables` это фронтенд `iptables-nft`: команды старые, а правила исполняет nftables.
-
Сколько таблиц в iptables и зачем каждая?
middleПять: `filter` (по умолчанию, разрешить или запретить), `nat` (трансляция адресов — SNAT, DNAT, MASQUERADE), `mangle` (правка полей пакета: TTL, TOS, метки), `raw` (обработка до conntrack, через неё делают `NOTRACK`) и `security` (метки для SELinux, встречается редко). Набор цепочек зависит от таблицы: PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING — не все из них есть в каждой. Смотреть конкретную: `iptables -t nat -L -n -v`. В nftables фиксированного набора таблиц нет вовсе: таблицы создаются с любым именем, а цепочка сама объявляет свой тип и hook.
-
Чем DROP отличается от REJECT в firewall?
juniorDROP молча выкидывает пакет - клиент висит и получает timeout. REJECT отвечает 'закрыто' (TCP RST / ICMP unreachable) - клиент сразу получает Connection refused. По симптому видно, что происходит.
-
Почему ping не отвечает, хотя сайт на сервере открывается?
juniorping использует ICMP, его часто режут на firewall или в облачной security group. TCP-порты 80/443 при этом открыты и сервис работает. 'ping не проходит' не значит 'сервер лёг' - проверяй порт через nc/curl.
-
Что значит default gateway в таблице маршрутов и что будет, если его нет?
juniordefault (via <ip>) - маршрут для всего, что не попало в более конкретные правила, то есть выход 'наружу'. Нет default gateway - пакетам в интернет некуда идти, наружу ничего не уйдёт даже при корректном IP.
-
Сервис слушает 0.0.0.0, ufw порт открыт, но снаружи в облаке недоступен. Где искать?
middleВ облаке есть второй firewall снаружи ОС - security group / network ACL. Пакет проходит сначала его. Чаще всего порт закрыт именно там. Проверяй оба слоя: локальный (ufw/iptables) и облачный.
-
Зачем traceroute показывает '* * *' на некоторых hop'ах?
middletraceroute ловит ICMP 'time exceeded' от каждого узла. Звёзды значат, что hop не прислал ICMP: настроен не отвечать, режет ICMP/UDP-пробы или rate-limit. Звёзды в середине - норма, конечный хост может отвечать; тревожно только если до самого конца.
-
Что такое прокси?
juniorпосредник между клиентом и сервером. Forward proxy