Подробное руководство по ipfw nat

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Dark_LemON
рядовой
Сообщения: 21
Зарегистрирован: 2009-09-30 16:00:51

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение Dark_LemON » 2012-07-15 3:14:18

После очередной бессонной ночи, прошу помощи.

Ситуация следующая.
На FreeBSD 7.2 настроен ядерный нат. Тут же настроен OpenVPN сервер.

Локалка натится нормально, Сеть за туннелем пингуется. Вопрос в таков, как только я захожу по ssh на роутер-клиент OpenVPN или на любой другой девайс той сети, и прошу, к примеру, вывод dmesg, то сессия подвисает а вывод составляет одну, две строчки. При этом всё продолжает исправно пинговаться.

Как только я убиваю правило на серваке

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

nat 1 ip from any to any via rl0
Вывод команды исправно оканчивается. Но в сети сервака естественно прекращает натиться трафик.

Информация о сервере

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

FreeBSD \7.2-RELEASE-p8 FreeBSD 7.2-RELEASE-p8


сеть тунеля 10.9.0.0
сеть сервака 192.168.1.0
сеть за тунелем 192.168.2.0
ipfw

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

00100    0       0 check-state
00200  700 1478192 allow ip from any to any via lo0
00300    0       0 deny ip from any to 127.0.0.0/8
00400    0       0 deny ip from 127.0.0.0/8 to any
00500    5     726 allow ip from any to any via vr0
00600  103   10238 allow ip from any to any via tun1
00700    0       0 allow ip from any to any via tun0
00800    0       0 allow tcp from any to me dst-port 443 via rl0
00900   67   19646 allow udp from any to me dst-port 5191 via rl0
01000    0       0 deny log logamount 100 not icmp from table(0) to me
01100    0       0 deny ip from any to 192.168.0.0/16 in recv rl0
01200    0       0 deny ip from 192.168.0.0/16 to any in recv rl0
01300    0       0 deny ip from any to 172.16.0.0/12 in recv rl0
01400    0       0 deny ip from 172.16.0.0/12 to any in recv rl0
01500    0       0 deny ip from any to 10.0.0.0/8 in recv rl0
01600    0       0 deny ip from 10.0.0.0/8 to any in recv rl0
01700    0       0 deny ip from any to 169.254.0.0/16 in recv rl0
01800    0       0 deny ip from 169.254.0.0/16 to any in recv rl0
01900    0       0 deny log logamount 100 icmp from any to 255.255.255.255 in via rl0
02000    0       0 deny log logamount 100 icmp from any to 255.255.255.255 out via rl0
02300    1     252 reset ip from any to any dst-port 111,135,137-139,199,631 in via rl0
02400    0       0 allow ip from my_out_ip to any dst-port 123 keep-state
02500    0       0 allow ip from my_out_ip to any dst-port 53 keep-state
02600    0       0 allow icmp from any to any icmptypes 0,3,8,11
02700    0       0 allow ip from any to any dst-port 20,21 setup
02800    0       0 allow tcp from any to any dst-port 5999 setup
02900   41    6582 allow tcp from any to any established
03000   66   11364 nat 1 ip from any to any via rl0
65535 2517  671199 allow ip from any to any
фаер по умолчанию принимает то чего не понимает. в дальнейшем это уберу.
:st: :st: :st:

Хостинговая компания 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/

Dark_LemON
рядовой
Сообщения: 21
Зарегистрирован: 2009-09-30 16:00:51

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение Dark_LemON » 2012-07-15 4:00:26

Странно ещё то, что команда

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

 head -n 9 /opt/log/openvpn/openvpn.log
выполняется нормально, а уже

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

head -n 10 /opt/log/openvpn/openvpn.log
вызывает зависание вывода.

anachrom
рядовой
Сообщения: 30
Зарегистрирован: 2009-11-25 12:32:21

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение anachrom » 2012-07-27 11:07:56

Всем здравствуйте. С праздником.
FreeBSD 9.0
внутренний интерфейс vr0
внешний интерфейс ae0
Сервер с ролью DHCP. раздает адреса 10.1.1.0/24
пересобрал ядро с параметрами

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

options IPFIREWALL
options IPFIREWALL_DEFAULT_TO_ACCEPT
options IPFIREWALL_FORWARD
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=50
options IPFIREWALL_NAT
options LIBALIAS 
в /etc/rc.conf добавил

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

firewall_enable=«YES»
firewall_nat_enable=«YES»
firewall_type="/etc/firewall"
gateway_enable=«YES»
/etc/sysctl.conf имеет вид

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

net.inet.ip.fw.one_pass=1
правила /etc/firewall

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

add 10 allow ip from any to any via vr0
nat 1 config log if ae0 reset same_ports
add 100 nat 1 ip from any to any via ae0
на ipfw show выдаёт

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

