Страница 1 из 1

не слушается firewall

Добавлено: 2006-08-06 14:26:13
maniac
FreeBSD 5.4 проблема в следующем, собрал ядро с поддержкой фаера, в /etc/rc.conf написал:
firewall_enable="YES"
firewall_type="close"
firewall_type="/etc/firewall"
firewall_logging="YES"
затем в /etc/ сделал файлик firewall и написал в него следующее(как лис учил ;))
#!/bin/sh

# для начала вводим переменные - для нашего же удобства, чтобы не
# вводить по сотне раз одно и то же, а потом искать почему не работает,
# и в итоге выяснять, что ошибся IP адресом в одном из правил

FwCMD="/sbin/ipfw" # собственно где лежит бинарник ipfw
LanOut="lnc0" # внешний интерфейс
LanIn="lnc1" # внутренний интерфейс
IpOut="62.13.50.3" # внешний IP адрес машины
IpIn="192.168.0.22" # внутренний IP машины
NetMask="24" # маска сети (если она разная для внешней
# и внутренней сети - придётся вводить ещё
# одну переменную, но самое забавное, что
# можно и забить - оставить 24 - всё будет
# работать, по крайней мере я пробовал -
# работаало на 4-х машинах, в разных сетях,
# с разными масками - настоящими разными! но -
# это неправильно.)
NetIn="192.168.0.0" # Внутренняя сеть

# Сбрасываем все правила:
${FwCMD} -f flush

# Проверяем - соответствует ли пакет динамическим правилам:
${FwCMD} add check-state

# Разрешаем весь траффик по внутреннему интерфейсу (петле)
# Вообще я во многих местах читал что без него может ничё не заработать вообще
# и прочие страшилки. Работает - почта, апач, .... А вот 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


# Вводим запреты:
# режем частные сети на внешнем интерфейсе - по легенде он у нас
# смотрит в интернет, а значит пакетам этим браться неоткуда на нём.
# рубим частные с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 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}

# а тут собственно файрволл и начался:

# отправляем всех на frox
${FwCMD} add fwd ${IpIn},2121 tcp from ${NetIn}/${NetMask} to any 21 via ${LanOut}
# отправляем всех на squid (в данном случае - прокси прозрачный)
${FwCMD} add fwd 127.0.0.1,3128 tcp from ${NetIn}/${NetMask} to any 80 via ${LanOut}


# пропускаем траффик через трансляцию сетевых адресов (NAT)
${FwCMD} add divert natd ip from ${NetIn}/${NetMask} 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}


# разрешаем все установленные соединения (если они установились -
# значит по каким-то правилам они проходили.)
${FwCMD} add allow tcp from any to any established
# разрешаем весь исходящий траффик (серверу-то в инет можно? :))
${FwCMD} add allow ip from ${IpOut} to any out xmit ${LanOut}

# разрешаем DNS снаружи (нам же надо узнавать IP по именам машин?)
${FwCMD} add allow udp from any 53 to any via ${LanOut}
# разрешаем DNS входящий снаружи - если на этой машине работает named
# и держит какую-то зону. В остальных случаях - не нужно
${FwCMD} add allow udp from any to any 53 via ${LanOut}
# разрешаем UDP (для синхронизации времени - 123 порт)
${FwCMD} add allow udp from any to any 123 via ${LanOut}
# разрешаем ftp снаружи (оба правила - для пасивного режима):
${FwCMD} add allow tcp from any to ${IpOut} 21 via ${LanOut}
${FwCMD} add allow tcp from any to ${IpOut} 40000-65534 via ${LanOut}
# разрешаем некоторые типы ICMP траффика - эхо-запрос,
# эхо-ответ и время жизни пакета истекло
${FwCMD} add allow icmp from any to any icmptypes 0,8,11
# открываем снаружи 80 порт - если у нас есть WWW сервер на машине
${FwCMD} add allow tcp from any to ${IpOut} 80 via ${LanOut}
# открываем снаружи 25 порт (SMTP) если на машине крутится почта
#${FwCMD} add allow tcp from any to ${IpOut} 25 via ${LanOut}
# открываем снаружи 22 порт - если надо будет ходить на машину по ssh
${FwCMD} add allow tcp from any to ${IpOut} 22 via ${LanOut}
# открываем снаружи 143 порт(если надо смотреть почту снаружи по IMAP)
${FwCMD} add allow tcp from any to ${IpOut} 143 via ${LanOut}
# открываем снаружи 110 порт(если надо смотреть почту снаружи по POP)
${FwCMD} add allow tcp from any to ${IpOut} 110 via ${LanOut}
# по поводу следующих трёх правил, для tcp, udp и icmp - их можно
# заменить одним правилом:
#${FwCMD} add allow ip from any to any via ${LanIn}
# но для удобства наладки и контроля происходящего я предпочитаю три отдельных
# правила, хотя могут быть грабли - например протокол gre не пройдёт -
# придётся стругать отдельное правило для него, типа
#${FwCMD} add allow gre from any to any via ${LanIn}
# итак:
# разрешаем весь tcp траффик внутри локалки (на внутреннем интерфейсе)
${FwCMD} add allow tcp from any to any via ${LanIn}
# разрешаем весь udp траффик внутри локалки (на внутреннем интерфейсе)
${FwCMD} add allow udp from any to any via ${LanIn}
# разрешаем весь icmp траффик внутри локалки (на внутреннем интерфейсе)
${FwCMD} add allow icmp from any to any via ${LanIn}
# запрещаем всё и всем. Если тип файрволла не open то это правило добавится
# автоматически, но всё-же ну его. Лучше сам. Надёжней.
${FwCMD} add deny ip from any to any


