от Uvigii(14-04-2004)

рейтинг (18)   [ добре ]  [ зле ]

Printer Friendly Вариант за отпечатване

Инсталиране и настройка на “прозрачна защитна стена” (transparent firewall)

Заб.:Авторът е напълно наясно, че (може да) съществуват неточности и грешки. Показаното тук е само с учебна цел! Преди да направите каквото и да е архивирайте важните си данни (а защо не всичко?) ! Превода на английските термини може да не е съвсем точен. За контакти: uvigii@mail.bg , най актуалната версия на: http://uvigii.jeckyll.net/pub/doc/tf/TF.html

Съдържание:

    1.Идея за използване

    2.Инсталация

      2.1. Подготовка

      2.2. Ядро: кърпеж, конфигуриране, компилиране, инсталация.

      2.3. Brctl: конфигуриране, компилиране, инсталация.

      2.4. Squid: конфигуриране, компилиране, инсталация.

    3.Настройки

      3.1. Настройка на бриджа.

      3.2. Настройка на IP филтър с iptables.

      3.3. Настройка на Squid.

    4.Заключение.


1. Идея за използване

    Представете си следната ситуация (фиг.1):


В нашите права/задължения влиза администрирането само на LAN, разполагаме с ограничен бюджет но трябва да реализираме по някакъв начин филтриране на трафика от и към интернет. Един от възможните варианти е да направим 'интелигентен' комутатор (switch) използвайки Линукс (фиг2). В нашия случай той ще има само два порта и ще служи да отдели локалната мрежа от рутера на ISP, който би трябвало да се явява шлюз по подразбиране (default gateway) за потребителите в LAN. По този начин IP пакетите ще се преглеждат съгласно правила зададени от нас, при което ще преминат само тези които ние искаме. Чрез настройката на прокси сървър бихме могли да отидем по-далече и да филтрираме определено съдържание на някои сайтове, например всички mp3 файлове от free.xxx.bg. Можем също да определим и скоростта с която ще се свалят определени файлове т.е. можем да определим скорост от 1 кб/с за mp3 файловете на free.xxx.bg и 10 кб/с за html документите от същия сайт. Забележете, че не се налага да се преконфигурират машиниите в LAN, нито рутера на ISP. Възможно е машината която ще ползваме да работи без да е конфигурирана с IP адрес. В този случай линукс-суича, ще има конфигуриран IP адрес за да се администрира отдалечено. При по-параноична конфигурация е възможно това да не се прави.



2. Инсталация

2.1. Подготовка

Следващите стъпки са реализирани под Slackware с ядро 2.4.24

необходими са ни:

Инсталирана система; компилатор; работещи мрежови контролери (NIC) eth0, eth1 ;-)

изходния код на ядрото

brctl

ebtables

2.2. Ядро: кърпене, конфигуриране, компилиране, инсталация.

За да може iptables да 'вижда' IP пакетите (3-ти слой от OSI модела) който 'преминават' опаковани като фреймове през бриджа (2-ри слой от OSI модела) за ядра от серията 2.4 е необходимо да се пачне ядрото на Линукс. За целта декомпресирайте ebtables в /usr/src/linux , след което:

root@fw:/usr/src/linux# patch -p1 -i ebtables-brnf-5_vs_2.4.24.diff

root@fw:/usr/src/linux# make menuconfig

В networking options

Избираме Network packet filtering (replaces ipchains)

и 802.1d Ethernet Bridging

компилираме

root@fw:/usr/src/linux# make clean && make dep && make bzImage && make modules

Инсталираме новото ядро и модулите към него, преглеждаме /etc/lilo.conf изпълняваме:

root@fw:/usr/src/linux# /sbin/lilo

Рестартираме системата.

    2.3. Brctl: конфигуриране, компилиране, инсталация.

root@fw:/tmp# tar -xzvf bridge-utils-0.9.6.tar.gz

root@fw:/tmp# cd bridge-utils

root@fw:/tmp/bridge-utils# ./configure

root@fw:/tmp/bridge-utils# make all

root@fw:/tmp/bridge-utils# make install

    2.4. Squid: конфигуриране, компилиране, инсталация.

Squid е кеширащ http прокси сървър с богат набор от функции. Следващите стъпки не са задължителни ако не желаете да инсталирате Squid .

root@fw:/tmp# tar -xzvf squid-2.5.STABLE5.tar.gz

root@fw:/tmp# cd squid-2.5.STABLE5

root@fw:/tmp/squid-2.5.STABLE5# ./configure --prefix=/usr/local/squid --enable-delay-pools –enable-linux-netfilter

root@fw:/tmp/squid-2.5.STABLE5# make all

root@fw:/tmp/squid-2.5.STABLE5# mkdir /usr/local/squid

root@fw:/tmp/squid-2.5.STABLE5# chown nobody /usr/local/squid

root@fw:/tmp/squid-2.5.STABLE5# su nobody

nobody@fw:/tmp/squid-2.5.STABLE5$ make install

nobody@fw:/$ exit

  • Настройки

    3.1. Настройка на бриджа.

    Създаваме скрипта /etc/rc.d/rc.bridge

    #!/bin/sh

    #

    # /etc/rc.d/rc.bridge.

    BRVER="0.0.1"

    #

    BRCTL="/usr/local/sbin/brctl"

    IFCONFIG="/sbin/ifconfig"

    ROUTE="/sbin/route"

    #

    BR="br_fw"

    INTIF0="eth0"

    EXTIF0="eth1"

    BRIP="10.4.9.5"

    BRNET="10.4.9.0"

    BRMASK="255.255.255.0"

    BRBRC="10.4.9.255"

    BRGW="10.4.9.1"

    #

    echo "Starting brige $BRVER ... "

    #

    $IFCONFIG $INTIF0 0.0.0.0

    $IFCONFIG $EXTIF0 0.0.0.0

    #

    $BRCTL addbr $BR

    $BRCTL addif $BR $INTIF0

    $BRCTL addif $BR $EXTIF0

    #

    $IFCONFIG $BR up

    $IFCONFIG $BR $BRIP netmask $BRMASK broadcast $BRBRC

    $ROUTE add default gw $BRGW

    $IFCONFIG

    $ROUTE

    $BRCTL show

    #

    След което го стартираме:

    root@fw:/etc/rc.d# ./rc.bridge

    Може да добавим следното в /etc/rc.d/rc.inet1

    /etc/rc.d/rc.brige

    с цел автоматично изпълнение на скрипта при старт на машината. Разбира се добре е да съобразите кога ще стартирате /etc/rc.d/rc.firewall ! Може да направите start i stop функции и т.н. В случая няма значение.

    Вече би трябвало да имаме работещ бридж с два физически интерфейса eth0 – към локалната мрежа и eth1 – към ISP рутера, един логически административен адрес 10.4.9.5

      3.2. Настройка на IP филтър с iptables.

    Тук вече всичко е в ръцете Ви.

    Пример А Този пример изисква работещ Squid!

    root@fw:/etc/rc.d# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

    root@fw:/etc/rc.d# iptables -A FORWARD -i eth1 -p tcp --dport 80 -j DROP

    С горните два реда ще пренасочим IP пакетите идващи от локалната мрежа и отиващи към 80-и порт(http) на машини извън LAN към 8080-и порт на бридж машината и ще забраним всички пакети пристигащи от вън и отиващи към 80-и порт в LAN . Резултатът може да проверите чрез смяна на кабелите на двете мрежови карти.

    Пример Б

    root@fw:/etc/rc.d# iptables -P INPUT DROP

    root@fw:/etc/rc.d# iptables -A INPUT -i eth1 -p tcp -s 10.4.10.2 --dport 22 -j ACCEPT

    root@fw:/etc/rc.d# iptables -A INPUT -i eth0 -p tcp -s 10.4.9.2--dport 22 -j ACCEPT

    С този пример забраняваме на всички освен на машини с мрежови адреси 10.4.10.2 и 10.4.9.2 да се свързват на 22-и порт на бридж машината (SSH). Забележете, че по подразбиране всички пакети които не са изрично приети, ще бъдат отшвърлени т.е. в този случай връзки към други портове няма да са възможни.


      3.3. Настройка на Squid

    Използването на Squid в този случай е по скоро показателно отколкото наложително. Целта му е да допълни функционалността на iptables, това се постига чрез доста удобния (поне за мен) начин за филтриране на url, delay_pools и т.н. Той е гъвкъв и може да се настрои да работи само като url филтър без да кешира каквото и да е ! Друг вариант е да се ползва отделна машина за прокси сървър.

    За да работи като transparent proxy не трябва да се забрави

    httpd_accel_port 80

    httpd_accel_with_proxy on

    httpd_accel_host virtual

    httpd_accel_uses_host_header on

    в /usr/local/squid/etc/squid.conf.

    Пример А

    #

    acl Webs05 dstdomain .microsoft.com .msn.com .msn.net

    acl Webs50 dst 0.0.0.0/0.0.0.0

    #

    acl Hosts50 src 10.42.9.0/255.255.255.0

    acl Hosts90 src 10.42.9.2/255.255.255.255

    #

    acl Conn50 maxconn 6

    #

    http_access deny Hosts50 Webs05

    http_access allow Hosts90 Webs50

    http_access allow Hosts50 Webs50 !Conn50

    http_access deny all

    По този начин ще направим следното: 1. Ще забраним достъпа до microsoft.com и производни, 2 Ще разрешим на всички в локалната мрежа достъп до всички сайтове с максимум 6 връзки едновременно (за 1 IP) (Освен Hosts90). Забележете, че msn.com, msn.net и microsoft.com няма да са достъпни!

    Пример Б

    acl Hosts90 src 10.42.9.2/255.255.255.255

    #

    acl Words50 url_regex -i ftp .exe .mp3 .wav .avi .mov .mpeg .iso .rar .zip .ace delay_pools 1
    #
    delay_class 1 2
    delay_access 1 allow Words50 !Hosts90
    delay_parameters 1 -1/-1 1000/10000
    #

    По този начин ще ограничим всички потребители освен 10.42.9.2 да теглят mp3 и подобни със скорост 1000 байта/с.

      4. Заключение

    При направените тестове с 2 правила в iptables на AMD K6II – 300 Mhz 128 MB RAM 2x RTL8139D бяха измерени Total rates:1648.7 kbytes/sec, 1529.8 packets/sec. При CPU states: 9.0% user 88.2% system 0.0% nice 0.0% iowait 2.6% idle . Iptraf натоварваше с около 20% системата, т.е. е възможно да се постигнат по-добри резултати при неговото изключване.




    << Мултимедийна станция с Linux | PPPoE и споделяне на интернет достъп >>