IPFW nat и 1 IP

Простые/общие вопросы по UNIX системам. Спросите здесь, если вы новичок

Модераторы: vadim64, terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
wien
мл. сержант
Сообщения: 148
Зарегистрирован: 2014-06-26 18:38:44
Откуда: DafaultCity
Контактная информация:

IPFW nat и 1 IP

Непрочитанное сообщение wien » 2014-06-28 15:04:56

Народ, проблема в том что не могу дать возможность выхода через нат в интернет для одного (избранного ип). Для сети вцелом получается, т.е. я уверен, что нат работает корректно. Привожу конфиг ipfw:

Код: Выделить всё

#!/bin/sh

# v.01.00.00    13.03.2014      First working version of firewall

# для начала вводим переменные - для нашего же удобства, чтобы не
# вводить по сотне раз одно и то же, а потом искать почему не работает,
# и в итоге выяснять, что ошибся IP адресом в одном из правил

FwCMD="/sbin/ipfw -q"   # собственно где лежит бинарник ipfw
LanOut="vr0"            # внешний интерфейс
LanIn="re0"             # внутренний интерфейс
IpOut="192.168.0.4"     # внешний IP адрес машины
IpIn="10.0.0.1"         # внутренний IP машины
NetMask="24"            # маска сети
                      
NetIn="10.0.0.0"    # Внутренняя сеть

# Сбрасываем все правила:
${FwCMD} -f -q flush

# Проверяем - соответствует ли пакет динамическим правилам:
${FwCMD} add 110 check-state

# Разрешаем весь траффик по внутреннему интерфейсу (петле)
${FwCMD} add 111 allow ip from any to any via lo0

# рубим попытки lo0 куда-то лезть и откуда-то лезть на lo0
${FwCMD} add 112 deny ip from any to 127.0.0.0/8
${FwCMD} add 113 deny ip from 127.0.0.0/8 to any


# Вводим запреты:
# режем частные сети на внешнем интерфейсе - по легенде он у нас
# смотрит в интернет, а значит пакетам этим браться неоткуда на нём.
# рубим частные сeти
${FwCMD} add 114 deny ip from any to 10.0.0.0/8 in via ${LanOut}
${FwCMD} add 115 deny ip from any to 172.16.0.0/12 in via ${LanOut}
${FwCMD} add 116 deny ip from any to 0.0.0.0/8 in via ${LanOut}

# рубим автоконфигуреную частную сеть
${FwCMD} add 117 deny ip from any to 169.254.0.0/16 in via ${LanOut}

# рубаем мультикастовые рассылки
${FwCMD} add 118 deny ip from any to 240.0.0.0/4 in via ${LanOut}

# рубим фрагментированные icmp
${FwCMD} add 119 deny icmp from any to any frag

# рубим широковещательные icmp на внешнем интерфейсе
${FwCMD} add 120 deny log icmp from any to 255.255.255.255 in via ${LanOut}
${FwCMD} add 121 deny log icmp from any to 255.255.255.255 out via ${LanOut}

# а тут собственно файрволл и начался:

# С 20.06.2014 интегрирован ядерный NAT

${FwCMD} nat 1 config log if ${LanOut} same_ports
${FwCMD} add 122 nat 1 ip from 10.0.0.17 to any via ${LanOut}

# Перенаправляю всех на внутренний веб сервер
${FwCMD} add 1000 fwd 10.0.0.1,80 tcp from ${NetIn}/${NetMask} to any 80 via ${LanOut}

# рубим траффик к частным сетям через внешний интерфейс
${FwCMD} add 1001 deny ip from 10.0.0.0/8 to any out via ${LanOut}
${FwCMD} add 1002 deny ip from 172.16.0.0/12 to any out via ${LanOut}
${FwCMD} add 1003 deny ip from 0.0.0.0/8 to any out via ${LanOut}

# рубим автоконфигуреную частную сеть
${FwCMD} add 1004 deny ip from 169.254.0.0/16 to any out via ${LanOut}

# рубаем мультикастовые рассылки
${FwCMD} add 1005 deny ip from 224.0.0.0/4 to any out via ${LanOut}

# рубаем мультикастовые рассылки
${FwCMD} add 1006 deny ip from 240.0.0.0/4 to any out via ${LanOut}

# разрешаем все установленные соединения (если они установились -
# значит по каким-то правилам они проходили.)
${FwCMD} add 1007 allow tcp from any to any established

# разрешаем весь исходящий траффик
${FwCMD} add 1008 allow ip from ${IpOut} to any out xmit ${LanOut}

# DNS
${FwCMD} add 1009 allow udp from any 53 to any via ${LanOut}
${FwCMD} add 1010 allow udp from any to any 53 via ${LanOut}

# разрешаем UDP (для синхронизации времени - 123 порт)
${FwCMD} add 1011 allow udp from any to any 123 via ${LanOut}