ну и делаю /etc/netstart, он перезагружается, и .... ничего не пашет, делаю ipfw show показывает только 65535 add deny from any to any т.е. ничего не разрешает. Помогите в чем трабл. Если нужно разрешить то делаю так:
ipfw 65100 add allow from any to any тогда начинает пахать, но это правило работает до первой перезагрузки. Что делаю не так, и почему рулю не читаются из /etc/firewall???

Добавлено: 2006-08-06 17:41:10
zorg
Нафига это - firewall_type="close" - это указывает тип фаера!! А у тебя тип свой!!! ;)
Оставь только это:
firewall_type="/etc/firewall"

Добавлено: 2006-08-06 18:14:21
northern
вот из файла rc.firewall
############
# Define the firewall type in /etc/rc.conf. Valid values are:
# open - will allow anyone in
# client - will try to protect just this machine
# simple - will try to protect a whole network
# closed - totally disables IP services except via lo0 interface
# UNKNOWN - disables the loading of firewall rules.
# filename - will load the rules in the given filename (full path required)
#
а у тя зачем два раза:
firewall_type="close"
firewall_type="/etc/firewall"
убери
firewall_type="close"
если хочешь свой файл с правилами подсунуть.

ну а я вообще, сделал свой скриптик и засунул его в usr/local/etc/rc.d.

Добавлено: 2006-08-06 18:45:17
maniac
блин сорри народ, действительно тупанул, спасибо большое что наставили на пусть истенный. И еще если в файлик с рулами для фаера внес изменения, чтобы они вступили в силу перезагружать фаер только коммандой /etc/netstart или кака другая есть?

Добавлено: 2006-08-06 19:23:41
maniac
и чего то все-равно не работает, в /etc/rc.conf оставил только
firewall_enable="YES"
firewall_type="/etc/firewall"
firewall_flags="".

В firewall конфиг фаера который взял с сайта, приводил выше. Так вот дела /etc/netstart вылазиет следующее:
su-2.05b# /etc/netstart
devd already running? (pid=243).
lnc0: flags=108843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 192.168.0.22 netmask 0xffffff00 broadcast 192.168.0.255
ether 00:0c:29:b0:6a:85
lnc1: flags=108843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 192.168.1.22 netmask 0xffffff00 broadcast 192.168.1.255
ether 00:0c:29:b0:6a:8f
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
inet 127.0.0.1 netmask 0xff000000
Flushed all rules.
Line 7: bad command 'FwCMD="/sbin/ipfw"'
Firewall rules loaded, starting divert daemons:.
Firewall logging enabled
net.inet.ip.fw.enable: 1 -> 1
Additional routing options:.

Чет загрузил делаю снова ipfw show показывает только одно правило
65535 deny ip from anyto any
и чего делать?

Добавлено: 2006-08-06 19:25:28
northern
перезапускаем файрволл следующей командой: sh /etc/rc.firewall &
(при условии, что конфиг файрволла у Вас в файле /etc/rc.firewall)
-----------
попробуй сделать обычный скрипт (свой файл) со своими правилами, сделай его исполняемым, положи его в /usr/local/etc/rc.d. после изменений просто перезапусти этот скрипт (можешь в mc). И не надо будет в rc.conf писать firewall_type="/etc/firewall"

Добавлено: 2006-08-06 19:29:53
northern
почитай коменты к лисяриной статье:
firewall_type="/etc/rc.firewall" в 5.3 неработает выдаёт ошибку о неправилном аргументе FwCMD="/sbin/ipfw". Ей нужен firewall_script="/etc/rc.firewall"
но мне всёж лучше не привязываться rc.conf.

Добавлено: 2006-08-06 22:11:12
Гость
А можно ли сделать так, чтобы когда сидишь удаленно через putty и перезагружаешь фаер одним из перечисленных выше способов не выкидывало, а то выкидывает и нужно снова переподключаться?