00100	0	0	allow ip from any to any via lo0
00200	0	0	deny ip from any to 127.0.0.0/8
00300	0	0	deny ip from 127.0.0.0/0 to any
00400	0	0	deny ip  from any to ::1
00500	0	0	deny ip  from ::1 to any
00600	0	0	allow ipv6-icmp from :: to ff02::/16
00700	0	0	allow ipv6-icmp from fe80::/10 to  fe80::/10
00800	1	76	allow ipv6-icmp from fe80::/10 to  ff02::/16	
00900	0	0	allow ipv6-icmp from any to any ip6 icmp6tupes 1
01000	0	0	allow ipv6-icmp from any to any ip6 icmp6tupes 2, 135, 136
01040	110	13154	allow ip from any to any via vr0
10130	136	10586	nat 1 ip from any to any via ae0
65535	6	1104	allow ip from any to any
На сервере инет есть, на клиенте нет, а хочется.
Подскажите пожалуйста, в чем проблема

Аватара пользователя
Alvares
прапорщик
Сообщения: 485
Зарегистрирован: 2008-07-10 12:48:08
Откуда: Воронеж
Контактная информация:

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение Alvares » 2012-07-27 13:30:23

add 100 nat 1 ip from 10.1.1.0/24 to any
Бог создал людей сильными и слабыми. Сэмюэл Кольт сделал их равными...

anachrom
рядовой
Сообщения: 30
Зарегистрирован: 2009-11-25 12:32:21

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение anachrom » 2012-07-27 13:57:01

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

add 10 allow ip from any to any via vr0
nat 1 config log if ae0 reset same_ports
add 100 nat 1 ip from 10.1.1.0/24 to any
не заработало

anachrom
рядовой
Сообщения: 30
Зарегистрирован: 2009-11-25 12:32:21

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение anachrom » 2012-07-27 14:12:47

Нужно ли в настройках DHCP прописать routers

Аватара пользователя
lolwut
мл. сержант
Сообщения: 123
Зарегистрирован: 2010-01-26 4:39:23

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение lolwut » 2012-07-27 14:40:32

anachrom писал(а):Нужно ли в настройках DHCP прописать routers
Какой странный вопрос. каким, по вашему, образом клиент узнает куда именно ему слать пакеты в не свою сеть?
Рисуете типа такого:

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

class "relayed" {
    match if exists agent.remote-id and exists agent.circuit-id;
}

subnet 192.0.2.0 netmask 255.255.255.0
{
    option routers 192.0.2.111;
    option domain-name-servers 192.0.2.222;

    pool {
        range 192.0.2.10 192.0.2.20;
        allow members of "relayed";
        deny known-clients;
    }

    host foo { hardware ethernet 00:00:00:00:00:01; fixed-address 192.0.2.21; }
    host bar { hardware ethernet 00:00:00:00:00:02; fixed-address 192.0.2.22; }
    host baz { hardware ethernet 00:00:00:00:00:03; fixed-address 192.0.2.23; }
}
и _обязательно_ добавляете в /etc/rc.conf строчку:

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

gateway_enable="YES"

anachrom
рядовой
Сообщения: 30
Зарегистрирован: 2009-11-25 12:32:21

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение anachrom » 2012-07-27 15:11:25

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

gateway_enable="YES"

присутствует
option routers то же задавал но более глобально

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

option domain-name "new.local";
option routers 192.168.1.1;
default-lease-time 86400;
max-lease-time 604800;
min-lease-time 3600;
authoritative;
log-facility local7; 
subnet 10.1.1.0 netmask 255.255.255.0 {
	pool {
	range 10.1.1.10 10.1.1.15;
	}
Если я правильно понимаю то с параметром

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

options IPFIREWALL_FORWARD
в ядре proxy ставить ненужно
а параметры

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

options IPFIREWALL_NAT
options LIBALIAS 
обеспечивают натирование

Аватара пользователя
lolwut
мл. сержант
Сообщения: 123
Зарегистрирован: 2010-01-26 4:39:23

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение lolwut » 2012-07-27 15:30:48

anachrom писал(а): Если я правильно понимаю то с параметром

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

options IPFIREWALL_FORWARD
в ядре proxy ставить ненужно
Эта опция просто позволяет использовать "ipfw fwd", а вот куда уже Вы будете fwd - это Ваше дело - хоть на проксю, хоть на соседний комп (у меня так "выборочный" NAT делается, на отдельном компе, для опред. групп адресов), хоть ... да куда хотите в общем ;)
anachrom писал(а): параметры

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

options IPFIREWALL_NAT
options LIBALIAS 
обеспечивают натирование
Да.

ZLoddy
проходил мимо

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение ZLoddy » 2012-08-15 14:37:52

При наличии двух (и более) провайдеров управление роутингом через setfib превращается в ад. Я решил, что в моем случае будет проще сделать так:

if_prov1 - сетевуха, подключенная к провайдеру 1
prov1_ip1 - первый IP-адрес, выделенный провайдером 1
table(0) - список внутренних подсетей
table(11) - список внутренних клиентов, выходящих через ip1 провайдера 1

