>> Мне для скрипта с правилами IPFW.
> Нормальный у тебя shell. Ну тогда слушай - https://www.freebsd.org/doc/handbook/firewalls-ipfw.html,
> почитай хотя бы раздел 29.4.3
> Порядок правил имеет значение, кто первый встретился того и тапки. Например:
> ipfw -q add 00310 allow all from 192.168.1.50/32 to any in via
> dc0
> ipfw -q add 00320 deny all from 192.168.1.0/16 to any
> in via dc0
> allow там или deny - сам разбирайся, ты ничего про это не
> сказал.Да это я понимаю. Хэндбук уже курил. И даже вот это курил http://www.lissyara.su/articles/freebsd/tuning/ipfw_nat/
Спасибо
Раз уже здесь отвечаете, помогите решить задачу.. Уже сломал мозг.
Есть машина FreeBSD 10.3, внутренний (например fxp0) и внешний (em0) интерфейсы. IPFW kernel NAT.
На внутреннем подсеть 10.1.10.0/24 и хост с Exchange 2013 (например 10.1.10.12), к которому нужно пробросить 25, 80 и 443 порты.
Подскажите структуру срипта с правилами. И чтоб еще в дальнейшем можно было dummynet подключить.. То есть с выключенным net.inet.ip.fw.one_pass
Я, взяв за основу пример из хэндбука https://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/fire... , обламался. И уже неделю продолжаю обламываться.
Вот, что набросал я, но оно не работает:
#!/bin/sh
ipfw -q -f flush
cmd="ipfw -q add"
$cmd 010 allow all from any to any via lo0
$cmd 020 allow all from any to any via fxp0
ipfw -q nat 1 config ip 1.2.3.4 same_ports reset deny_in \
redirect_port tcp 10.1.10.12:80 80 \
redirect_port tcp 10.1.10.12:443 443 \
redirect_port tcp 10.1.10.12:25 25
$cmd 100 nat 1 ip from any to any in via em0
$cmd 200 check-state
$cmd 300 skipto 800 tcp from 10.1.10.0/24 to any out via em0 setup keep-state
$cmd 400 deny all from any to any frag in via em0
$cmd 500 deny tcp from any to any established in via em0
$cmd 600 tcp from any to 10.1.10.12 25,443 in via em0 setup keep-state
$cmd 700 deny all from any to any via em0
$cmd 800 nat 1 ip from any to any out via em0
$cmd 900 allow all from any to any
$cmd 999 deny all from any to any
----------------------------------------------------------
sysctl net.inet.ip.fw.one_pass=0
Подскажите, почему нет связи с 10.1.10.12 извне?
Ведь входящий трафик на внешний IP 1.2.3.4 на порт, например, 443:
На проходе IN:
1. Приходит на правило 100. Меняется адрес назначения (так как редирект_порт)
2. Далее выходит изната и, т.к. one_pass=0, доходит до правила 600 (в динамической таблице создается запись для пар адресов внутреннего и внешнего адреса), выходит из прохода IN и попадает в проход OUT.
На проходе OUT:
3. Доходит до правила 020 и отправляется на внутренний хост 10.1.10.12:443.
Ответный трафик от хоста 10.1.10.12
На проходе IN:
4. Доходит до правила 020, входит из прохода IN и попадает в проход OUT.
На проходе OUT:
5. Доходит до правила 200 и отправляется на внешний адрес (т.к. запись о соединении уже есть в динамической таблице).
Подскажите, где ошибка?
На всякий случай, вот оригинальная тема https://www.opennet.ru/openforum/vsluhforumID1/96869.html
Я уже готов за понимание (ну или хотя бы за готовый срипт) глаз отдать, как один известный персонаж скандинавских баек. Ну или в крайнем случае пиво )