#!/bin/sh - #Загружаем константы . /AnyDir/kmn.firewall.txt #Задать правила для динамического запрещения (из скрипта) PPtP до Tula #В каждый конкретный момент должен работать только ОДИН (самый выгодный маршрут) st_vpn_rules() { ${fwcmd} add set ${sr_t9_set} deny tcp from ${sr_ip} to ${t9_ip} pptp ${fwcmd} add set ${sr_t9_set} deny gre from ${sr_ip} to ${t9_ip} ${fwcmd} add set ${sr_t9_set} deny tcp from ${t9_ip} pptp to ${sr_ip} ${fwcmd} add set ${sr_t9_set} deny gre from ${t9_ip} to ${sr_ip} ${fwcmd} add set ${sr_ti_set} deny tcp from ${sr_ip} to ${ti_ip} pptp ${fwcmd} add set ${sr_ti_set} deny gre from ${sr_ip} to ${ti_ip} ${fwcmd} add set ${sr_ti_set} deny tcp from ${ti_ip} pptp to ${sr_ip} ${fwcmd} add set ${sr_ti_set} deny gre from ${ti_ip} to ${sr_ip} ${fwcmd} add set ${si_t9_set} deny tcp from ${si_ip} to ${t9_ip} pptp ${fwcmd} add set ${si_t9_set} deny gre from ${si_ip} to ${t9_ip} ${fwcmd} add set ${si_t9_set} deny tcp from ${t9_ip} pptp to ${si_ip} ${fwcmd} add set ${si_t9_set} deny gre from ${t9_ip} to ${si_ip} ${fwcmd} add set ${si_ti_set} deny tcp from ${si_ip} to ${ti_ip} pptp ${fwcmd} add set ${si_ti_set} deny gre from ${si_ip} to ${ti_ip} ${fwcmd} add set ${si_ti_set} deny tcp from ${ti_ip} pptp to ${si_ip} ${fwcmd} add set ${si_ti_set} deny gre from ${ti_ip} to ${si_ip} } setup_loopback () { ${fwcmd} add 100 pass all from any to any via lo0 ${fwcmd} add 200 deny all from any to 127.0.0.0/8 ${fwcmd} add 300 deny ip from 127.0.0.0/8 to any } # Suck in the configuration variables. # Загружаем конфигурационные переменные if [ -z "${source_rc_confs_defined}" ]; then if [ -r /etc/defaults/rc.conf ]; then . /etc/defaults/rc.conf source_rc_confs elif [ -r /etc/rc.conf ]; then . /etc/rc.conf fi fi if [ -n "${1}" ]; then firewall_type="${1}" fi ############ # Set quiet mode if requested # Устанвливаем режим бесшумности если надо # case ${firewall_quiet} in [Yy][Ee][Ss]) fwcmd="/sbin/ipfw -q" ;; *) fwcmd="/sbin/ipfw" ;; esac ############ # Flush out the list before we begin. # Очищаем список правил прежде чем начать # ${fwcmd} -q flush ################### # Варианты правил # ################### ########### # KMNOPEN [Kk][Mm][Nn][Oo][Pp][Ee][Nn]) #Запросы пришедшие извне надо обслуживать на том же канале, откуда пришел запрос, #не зависимо от того, какой канал сейчас является каналом по умолчанию. #Например, если пришел запрос к sshd или icmp запрос к внешнему интерфейсу, #который сейчас не является приоритетным каналом, то ответ может уйти через #интерфес, где указан шлюз по умолчанию. Это не есть хорошо - надо предотвратить, #а то провайдер может заподозрить нас в спуфинге. Или же если на внешнем #интерфесе включен NAT, то пакетик может в него завернуться (выйти от его имени) #и тогда клиент ничего не поймет - посылал пакетик на один адрес, а получил ответ #от другого. На это и нацелены правила fwd ниже. Их надо использовать до NAT-а. #Сделать неболтливым fwcmd="/sbin/ipfw -q" #LoopBack setup_loopback #Набор правил управляемых из скрипта set_st_vpn.sh st_vpn_rules ${fwcmd} add fwd ${sr_gw} all from ${sr_ip} to any out xmit ${si_if} ${fwcmd} add fwd ${si_gw} all from ${si_ip} to any out xmit ${sr_if} #NAT на интерфейсе s.radio case ${natd1_enable} in [Yy][Ee][Ss]) if [ -n "${natd1_interface}" ]; then ${fwcmd} add divert natd1 all from any to any via ${sr_if} fi ;; esac #NAT на интерфейсе s.invest case ${natd2_enable} in [Yy][Ee][Ss]) if [ -n "${natd2_interface}" ]; then ${fwcmd} add divert natd2 all from any to any via ${si_if} fi ;; esac ${fwcmd} add 65000 pass all from any to any ;; ######## # OPEN [Oo][Pp][Ee][Nn]) ${fwcmd} add 65000 pass all from any to any ;; esac