на главную ] 

Шлюз в 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
При использовании материалов этого сайта, пожалуйста вставляйте в свой текст ссылку на мою статью.