NAT в Linux (заморочка....)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

shulik
Сообщения: 256
ОС: OpenSuse 11 / FreeBSD 7.0

NAT в Linux

Сообщение shulik »

Вобщем хочу поделится размышлениями и послушать мнение других.
Начнем с того - как в Linux работает NAT. Насколько я знаю этот процесс - пакет приходит на роутер, он подменяет в нем исходный адрес на свой, маркирует каким-то образом пакет, записывает информацию о нем в таблицу NAT'а и отсылает дальше. Когда пакет возвращается, согласно его маркировке ищется соответствие в таблице НАТа, заменяется адрес назначения пакеты и шлется в локалку. Если я не прав прошу меня поправить......

Тогда (если вдруг я прав) идем дальше: как в таком случае та же ICQ вычисляет внутренний адрес клиента (возможно пакет при НАТе просто инкапсулируется?).
И еще: нельзя ли как-нибудь из внешнего мира получить доступ к ip за НАТом? (интересны любые способы)

B) B) B)
"Так не возможно
Не оступиться,
Не избежать высоты.
Остановиться нам еще можно,
Есть еще шаг до черты." © А.Горшенев
Спасибо сказали:
Igor B.
Сообщения: 324

Re: NAT в Linux

Сообщение Igor B. »

Ну практически все правильно. Только тут еще важно понятие "соединения" (которое может трактоваться по-разному, не только в терминах протокола TCP). Т.е. роутер отслеживает установление соединения, а затем проверяет принадлежность пакетов к этому соединению.

Обычно NAT объединен с файрволлом (пакет iptables). И этот самый файрволл блокирует установку соединения извне.Соответственно, надо его настроить так, чтобы он входящие на внешний интерфейс "соединения" (скорее всего - по определенному порту, ты ведь хочешь разрешить не полный доступ, а, например, только по ssh) перекидывал с NAT-ом на какой-то внутренний адрес.

Все это делается в рамках iptables.
Спасибо сказали:
shulik
Сообщения: 256
ОС: OpenSuse 11 / FreeBSD 7.0

Re: NAT в Linux

Сообщение shulik »

Собственно с редиректом понятно. Меня больше интересовал вопрос взлома: возможно ли при отсутствии всяких редиректов поломать машину извне внутри сети за натом?

ЗЫ: NAT организован в Linux с помощью iptables, хотя интересно так же мнение и в ситуации с natd+ipwf во FreeBSD
"Так не возможно
Не оступиться,
Не избежать высоты.
Остановиться нам еще можно,
Есть еще шаг до черты." © А.Горшенев
Спасибо сказали:
Igor B.
Сообщения: 324

Re: NAT в Linux

Сообщение Igor B. »

Теоретически можно все. Ломануть твой роутер (даже правильно настроенный - через какую-нито дыру), а дальше сказать ему - мол, роутить входящие соединения на такой-то внутренний айпи. И ломать дальше уже внутреннюю машину... :blink:
Спасибо сказали:
justuser
Сообщения: 48

Re: NAT в Linux

Сообщение justuser »

(Igor B. @ Четверг, 16 Июня 2005, 18:28) писал(а):Теоретически можно все. Ломануть твой роутер

теоретически можно сунуть роутеру пакет и сказать что это для 192.168.10.21. теоретически можно для этого использовать маршрутизацию от источника.
роутер должен запрещать любые соединения, инициированные извне, что-то вроде iptables -A FORWARD -i ppp0 -o eth0 -m state --state ! RELATED,ESTABLISHED -j DROP.
Спасибо сказали:
shulik
Сообщения: 256
ОС: OpenSuse 11 / FreeBSD 7.0

Re: NAT в Linux

Сообщение shulik »

(justuser @ Четверг, 16 Июня 2005, 23:27) писал(а):
(Igor B. @ Четверг, 16 Июня 2005, 18:28) писал(а):Теоретически можно все. Ломануть твой роутер

теоретически можно сунуть роутеру пакет и сказать что это для 192.168.10.21. теоретически можно для этого использовать маршрутизацию от источника.
роутер должен запрещать любые соединения, инициированные извне, что-то вроде iptables -A FORWARD -i ppp0 -o eth0 -m state --state ! RELATED,ESTABLISHED -j DROP.