ipfw add nat 11 ip from any to ${prov1_ip1} via ${if_prov1} --- натим входящий трафик от внешних узлов
ipfw add nat 11 ip from table(11) to not table(0) <- натим исходящий трафик от внутренних узлов
ipfw fwd ${prov1_gw} ip from table(11) to not table(0) <- отдаем провайдеру пакет

if_prov2 - сетевуха, подключенная к провайдеру 2
prov2_ip1 - первый IP-адрес, выделенный провайдером 2
table(0) - список внутренних подсетей
table(21) - список внутренних клиентов, выходящих через ip1 провайдера 2

ipfw add nat 21 ip from any to ${prov2_ip1} via ${if_prov2}
ipfw add nat 2 ip from table(21) to not table(0)
ipfw fwd ${prov1_gw} ip from table(21) to not table(0)


И так далее до бесконечности.

Эта конфигурация позволяет выпустить любого внутреннего клиента через любой внешний IP-адрес из предоставленных пулов.
Failover при отключении одного провайдера тоже очень просто организуется: достаточно изменить содержимое таблиц.

Аватара пользователя
lolwut
мл. сержант
Сообщения: 123
Зарегистрирован: 2010-01-26 4:39:23

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение lolwut » 2012-08-15 15:18:28

birdofluck.livejournal.com писал(а): Задача: есть 2 провайдера, надо организовать какое-то резервирование и немножко балансировки.
Самое простое: N натов в N разных провайдеров, табличка в ipfw с сетями и номерами натов.
Просто, понятно. Позволяет делать схемы с резервированием и ограниченной балансировкой
Примерная реализация:

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

ipfw nat 1 config ip ${isp1_addr} # ISP 1
ipfw nat 2 config ip ${isp2_addr} # ISP 2
# Табличка с соответствиями префиксов внутри сети с номерами натов
ipfw table 1 add 172.16.1.7 1
ipfw table 1 add 172.16.1.0/24 2
# Транслируем пакетики, летящие наружу
ipfw nat tablearg from 'table(1)' to not me out
# Направляем отттранслированные пакеты нужному провайдеру
ipfw fwd ${isp1_gw} ip4 from ${isp1_addr} to any out
ipfw fwd ${isp2_gw} ip4 from ${isp2_addr} to any out
# Транслируем пакеты, летящие на наши внешние адреса
ipfw nat 1 from any to me recv ${isp1_iface} in
ipfw nat 2 from any to me recv ${isp2_iface} in
Работа ipfw fwd после применения ipfw nat требует выключения net.inet.ip.fw_one_pass для того, чтобы пакеты после трансляции попали обратно в ipfw
Далеее - скриптуем доступность того или иного канала и в зависимости от этого переписываем дефолт/сети в табличке
источник

Perfectus
рядовой
Сообщения: 30
Зарегистрирован: 2012-11-05 13:54:04

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение Perfectus » 2012-11-11 17:44:21

Прошу помощи.
Бьюсь уже неделю над проблемой.
Нужно открыть ftp и ssh для сервера и раздать интернет fulluser'ам.
FreeBSD 9.0

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

net.inet.ip.fw.one_pass=1
Настроен IPFW + IPFW NAT:

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

#!/bin/sh
# Вводим переменные:

FwCMD="/sbin/ipfw"					# Расположение бинарника IPFW
LanOUT="alc0"						# Внешний интерфейс
LanIN="re0"						# Внутренний интерфейс
IpOUT="80.80.80.80"					# Внешний IP адрес
IpIN="192.168.1.1"					# Внутренний IP адрес
NetMASK_OUT="255.255.255.240"				# Маска внешней подсети
NetMASK_IN="24"						# Маска внутренней подсети
NetIN="192.168.1.0"					# Внетренняя сеть
FullUSER="192.168.1.2,192.168.1.3,192.168.1.4"		# IP адреса с доступом в интернет

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

# Очищаем таблицу с блокируемыми адресами
${FwCMD} -f "table1" flush

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

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

# Запрещаем lo0 куда то лезть и откуда то лезть
${FwCMD} add deny ip from any to 127.0.0.0/8
${FwCMD} add deny ip from 127.0.0.0/8 to any

# Запрещаем таблицу с ip адресами с которых неправильно ввели пароль по SSH. BruteBlock для SSH
${FwCMD} add deny ip from "table(1)" to any

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

# Вводим запреты:
# Запрещаем частные сети на внешнем интерфейсе
${FwCMD} add deny ip from any to 10.0.0.0 in via ${LanOUT}
${FwCMD} add deny ip from any to 172.16.0.0/12 in via ${LanOUT}
${FwCMD} add deny ip from any to 192.168.0.0/16 in via ${LanOUT}
${FwCMD} add deny ip from any to 0.0.0.0/8 in via ${LanOUT}
# Запрещаем автоконфигурированную частную сеть
${FwCMD} add deny ip from any to 169.254.0.0/16 in via ${LanOUT}
# Запрещаем мультикастовые рассылки
${FwCMD} add deny ip from any to 240.0.0.0/4 in via ${LanOUT}
# Запрещаем фрагментированные icmp
${FwCMD} add deny icmp from any to any frag
# Запрещаем широковещательные icmp на внешнем интерфейсе
${FwCMD} add deny log icmp from any to 255.255.255.255 in via ${LanOUT}
${FwCMD} add deny log icmp from any to 255.255.255.255 out via ${LanOUT}

# NAT встроенный в ядро системы
${FwCMD} nat 1 config log if ${LanOUT} reset same_ports deny_in \
redirect_port tcp ${IpOUT}:22 22 \
redirect_port tcp ${IpOUT}:21 21
redirect_port tcp ${IpOUT}:50000-50500 50000-50500
${FwCMD} add nat 1 ip from any to any via ${LanOUT}

# Вводим запреты:
# Заперщаем обращение К частным сетям через внешний интерфейс
${FwCMD} add deny ip from 10.0.0.0/8 to any out via ${LanOUT}
${FwCMD} add deny ip from 172.16.0.0/12 to any out via ${LanOUT}
${FwCMD} add deny ip from 192.168.0.0/16 to any out via ${LanOUT}
${FwCMD} add deny ip from 0.0.0.0/8 to any out via ${LanOUT}
# Запрещаем автоконфигурированную частную сеть
${FwCMD} add deny ip from 169.254.0.0/16 to any out via ${LanOUT}
# Запрещаем мулькастовые рассылки
${FwCMD} add deny ip from 224.0.0.0/4,240.0.0.0/4 to any out via ${LanOUT}

# Разрешаем все установленные соединения tcp
${FwCMD} add allow tcp from any to any established

# Разрешаем все исходящие соединения от сервера через внешний интерфейс
${FwCMD} add allow ip from ${IpOUT} to any out xmit ${LanOUT}

# Разрешаем все входящие и исходящие соединения на внутреннем интерфейсе (внутри сети)
${FwCMD} add allow ip from ${NetIN}/${NetMASK_IN} to ${NetIN}/${NetMASK_IN} via ${LanIN}

# Разрешаем все исходящие соединения FullUser'ам через внутренний интерфейс
${FwCMD} add allow all from ${FullUSER} to any in via ${LanIN}
# Разрешаем все входящие соединения FullUser'ам
${FwCMD} add allow all from any to ${FullUSER} in via ${LanOUT}

# Запрещаем все остальные попытки соединения с занесением в логи.
${FwCMD} add deny log tcp from any to ${IpOUT} in via ${LanOUT} setup

# Еще разок для надежности:-)
${FwCMD} add deny ip from any to any
Проблема в следующем. Сервер отказывается принимать ЛЮБЫЕ обращения извне, будь то icmp, ftp и shh.
Но как только я включаю свой компьютер за шлюзом (192.168.1.2), - все сразу начинает работать.
Просто мистика какая то. Что только не перепробовал уже. Думаю что проблема в параметре deny_in в нате. Но я вроде делаю редирект - все как в статье. Разве что дополнительно рублю обращение К частным сетям через внешний интерфейс.
Помогите по возможности.

Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение terminus » 2012-11-12 0:42:47

эххх, почему люди из раза в раз собирают один и тот же венигрет со всякими tcp established, а потом удивляются: "чё оно не работает"? :sorry:

мне это уже порядком поднадоело, если честно. :bn:
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.

Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение terminus » 2012-11-12 1:24:29

в последний раз, в качестве акта очень доброй воли (без гарантии работоспособности):

/boot/loader.conf

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

alias_ftp_load="YES"

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

#!/bin/sh
# Вводим переменные:

FwCMD="/sbin/ipfw"               # Расположение бинарника IPFW
LanOUT="alc0"                  # Внешний интерфейс
LanIN="re0"                  # Внутренний интерфейс
IpOUT="80.80.80.80"               # Внешний IP адрес
IpIN="192.168.1.1"               # Внутренний IP адрес
NetIN="192.168.1.0"               # Внетренняя сеть
FullUSER="192.168.1.2/32,192.168.1.3/32,192.168.1.4/32"      # IP адреса с доступом в интернет

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

# Очищаем таблицу с блокируемыми адресами
${FwCMD} -f "table 1" flush

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

# Запрещаем lo0 куда то лезть и откуда то лезть
${FwCMD} add deny ip from any to 127.0.0.0/8
${FwCMD} add deny ip from 127.0.0.0/8 to any

# Запрещаем таблицу с ip адресами с которых неправильно ввели пароль по SSH. BruteBlock для SSH
${FwCMD} add deny ip from "table(1)" to any

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

# Разрешаем все исходящие/входящие соединения FullUser'ам через внутренний интерфейс
# zapreshaem vsem ostalnim vozmozhnost' ispolzovat etot router
${FwCMD} add allow all from ${FullUSER} to any in recv ${LanIN}
${FwCMD} add allow all from any to ${FullUSER} out xmit ${LanIN}
${FwCMD} add deny all from ${NetIN} to any via ${LanIN}

