Каким образом правильно запускать ipfw и nat ? читая доки и хендбук, я встречал различные варианты запуска, например:
1. в /etc/rc.conf
firewall_type="СВОЙ ТИП"и прописывается свои правила в свою секция файла rc.firewall
2. в /etc/rc.ipfw.rules или любой другой файл, который указывается в
/etc/rc.conf
firewall_script="/etc/rc.ipfw.rules"3. в .уес.ксюв.
кладется свой скрипт, в котором указываются правила ipfwПравила natd прописываются в отдельном файле, на который указывает строка
/etc/rc.conf
natd_flags="/etc/rc.natd.rules"У меня собственно используется firewall_script="/etc/rc.ipfw.rules" и natd_flags="/etc/rc.natd.rules",
но при загрузке системы происходит "зависание" во время выполнения /etc/rc/ipfw после запуска natd. Выход - только по Ctrl+C...
Вопрос - удобнее и безопаснее прописывать и запускать правила ipfw и natd.
И второй вопрос по теме - как лучше тестить новые скрипты файрвола, а то при перезагрузке сервер может закрыться от внешнего мира и приходится бежать в серверную (коллакейшн)...
Спасибо.
Я пользуюсь ipnat-ом, с ним в компании с ipfw никаких проблем при запуске. Инструкция по запуску описана в rc.conf по примеру из /etc/defaults/rc.conf.
А относительно второго вопроса, то может что-нибудь здесь полезного почитаешь
http://www.opennet.me/tips/sml/40.shtml.
rc.conf
gateway_enable="YES"
firewall_enable="YES"есесна в ядре прописаны опции
options IPDIVERT # нат
options IPFIREWALL # файрвол
options IPFIREWALL_VERBOSE # умеет логить пакеты
options IPFIREWALL_FORWARD # форвард врубить
options IPFIREWALL_FORWARD_EXTENDED # расширенный форвард врубитьдалее в /usr/local/etc/rc.d/ пишешь скриптик
#!/bin/sh
case "$1" in
start)
/sbin/ipfw -q flush
/sbin/ipfw -q flush
/sbin/ipfw -q add 100 divert natd all from any to any via fxp0
/sbin/ipfw -q add 110 allow all from any to any via lo0
/sbin/ipfw -q add 500 allow all from any to anyecho "Firewall rules set."
;;
stop)
/sbin/ipfw -q flush
/sbin/ipfw -q add 100 divert natd all from any to any via fxp0
/sbin/ipfw -q add 110 allow all from any to any via lo0
/sbin/ipfw -q add 500 allow all from any to any
echo "Firewall DISABLED!"
;;
*)
echo "Usage: '$0' {start|stop}" >&2
exit 64
;;
esac
exit 0правила есесна дырявые. только нат всей локалки на инет через интерфейс который в данном случае fxp0
и всё. при перезапуске стартует этот скрпитик. при остановке - останавливается.
можно для верности его сдуплить в /etc/rc.d/ если просто этого буит недостаточно. ну или прописать его в запусках при старте корректно.
во всяком случае я делаю так.
еще пользительно запустить такие вот опции в sysctl.confnet.inet.ip.forwarding=1
net.inet.ip.fw.one_pass=1
>rc.conf
>gateway_enable="YES"
>firewall_enable="YES"
>
>есесна в ядре прописаны опции
>options IPDIVERT
>
> # нат
>options IPFIREWALL
>
># файрвол
>options IPFIREWALL_VERBOSE
> # умеет логить пакеты
>options IPFIREWALL_FORWARD
> # форвард врубить
>options IPFIREWALL_FORWARD_EXTENDED # расширенный
>форвард врубитьврубил, но при сборке ядра получил такое:
....................
/usr/src/sys/i386/conf/MYKERNEL: unknown option "IPFIREWALL_FORWARD_EXTENDED"
*** Error code 1Stop in /usr/src.
*** Error code 1Stop in /usr/src.
Система FreeBSD 6.1
>>options IPFIREWALL_FORWARD_EXTENDED # расширенный>
>Система FreeBSD 6.1
не надо тут такой опции:The IPFIREWALL_FORWARD_EXTENDED kernel option has been removed. This option was used to permit ipfw(4) to redirect packets with local destinations. This behavior is now always enabled when the IPFIREWALL_FORWARD kernel option is enabled.
во как
>Каким образом правильно запускать ipfw и nat ? читая доки и хендбук,
>я встречал различные варианты запуска, например:Остановись на чем-нибудь одном и исследуй эту тему. Иначе запутаешься (что, скорее всего уже так).
В /etc/rc.conf
firewall_enable="yes"
firewall_type="open" #или что-то свое
gateway_enable="yes"
natd_enable="yes"
natd_interface="rl1" #сетевуха, смотрящая в инет
natd_flags="-f /etc/natd.conf"В /etc/natd.conf у меня указаны
same_ports yes
use_sockets yes
и редиректы некоторых портов (пиринг:)
Если не надо, не пиши...В /etc/rc.firewall (или что там указано в firewall_script):
Короче, суть там такая: чтоб работал nat, нужно, чтобы у ипфв было указано правилоdivert natd all from any to any via ${natd_interface}
причем правило должно быть первым, а не из последних...
Тип ипфв можно указать и свой, соответственно сделав новый блок в rc.firewall, но добавить туда такую конструкцию:case ${natd_enable} in
[Yy][Ee][Ss])
if [ -n "${natd_interface}" ]; then
${fwcmd} add 50 divert natd all from any to any via ${natd_interface}
fi
;;
esac${natd_enable} и ${natd_interface} возьмутся из rc.conf.
До всего этого, ессно нужно, чтобы были
options IPDIVERT
options IPFIREWALL>И второй вопрос по теме - как лучше тестить новые скрипты файрвола,
>а то при перезагрузке сервер может закрыться от внешнего мира и
>приходится бежать в серверную (коллакейшн)...Напиши скрипт, который сбрасывает правила ипфв на заведомо рабочий вариант, и поставь его в cron на каждый час, например. Таким образом, если где-то косяк в скриптах файрвола, в начале следующего часа все правила сбросятся и на сервак снова можно будет залогиниться, не бегая на площадку к провайдеру... Если же новые правила файрвола проверку выдержали, то можно править скрипт, чтобы сбрасывал в уже обновленный набор правил...
>Спасибо.
Удачи.