Так вот я к этому и вел: я писал о том, что есть таблица НАТа в которой все пакеты до возвращения записаны. Вот я и спросил - а как тогда решается ситуация с пакетом который пришел, но его нет в балице НАТ?

ЗЫ: А про ICQ кто-нить знает?
ЗЗЫ: И еще немного не ясно - ведь НАТ в iptables - это -s <local> -d !<local> -j SNAT ....... В таком случае пакет полученный извне будет распакован и отправлен во внутреннюю сеть, только если совпадет с таблицей или будет как то помечен?
"Так не возможно
Не оступиться,
Не избежать высоты.
Остановиться нам еще можно,
Есть еще шаг до черты." © А.Горшенев
Спасибо сказали:
justuser
Сообщения: 48

Re: NAT в Linux

Сообщение justuser »

(shulik @ Пятница, 17 Июня 2005, 9:14) писал(а):
(justuser @ Четверг, 16 Июня 2005, 23:27) писал(а):роутер должен запрещать любые соединения, инициированные извне, что-то вроде iptables -A FORWARD -i ppp0 -o eth0 -m state --state ! RELATED,ESTABLISHED -j DROP.
Так вот я к этому и вел: я писал о том, что есть таблица НАТа в которой все пакеты до возвращения записаны. Вот я и спросил - а как тогда решается ситуация с пакетом который пришел, но его нет в таблице НАТ?

а nat тут собственно ни при чем ;-) это про connection tracking.
(shulik @ Пятница, 17 Июня 2005, 9:14) писал(а):ЗЗЫ: И еще немного не ясно - ведь НАТ в iptables - это -s <local> -d !<local> -j SNAT ....... В таком случае пакет полученный извне будет распакован и отправлен во внутреннюю сеть, только если совпадет с таблицей или будет как то помечен?

наводящий вопрос 1: пришел пакет, как узнать, делать ему обратное преобразование?
наводящий вопрос 2: какой dst у пакетов пришедщих на роутер снаружи?

к фильтрации пакетов нат не имет отношения вообще. нат это не волшебное заклинание, а конкретная операция, выполняемая на выходе в POSTROUTING - когда пакет уже отмаршрутизирован и готов уплыть в интерфейс.
обратная замена выполняется для пакетов пришедших с того же интерфейса, соответствующих таблице, ДО маршрутизации. дальнейшая обработка идет своим чередом.
очевидно, к пакетам не найденным в таблице nat, обратное преобразование применено не будет, только и всего.
если роутер не дропает FORWARD -i ppp0 --state NEW (а еще лучше --state ! RELATED, ESTABLISHED ) - он будет маршрутизировать эти пакеты.
злоумышленник находясь в одном сегменте ethernet с внешним интерфейсом роутера, может сказать
route add network 192.168.192.0 mask 255.255.255.0 gw your_router.company.ru
и спокойно лезть в вашу внутреннюю сеть.
Спасибо сказали:
shulik
Сообщения: 256
ОС: OpenSuse 11 / FreeBSD 7.0

Re: NAT в Linux

Сообщение shulik »

(justuser @ Пятница, 17 Июня 2005, 13:05) писал(а):к фильтрации пакетов нат не имет отношения вообще. нат это не волшебное заклинание, а конкретная операция, выполняемая на выходе в POSTROUTING - когда пакет уже отмаршрутизирован и готов уплыть в интерфейс.
обратная замена выполняется для пакетов пришедших с того же интерфейса, соответствующих таблице, ДО маршрутизации. дальнейшая обработка идет своим чередом.
очевидно, к пакетам не найденным в таблице nat, обратное преобразование применено не будет,  только и всего.
если роутер не дропает FORWARD -i ppp0 --state NEW (а еще лучше --state ! RELATED, ESTABLISHED ) - он будет маршрутизировать эти пакеты.
злоумышленник находясь в одном сегменте ethernet с внешним интерфейсом роутера, может  сказать
route add network 192.168.192.0 mask 255.255.255.0 gw your_router.company.ru
и спокойно лезть в вашу внутреннюю сеть.


Так уже немного ситуация проясняется. Теперь немного покурю доки и может совсем дойдет :)
Спасибо.
"Так не возможно
Не оступиться,
Не избежать высоты.
Остановиться нам еще можно,
Есть еще шаг до черты." © А.Горшенев
Спасибо сказали: