Документация по ОС FreeBSD Среда, 18.12.2024, 03:48
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
IPFW [58]

Главная » Статьи » FireWall » IPFW

Интернет шлюз на FreeBSD - часть 2 [2009]
Предыдущая статья "Интернет шлюз на FreeBSD" оказалась довольно популярной среди, в основном, начинающих системных администраторов.

Тем не менее там были недочеты, плюс со временем многое изменилось и появилось желание внедрить что-нибудь другое, возможно более удобное.

Основные отличия второй части: использование пакетного фильтра PF вместо связки IPFW + natd + rinetd; использование последнего стабильного релиза FreeBSD-7.1 RELEASE.

Приступим...

Задача: организовать шлюз, раздающий корпоративной сети Интернет сервисы, пробросить необходимые порты на внутренние серверы с учетом использования диапазона внешних ip адресов.

Установка FreeBSD и сборка ядра для поддержки PF.

Устанавливаем FreeBSD в комплектации без иксов, игр и коллекции пакетов.

В конце настраиваем сетевые интерфейсы и включаем ssh.

После загрузки системы собираем ядро для поддержки PF. Вообще этот шаг можно пропустить в случае если вы не собираетесь использовать всякие очереди, приоретезацию трафика и ограничение скорости. Единственное - при подгрузке правил фаера будет мозолить глаза сообщение о том что в ядре нет поддержки всяких ALTQ...

# cd /usr/src/sys/i386/conf/
# cp GENERIC ROUTER

Правим конфиг нового ядра:

        ...
        cpu I686_CPU
        ident ROUTER

        makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols

        device pf
        device pflog
        device pfsync
        options ALTQ
        options ALTQ_CBQ # Class Bases Queuing (CBQ)
        options ALTQ_RED # Random Early Detection (RED)
        options ALTQ_RIO # RED In/Out
        options ALTQ_HFSC # Hierarchical Packet Scheduler (HFSC)
        options ALTQ_PRIQ # Priority Queuing (PRIQ)
        options ALTQ_NOPCC # Required for SMP build
        ...

Собираем и устанавливаем новое ядро:

        # cd /usr/src
        # make buldkernel KERNCONF=ROUTER
        # make installkernel KERNCONF=ROUTER

Прописываем в rc.conf:

        pf_enable="YES"
        pf_program="/sbin/pfctl"
        pf_flags=""
        pf_rules="/etc/pf.conf"
        pflog_enable="YES"
        pflog_logfile="/var/log/pf.log"
        pflog_program="/sbin/pflogd"
        pflog_flags=""

Перезагружаемся для проверки что нигде не ошиблись и смотрим что нам говорит pf:
   
        # pfctl -sa

Установка DNS сервера.

По умолчанию bind уже установлен, нужна только настройка.

Нам нужен DNS сервер, который будет держать внутреннюю зоны компании, а запросы к внешним серверам будет перенаправлять на dns серверы провайдера.

# cat /etc/namedb/named.conf

        // Logging:
        logging {
            channel syslog {
                syslog daemon;
                severity info;
                print-category yes;
                print-severity yes;
            };
            category xfer-in { syslog; };
            category xfer-out { syslog; };
            category config { syslog; };
            category default { null; };
        };

        options {
            // Relative to the chroot directory, if any
            directory "/etc/namedb";
            pid-file "/var/run/named/pid";
            dump-file "/var/dump/named_dump.db";
            statistics-file "/var/stats/named.stats";
       
            listen-on { 127.0.0.1; 192.168.0.1; };

            disable-empty-zone "255.255.255.255.IN-ADDR.ARPA";
            disable-empty-zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA";
            disable-empty-zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA";

            forwarders {
                135.11.0.77;
                135.11.127.77;
            };

            query-source address * port 53;
        };

        zone "." { type hint; file "named.root"; };

        // RFC 1912
        zone "localhost" { type master; file "master/localhost-forward.db"; };
        zone "127.in-addr.arpa" { type master; file "master/localhost-reverse.db"; };
        zone "255.in-addr.arpa" { type master; file "master/empty.db"; };

        // RFC 1912-style zone for IPv6 localhost address
        zone "0.ip6.arpa" { type master; file "master/localhost-reverse.db"; };

        // "This" Network (RFCs 1912 and 3330)
        zone "0.in-addr.arpa" { type master; file "master/empty.db"; };

        // Private Use Networks (RFC 1918)
        zone "10.in-addr.arpa" { type master; file "master/empty.db"; };
        zone "16.172.in-addr.arpa" { type master; file "master/empty.db"; };
        zone "17.172.in-addr.arpa" { type master; file "master/empty.db"; };
        zone "18.172.in-addr.arpa" { type master; file "master/empty.db"; };
        zone "19.172.in-addr.arpa" { type master; file "master/empty.db"; };
        zone "20.172.in-addr.arpa" { type master; file "master/empty.db"; };
        zone "21.172.in-addr.arpa" { type master; file "master/empty.db"; };
        zone "22.172.in-addr.arpa" { type master; file "master/empty.db"; };
        zone "23.172.in-addr.arpa" { type master; file "master/empty.db"; };
        zone "24.172.in-addr.arpa" { type master; file "master/empty.db"; };
        zone "25.172.in-addr.arpa" { type master; file "master/empty.db"; };
        zone "26.172.in-addr.arpa" { type master; file "master/empty.db"; };
        zone "27.172.in-addr.arpa" { type master; file "master/empty.db"; };
        zone "28.172.in-addr.arpa" { type master; file "master/empty.db"; };
        zone "29.172.in-addr.arpa" { type master; file "master/empty.db"; };
        zone "30.172.in-addr.arpa" { type master; file "master/empty.db"; };
        zone "31.172.in-addr.arpa" { type master; file "master/empty.db"; };
        zone "168.192.in-addr.arpa" { type master; file "master/empty.db"; };

        // Link-local/APIPA (RFCs 3330 and 3927)
        zone "254.169.in-addr.arpa" { type master; file "master/empty.db"; };

        // TEST-NET for Documentation (RFC 3330)
        zone "2.0.192.in-addr.arpa" { type master; file "master/empty.db"; };

        // Router Benchmark Testing (RFC 3330)
        zone "18.198.in-addr.arpa" { type master; file "master/empty.db"; };
        zone "19.198.in-addr.arpa" { type master; file "master/empty.db"; };

        // IANA Reserved - Old Class E Space
        zone "240.in-addr.arpa" { type master; file "master/empty.db"; };
        zone "241.in-addr.arpa" { type master; file "master/empty.db"; };
        zone "242.in-addr.arpa" { type master; file "master/empty.db"; };
        zone "243.in-addr.arpa" { type master; file "master/empty.db"; };
        zone "244.in-addr.arpa" { type master; file "master/empty.db"; };
        zone "245.in-addr.arpa" { type master; file "master/empty.db"; };
        zone "246.in-addr.arpa" { type master; file "master/empty.db"; };
        zone "247.in-addr.arpa" { type master; file "master/empty.db"; };
        zone "248.in-addr.arpa" { type master; file "master/empty.db"; };
        zone "249.in-addr.arpa" { type master; file "master/empty.db"; };
        zone "250.in-addr.arpa" { type master; file "master/empty.db"; };
        zone "251.in-addr.arpa" { type master; file "master/empty.db"; };
        zone "252.in-addr.arpa" { type master; file "master/empty.db"; };
        zone "253.in-addr.arpa" { type master; file "master/empty.db"; };
        zone "254.in-addr.arpa" { type master; file "master/empty.db"; };

        // IPv6 Unassigned Addresses (RFC 4291)
        zone "1.ip6.arpa" { type master; file "master/empty.db"; };
        zone "3.ip6.arpa" { type master; file "master/empty.db"; };
        zone "4.ip6.arpa" { type master; file "master/empty.db"; };
        zone "5.ip6.arpa" { type master; file "master/empty.db"; };
        zone "6.ip6.arpa" { type master; file "master/empty.db"; };
        zone "7.ip6.arpa" { type master; file "master/empty.db"; };
        zone "8.ip6.arpa" { type master; file "master/empty.db"; };
        zone "9.ip6.arpa" { type master; file "master/empty.db"; };
        zone "a.ip6.arpa" { type master; file "master/empty.db"; };
        zone "b.ip6.arpa" { type master; file "master/empty.db"; };
        zone "c.ip6.arpa" { type master; file "master/empty.db"; };
        zone "d.ip6.arpa" { type master; file "master/empty.db"; };
        zone "e.ip6.arpa" { type master; file "master/empty.db"; };
        zone "0.f.ip6.arpa" { type master; file "master/empty.db"; };
        zone "1.f.ip6.arpa" { type master; file "master/empty.db"; };
        zone "2.f.ip6.arpa" { type master; file "master/empty.db"; };
        zone "3.f.ip6.arpa" { type master; file "master/empty.db"; };
        zone "4.f.ip6.arpa" { type master; file "master/empty.db"; };
        zone "5.f.ip6.arpa" { type master; file "master/empty.db"; };
        zone "6.f.ip6.arpa" { type master; file "master/empty.db"; };
        zone "7.f.ip6.arpa" { type master; file "master/empty.db"; };
        zone "8.f.ip6.arpa" { type master; file "master/empty.db"; };
        zone "9.f.ip6.arpa" { type master; file "master/empty.db"; };
        zone "a.f.ip6.arpa" { type master; file "master/empty.db"; };
        zone "b.f.ip6.arpa" { type master; file "master/empty.db"; };
        zone "0.e.f.ip6.arpa" { type master; file "master/empty.db"; };
        zone "1.e.f.ip6.arpa" { type master; file "master/empty.db"; };
        zone "2.e.f.ip6.arpa" { type master; file "master/empty.db"; };
        zone "3.e.f.ip6.arpa" { type master; file "master/empty.db"; };
        zone "4.e.f.ip6.arpa" { type master; file "master/empty.db"; };
        zone "5.e.f.ip6.arpa" { type master; file "master/empty.db"; };
        zone "6.e.f.ip6.arpa" { type master; file "master/empty.db"; };
        zone "7.e.f.ip6.arpa" { type master; file "master/empty.db"; };

        // IPv6 ULA (RFC 4193)
        zone "c.f.ip6.arpa" { type master; file "master/empty.db"; };
        zone "d.f.ip6.arpa" { type master; file "master/empty.db"; };

        // IPv6 Link Local (RFC 4291)
        zone "8.e.f.ip6.arpa" { type master; file "master/empty.db"; };
        zone "9.e.f.ip6.arpa" { type master; file "master/empty.db"; };
        zone "a.e.f.ip6.arpa" { type master; file "master/empty.db"; };
        zone "b.e.f.ip6.arpa" { type master; file "master/empty.db"; };

        // IPv6 Deprecated Site-Local Addresses (RFC 3879)
        zone "c.e.f.ip6.arpa" { type master; file "master/empty.db"; };
        zone "d.e.f.ip6.arpa" { type master; file "master/empty.db"; };
        zone "e.e.f.ip6.arpa" { type master; file "master/empty.db"; };
        zone "f.e.f.ip6.arpa" { type master; file "master/empty.db"; };

        // IP6.INT is Deprecated (RFC 4159)
        zone "ip6.int" { type master; file "master/empty.db"; };

        zone "domain.local" {
            type master;
            file "master/domain.local";
            allow-transfer
            {
                192.168.1.225;
                };
        };

        zone "0.168.192.in-addr.arpa" {
            type master;
            file "master/0.168.192";
            allow-transfer
            {
                192.168.1.1;
            };
        };

        zone "1.168.192.in-addr.arpa" {
            type master;
            file "master/1.168.192";
            allow-transfer
            {
                192.168.1.1;
            };
        };

Файлы внутренней зоны:

# cat /etc/namedb/master/domain.local

        $TTL 86400

        domain.local. IN SOA ns.domain.local. admin.domain.local. (
        2006240801 ; Serial (YYYYDDMM plus 2 digit serial)
        86400 ; refresh (1 day)
        7200 ; retry (2 hours)
        8640000 ; expire (100 days)
        86400) ; minimum (1 day)

        IN NS ns.domain.local.
        localhost IN A 127.0.0.1
        ns IN A 192.168.0.1
        bsd IN A 192.168.0.1
        mail IN A 192.168.0.2
        pbx IN A 192.168.1.3
        ....

# cat /etc/namedb/master/0.168.192

        $ORIGIN .
        $TTL 86400
        0.168.192.in-addr.arpa IN SOA ns.domain.local. admin.domain.local. (
        2006082401 ; Serial (YYYYDDMM plus 2 digit serial)
        86400 ; refresh (1 day)
        7200 ; retry (2 hours)
        8640000 ; expire (100 days)
        86400)
        NS ns.domain.local.
        $ORIGIN 0.168.192.in-addr.arpa
        $TTL 86400
        1 PTR bsd.domain.local.
        1 PTR ns.domain.local.
        2 PTR mail.domain.local.
        ...

Добавляем в rc.conf:

        named_enable="YES"
        named_flags="-u bind"

Запускаем:

        /etc/rc.d/named start

Установка прокси сервера Squid.

        # cd /usr/ports/www/squid
        # make install clean

Настраивам конфиг сквида:

# cat /usr/local/etc/squid/squid.conf

        acl all src all
        acl manager proto cache_object
        acl localhost src 127.0.0.1/32
        acl to_localhost dst 127.0.0.0/8
        acl localnet src 192.168.0.0/24 # RFC1918 possible internal network
        acl Safe_ports port 80 # http
        acl CONNECT method CONNECT
        acl flv urlpath_regex -i \.flv$
        acl mov urlpath_regex -i \.mov$
        acl mp3 urlpath_regex -i \.mp3$
        acl wav urlpath_regex -i \.wav$
        acl ogg urlpath_regex -i \.ogg$
        acl asf urlpath_regex -i \.asf$
        acl avi urlpath_regex -i \.avi$
        acl mpeg urlpath_regex -i \.mpeg$
        acl inet_full src "/usr/local/etc/squid/inet_full"
        acl deny_domains dstdomain "/usr/local/etc/squid/deny_domains"
        acl work_time time MTWHF 10:00-18:00

        http_access allow manager localhost
        http_access deny manager
        http_access deny !Safe_ports
        http_access allow inet_full
        http_access deny work_time deny_domains
        http_access deny avi
        http_access deny wav
        http_access deny mp3
        http_access deny mpeg
        http_access deny flv
        http_access deny mov
        http_access deny ogg
        http_access deny asf
        http_access allow localnet
        http_access deny all

        icp_access allow localnet
        icp_access deny all

        http_port 3128
        http_port 3129 transparent

        hierarchy_stoplist cgi-bin ?

        access_log /squid/logs/access.log squid

        refresh_pattern ^ftp: 1440 20% 10080
        refresh_pattern ^gopher: 1440 0% 1440
        refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
        refresh_pattern . 0 20% 4320

        acl shoutcast rep_header X-HTTP09-First-Line ^ICY.[0-9]
        upgrade_http0.9 deny shoutcast

        acl apache rep_header Server ^Apache
        broken_vary_encoding allow apache

        cache_mem 256 MB
        cache_dir ufs /squid/cache 51200 64 512

Резюме по этому конфигу: вырезаем весь мультимедиа контент и запрещаем в рабочее время сайты, лежащие в файле deny_domains. Играничения не касаются тех, кто прописан в файле inet_full. Под сквид у меня отдельный
раздел /squid где находится кеш и логи.

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

        # chown -R squid:squid /squid

Создаем кэш:

        # squid -z

Прописывем сквид в rc.conf:

        squid_enable="YES"

Запускаем и проверяем:

        # /usr/local/etc/rc.d/squid start

        # ps -waux | grep squid
        squid 854 0,0 0,2 7060 2424 ?? Is 18:50 0:00,00 /usr/local/sbin/squid -D
        squid 943 0,0 30,5 320404 314888 ?? S 18:50 2:24,12 (squid) -D (squid)
        squid 944 0,0 0,1 1376 604 ?? Ss 18:50 0:00,94 (unlinkd) (unlinkd)
        squid 945 0,0 0,1 3308 928 ?? Ss 18:50 0:06,90 (pinger) (pinger)
        root 3653 0,0 0,1 3336 956 p1 R+ 11:32 0:00,00 grep squid

Настройка PF.

Итак, у нас сеть за натом и на внешнем интерфейсе у нас несколько реальных ip адресов.

Прописываем алиасы для внешних адресов:

# cat /etc/rc.conf

        defaultrouter="135.61.11.222"
        gateway_enable="YES"
        hostname="bsd"
        ifconfig_em0="inet 192.168.0.1 netmask 255.255.254.0"
        ifconfig_em1="inet 135.61.11.223 netmask 255.255.255.240"
        ifconfig_em1_alias0="inet 135.61.11.224 netmask 255.255.255.240"
        ifconfig_em1_alias1="inet 135.61.11.225 netmask 255.255.255.240"
        ifconfig_em1_alias2="inet 135.61.11.226 netmask 255.255.255.240"
        .....

Пишем конфиг для PF:

# cat /etc/pf.conf

        # pf.conf
        # Written By Alchemist 20.03.2009
        # http://alchemist-unix.blogspot.com/
        #################################################################
       
        #################################################################
        # Опции
        #################################################################
       
        # Интерфейсы
        ext_if = "em1"
        int_if = "em0"
       
        # IP адреса
        extnet = "135.61.11.222/28"
        lannet = "192.168.0.0/24"
        ext_ip = "135.61.24.223/32"
        ext_ip_bserv = "135.61.11.225/32"
        ext_ip_963 = "135.61.11.226/32"
        ext_ip_pbx = "135.61.11.227/32"
        bsd = "192.168.0.1/32"
        mail = "192.168.0.100/32"
        dc = "192.168.0.2/32"
        pbx = "192.168.0.3/32"
        serv1 = "192.168.0.4/32"
        serv2 = "192.168.0.5/32"
        terminal = "192.168.0.6/32"
        root = "192.168.0.10/32"
        serv3 = "192.168.0.7/32"
        friends = "{ XXX, XXX }"
        private_nets= "{ 127.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8, 169.254.0.0/16, 192.0.2.0/24, 0.0.0.0/8, 240.0.0.0/4 }"
       
        # Порты
        client_ports = "{ 21, 22, 25, 110, 123, 80, 443, 3128, 3129, 3389,8080, >=49151 }"
        admin_ports = "{ 5190, 33330:33340 }"
        pbx_udp = "{ 2727, 4520, 4569, 5036, 5060, 10000:20000 }"
        pbx_tcp = "{ 5060 }"

        #------------------------------
        # Нормализация
        #------------------------------
       
        # Определяем политику при блокировке пакетов
        set block-policy drop
        # Поведение пакетного фильтра при использовании таблицы состояний
        set state-policy floating
        # Логируемый интерфейс
        set loginterface $ext_if
        # Максимальное количество записей в пуле отвечающем за нормализацию трафика (scrub)
        # Максимальное количество вхождений в пул отвечающий за состояние таблицы состояний соединений (keep state)
        set limit { frags 100000, states 100000 }
        # Устанавливаем тип оптимизации
        set optimization normal
        # Игнорируем фильтрацию на кольцевом интерфейсе
        set skip on lo0
        # Нормализация всего входящего трафика на всех интерфейсах
        scrub in all
       
        #------------------------------
        # NAT & RDR
        #------------------------------

        # NAT для Asterisk
        # Из-за ната Астериск работал с кучей косяков, поэтому пришлось сделать бинат
        binat on $ext_if inet from $pbx to any -> $ext_ip_pbx

        # NAT для локалки
        nat on $ext_if inet from $lannet to any -> $ext_ip
       
        # Отправляем локальных интернетчиков на squid.
        rdr on $int_if proto tcp from $lannet to any port www -> 127.0.0.1 port 3129
       
        # Пробрасываем порты на Asterisk
        rdr on $ext_if from any to $ext_ip_pbx -> $pbx

        # Пробрасываем порты на web сервер
        rdr on $ext_if proto tcp from any to $ext_ip_bserv port www -> $bserv

        # Пробрасываем порты на почтовый сервер - smtp для всех.
        rdr on $ext_if proto tcp from any to $ext_ip port smtp -> $mail

        # Пробрасываем порты на почтовый сервер - pop3 для филиалов.
        rdr on $ext_if proto tcp from $friends to $ext_ip port pop3 -> $mail

        # Пробрасываем порты на почтовый сервер - https вебморда для всех.
        rdr on $ext_if proto tcp from any to $ext_ip port https -> $mail

        # Пробрасываем порты на виндовый терминальный сервер.
        rdr on $ext_if proto tcp from any to $ext_ip port rdp -> $terminal

        # Пробрасываем еще один rdp.
        rdr on $ext_if proto tcp from any to $ext_ip port 3390 -> $serv3 port 3389

        # Пробрасываем порты на root
        rdr on $ext_if proto tcp from any to $ext_ip port 44444 -> $root port 44444

        # Пробрасываем SSH
        rdr on $ext_if proto tcp from any to $ext_ip port 33330 -> $mail port 22
        rdr on $ext_if proto tcp from any to $ext_ip port 33331 -> $pbx port 22
        rdr on $ext_if proto tcp from any to $ext_ip port 33332 -> $dc port 22
        rdr on $ext_if proto tcp from any to $ext_ip port 33333 -> $serv1 port 22
        rdr on $ext_if proto tcp from any to $ext_ip port 33334 -> $serv2 port 22
        rdr on $ext_if proto tcp from any to $ext_ip port 33335 -> $pdc port 22

        #------------------------------
        # Правила фильтрации
        #------------------------------

        # Защита от спуфинга
        antispoof quick for { lo0, $int_if, $ext_if }

        # Блокируем всё
        block log all

        # Блокируем тех, кто лезет на внешний интерфейс с частными адресами
        block drop in quick on $ext_if from $private_nets to any
       
        # Разрешаем icmp
        pass inet proto icmp icmp-type echoreq

        # Разрешаем DNS для локалки
        pass in on $int_if proto udp from $lannet to $bsd port domain

        # Разрешаем NTP для локалки
        pass in on $int_if proto udp from $lannet to $bsd port ntp

        # Тестовый полный выход для отладки
        #pass in on $int_if from $lannet to any

        # Выпускаем Asterisk
        pass in on $int_if from $pbx to any

        # Выпускаем почтовик
        pass in on $int_if proto tcp from $mail to any port smtp

        # Выпускаем админские сервисы
        pass in on $int_if proto tcp from $root to any port $admin_ports

        # Выпускаем клиентске сервисы
        pass in on $int_if proto tcp from $lannet to any port $client_ports

        # Разрешаем нашему шлюзу полный выход с обоих интерфейсов
        pass out on $ext_if proto tcp from any to any
        pass out on $ext_if proto udp from any to any keep state
        pass out on $int_if proto tcp from any to any
        pass out on $int_if proto udp from any to any keep state

        #------------------------------
        # Icoming #

        # Разрешаем входящий ssh
        pass in log on $ext_if proto tcp from any to $ext_ip port 33339 flags S/SA synproxy state
        pass in log on $ext_if proto tcp from any to $mail port 22 flags S/SA synproxy state
        pass in log on $ext_if proto tcp from any to $pbx port 22 flags S/SA synproxy state
        pass in log on $ext_if proto tcp from any to $dc port 22 flags S/SA synproxy state
        pass in log on $ext_if proto tcp from any to $serv1 port 22 flags S/SA synproxy state
        pass in log on $ext_if proto tcp from any to $serv2 port 22 flags S/SA synproxy state

        # Разрешаем входящий smtp для всех
        pass in on $ext_if proto tcp from any to $mail port smtp flags S/SA synproxy state

        # Разрешаем входящий https
        pass in on $ext_if proto tcp from any to $mail port https flags S/SA synproxy state

        # Разрешаем входящий www
        pass in on $ext_if proto tcp from any to $ext_ip port www flags S/SA synproxy state

        # Разрешаем входящий ftp
        pass in on $ext_if proto tcp from any to $ext_ip port ftp flags S/SA synproxy state

        # Разрешаем входящий pop3 для филиалов
        pass in on $ext_if proto tcp from $friends to $mail port pop3 flags S/SA synproxy state

        # Разрешаем входящий rdp
        pass in log on $ext_if proto tcp from $friends to $terminal port rdp flags S/SA synproxy state

        # Разрешаем входящий rdp еще на один виндовый сервер
        pass in log on $ext_if proto tcp from $friends to $serv3 port rdp flags S/SA synproxy state

        # Проброс на root
        pass in log on $ext_if proto tcp from any to $root port 4899 flags S/SA synproxy state

        # Разрешаем входящий Asterisk
        pass in on $ext_if proto tcp from any to $pbx port $pbx_tcp flags S/SA synproxy state
        pass in on $ext_if proto udp from any to $pbx port $pbx_udp keep state

        # Разрешаем входящий www на serv1
        pass in on $ext_if proto tcp from any to $bserv port www flags S/SA synproxy state

Перед загрузкой проверим правила:

        # pfctl -nf /etc/pf.conf

Если все ок, то загрузим:

        # pfctl -f /etc/pf.conf

Посмотрим правила трансляции:

        # pfctl -sn

Правила фильтрации:

        # pfctl -sr

Посмотрим стстистику по внешнему интерфейсу:

        # pfctl -si

Просомтреть всё скопом можно так:

        # pfctl -sa

При написании статьи использовались следующие материалы:

- http://house.hcn-strela.ru/BSDCert/BSDA-course/apc.html
- http://www.lissyara.su/?id=1671
- http://www.lissyara.su/?id=1833


Источник: http://www.opennet.ru/base/net/freebsd_gw3.txt.html
Категория: IPFW | Добавил: oleg (22.04.2009) | Автор: Alchemist
Просмотров: 1740 | Рейтинг: 5.0/1 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2024