[ на главную ]

Шлюз в internet для небольшой LAN

Евгений Борисов

воскресенье, 27 февраля 2005 г.

1 Постановка задачи

Организовать шлюз в internet для небольшой сети.

2 Решение

2.1 Программное обеспечение и аппаратура

Первое что необходимо сделать это выбрать программное обеспечение и аппаратуру. В качестве основного ПО будем использовать средства OS FreeBSD [ 1 ]. Из оборудования для шлюза, кроме собственно компьютера, понадобится: модем (лучше внешний) и сетевая карта.

2.2 dialup

Для подключения к internet через модем обычно используют одну из двух программ ppp или pppd .

2.2.1 вариант I: ppp

Пример файла настроек /etc/ppp/ppp.conf .

Для подключения достаточно выполнить команду ppp (правами на использование этой программы в системе обладает группа network ).

2.2.2 вариант II: pppd

Для работы pppd необходимо включить в конфигурацию ядра опцию pseudo-device ppp 1 .

Пример настроек:

  1. основной конфигурационный файл /etc/ppp/options .

  2. скрипт установления соединения /etc/ppp/dial.sh .

  3. файл паролей /etc/ppp/pap-secrets .

  4. Для подключения к internet достаточно выполнить команду pppd (правами на использование этой программы в системе обладает группа dialer ). Для автоматического запуска демона pppd можно положить в /usr/local/etc/rc.d/ скрипт pppd.sh

Далее настроим фильтр сетевых пакетов (firewall).

2.3 Сетевая безопасность

2.3.1 общие рекомендации по сетевой безопасности

Основной принцип [ 2 ] - ''сервера это двери''.
Посмотреть список ''открытых дверей'' можно с помощью :

netstat -na | grep LISTEN

Все что ''слушает'' сеть ( ftpd, inetd, sendmail etc.) должно быть, по возможности, отключено, локализовано или спрятано за firewall.

2.3.2 установка firewall

firewall это фильтр сетевых пакетов, который пропускает или отбрасывает пакеты согласно системе правил в файле конфигурации. Необходимо включить в ядро следующие параметры:

 
options    IPFIREWALL
options    IPFIREWALL_VERBOSE
options    IPFIREWALL_VERBOSE_LIMIT=100

Чтобы включить межсетевой экран, в файл /etc/rc.conf добавим :

 
firewall_enable="YES"
firewall_type="simple"
firewall_quiet="YES"

Далее поместим правила фильтрации пакетов [ 5 ] в /etc/rc.firewall
интерфейсы: внешний (модем) - tun0 , внутренний (сетевая карта) - vx0
DNS провайдера: 195.5.27.244, 195.5.6.10

2.3.3 тестирование

Чтобы проверить безопасность сети, вы можете просканировать её извне, например при помощи Sygate Online Services [ 6 ]. Попробуйте сканирование как со шлюзовой машины, так и с других машин вашей сети.

Описанных в настроек достаточно чтобы успешно соединятся с internet . Далее настроим собственно шлюз, рассмотрим механизм преобразования сетевых адресов (nat) и кеширующий прокси (squid).

2.4 Шлюз

Доступ в internet для других машин в сети можно организовать по разному, далее рассмотрим два варианта - nat и squid.

2.4.1 вариант I: преобразования сетевых адресов - nat

Первый вариант организации работы это шлюз сетевого уровня. Для этого необходимо включить маршрутизацию (gateway) и механизм преобразования сетевых адресов (nat), чтобы все узлы могли ходить в сеть используя один ip, выданный провайдером при соединении.

Этот вариант относительно прост и нетребователен к ресурсам машины, в такой конфигурации система может успешно работать даже на компьютере с 486 процессором.

Для успешного функционирования шлюза, ip-адреса в LAN должны иметь вид 192.168.x.x .

  1. Необходимо включить в ядро параметр options IPDIVERT .
  2. Чтобы включить шлюз добавим в файл /etc/rc.conf :
     
    gateway_enable=''YES''
    natd_enable=''YES''
    natd_interface=''tun0''
    natd_flags=''-dynamic''
    
  3. Если уже используется встроенный в ppp nat , то нужно его выключить, так как здесь используется natd ; проверим что файл /etc/ppp/ppp.conf НЕ содержит :
    nat enable yes
    
    а файл /etc/rc.conf НЕ содержит:
    ppp_nat="YES"
    
  4. в файл конфигурации fierwall /etc/rc.firewall перед правилами фильтрации пакетов, надо вставить строку:
    $fwcmd add divert natd all from any to any via tun0
    

  5. Последний шаг - на всех машинах в LAN добавим шлюз по умолчанию - локальный ip-адрес данного узла с FreeBSD и DNS - DNS провайдера. Его можно узнать так : запустим ppp , после соединения скажем
    PPP ON node2> show ipcp
    

2.4.2 вариант II: кеширующий прокси - squid

Второй вариант организации работы это шлюз уровня приложений. Для этого нам понадобится т.н. кеширующий прокси сервер - squid[ 7 ]. Использование этого варианта дает нам достаточно мощный и гибкий инструмент для управления доступом пользователей в internet . К примеру, можно делить пользователей на группы, предоставляя каждой группе доступ только к нужным ей ресурсам, отсекать рекламные банеры и доступ к нежелательным сайтам.

2.4.2.1 устанавливаем и настраиваем squid

  1. качаем, собираем и устанавливаем порт squid
       cd /usr/ports/www/squid && make all install clean
    

  2. настройка /usr/local/etc/squid/squid.conf

  3. инициализировать кеш:
    squid -z
    

  4. если до этого использовался nat
    то его и маршрутизацию можно выключить

    изменить /etc/rc.conf :

    gateway_enable="NO"
    natd_enable="NO"
    

    из /etc/rc.firewall убрать строку:

    $fwcmd add divert natd all from any to any via tun0
    

  5. запуск squid вручную
    /usr/local/etc/rc.d/squid.sh start
    

  6. для автоматического запуска squid поместить в /etc/rc.conf :
    squid_enable="YES"
    

  7. Последний шаг - в настройках браузера на всех машинах устанавливаем прокси - имя данного узла с FreeBSD, порт 3128.

2.4.2.2 эффективная фильтрация трафика - squidGuard

  1. качаем, собираем и устанавливаем порт squidGuard
       cd /usr/ports/www/squidGuard && make all install clean
    

  2. настройка /usr/local/etc/squid/squidGuard.conf

  3. проверяем права, по умолчанию процесс работает от squid:squid
       chown -R squid:squid /var/db/squidGuard
       chown  squid:squid /var/log/squidGuard.log
       chown  squid:squid /usr/local/squid/log/squidGuard.log
    

  4. проверка работы фильтра squidGuard :
       $ echo "http://www.sex.com - - GET"| squidGuard
       http://www.univ.kiev.ua -/- - GET
    

  5. добавить в /usr/local/etc/squid/squid.conf программу-фильтр:
    # использовать фильтр squidGuard
    redirect_program  /usr/local/bin/squidGuard
    # сколько экземрляров squidGuard запускать
    redirect_children 2 
    # работать только через squidGuard 
    redirector_bypass off
    

  6. перезапуск squid :
    /usr/local/etc/rc.d/squid.sh stop
    /usr/local/etc/rc.d/squid.sh start
    

  7. обновление баз для squidGuard можно скачивать отсюда [ 8 ]

    # распаковываем обновления
    cp blacklists.tar.gz /tmp && /tmp && tar -zxvf blacklists.tar.gz
    
    # будем обновлять базу porno
    cd /var/db/squidGuard/porno
    
    # обновляем список доменов
    cat /tmp/blacklists/porno/domains domains | sort | uniq > domains.1 
    mv domains.1 domains
    
    # обновляем список ссылок
    cat /tmp/blacklists/porno/urls urls | sort | uniq > urls.1 
    mv urls.1 urls
    
    # обновляем regexp'ы 
    cat /tmp/blacklists/porno/expressions expressions | sort | uniq > expressions.1 
    mv expressions.1 expressions
    
    # устанавливаем доступ к файлам
    chmod 750 domains urls expressions
    
    # генерируем базы
    cd .. ; squidGuard -C all
    
    # устанавливаем права
    chown -R squid:squid *
    

    после обновления баз надо перезапустить squid

Литература

1
FreeBSD - http://www.freebsd.org

2
Introduction to security under FreeBSD - man 7 security

3
М.Мошков ''Безопасность для интернет-дачников'' - http://lib.ru

4
Jan Stumpel ''Шокирующая уязвимость домашних сетей''
http://linux.zp.ua/doc/ru/gazette.linux.ru.net/lg65/articles/rus-stumpel.html

5
Marc Silver ''Dialup firewalling with FreeBSD''
http://www.freebsd.org/doc/en_US.ISO8859-1/articles/dialup-firewall/index.html

6
Sygate Online Services - http://scan.sygatetech.com

7
Squid Web Proxy Cache - http://www.squid-cache.org

8
squidGuard blacklists - ftp://ftp.teledanmark.no/pub/www/proxy/squidGuard/contrib/blacklists.tar.gz



Evgeny S. Borisov
2005-02-27
При использовании материалов этого сайта, пожалуйста вставляйте в свой текст ссылку на мою статью.