Правила ipfw (В чем ошибка?)

FreeBSD, NetBSD, OpenBSD, DragonFly и т. д.

Модератор: arachnid

Аватара пользователя
Maestro
Сообщения: 227
Статус: ипэшник
ОС: FreeBSD-6.2 STABLE

Правила ipfw

Сообщение Maestro »

Стоит FreeBSD 6.1 stable
Установлен NAT + IPFW
Если установить ipfw_type="open", то все работает.
Но у меня правила на основе simple с некоторыми изменениями - вроде все должно работать, с локальной машины пингую и шлюз провайдера и его ДНС. Но в инет мой сервачок фряшный локальную машинку не выпускает, ни по 80 ни по 443 ни по 5190 портам. Да, и еще - у меня стоит авторизатор от провайдера - так этот гад меня не авторизует - возможно в этом проблема, хотя авторизация, как говорит провайдер проходит по 80 или 443 портам.
Мои правила:

Код: Выделить всё

[Ss][Ii][Mm][Pp][Ll][Ee]
        ############
        # ROUTER network custom firewall setup.  The assumption here is that
        # the internal hosts are trusted, and can do anything they want.
        # The only thing we have to be careful about is what comes in over
        # the outside interface.  So, you'll see a lot of "in via ${oif}"
        # clauses here.
        ############

        # Set these to your outside interface network and netmask and ip.
        oif="fxp0"
        onet="217.20.160.0"
        omask="255.255.255.0"
        oip="217.20.160.1"

        # Set these to your inside interface network and netmask and ip.
        iif="fxp1"
        inet="192.168.0.0"
        imask="255.255.255.0"
        iip="192.168.0.1"

        # Allow communications through loopback interface and deny 127.0.0.1/8
        # from any other interfaces
        setup_loopback

        # Stop spoofing
        ${fwcmd} add deny log all from ${inet}:${imask} to any in via ${oif}
        ${fwcmd} add deny log all from ${onet}:${omask} to any in via ${iif}

        # Stop RFC1918 nets on the outside interface
        ${fwcmd} add deny log all from any to 10.0.0.0/8 via ${oif}
        ${fwcmd} add deny log all from any to 172.16.0.0/12 via ${oif}
        ${fwcmd} add deny log all from any to 192.168.0.0/16 via ${oif}

        # Stop draft-manning-dsua-03.txt (1 May 2000) nets (includes RESERVED-1,
        # DHCP auto-configuration, NET-TEST, MULTICAST (class D), and class E),
        # RFC 3330 nets on the outside interface
        ${fwcmd} add deny log all from any to 0.0.0.0/8 via ${oif}
        ${fwcmd} add deny log all from any to 169.254.0.0/16 via ${oif}
        ${fwcmd} add deny log all from any to 192.0.2.0/24 via ${oif}
        ${fwcmd} add deny log all from any to 198.18.0.0/15 via ${oif}
        ${fwcmd} add deny log all from any to 224.0.0.0/4 via ${oif}
        ${fwcmd} add deny log all from any to 240.0.0.0/4 via ${oif}

        # Network Address Translation.  This rule is placed here deliberately
        # so that it does not interfere with the surrounding address-checking
        # rules.  If for example one of your internal LAN machines had its IP
        # address set to 192.168.0.2 then an incoming packet for it after being
        # translated by natd(8) would match the `deny' rule above.  Similarly
        # an outgoing packet originated from it before being translated would
        # match the `deny' rule below.
        case ${natd_enable} in
        [Yy][Ee][Ss])
                if [ -n "${natd_interface}" ]; then
                        ${fwcmd} add divert natd all from any to any via ${natd_interface}
                fi
        ;;
        esac

        # Stop RFC1918 nets on the outside interface
        ${fwcmd} add deny log all from 10.0.0.0/8 to any via ${oif}
        ${fwcmd} add deny log all from 172.16.0.0/12 to any via ${oif}
        ${fwcmd} add deny log all from 192.168.0.0/16 to any via ${oif}

        # Stop draft-manning-dsua-03.txt (1 May 2000) nets (includes RESERVED-1,
        # DHCP auto-configuration, NET-TEST, MULTICAST (class D), and class E),
        # RFC 3330 nets on the outside interface
        ${fwcmd} add deny log all from 0.0.0.0/8 to any via ${oif}
        ${fwcmd} add deny log all from 169.254.0.0/16 to any via ${oif}
        ${fwcmd} add deny log all from 192.0.2.0/24 to any via ${oif}
        ${fwcmd} add deny log all from 198.18.0.0/15 to any via ${oif}
        ${fwcmd} add deny log all from 224.0.0.0/4 to any via ${oif}
        ${fwcmd} add deny log all from 240.0.0.0/4 to any via ${oif}

        # Allow anything on the internal net
        ${fwcmd} add allow all from any to any via ${iif}

        # Allow anything outbound from this net.
        ${fwcmd} add allow all from ${onet}:${omask} to any out via ${oif}

        # Deny anything outbound from other nets.
        ${fwcmd} add deny log all from any to any out via ${oif}

        # Allow TCP through if setup succeeded.
        ${fwcmd} add allow tcp from any to any established

        # Allow IP fragments to pass through.
        ${fwcmd} add allow all from any to any frag

        # Allow inbound ftp, tcp-dns, http, https, icq.
        ${fwcmd} add allow tcp from any to ${oip} 21 setup in via ${oif}
        ${fwcmd} add allow tcp from any to ${oip} 53 setup in via ${oif}
        ${fwcmd} add allow tcp from any to ${oip} 80 setup in via ${oif}
        ${fwcmd} add allow tcp from any to ${oip} 443 setup in via ${oif}
        ${fwcmd} add allow tcp from any to ${oip} 5190 setup in via ${oif}


        # Deny inbound auth, netbios, ldap, and Microsoft's DB protocol
        # without logging.
        ${fwcmd} add deny tcp from any to ${oip} 113 setup in via ${oif}
        ${fwcmd} add deny tcp from any to ${oip} 139 setup in via ${oif}
        ${fwcmd} add deny tcp from any to ${oip} 389 setup in via ${oif}
        ${fwcmd} add deny tcp from any to ${oip} 445 setup in via ${oif}

        # Deny some chatty UDP broadcast protocols without logging.
        ${fwcmd} add deny udp from any 137 to any in via ${oif}
        ${fwcmd} add deny udp from any to any 137 in via ${oif}
        ${fwcmd} add deny udp from any 138 to any in via ${oif}
        ${fwcmd} add deny udp from any 513 to any in via ${oif}
        ${fwcmd} add deny udp from any 525 to any in via ${oif}

        # Allow inbound DNS and NTP replies.  This is somewhat of a hole,
        # since we're looking at the incoming port number, which can be
        # faked, but that's just the way DNS and NTP work.
        ${fwcmd} add allow udp from any 53 to ${oip} in via ${oif}
        ${fwcmd} add allow udp from any 123 to ${oip} in via ${oif}

        # Allow inbound DNS queries.
        ${fwcmd} add allow udp from any to ${oip} 53 in via ${oif}

        # Deny inbound NTP queries without logging.
        ${fwcmd} add deny udp from any to ${oip} 123 in via ${oif}

        # Allow traceroute to function, but not to get in.
        ${fwcmd} add unreach port udp from any to ${oip} 33435-33524 in via ${oif}

        # Allow some inbound icmps - echo reply, dest unreach, source quench,
        # echo, ttl exceeded.
        ${fwcmd} add allow icmp from any to any in via ${oif} icmptypes 0,3,4,8,11

        # Broadcasts are denied and not logged.
        ${fwcmd} add deny all from any to 255.255.255.255

        # Everything else is denied and logged.
        ${fwcmd} add deny log all from any to any