# Запрещаем частные сети на внешнем интерфейсе
${FwCMD} add deny ip from any to 10.0.0.0 in recv ${LanOUT}
${FwCMD} add deny ip from 10.0.0.0/8 to any in recv${LanOUT}
${FwCMD} add deny ip from any to 172.16.0.0/12 in recv ${LanOUT}
${FwCMD} add deny ip from 172.16.0.0/12 to any in recv${LanOUT}
${FwCMD} add deny ip from any to 192.168.0.0/16 in recv ${LanOUT}
${FwCMD} add deny ip from 192.168.0.0/16 to any in recv${LanOUT}
${FwCMD} add deny ip from any to 169.254.0.0/16 in recv ${LanOUT}
${FwCMD} add deny ip from 169.254.0.0/16 to any in recv ${LanOUT}

# Запрещаем широковещательные icmp на внешнем интерфейсе
${FwCMD} add deny log icmp from any to 255.255.255.255 in recv ${LanOUT}
${FwCMD} add deny log icmp from any to 255.255.255.255 out xmit ${LanOUT}

# NAT встроенный в ядро системы
${FwCMD} nat 1 config log if ${LanOUT} reset same_ports deny_in \
redirect_port tcp ${IpOUT}:22 22 \
redirect_port tcp ${IpOUT}:21 21 \
redirect_port tcp ${IpOUT}:50000-50500 50000-50500

${FwCMD} add nat 1 ip from any to any via ${LanOUT}

${FwCMD} add deny ip from any to any

при условии что "netstat -an" показывает что ssh и ftp слушают или на 0.0.0.0 или на 80.80.80.80.
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.

Perfectus
рядовой
Сообщения: 30
Зарегистрирован: 2012-11-05 13:54:04

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение Perfectus » 2012-11-12 14:13:55

terminus писал(а):в последний раз, в качестве акта очень доброй воли (без гарантии работоспособности):

/boot/loader.conf

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

alias_ftp_load="YES"
Большое вам благодарю, сейчас проверю как все будет работать:-).
А ежели нет файла /boot/loader.conf ?
Этот файл лежит в /boot/default/
Может это из за того что у меня FreeBSD 9?

Perfectus
рядовой
Сообщения: 30
Зарегистрирован: 2012-11-05 13:54:04

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение Perfectus » 2012-11-15 8:10:57

terminus проблема сохранилась.
Я поменял конфиг ipfw на тот что отредактировал ты. Проблема сохранилась.
Постараюсь подробно описать ее:
Дома стоит сервер. (в качестве шлюза, ftp сервера и в дальнейшем планируется организовать http сервер)
За серваком соответственно стоит рабочая машина с которой я работаю.
Ухожу я из дома утром на работу сервер включен. Машина за сервером выключена.
Прихожу на работу - пытаюсь попасть на ftp, ssh. Безрезультатно.
Сервер даже не пингуется.
Сканирую Xspider'ом - хост не найден.
То есть сервер не принимает никакие входящие соединения.
Звоню домой жене: - "Дорогая включи наш компьютер" (который напоминаю стоит за сервером)
Все начинает работать: ftp, ssh.
Xspider говорит об открытых портах : 21 и 22.
Прошу помочь по возможности.

Dark_LemON
рядовой
Сообщения: 21
Зарегистрирован: 2009-09-30 16:00:51

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение Dark_LemON » 2012-11-15 10:25:04

просто интересно, а к чему тут

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

${FwCMD} nat 1 config log if ${LanOUT} reset same_ports deny_in \
redirect_port tcp ${IpOUT}:22 22 \
redirect_port tcp ${IpOUT}:21 21
redirect_port tcp ${IpOUT}:50000-50500 50000-50500
Он же по идее пытается на внешний ИП редиректить 22 21 порты?

Perfectus
рядовой
Сообщения: 30
Зарегистрирован: 2012-11-05 13:54:04

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение Perfectus » 2012-11-16 8:23:05

Dark_LemON писал(а):просто интересно, а к чему тут

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

${FwCMD} nat 1 config log if ${LanOUT} reset same_ports deny_in \
redirect_port tcp ${IpOUT}:22 22 \
redirect_port tcp ${IpOUT}:21 21
redirect_port tcp ${IpOUT}:50000-50500 50000-50500
Он же по идее пытается на внешний ИП редиректить 22 21 порты?
Делаю все верно, стоит параметр deny_in,

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

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

Dark_LemON
рядовой
Сообщения: 21
Зарегистрирован: 2009-09-30 16:00:51

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение Dark_LemON » 2012-11-16 10:02:06

А что если закомментить эти строки
${FwCMD} add allow all from ${FullUSER} to any in recv ${LanIN}
${FwCMD} add allow all from any to ${FullUSER} out xmit ${LanIN}
${FwCMD} add deny all from ${NetIN} to any via ${LanIN}

redirect_port tcp ${IpOUT}:22 22 \
redirect_port tcp ${IpOUT}:21 21 \
redirect_port tcp ${IpOUT}:50000-50500 50000-50500

а хотя б попробовать работоспособность без них.
Ещё было б хорошо увидеть ipfw show с каунтерами.

Perfectus
рядовой
Сообщения: 30
Зарегистрирован: 2012-11-05 13:54:04

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение Perfectus » 2012-11-16 18:43:03

Dark_LemON писал(а):А что если закомментить эти строки
${FwCMD} add allow all from ${FullUSER} to any in recv ${LanIN}
${FwCMD} add allow all from any to ${FullUSER} out xmit ${LanIN}
${FwCMD} add deny all from ${NetIN} to any via ${LanIN}

redirect_port tcp ${IpOUT}:22 22 \
redirect_port tcp ${IpOUT}:21 21 \
redirect_port tcp ${IpOUT}:50000-50500 50000-50500

а хотя б попробовать работоспособность без них.
Ещё было б хорошо увидеть ipfw show с каунтерами.
Как толко я это сделаю:
1. Закроются порты на сервере.
2. Я потеряю доступ во вне и к серверу. (проверено:-))
ipfw show:

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

00100   32   2864 allow ip from any to any via lo0
00200    0      0 deny ip from any to 127.0.0.0/8
00300    0      0 deny ip from 127.0.0.0/8 to any
00400    0      0 deny ip from table(1) to any in recv alc0
00500    0      0 deny ip from table(2) to any in recv alc0
00600    0      0 deny ip from table(3) to any dst-port 80 in recv alc0
00700    0      0 allow icmp from any to any icmptypes 0,8,11
00800  955 174952 allow ip from 192.168.1.2,192.168.1.3,192.168.1.4,192.168.1.5,192.168.1.6 to any in recv re0
00900  710 219783 allow ip from any to 192.168.1.2,192.168.1.3,192.168.1.4,192.168.1.5,192.168.1.6 out xmit re0
01000    0      0 deny ip from 192.168.1.0 to any via re0
01100    0      0 deny ip from any to 10.0.0.0 in recv alc0
01200 2110 178613 deny ip from 10.0.0.0/8 to any in recv alc0
01300    0      0 deny ip from any to 172.16.0.0/12 in recv alc0
01400    0      0 deny ip from 172.16.0.0/12 to any in recv alc0
01500    0      0 deny ip from any to 192.168.0.0/16 in recv alc0
01600    0      0 deny ip from 192.168.0.0/16 to any in recv alc0
01700    0      0 deny ip from any to 169.254.0.0/16 in recv alc0
01800    0      0 deny ip from 169.254.0.0/16 to any in recv alc0
01900    0      0 deny log logamount 1000 icmp from any to 255.255.255.255 in recv alc0
02000    0      0 deny log logamount 1000 icmp from any to 255.255.255.255 out xmit alc0
02100 1316 322914 nat 1 ip from any to any via alc0
02200    4    626 deny ip from any to any
65535    3    663 deny ip from any to any
netstat -an

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

Active Internet connections (including servers)
Proto Recv-Q Send-Q Local Address          Foreign Address        (state)
tcp4       0     52 192.168.1.1.22         192.168.1.2.53606      ESTABLISHED
tcp4       0      0 192.168.1.1.445        192.168.1.2.53605      ESTABLISHED
tcp4       0      0 127.0.0.1.25           *.*                    LISTEN
tcp4       0      0 *.22                   *.*                    LISTEN
tcp4       0      0 *.80                   *.*                    LISTEN
tcp4       0      0 127.0.0.1.3306         *.*                    LISTEN
tcp4       0      0 *.139                  *.*                    LISTEN
tcp4       0      0 *.445                  *.*                    LISTEN
tcp4       0      0 80.80.80.80.21         *.*                    LISTEN
tcp4       0      0 127.0.0.1.953          *.*                    LISTEN
tcp4       0      0 127.0.0.1.53           *.*                    LISTEN
tcp4       0      0 192.168.1.1.53         *.*                    LISTEN
udp4       0      0 192.168.1.255.138      *.*
udp4       0      0 192.168.1.1.138        *.*
udp4       0      0 192.168.1.255.137      *.*
udp4       0      0 192.168.1.1.137        *.*
udp4       0      0 *.138                  *.*
udp4       0      0 *.137                  *.*
udp4       0      0 127.0.0.1.53           *.*
udp4       0      0 192.168.1.1.53         *.*
udp4       0      0 *.514                  *.*
ip 4       0      0 *.*                    *.*
ip64       0      0 *.*                    *.*

Dark_LemON
рядовой
Сообщения: 21
Зарегистрирован: 2009-09-30 16:00:51

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение Dark_LemON » 2012-11-19 17:03:37

Может я не совсем понимаю топологию твоей сети. Но оставив строки

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

# NAT встроенный в ядро системы
${FwCMD} nat 1 config log if ${LanOUT} reset same_ports deny_in
${FwCMD} add nat 1 ip from any to any via ${LanOUT}
ты обеспечишь НАТ, но во вне будут ходить все.
вместо этой конструкции

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

