lkrotish
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Выкладываю конфиг файрволла, прошу прокомментировать.. цель: разрешить всем инет через прокси, на неё принудительно заворачивается, всем разрешить аську, и избранным доступ ко всем сетевым службам. Проблема: последние правила не срабатывают, т.е. ни у кого не работает аська и и у избранных весь интернет. В чём может быть проблема?.. #!/bin/sh # для начала вводим переменные - для нашего же удобства, чтобы не # вводить по сотне раз одно и то же, а потом искать почему не работает, # и в итоге выяснять, что ошибся IP адресом в одном из правил FwCMD="/sbin/ipfw" # бинарник IPFW LanOut="xl0" # Внешняя сетевуха NetOut="222.222.222.220/28" # внешняя сеть IpOut="222.222.222.222" # Внешний IP LanIn="rl0" # внутренняя сетевуха NetIn="192.168.1.0/24" # Внутренняя сеть ip_lan="192.168.1" # Шаблон внутреннего адреса # нужен для ввода разрешений на инет # сбрасываем все правила ${FwCMD} -f flush # сбрасываем все pipe ${FwCMD} -f pipe flush # сбрасываем очереди ${FwCMD} -f queue flush # Не знаю, пригодится ли кому это - по ночам охрана повадилась шариться в инете # и качать музончик, порнушку смотреть... 3 гига трафика за ночь... Поэтому ночью # траффик ограничиваем (скорость) - причём жестоко режем # для этого в конфиге ядра должна быть строка # options DUMMYNET # соответственно в crontab надо добавить запись типа sh /etc/rc.firewall # с запуском в 22.01 и 8.01 )) # Также не забудте поставить в sysctl переменную net.inet.ip.fw.one_pass в 0, # иначе все пакеты будут выпадать из файрволла после трубы - а это дыра. chour=`date '+%H'` if [ ${chour} -lt 8 ]; then ${FwCMD} add pipe 1 ip from not ${NetIn} to ${NetIn} ${FwCMD} pipe 1 config bw 33600 bit/s fi if [ ${chour} -ge 22 ]; then ${FwCMD} add pipe 1 ip from not ${NetIn} to ${NetIn} ${FwCMD} pipe 1 config bw 33600 bit/s fi # Разрешаем весь траффик по внутреннему интерфейсу (петле) # Вообще я во многих местах читал что без него может ничё не заработать вообще # и прочие страшилки. Работает - почта, апач, .... А вот squid - не работает # так что без него и правда - никуда. ${FwCMD} add allow ip from any to any via lo0 # Вводим запреты: # рубим попытки 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 # рубим пакеты `типа от внутренней сети, но на внешнем интерфейсе` ${FwCMD} add deny ip from ${NetIn} to any in via ${LanOut} # рубим пакеты `типа от внешней сети, но на внутреннем интерфейсе` ${FwCMD} add deny ip from ${NetOut} to any in via ${LanIn} # режем частные сети на внешнем интерфейсе - по легенде он у нас # смотрит в интернет, а значит пакетам этим браться неоткуда на нём. # рубим частные сeти ${FwCMD} add deny ip from any to 10.0.0.0/8 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 224.0.0.0/4 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} # Отправляем всех на squid ${FwCMD} add fwd 127.0.0.1,3128 tcp from ${NetIn} to any 80 via ${LanOut} # Делаем NAT (трансляцию сетевых адресов) всему, что не ушло на squid ${FwCMD} add divert natd ip from ${NetIn} to any out via ${LanOut} ${FwCMD} add divert natd ip from any to ${IpOut} in 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 to any out via ${LanOut} # рубаем мультикастовые рассылки ${FwCMD} add deny ip from 240.0.0.0/4 to any out via ${LanOut} # разрешаем некоторые типы ICMP траффика - эхо-запрос, # эхо-ответ и время жизни пакета истекло ${FwCMD} add allow icmp from any to any icmptypes 0,8,11 # Разрешаем траффик внутренней сети на внутреннем интерфейсе (входящий) ${FwCMD} add allow ip from any to ${NetIn} in via ${LanIn} # Разрешаем траффик внутренней сети на внутреннем интерфейсе (исходящий) ${FwCMD} add allow ip from ${NetIn} to any out via ${LanIn} # разрешаем tcp-пакеты по уже установленным соединениям ${FwCMD} add allow tcp from any to any established # DNS - 4 правила. (если на машине есть DNS сервер - иначе надо всего два) ${FwCMD} add allow udp from any to ${IpOut} 53 in via ${LanOut} ${FwCMD} add allow udp from ${IpOut} 53 to any out via ${LanOut} ${FwCMD} add allow udp from any 53 to ${IpOut} in via ${LanOut} ${FwCMD} add allow udp from ${IpOut} to any 53 out via ${LanOut} # разрешаем UDP (для синхронизации времени - 123 порт) ${FwCMD} add allow udp from any to any 123 via ${LanOut} # разрешаем снаружи соединяться с 53 портом (TCP DNS) ${FwCMD} add allow tcp from any to ${IpOut} 53 in via ${LanOut} setup # открываем снаружи 80 порт - если у нас есть WWW сервер на машине ${FwCMD} add allow tcp from any to ${IpOut} 80 in via ${LanOut} setup # открываем снаружи 20,21 порт - для активного FTP ${FwCMD} add allow tcp from any to ${IpOut} 20,21 in via ${LanOut} setup # разрешаем входящую почту ${FwCMD} add allow tcp from any to ${IpOut} 25 in via ${LanOut} setup # разрешаем SSH ${FwCMD} add allow tcp from any to ${IpOut} 22 in via ${LanOut} setup # открываем снаружи 20,21 порт - для активного FTP ${FwCMD} add allow tcp from any to ${IpOut} 20,21 in via ${LanOut} setup # пассивный FTP # для узнавания портранджа по которому будет работать, лезем в # /usr/home/lissyara/>sysctl net.inet.ip.portrange.first # net.inet.ip.portrange.first: 49152 # /usr/home/lissyara/>sysctl net.inet.ip.portrange.last # net.inet.ip.portrange.last: 65535 # Можно изгалиться примерно так, если есть желание, но я предпочитаю руками #${FwCMD} add allow tcp from any to ${IpOut} \ #`sysctl net.inet.ip.portrange.first | awk '{print $2}'`-\ #`sysctl net.inet.ip.portrange.last | awk '{print $2}'` via ${LanOut} ${FwCMD} add allow tcp from any to ${IpOut} 49152-65535 via ${LanOut} # COUNTER-STRIKE (без комментариев ) ${FwCMD} add allow udp from any 27015-27025 to ${NetIn} in via ${LanOut} ${FwCMD} add allow udp from any 27015-27025 to ${NetIn} out via ${LanIn} ${FwCMD} add allow udp from ${NetIn} to any 27015-27025 in via ${LanIn} ${FwCMD} add allow udp from ${IpOut} to any 27015-27025 out via ${LanOut} # Блокируем все остальные попытки соединения с занесением в логи ${FwCMD} add deny log tcp from any to ${IpOut} in via ${LanOut} setup ${FwCMD} add allow tcp from ${IpOut} to any out via ${LanOut} setup ${FwCMD} add allow tcp from any to ${IpOut} in via ${LanIn} setup ########### BEGIN USERS ############################### # Разрешаем всем аську (ICQ) ${FwCMD} add allow tcp from ${NetIn} to any 5190 in via ${LanIn} setup # Пользователи которым разрешён инет ${FwCMD} add allow tcp from ${ip_lan}.151 to not ${NetIn} in via ${LanIn} setup ${FwCMD} add allow tcp from ${ip_lan}.153 to not ${NetIn} in via ${LanIn} setup ${FwCMD} add allow tcp from ${ip_lan}.154 to not ${NetIn} in via ${LanIn} setup ############# END USERS ################################# # запрещаем всё и всем. Если тип файрволла не open то это правило добавится # автоматически, но всё-же ну его. Лучше сам. Надёжней. ${FwCMD} add deny ip from any to any |