# разрешаем ftp снаружи (оба правила - для пасивного режима)
${FwCMD} add 1012 allow tcp from any to ${IpOut} 21 via ${LanOut}
${FwCMD} add 1013 allow tcp from any to ${IpOut} 10000-65535 via ${LanOut}

# разрешаем некоторые типы ICMP траффика - эхо-запрос,
# эхо-ответ и время жизни пакета истекло
${FwCMD} add 1014 allow icmp from any to any icmptypes 0,8,11

# открываем снаружи 80 порт - есть WWW сервер на машине
${FwCMD} add 1015 allow tcp from any to ${IpOut} 80 via ${LanOut}

# открываем снаружи 2200 порт - надо будет ходить на машину по ssh
${FwCMD} add 1016 allow tcp from any to ${IpOut} 2200 via ${LanOut}

# открываем снаружи 27015 порт для CS сервера
${FwCMD} add 1018 allow udp from any to ${IpOut} 27015 via ${LanOut}

# открываем снаружи 27910 порт для Quake2 сервера
${FwCMD} add 1019 allow udp from any to ${IpOut} 27910 via ${LanOut}

# разрешаем весь tcp траффик внутри локалки (на внутреннем интерфейсе)
${FwCMD} add 1020 allow tcp from any to any via ${LanIn}

# разрешаем весь udp траффик внутри локалки (на внутреннем интерфейсе)
${FwCMD} add 1021 allow udp from any to any via ${LanIn}

# разрешаем весь icmp траффик внутри локалки (на внутреннем интерфейсе)
${FwCMD} add 1022 allow icmp from any to any via ${LanIn}

# запрещаем всё и всем
${FwCMD} add deny log ip from any to any
Здесь нас интересует правило 122: ${FwCMD} add 122 nat 1 ip from 10.0.0.17 to any via ${LanOut} - не натит
Если написать: ${FwCMD} add 122 nat 1 ip from any to any via ${LanOut} - все ОК

Пробовал так: ${FwCMD} add 122 nat 1 ip from "table(1)" to any via ${LanOut}
Затем руками: ipfw table 1 add 10.0.0.17 перечитываю правила и все равно нет результата.

Помогите плиз, как сделать чтобы для одного ип был доступ?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
wien
мл. сержант
Сообщения: 148
Зарегистрирован: 2014-06-26 18:38:44
Откуда: DafaultCity
Контактная информация:

Re: IPFW nat и 1 IP

Непрочитанное сообщение wien » 2014-06-28 17:43:38

Разобрался, причина была в отсутствующем правиле для входящего ната. Добавил:

Код: Выделить всё

${FwCMD} add 122 nat 1 ip from any to any in via ${LanOut}
Теперь проблема другого плана, извиняюсь что не в тему. Из вышепривиденного конфига видно что все веб запросы форвардятся на внутренний веб сервер:

Код: Выделить всё

${FwCMD} add 1000 fwd 10.0.0.1,80 tcp from ${NetIn}/${NetMask} to any 80 via ${LanOut}
Хотелось бы чтобы все запросы по https, ftp форвардились туда же. Я изменил конфиг в соответствии с задачей, привожу его полностью:

Код: Выделить всё

#!/bin/sh

# v.01.00.00	13.03.2014	First working version of firewall

FwCMD="/sbin/ipfw -q"   # собственно где лежит бинарник ipfw
LanOut="vr0"            # внешний интерфейс
LanIn="re0"             # внутренний интерфейс
IpOut="192.168.0.4"     # внешний IP адрес машины
IpIn="10.0.0.1"         # внутренний IP машины
NetMask="24"            # маска сети
                        
NetIn="10.0.0.0"    # Внутренняя сеть

# Сбрасываем все правила:
${FwCMD} -f -q flush

# Проверяем - соответствует ли пакет динамическим правилам:
${FwCMD} add 110 check-state

# Разрешаем весь траффик по внутреннему интерфейсу (петле)
${FwCMD} add 111 allow ip from any to any via lo0

# рубим попытки lo0 куда-то лезть и откуда-то лезть на lo0 
${FwCMD} add 112 deny ip from any to 127.0.0.0/8
${FwCMD} add 113 deny ip from 127.0.0.0/8 to any


# Вводим запреты:
# режем частные сети на внешнем интерфейсе - по легенде он у нас 
# смотрит в интернет, а значит пакетам этим браться неоткуда на нём.
# рубим частные сeти
${FwCMD} add 114 deny ip from any to 10.0.0.0/8 in via ${LanOut}
${FwCMD} add 115 deny ip from any to 172.16.0.0/12 in via ${LanOut}
${FwCMD} add 116 deny ip from any to 0.0.0.0/8 in via ${LanOut}

