The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Iptables+NAT доступ к вебсерверу из тойже локальной сети, !*! Yukko, 10-Окт-04, 04:28  [смотреть все]
Ткните носом... Есть линукс ASP 7.3 одним интерфейсом 213.227.206.32(eth0) смотрит в инет, другим 10.5.1.8 (eth1) в локалку.
Внутри локалки есть вебсервер 10.5.1.5. Он через DNAT выкинут наружу с адресом 213.227.206.30. При заходе из инета на адрес вебсервера, все ОК, но я хочу большего, а именно заходить на свой же вебсервер из той самой локальной сети, в которой находится вебсервер. Читаю ман по IPTables, гуглю и яндексю уже третий день, но, видимо, где-то зациклился.

Привожу скрипт, которым делаю вышеперчисленные действия и сразу пишу, как я это понимаю, чтобы могли указать, где я неправ в своих размышлениях:

#!/bin/bash
#установка политики FORWARD по-умолчанию в DROP, т.е. все что не
#разрешено явно, то запрещено
/sbin/iptables -P FORWARD /
DROP              
#я своей локалке доверяю, поэтому разрешаю прохождение пакетов из локалки
#без ограничений                                    
/sbin/iptables -A FORWARD -i eth1 -o eth0 /
-j ACCEPT      
#пропускаю внутрь локалки пакеты установленных
#соединений                      
/sbin/iptables -A FORWARD -i eth0 -o eth1 -m state --state /
ESTABLISHED,RELATED -j/
ACCEPT
#Я разрешаю прохождение всех пакетов, которые приходят на вебсервер с
#внешнего интерфейса файрвола на локальный интерфейс вебсервера.
/sbin/iptables -A FORWARD -d 10.5.1.5 -i eth0 -o eth1 -p tcp /
-m tcp --dport 80 /
-j/
allowed
#выкидываю все открытые порты машины в инет с адресом 213.227.206.30
/sbin/iptables -t nat -A PREROUTING -d 213.227.206.30 /
-i eth0 -p tcp -m tcp -j DNAT --to-destination /
10.5.1.5
#даю доступ в интернет приложениям моей машины с адреса 213.227.206.30
#т.е. переписываю адрес источника на внешний присвоенный адрес.
/sbin/iptables -t nat -A POSTROUTING -s 10.5.1.5 /
-o eth0 -j SNAT --to-source /
213.227.206.30                                                                    
#теперь согласно написанного в мануале, мне надо сделать нижеприведенное,
#смысл которого я понимаю (надо переписать исходящий адрес с адреса
#клиента на адрес файрвола, чтобы вебсервер ответил файрволу,а не клиенту
#напрямую):
iptables -t nat -A POSTROUTING -p tcp --dst 10.5.1.5 --dport 80 -j SNAT \
--to-source 10.5.1.8

Команда выполняется, но
- при попытке доступа из той же локальной сети соединение установить не удается
- все приложения, которые крутятся на вебсервере стали видеть $_SERVER['REMOTE_ADDRESS'] (адрес клиента) как внутренний адерс файрвола