дайте денег на обновление портов :)
Спасибо сказали:
Аватара пользователя
Maestro
Сообщения: 227
Статус: ипэшник
ОС: FreeBSD-6.2 STABLE

Re: Правила ipfw

Сообщение Maestro »

established
Только для TCP-пакетов. Соответствует пакетам с
установленными битами RST или ACK.

setup
Только для TCP-пакетов. Соответствует пакетам с
установленным битом SYN, но со сброшенным битом ACK.

Код: Выделить всё

allow all from any to any established

Не у одного меня траблы с этим правилом, может гуру подскажут, в чем может быть проблема, в моем случае, или это правило нужно, и ничего не должно менять?

Из статьи по синтаксису ipfw:

Код: Выделить всё

Основной и эффективный способ ограничить доступ (без использования
динамических правил) - использовать правила следующего типа:

ipfw add allow tcp from any to any established
ipfw add allow tcp from net1 portlist1 to net2 portlist2 setup
ipfw add allow tcp from net3 portlist3 to net3 portlist3 setup
...
ipfw add deny tcp from any to any

Первому правилу соответствуют обычные пакеты TCP, но ему не
соответствует исходный пакет SYN, который будет соответствовать
правилам setup только для избранных пар иходный адрес/целевой адрес.
Все остальные пакеты SYN будут отвергаться завершающим правилом deny.