# рубим автоконфигуреную частную сеть
${FwCMD} add 117 deny ip from any to 169.254.0.0/16 in via ${LanOut}

# рубаем мультикастовые рассылки
${FwCMD} add 118 deny ip from any to 240.0.0.0/4 in via ${LanOut}

# рубим фрагментированные icmp
${FwCMD} add 119 deny icmp from any to any frag

# рубим широковещательные icmp на внешнем интерфейсе
${FwCMD} add 120 deny log icmp from any to 255.255.255.255 in via ${LanOut}
${FwCMD} add 121 deny log icmp from any to 255.255.255.255 out via ${LanOut}

# а тут собственно файрволл и начался:

# С 20.06.2014 интегрирован ядерный NAT
${FwCMD} nat 1 config log if ${LanOut} same_ports
${FwCMD} add 122 nat 1 ip from any to any in via ${LanOut}

# Перенаправляю всех на внутренний веб сервер
${FwCMD} add 900 fwd 10.0.0.1,80 tcp from ${NetIn}/${NetMask} to any 80 via ${LanOut}
${FwCMD} add 901 fwd 10.0.0.1,80 tcp from ${NetIn}/${NetMask} to any 443 via ${LanOut}
${FwCMD} add 902 fwd 10.0.0.1,80 tcp from ${NetIn}/${NetMask} to any 8443 via ${LanOut}
${FwCMD} add 1000 fwd 10.0.0.1,80 tcp from ${NetIn}/${NetMask} to any 21 via ${LanOut}

# рубим траффик к частным сетям через внешний интерфейс
${FwCMD} add 1001 deny ip from 10.0.0.0/8 to any out via ${LanOut}
${FwCMD} add 1002 deny ip from 172.16.0.0/12 to any out via ${LanOut}
${FwCMD} add 1003 deny ip from 0.0.0.0/8 to any out via ${LanOut}

# рубим автоконфигуреную частную сеть
${FwCMD} add 1004 deny ip from 169.254.0.0/16 to any out via ${LanOut}

# рубаем мультикастовые рассылки
${FwCMD} add 1005 deny ip from 224.0.0.0/4 to any out via ${LanOut}

# рубаем мультикастовые рассылки
${FwCMD} add 1006 deny ip from 240.0.0.0/4 to any out via ${LanOut}

# разрешаем все установленные соединения (если они установились - 
# значит по каким-то правилам они проходили.)
${FwCMD} add 1007 allow tcp from any to any established

# разрешаем весь исходящий траффик
${FwCMD} add 1008 allow ip from ${IpOut} to any out xmit ${LanOut}

# DNS
${FwCMD} add 1009 allow udp from any 53 to any via ${LanOut}
${FwCMD} add 1010 allow udp from any to any 53 via ${LanOut}

# разрешаем UDP (для синхронизации времени - 123 порт)
${FwCMD} add 1011 allow udp from any to any 123 via ${LanOut}

# разрешаем ftp снаружи (оба правила - для пасивного режима)
${FwCMD} add 1012 allow tcp from any to ${IpOut} 21 via ${LanOut}
${FwCMD} add 1013 allow tcp from any to ${IpOut} 10000-65535 via ${LanOut}

# разрешаем некоторые типы ICMP траффика - эхо-запрос, 
# эхо-ответ и время жизни пакета истекло
${FwCMD} add 1014 allow icmp from any to any icmptypes 0,8,11

# открываем снаружи 80 порт - есть WWW сервер на машине
${FwCMD} add 1015 allow tcp from any to ${IpOut} 80 via ${LanOut}

# открываем снаружи 2200 порт - надо будет ходить на машину по ssh
${FwCMD} add 1016 allow tcp from any to ${IpOut} 2200 via ${LanOut}

# открываем изнутри 2200 порт - надо будет ходить на машину по ssh
${FwCMD} add 1017 allow tcp from any to ${IpIn} 2200 via ${LanIn}

# открываем снаружи 27015 порт для CS сервера
${FwCMD} add 1018 allow udp from any to ${IpOut} 27015 via ${LanOut}

# открываем снаружи 27910 порт для Quake2 сервера
${FwCMD} add 1019 allow udp from any to ${IpOut} 27910 via ${LanOut}

# разрешаем весь tcp траффик внутри локалки (на внутреннем интерфейсе)
${FwCMD} add 1020 allow tcp from any to any via ${LanIn}

# разрешаем весь udp траффик внутри локалки (на внутреннем интерфейсе)
${FwCMD} add 1021 allow udp from any to any via ${LanIn}

# разрешаем весь icmp траффик внутри локалки (на внутреннем интерфейсе)
${FwCMD} add 1022 allow icmp from any to any via ${LanIn}

# запрещаем всё и всем. Если тип файрволла не open то это правило добавится
${FwCMD} add deny log ip from any to any
А именно интересует фрагмент:

Код: Выделить всё

# Перенаправляю всех на внутренний веб сервер
${FwCMD} add 900 fwd 10.0.0.1,80 tcp from ${NetIn}/${NetMask} to any 80 via ${LanOut}
${FwCMD} add 901 fwd 10.0.0.1,80 tcp from ${NetIn}/${NetMask} to any 443 via ${LanOut}
${FwCMD} add 902 fwd 10.0.0.1,80 tcp from ${NetIn}/${NetMask} to any 8443 via ${LanOut}
${FwCMD} add 1000 fwd 10.0.0.1,80 tcp from ${NetIn}/${NetMask} to any 21 via ${LanOut}
Весь прикол в том что счетчики по этим правилам идут, но в браузере ничего не отображается, как будто пытается соединиться с нужным сайтом, напримеp https://google.ru
Хотя правило ${FwCMD} add 900 fwd 10.0.0.1,80 tcp from ${NetIn}/${NetMask} to any 80 via ${LanOut} отрабатывает как надо.

Помогите, в чем тут засада...

Гость
проходил мимо

Re: IPFW nat и 1 IP

Непрочитанное сообщение Гость » 2014-07-02 16:25:29

wien,
коли эти ваши ipfw'ы - не сташенный монстр, что что же тогда монстр? ;)
нут изобретайте велосипеды и дальше...
мелкая наводка: nat это nat, http - ето http, и смешивать их фунциональность меж собой не след...

snorlov
подполковник
Сообщения: 3829
Зарегистрирован: 2008-09-04 11:51:25
Откуда: Санкт-Петербург

Re: IPFW nat и 1 IP

Непрочитанное сообщение snorlov » 2014-07-02 17:03:32

Код: Выделить всё

# Перенаправляю всех на внутренний веб сервер
${FwCMD} add 900 fwd 10.0.0.1,80 tcp from ${NetIn}/${NetMask} to any 80 via ${LanOut}
${FwCMD} add 901 fwd 10.0.0.1,80 tcp from ${NetIn}/${NetMask} to any 443 via ${LanOut}
${FwCMD} add 902 fwd 10.0.0.1,80 tcp from ${NetIn}/${NetMask} to any 8443 via ${LanOut}
${FwCMD} add 1000 fwd 10.0.0.1,80 tcp from ${NetIn}/${NetMask} to any 21 via ${LanOut}
Может просто почитать про TCP/IP, а также статью про ipfw на сайте, вы запрос для обработчика, сидящего на 443 порту отправляете на 80-тый порт, кто там его будет обрабатывать...

Гость
проходил мимо

Re: IPFW nat и 1 IP

Непрочитанное сообщение Гость » 2014-07-02 18:51:52

Да что толку то?! ему всё равно придется, чтобы как-то разделить "овец от козлищ", заюзать ДВА комплекта веб- и фтп-серверов! Ну и если ето всё не монструозно и отнюдь НЕ "элегантно", то что ж тогда вообще в етом мире "элегантно"?!.
(Пруф: http://forum.lissyara.su/viewtopic.php? ... 63#p362263 - см пост № 1)

Аватара пользователя
wien
мл. сержант
Сообщения: 148
Зарегистрирован: 2014-06-26 18:38:44
Откуда: DafaultCity
Контактная информация:

Re: IPFW nat и 1 IP

Непрочитанное сообщение wien » 2014-07-03 23:57:47

snorlov писал(а):...вы запрос для обработчика, сидящего на 443 порту отправляете на 80-тый порт, кто там его будет обрабатывать...
У меня на 80-м порту апач, со страницей приветствия. Почему не перенаправляет только не знаю, хотя счетчик в ipfw идет, правило обрабатывается.

Аватара пользователя
wien
мл. сержант
Сообщения: 148
Зарегистрирован: 2014-06-26 18:38:44
Откуда: DafaultCity
Контактная информация:

Re: IPFW nat и 1 IP

Непрочитанное сообщение wien » 2014-07-04 0:03:57

Гость писал(а):Да что толку то?! ему всё равно придется, чтобы как-то разделить "овец от козлищ"
Они уже разделены стандартными средствами: dhcpd+ipfw+текстовый файл для squid. Только у меня сразу с этим вопрос назрел. Допустим у меня есть 10.0.0.5 vip адрес. Как предотвратить если кто-то руками пропишет этот адрес и войдет в сеть, будет пользоваться всеми превилегиями?
Гость писал(а):заюзать ДВА комплекта веб- и фтп-серверов!...
Вот это не понял, подробнее плиз.

Гость
проходил мимо

Re: IPFW nat и 1 IP

Непрочитанное сообщение Гость » 2014-07-05 10:14:21

При таких с позволеня сказать "решениях" непременно будут ломать!
Изобретатели велосипедов блин!..