Я подозреваю, что я
а. где-то не разрешил прохождение пакетов с адресом источника из локальной сети на внешний интерфейс, а потом обратно.
б. неправильно написал правила SNAT

  • Iptables+NAT доступ к вебсерверу из тойже локальной сети, !*! fantom, 17:45 , 11-Окт-04 (1)
    >Ткните носом... Есть линукс ASP 7.3 одним интерфейсом 213.227.206.32(eth0) смотрит в инет,
    >другим 10.5.1.8 (eth1) в локалку.
    >Внутри локалки есть вебсервер 10.5.1.5. Он через DNAT выкинут наружу с адресом
    >213.227.206.30. При заходе из инета на адрес вебсервера, все ОК, но
    >я хочу большего, а именно заходить на свой же вебсервер из
    >той самой локальной сети, в которой находится вебсервер. Читаю ман по
    >IPTables, гуглю и яндексю уже третий день, но, видимо, где-то зациклился.
    >
    >
    >Привожу скрипт, которым делаю вышеперчисленные действия и сразу пишу, как я это
    >понимаю, чтобы могли указать, где я неправ в своих размышлениях:
    >
    >#!/bin/bash
    >#установка политики FORWARD по-умолчанию в DROP, т.е. все что не
    >#разрешено явно, то запрещено
    >/sbin/iptables -P FORWARD /
    >DROP
    >#я своей локалке доверяю, поэтому разрешаю прохождение пакетов из локалки
    >#без ограничений
    >/sbin/iptables -A FORWARD -i eth1 -o eth0 /
    >-j ACCEPT
    >#пропускаю внутрь локалки пакеты установленных
    >#соединений
    >/sbin/iptables -A FORWARD -i eth0 -o eth1 -m state --state /
    >ESTABLISHED,RELATED -j/
    >ACCEPT
    >#Я разрешаю прохождение всех пакетов, которые приходят на вебсервер с
    >#внешнего интерфейса файрвола на локальный интерфейс вебсервера.
    >/sbin/iptables -A FORWARD -d 10.5.1.5 -i eth0 -o eth1 -p tcp /
    >
    >-m tcp --dport 80 /
    >-j/
    >allowed
    >#выкидываю все открытые порты машины в инет с адресом 213.227.206.30
    >/sbin/iptables -t nat -A PREROUTING -d 213.227.206.30 /
    >-i eth0 -p tcp -m tcp -j DNAT --to-destination /
    >10.5.1.5
    >#даю доступ в интернет приложениям моей машины с адреса 213.227.206.30
    >#т.е. переписываю адрес источника на внешний присвоенный адрес.
    >/sbin/iptables -t nat -A POSTROUTING -s 10.5.1.5 /
    >-o eth0 -j SNAT --to-source /
    >213.227.206.30
    >#теперь согласно написанного в мануале, мне надо сделать нижеприведенное,
    >#смысл которого я понимаю (надо переписать исходящий адрес с адреса
    >#клиента на адрес файрвола, чтобы вебсервер ответил файрволу,а не клиенту
    >#напрямую):
    >iptables -t nat -A POSTROUTING -p tcp --dst 10.5.1.5 --dport 80 -j
    >SNAT \
    >--to-source 10.5.1.8
    >
    >Команда выполняется, но
    >- при попытке доступа из той же локальной сети соединение установить не
    >удается
    >- все приложения, которые крутятся на вебсервере стали видеть $_SERVER['REMOTE_ADDRESS'] (адрес клиента)
    >как внутренний адерс файрвола
    >
    >Я подозреваю, что я
    >а. где-то не разрешил прохождение пакетов с адресом источника из локальной сети
    >на внешний интерфейс, а потом обратно.
    >б. неправильно написал правила SNAT

    Одного немогу понять - нафига такой гемор творить, если все в одной локалке???
    1. разреши к http серверу ходить по IP адресу, набираешь в строке адреса 10.5.1.5 и попадаешь на свой сервак...
    2. или сделать чтобы твой DNS отдавал в локалку адрес 10.5.1.5 (или какой он там у тебя на серваке) о твоем серваке.

    а правило твое работать небудет, т.к. адреса из одной подсети, и при обращении с 10.5.1.х на 10.5.1.5 пакеты через твой шлюз НЕ ПРОХОДЯТ!

    • Iptables+NAT доступ к вебсерверу из тойже локальной сети, !*! Yukko, 17:52 , 11-Окт-04 (2)
      >а правило твое работать небудет, т.к. адреса из одной подсети, и при
      >обращении с 10.5.1.х на 10.5.1.5 пакеты через твой шлюз НЕ ПРОХОДЯТ!
      Можно хотя объяснить почему они не проходят через шлюз? Читаю мануал, там сказано, что проходят:
      А теперь посмотрим, что произойдет, если запрос посылается с узла, расположенного в той же локальной сети. Для простоты изложения примем адрес клиента в локальной сети равным $LAN_BOX.

      Пакет покидает $LAN_BOX.

      Поступает на брандмауэр.

      Производится подстановка адреса назначения, однако адрес отправителя не подменяется, т.е. исходный адрес остается в пакете без изменения.

      Пакет покидает брандмауэр и отправляется на HTTP сервер.

      HTTP сервер, готовясь к отправке ответа, обнаруживает, что клиент находится в локальной сети (поскольку пакет запроса содержал оригинальный IP адрес, который теперь превратился в адрес назначения) и поэтому отправляет пакет непосредственно на $LAN_BOX.

      Пакет поступает на $LAN_BOX. Клиент "путается", поскольку ответ пришел не с того узла, на который отправлялся запрос. Поэтому клиент "сбрасывает" пакет ответа и продолжает ждать "настоящий" ответ.

      Проблема решается довольно просто с помощью SNAT. Ниже приводится правило, которое выполняет эту функцию. Это правило вынуждает HTTP сервер передавать ответы на наш брандмауэр, которые затем будут переданы клиенту.


      И дальше написано:
      Каждый должен понять, что эти правила предназначены только лишь для корректной обработки адресации пакетов. В дополнение к этим правилам вам может потребоваться написать дополнительные правила для цепочки FORWARD таблицы filter. Не забудьте при этом, что пакеты уже прошли цепочку PREROUTING и поэтому их адреса назначения уже изменены действием DNAT.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру