Страница 27 из 31
Re: Подробное руководство по ipfw nat
Добавлено: 2012-07-15 3:14:18
Dark_LemON
После очередной бессонной ночи, прошу помощи.
Ситуация следующая.
На FreeBSD 7.2 настроен ядерный нат. Тут же настроен OpenVPN сервер.
Локалка натится нормально, Сеть за туннелем пингуется. Вопрос в таков, как только я захожу по ssh на роутер-клиент OpenVPN или на любой другой девайс той сети, и прошу, к примеру, вывод dmesg, то сессия подвисает а вывод составляет одну, две строчки. При этом всё продолжает исправно пинговаться.
Как только я убиваю правило на серваке
Вывод команды исправно оканчивается. Но в сети сервака естественно прекращает натиться трафик.
Информация о сервере
Код: Выделить всё
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
фаер по умолчанию принимает то чего не понимает. в дальнейшем это уберу.
Re: Подробное руководство по ipfw nat
Добавлено: 2012-07-15 4:00:26
Dark_LemON
Странно ещё то, что команда
выполняется нормально, а уже
вызывает зависание вывода.
Re: Подробное руководство по ipfw nat
Добавлено: 2012-07-27 11:07:56
anachrom
Всем здравствуйте. С праздником.
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 имеет вид
правила /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
На сервере инет есть, на клиенте нет, а хочется.
Подскажите пожалуйста, в чем проблема
Re: Подробное руководство по ipfw nat
Добавлено: 2012-07-27 13:30:23
Alvares
add 100 nat 1 ip from 10.1.1.0/24 to any
Re: Подробное руководство по ipfw nat
Добавлено: 2012-07-27 13:57:01
anachrom
Код: Выделить всё
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
не заработало
Re: Подробное руководство по ipfw nat
Добавлено: 2012-07-27 14:12:47
anachrom
Нужно ли в настройках DHCP прописать routers
Re: Подробное руководство по ipfw nat
Добавлено: 2012-07-27 14:40:32
lolwut
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 строчку:
Re: Подробное руководство по ipfw nat
Добавлено: 2012-07-27 15:11:25
anachrom
присутствует
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;
}
Если я правильно понимаю то с параметром
в ядре proxy ставить ненужно
а параметры
обеспечивают натирование
Re: Подробное руководство по ipfw nat
Добавлено: 2012-07-27 15:30:48
lolwut
anachrom писал(а):
Если я правильно понимаю то с параметром
в ядре proxy ставить ненужно
Эта опция просто позволяет использовать "ipfw fwd", а вот куда уже Вы будете fwd - это Ваше дело - хоть на проксю, хоть на соседний комп (у меня так "выборочный" NAT делается, на отдельном компе, для опред. групп адресов), хоть ... да куда хотите в общем
anachrom писал(а):
параметры
обеспечивают натирование
Да.
Re: Подробное руководство по ipfw nat
Добавлено: 2012-08-15 14:37:52
ZLoddy
При наличии двух (и более) провайдеров управление роутингом через 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 при отключении одного провайдера тоже очень просто организуется: достаточно изменить содержимое таблиц.
Re: Подробное руководство по ipfw nat
Добавлено: 2012-08-15 15:18:28
lolwut
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
Далеее - скриптуем доступность того или иного канала и в зависимости от этого переписываем дефолт/сети в табличке
источник
Re: Подробное руководство по ipfw nat
Добавлено: 2012-11-11 17:44:21
Perfectus
Прошу помощи.
Бьюсь уже неделю над проблемой.
Нужно открыть ftp и ssh для сервера и раздать интернет fulluser'ам.
FreeBSD 9.0
Настроен 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 в нате. Но я вроде делаю редирект - все как в статье. Разве что дополнительно рублю обращение К частным сетям через внешний интерфейс.
Помогите по возможности.
Re: Подробное руководство по ipfw nat
Добавлено: 2012-11-12 0:42:47
terminus
эххх, почему люди из раза в раз собирают один и тот же венигрет со всякими tcp established, а потом удивляются: "чё оно не работает"?
мне это уже порядком поднадоело, если честно.
Re: Подробное руководство по ipfw nat
Добавлено: 2012-11-12 1:24:29
terminus
в последний раз, в качестве акта очень доброй воли (без гарантии работоспособности):
/boot/loader.conf
Код: Выделить всё
#!/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.
Re: Подробное руководство по ipfw nat
Добавлено: 2012-11-12 14:13:55
Perfectus
terminus писал(а):в последний раз, в качестве акта очень доброй воли (без гарантии работоспособности):
/boot/loader.conf
Большое вам благодарю, сейчас проверю как все будет работать:-).
А ежели нет файла /boot/loader.conf ?
Этот файл лежит в /boot/default/
Может это из за того что у меня FreeBSD 9?
Re: Подробное руководство по ipfw nat
Добавлено: 2012-11-15 8:10:57
Perfectus
terminus проблема сохранилась.
Я поменял конфиг ipfw на тот что отредактировал ты. Проблема сохранилась.
Постараюсь подробно описать ее:
Дома стоит сервер. (в качестве шлюза, ftp сервера и в дальнейшем планируется организовать http сервер)
За серваком соответственно стоит рабочая машина с которой я работаю.
Ухожу я из дома утром на работу сервер включен. Машина за сервером выключена.
Прихожу на работу - пытаюсь попасть на ftp, ssh. Безрезультатно.
Сервер даже не пингуется.
Сканирую Xspider'ом - хост не найден.
То есть сервер не принимает никакие входящие соединения.
Звоню домой жене: - "Дорогая включи наш компьютер" (который напоминаю стоит за сервером)
Все начинает работать: ftp, ssh.
Xspider говорит об открытых портах : 21 и 22.
Прошу помочь по возможности.
Re: Подробное руководство по ipfw nat
Добавлено: 2012-11-15 10:25:04
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 порты?
Re: Подробное руководство по ipfw nat
Добавлено: 2012-11-16 8:23:05
Perfectus
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 входящие пакеты для
которых нет совпадения во внутренней таблице активных соединений,
или же нет совпадения с другими правил демаскировки.
Вот только пока я не включу машину за шлюзом сервер не принимает
никакие входящие соединения
Re: Подробное руководство по ipfw nat
Добавлено: 2012-11-16 10:02:06
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 с каунтерами.
Re: Подробное руководство по ipfw nat
Добавлено: 2012-11-16 18:43:03
Perfectus
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 *.* *.*
Re: Подробное руководство по ipfw nat
Добавлено: 2012-11-19 17:03:37
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
А запреты прохождения трафика в инет можно просто сделать как запрет ната.
Re: Подробное руководство по ipfw nat
Добавлено: 2012-11-20 7:13:11
Perfectus
Хорошо, благодарю, попробую так. Но нечто подобное я уже пробовал.
Re: Подробное руководство по ipfw nat
Добавлено: 2012-11-21 6:53:19
Perfectus
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
А запреты прохождения трафика в инет можно просто сделать как запрет ната.
Аналогичная ситуация. Сервер не принимает никакие входящие соединения.
Даже не пингутеся. Сейчас включу машину за ним - сразу все заработает.
В чем тут смысл и логика? Как может зависеть способность сервера принимать входящие соединения от машины которая стоит за ним? Непонятно...
Re: Подробное руководство по ipfw nat
Добавлено: 2012-11-21 23:10:19
vovchok
Уважаемые гуру.
Есть задача абонентов с роутерами отделить от остальных в фаерволе.
Как загнать в таблицу фаервола машины с 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
С уважением.
Re: Подробное руководство по ipfw nat
Добавлено: 2012-11-30 10:13:40
Perfectus
Так и не могу понять в чем же дело. Перечитал всю тему. У людей были проблемы с входящими соединениями, но как описано в доп. материалах к статье terminus'a решались они путем выключения rxcsum и tso. У меня были глюки с веб сервером - картинки на сайте прогружались не до конца. Выключил tso сервер отпустило
Но на входящие соединения это ни как не повлияло. Пока не включу машину за сервером - сервер не принимает ничего! Причем машину потом можно выключить и все будет работать. До определенного момента.
Вот параметры адаптеров:
внутренний:
Код: Выделить всё
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"
Правила 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 (правила составлены по наводке
автора статьи):
Код: Выделить всё
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 так и без него. Все вроде делаю по статье, и глюки тоже учтены.
У кого нибудь есть идеи? Прошу помочь по возможности...