${FwCMD} add allow all from ${FullUSER} to any in recv ${LanIN}
${FwCMD} add allow all from any to ${FullUSER} out xmit ${LanIN}
${FwCMD} add deny all from ${NetIN} to any via ${LanIN}
тоже можно открыть
allow all from any to any via $LanIn

И посмотреть будет ли ходить трафик.

а ссш и фтп можно открыть подобным образом

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

${fwcmd} add allow ip from any to me 22
фтп
${fwcmd} add allow ip from any to any 20,21 out via $LanOut
${fwcmd} add allow ip from any to any 20,21 in via $LanOut
${fwcmd} add allow tcp from any to any 1025-65535

А запреты прохождения трафика в инет можно просто сделать как запрет ната.

Perfectus
рядовой
Сообщения: 30
Зарегистрирован: 2012-11-05 13:54:04

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение Perfectus » 2012-11-20 7:13:11

Хорошо, благодарю, попробую так. Но нечто подобное я уже пробовал.

Perfectus
рядовой
Сообщения: 30
Зарегистрирован: 2012-11-05 13:54:04

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение Perfectus » 2012-11-21 6:53:19

Dark_LemON писал(а):Может я не совсем понимаю топологию твоей сети. Но оставив строки

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

# NAT встроенный в ядро системы
${FwCMD} nat 1 config log if ${LanOUT} reset same_ports deny_in
${FwCMD} add nat 1 ip from any to any via ${LanOUT}
ты обеспечишь НАТ, но во вне будут ходить все.
вместо этой конструкции

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

${FwCMD} add allow all from ${FullUSER} to any in recv ${LanIN}
${FwCMD} add allow all from any to ${FullUSER} out xmit ${LanIN}
${FwCMD} add deny all from ${NetIN} to any via ${LanIN}
тоже можно открыть
allow all from any to any via $LanIn

И посмотреть будет ли ходить трафик.

а ссш и фтп можно открыть подобным образом

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

${fwcmd} add allow ip from any to me 22
фтп
${fwcmd} add allow ip from any to any 20,21 out via $LanOut
${fwcmd} add allow ip from any to any 20,21 in via $LanOut
${fwcmd} add allow tcp from any to any 1025-65535

А запреты прохождения трафика в инет можно просто сделать как запрет ната.
Аналогичная ситуация. Сервер не принимает никакие входящие соединения. Даже не пингутеся. Сейчас включу машину за ним - сразу все заработает. :st:
В чем тут смысл и логика? Как может зависеть способность сервера принимать входящие соединения от машины которая стоит за ним? Непонятно...

vovchok
проходил мимо
Сообщения: 1
Зарегистрирован: 2012-01-25 15:23:34

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение vovchok » 2012-11-21 23:10:19

Уважаемые гуру.
Есть задача абонентов с роутерами отделить от остальных в фаерволе.
Как загнать в таблицу фаервола машины с ttl не совпадающим с 64,128.
Нашел это , но мне не нужно отдельный пайп , а просто таблица , или же вывод в отдельный файл
ipfw add 30 pipe 10 ip from "table(8)" to any not ipttl 64,128
ipfw pipe 10 config bw 50000Kbit/s mask src-ip 0xffffffff

С уважением.

Perfectus
рядовой
Сообщения: 30
Зарегистрирован: 2012-11-05 13:54:04

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение Perfectus » 2012-11-30 10:13:40

Так и не могу понять в чем же дело. Перечитал всю тему. У людей были проблемы с входящими соединениями, но как описано в доп. материалах к статье terminus'a решались они путем выключения rxcsum и tso. У меня были глюки с веб сервером - картинки на сайте прогружались не до конца. Выключил tso сервер отпустило :smile: Но на входящие соединения это ни как не повлияло. Пока не включу машину за сервером - сервер не принимает ничего! Причем машину потом можно выключить и все будет работать. До определенного момента.
Вот параметры адаптеров:
внутренний:

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

re0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=389b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_UCAST,WOL_MCAST,WOL_MAGIC>
внешний:

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

alc0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=c3098<VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_MCAST,WOL_MAGIC,VLAN_HWTSO,LINKSTATE>
lo0:

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

lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
        options=3<RXCSUM,TXCSUM>
Ядро пересобрано с такими опциями:

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

options		IPFIREWALL
options		IPFIREWALL_VERBOSE
options		IPFIREWALL_VERBOSE_LIMIT=1000
options		IPFIREWALL_NAT
options		LIBALIAS
options		ROUTETABLES=2
options		DUMMYNET
options		HZ="1000"	

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

net.inet.ip.fw.one_pass=1
Правила ipfw:

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

#!/bin/sh
# Вводим переменные:

FwCMD="/sbin/ipfw"               # Расположение бинарника IPFW
LanOUT="alc0"                  # Внешний интерфейс
LanIN="re0"                  # Внутренний интерфейс
IpOUT="80.80.80.80"               # Внешний IP адрес
IpIN="192.168.1.1"               # Внутренний IP адрес
NetIN="192.168.1.0"               # Внетренняя сеть
FullUSER="192.168.1.2/32,192.168.1.3/32,192.168.1.4/32,192.168.1.5/32,192.168.1.6/32"      # IP адреса с доступом в интернет

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