Для защиты сайта от атак шквалом поддельных пакетов TCP, безопаснее
использовать динамические правила:

ipfw add check-state
ipfw add deny tcp from any to any established
ipfw add allow tcp from my-net to any setup keep-state

Это позволит брандмауэру устанавливать динамические правила только для
подключения, которое начинается с обычного пакета SYN, поступающего из
нашей сети. Динамические правила проверяются при обработке первого
правила check-state или keep-state. Правило check-state обычно надо
помещать ближе к началу набора правил, чтобы уменьшить объем работы
при просмотре набора правил. Но возможны и другие решения.
дайте денег на обновление портов :)
Спасибо сказали:
Аватара пользователя
Maestro
Сообщения: 227
Статус: ипэшник
ОС: FreeBSD-6.2 STABLE

Re: Правила ipfw

Сообщение Maestro »

Вопрос решен ))))

Блин - хотя не до конца, правила остались те же, но на локальной машине пропадает DNS nslookup - может кто-нить знает, что можно поделать с ДНС, еще в логах ipfw написано что моя, вроде, локальная машина ломится на ДНС провайдера по 1025, 1037, 1039 и еще некоторым портам, что бы это могло означать - авторизатор я насильно отключил. :(
дайте денег на обновление портов :)
Спасибо сказали:
Аватара пользователя
Maestro
Сообщения: 227
Статус: ипэшник
ОС: FreeBSD-6.2 STABLE

Re: Правила ipfw

Сообщение Maestro »

Все - ура! Теперь точно все!
Закомментировал все правила касающиеся ДНС в типе - simple, и добавил вот что:

Код: Выделить всё

add allow udp from any 53 to any in via ${oif}
add allow udp from any to any 53 in via ${oif}
add allow tcp from any 53 to any in via ${oif}
add allow tcp from any to any 53 in via ${oif}


траблы с DNS исчезли. Все стабильно заработало. :D
Вопрос - как сильно повлияли эти правила на безопасность?
дайте денег на обновление портов :)
Спасибо сказали:
Аватара пользователя
arachnid
Модератор
Сообщения: 1100
ОС: freeBSD

Re: Правила ipfw

Сообщение arachnid »

Maestro писал(а):
19.10.2006 07:58
Все - ура! Теперь точно все!
Закомментировал все правила касающиеся ДНС в типе - simple, и добавил вот что:

Код: Выделить всё

add allow udp from any 53 to any in via ${oif}
add allow udp from any to any 53 in via ${oif}
add allow tcp from any 53 to any in via ${oif}
add allow tcp from any to any 53 in via ${oif}


траблы с DNS исчезли. Все стабильно заработало. :D
Вопрос - как сильно повлияли эти правила на безопасность?

да никак, если у тебя не стоит днс :)
можно упростить - оставить либо ip, либо только udp, что более правильно и должно соотвествовать истине.
-= freeBSD stable, fluxbox =-
"если ты будешь со мной спорить, я тебя запишу в книжечку!" (с) Ежик
Спасибо сказали:
Аватара пользователя
Maestro
Сообщения: 227
Статус: ипэшник
ОС: FreeBSD-6.2 STABLE

Re: Правила ipfw

Сообщение Maestro »

arachnid писал(а):
19.10.2006 10:26
да никак, если у тебя не стоит днс :)
можно упростить - оставить либо ip, либо только udp, что более правильно и должно соотвествовать истине.

Спасибо за совет. Воспользуюсь. :)
дайте денег на обновление портов :)
Спасибо сказали:
Аватара пользователя
arachnid
Модератор
Сообщения: 1100
ОС: freeBSD

Re: Правила ipfw

Сообщение arachnid »

Maestro писал(а):
20.10.2006 07:40
arachnid писал(а):
19.10.2006 10:26

да никак, если у тебя не стоит днс :)
можно упростить - оставить либо ip, либо только udp, что более правильно и должно соотвествовать истине.

Спасибо за совет. Воспользуюсь. :)

по поводу безопасности - может я и поторопился в том плане, что через открытые порты dns можно пробросить тунель :)
-= freeBSD stable, fluxbox =-
"если ты будешь со мной спорить, я тебя запишу в книжечку!" (с) Ежик
Спасибо сказали: