Доброго времени суток!
Есть локалка+прокси в Инет. Пытаюсь настроить ipfw+natd на FreeBSD 6.1. Фря одним интерфейсом смотрит в локаль, другим в подстеть прокси. Прописываю правила, для проверки сканирую наружный интерфейс с прокси на наличие открытых портов. В логах пишетipfw: Deny TCP (IP Proxy):4858 (IP наружного интерфейса FreeBSD):21 in via dc0.
А сканер показывает 21 порт. Аналогично 80,110,25
rc.conf
defaultrouter="IP Proxy"
gateway_enable="YES"
inetd_enable="YES"
router="/sbin/routed"
router_enable="YES"
router_flags="-q"
rpcbind_enable="YES"
sshd_enable="YES"
# FIREWALL
tcp_extensions="NO"
tcp_drop_synfin="YES"
firewall_enable="YES"
firewall_logging="YES"
firewall_type="MyCompany"
natd_enable="YES"
natd_interface="LanOut"
natd_flags="-l -dynamic -m"Правила IPFW
LanIn - Внутренний интерфейс
IpIn - IP внутреннего интерфейса
LanOut - Внешний интрефейс
IpOut - IP внешнего интерфейса
IpProxy - IP прокси
my - мой IP
${fwcmd} add 0005 check-state
# Разрешаем мне SSH
${fwcmd} add 0010 pass all from $my to $IpIn 22 in via $LanIn setup keep-state
${fwcmd} add 0015 pass all from any to any via lo0
# Разрешаем трафик только в пределах локальной сети
${fwcmd} add 0020 pass all from any to any via $LanIn
${fwcmd} add 0024 deny log tcp from any to $IpOut 80,21,110,25 in via $LanOut
${fwcmd} add 0025 divert natd ip from any to any in via $LanOut
# Разрешаем DNS
${fwcmd} add 0030 skipto 65000 log udp from $my,$IpOut to $IpProxy 53 limit src-addr 5
${fwcmd} add 0045 skipto 65000 tcp from ${my} to any 3128 out via $LanOut setup limit src-addr 10
${fwcmd} add 64999 deny log all from any to any
${fwcmd} add 65000 divert natd ip from any to any out via $LanOut
${fwcmd} add 65001 pass log ip from any to anyПодскажите где ошибка.
И еще при использовании конструкции fwd пишет ошибку ipfw: getsockopt(IP_FW_ADD): Invalid argument
как-то все очень сложно... проще повесить нужные сервисы исключительно на внутренний интерфейс.
>И еще при использовании конструкции fwd пишет ошибку ipfw: getsockopt(IP_FW_ADD): Invalid argument
>А по поводу этого - ядро собрано с поддержкой IPFIREWALL?
Вот настройки ядраoptions MROUTING # Multicast routing
options PIM # Protocol Independent Multicast
options IPFIREWALL #firewall
options IPFIREWALL_VERBOSE #enable logging to syslogd(8)
options IPFIREWALL_VERBOSE_LIMIT=5 #limit verbosity
#options IPFIREWALL_DEFAULT_TO_ACCEPT #allow everything by default
options IPFIREWALL_FORWARD #packet destination changes
options IPFIREWALL_FORWARD_EXTENDED #all packet dest changes
#options IPV6FIREWALL #firewall for IPv6
#options IPV6FIREWALL_VERBOSE
#options IPV6FIREWALL_VERBOSE_LIMIT=10
#options IPV6FIREWALL_DEFAULT_TO_ACCEPT
options IPDIVERT #divert sockets
#options IPFILTER #ipfilter support
#options IPFILTER_LOG #ipfilter logging
#options IPFILTER_LOOKUP #ipfilter pools
#options IPFILTER_DEFAULT_BLOCK #block all packets by default
options IPSTEALTH #support for stealth forwarding
options TCPDEBUGДефолтом все запрещено. Если бы ядро было собрано без поддрежки ipfw, то как бы я видел логи блокированных пакетов.
В том-то и дело, что сервисов никаких нет.
Проблемка с портами решилась.Осталось понять, почему не удается применить конструкцию fwd.
>Проблемка с портами решилась.
>
>Осталось понять, почему не удается применить конструкцию fwd.Потому-что ядро без опции
options IPFIREWALL_FORWARD
>>Проблемка с портами решилась.
>>
>>Осталось понять, почему не удается применить конструкцию fwd.
>
>Потому-что ядро без опции
>options IPFIREWALL_FORWARDтак-то с опцией вроде
options IPFIREWALL_FORWARD #packet destination changesАвтору треда: ядро пересобирали после установки?
>Автору треда: ядро пересобирали после установки?Ядро не пересобирал. Опции были активны при установке.
>>Автору треда: ядро пересобирали после установки?
>
>Ядро не пересобирал. Опции были активны при установке.Опции options IPFIREWALL_FORWARD
в GENERIC при установке с дистрибутива нет.
>>>Автору треда: ядро пересобирали после установки?
>>
>>Ядро не пересобирал. Опции были активны при установке.
>
>Опции options IPFIREWALL_FORWARD
>в GENERIC при установке с дистрибутива нет.точно. предполагаю автор получил установленный сервер, в котором ядро было сконфигурировано, но не пересобрано, либо пересобрано, но не установлено, либо установлено, но не то.
Спасибо всем, проблема решилась пересборкой ядра. Предлагаю полный ответ на свой вопрос, дабы на эти грабли больше не попадались.
Итак,
либо dmesg, либо ee /var/log/messages
находим сообщение подобное следующему
ipfw2 (+ipv6) initialized, divert loadable, rule-based forwarding disabled, default to deny, lo
rule-based forwarding disabled - вот оно. Т.е ядро не поддерживает констукцию fwd.Будем конфигурить ядро.
cd /usr/src/sys/i386/conf - путь может отличаться.
cp GENERIC MYKERNEL - сохраняем текущий конфигурационный файл ядра GENERIC в MYKERNEL
ee /usr/src/sys/i386/conf/MYKERNEL - редактируем(просматриваем) конфиг, для fwd там должна присутствовать следующая строка.
options IPFIREWALL_FORWARD
если необходимо, то и
options IPFIREWALL_FORWARD_EXTENDED
у меня, например вот так
############################################# MY SETTING ############################
options IPFIREWALL # Firewall
options IPFIREWALL_VERBOSE # Print information about
options IPFIREWALL_FORWARD
options IPFIREWALL_FORWARD_EXTENDED
options IPSTEALTH # Support stealth forwarding
options IPDIVERT # Divert IP sockets
options DUMMYNET # Bandwidth limiter
options IPSEC # IP security protocol
options IPSEC_ESP # IP security crypto
#####################################################################################Теперь необходимо собрать ядро, процедура довольно утомительная
cd /usr/src
make buildkernel KERNKONF=MYKERNEL
теперь можно курить час, полтораПотом устанавливаем ядро
make installkernel KERNCONF=MYKERNELПерегружаемся.
ВСЕ!!!
Данная инфа находится здесь http://www.freebsd.org/doc/ru/books/handbook/book.htmlЯ привел лишь сжатые выдержки, относящиеся к указанной проблеме.
УДАЧИ!
>Теперь необходимо собрать ядро, процедура довольно утомительная
> cd /usr/src
> make buildkernel KERNKONF=MYKERNEL
> теперь можно курить час, полторастранно.. если сделать так:
cd /sys/i386/conf/
ee MYKERNEL
config MYKERNEL
cd ../compile/MYKERNEL
make depend && make && make install
процедура занимает 10 мин на машинах за $300
т.е. ниже среднегоP.S. я сам только с 3 раза правильно скомпилировал ядро :)
>[оверквотинг удален]
>> make buildkernel KERNKONF=MYKERNEL
>> теперь можно курить час, полтора
>
>странно.. если сделать так:
>cd /sys/i386/conf/
>ee MYKERNEL
>config MYKERNEL
>cd ../compile/MYKERNEL
>make depend && make && make install
>процедура занимает 10 мин на машинах за $300не проблема, загадка:
пересобирал ядро два раза (на разных машинах), везьде пользовался конструкцией "make depend && make && make install"
Ядро работает, но(!) в
$ uname -a
FreeBSD bsd 6.2-RELEASE FreeBSD 6.2-RELEASE #0: Wed Apr 18 19:34:26 MSD 2007 adm@ourhost.ourdomain:/usr/obj/usr/src/sys/mykernel i386должен был измениться порядковый номер (сейчас #0).
Лечится?
не, всё-таки самый правильный способ:
#cd /sys/i386/conf
#cp GENERIC anyname
#ee anyname
#cd /usr/src
#make buildkernel KERNCONF=anyname
#make installkernel KERNCONF=anynameили можно сразу: #make kernel KERNCONF=anyname
итого, с 4го раза.. :D