# Очищаем таблицы с блокируемыми адресами
${FwCMD} -f "table 1" flush
${FwCMD} -f "table 2" flush

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

# Запрещаем lo0 куда то лезть и откуда то лезть
${FwCMD} add deny ip from any to 127.0.0.0/8
${FwCMD} add deny ip from 127.0.0.0/8 to any

# Запрещаем таблицу с ip адресами с которых неправильно ввели логин или пароль по SSH. BruteBlock для SSH
${FwCMD} add deny ip from "table(1)" to any in recv ${LanOUT}

# Запрещаем таблицу с ip адресами с которых неправильно ввели логин или пароль к vsftpd
${FwCMD} add deny ip from "table(2)" to any in recv ${LanOUT}

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

# Разрешаем все исходящие/входящие соединения FullUser'ам через внутренний интерфейс
# zapreshaem vsem ostalnim vozmozhnost' ispolzovat etot router
${FwCMD} add allow all from ${FullUSER} to any in recv ${LanIN}
${FwCMD} add allow all from any to ${FullUSER} out xmit ${LanIN}
${FwCMD} add deny all from ${NetIN} to any via ${LanIN}

# Запрещаем частные сети на внешнем интерфейсе
${FwCMD} add deny ip from any to 10.0.0.0 in recv ${LanOUT}
${FwCMD} add deny ip from 10.0.0.0/8 to any in recv ${LanOUT}
${FwCMD} add deny ip from any to 172.16.0.0/12 in recv ${LanOUT}
${FwCMD} add deny ip from 172.16.0.0/12 to any in recv ${LanOUT}
${FwCMD} add deny ip from any to 192.168.0.0/16 in recv ${LanOUT}
${FwCMD} add deny ip from 192.168.0.0/16 to any in recv ${LanOUT}
${FwCMD} add deny ip from any to 169.254.0.0/16 in recv ${LanOUT}
${FwCMD} add deny ip from 169.254.0.0/16 to any in recv ${LanOUT}

# Запрещаем широковещательные icmp на внешнем интерфейсе
${FwCMD} add deny log icmp from any to 255.255.255.255 in recv ${LanOUT}
${FwCMD} add deny log icmp from any to 255.255.255.255 out xmit ${LanOUT}

# NAT встроенный в ядро системы
${FwCMD} nat 1 config log if ${LanOUT} reset same_ports deny_in redirect_port tcp ${IpOUT}:22 22 redirect_port tcp ${IpOUT}:21 21 redirect_port tcp ${IpOUT}:50000-50500 50000-50500 redirect_port tcp ${IpOUT}:80 80

${FwCMD} add nat 1 ip from any to any via ${LanOUT}
ipfw show (правила составлены по наводке :smile: автора статьи):

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

00100   1784    184134 allow ip from any to any via lo0
00200      0         0 deny ip from any to 127.0.0.0/8
00300      0         0 deny ip from 127.0.0.0/8 to any
00400      0         0 deny ip from table(1) to any in recv alc0
00500      0         0 deny ip from table(2) to any in recv alc0
00600      0         0 deny ip from table(3) to any dst-port 80 in recv alc0
00700    294     18092 allow icmp from any to any icmptypes 0,8,11
00800 225402  13071496 allow ip from 192.168.1.2,192.168.1.3,192.168.1.4,192.168.1.5,192.168.1.6 to any in recv re0
00900 482227 706049343 allow ip from any to 192.168.1.2,192.168.1.3,192.168.1.4,192.168.1.5,192.168.1.6 out xmit re0
01000      0         0 deny ip from 192.168.1.0 to any via re0
01100     31      1712 deny ip from any to any dst-port 139,445 in recv alc0
01200      0         0 deny ip from any to 10.0.0.0 in recv alc0
01300 198278  19158881 deny ip from 10.0.0.0/8 to any in recv alc0
01400      0         0 deny ip from any to 172.16.0.0/12 in recv alc0
01500      0         0 deny ip from 172.16.0.0/12 to any in recv alc0
01600    199     32138 deny ip from any to 192.168.0.0/16 in recv alc0
01700    345    198472 deny ip from 192.168.0.0/16 to any in recv alc0
01800    810     69875 deny ip from any to 169.254.0.0/16 in recv alc0
01900      0         0 deny ip from 169.254.0.0/16 to any in recv alc0
02000      0         0 deny log logamount 1000 icmp from any to 255.255.255.255 in recv alc0
02100      0         0 deny log logamount 1000 icmp from any to 255.255.255.255 out xmit alc0
02200 892966 842252492 nat 1 ip from any to any via alc0
65535    392     49192 deny ip from any to any
Не работает как с параметром deny_in так и без него. Все вроде делаю по статье, и глюки тоже учтены.
У кого нибудь есть идеи? Прошу помочь по возможности...