Настройка интернет-шлюза на ОС FreeBSD
Настройка шлюза на FreeBSD 5.4
В статье предлагается решение для организации совместного доступа к Интернет-каналу с учетом трафика и прокси-сервером
Задача
- организовать доступ в Интернет пользователям локальной сети
- Вести учёт трафика: всего + отдельно web (кто, сколько и где был в Интернете)
- Сократить затраты на Интернет путём использования прокси сервера.
"#" - команды
"//" - комментарии.
Часть 1 Начнём с установки FreeBSD
Вставим установочный диск в CD-ROM, в BIOS выставим загрузку с CDROM.
После загрузки выберем Express -> Kernel-Developer
Ответим положительно на вопрос является ли машина шлюзом в Интернет
Ответим положительно на о запуске INETD
После установки извлечём диск из CDROM и перегрузимся.
Часть 2 Сборка ядра.
После перезагрузки войдём в систему как root
Изменим пароль root
# passwd
Перейдём в каталог /usr/src/sys/i386/conf
# cd /usr/src/sys/i386/conf
Создадим копию конфигурационного файлы ядра
# cp GENERIG GATEWAY
Отредактируем файл под наши нужды
# ee GATEWAY
Добавляем следующие опции в файл GATEWAY
ident GATE
//Firewall
options IPFIREWALL //firewall
options IPFIREWALL_DEFAULT_TO_ACCEPT //allow everything by default
//IPDIVERT система NAT
options IPDIVERT //divert sockets
Собираем
# config GATEWAY
# cd ../compile/GATEWAY
# make depend all install
# shutdown -r now
Устанавливаем временную зону во FreeBSD и точное время в BIOS.
Редактируем файл /etc/rc.conf
# ee /etc/rc.conf
defaultrouter="192.168.5.1" //Шлюз провайдера
hostname="gate.plc.net" //Имя компьютера
gateway_enable="YES" // Компьютер является шлюзов в интернет
ifconfig_rl0="inet 192.168.0.250 netmask 255.255.255.0" //Внутренний интерфейс
ifconfig_rl1="inet 192.168.5.15 netmask 255.255.255.0" //внешний интерфейс
firewall_enable="YES" //Включение firewall
#firewall_type="OPEN" //Если не хотите его настраивать или не нет в этом необходимости можно сделать его открытым т.е. пропускающим все пакеты
firewall_script="/etc/firewall.sh" //Настройки firewall (либо firewall_type="OPEN")
natd_enable="YES" // Включаем NAT
natd_interface="rl1" // NAT вешаем на внешний интерфейс
natd_flags=""
sendmail_enable="NONE" //отключаем sendmail
usbd_enable="YES" //Включаем поддержку USB если нужно
linux_enable="YES" //Включаем поддержку Linux если нужно
trafd_enable="YES" // Включаем поддержку trafd
trafd_ifaces="rl0 rl1" //Вешаем его на внутренний и внешний интерфейс
trafd_flags=""
trafd_log="/usr/local/var/trafd.log" //логи trafd
inetd_enable="YES" //Включаем суперсервер INETD
отключим sendmail
# chmod -x /etc/rc.d/sendmail
Создадим /etc/firewall.sh
#ee /etc/firewall.sh
Содержание файла /etc/firewall.sh
#!/bin/sh
/sbin/ipfw -f flush
/sbin/ipfw add 1000 pass all from any to any via lo0
/sbin/ipfw add 1100 deny all from any to 127.0.0.0/8
/sbin/ipfw add 1200 deny icmp from any to any frag
/sbin/ipfw add 1300 deny icmp from any to any in icmptype 5,9,13,14,15,16,17
/sbin/ipfw add 1400 deny tcp from any to any not established tcpflags fin
/sbin/ipfw add 1500 deny tcp from any to any tcpflags fin,syn,rst,psh,ack,urg
/sbin/ipfw add 1600 deny tcp from any to any tcpflags !fin,!syn,!rst,!psh,!ack,!urg
/sbin/ipfw add 4000 deny udp from any 137-139 to any via rl0
/sbin/ipfw add 4100 deny udp from any to any 137-139 via rl0
/sbin/ipfw add 5000 divert natd ip from 192.168.0.0:255.255.255.0 to any out xmit rl1
/sbin/ipfw add 5100 divert natd ip from any to 192.168.5.15
#/sbin/ipfw add 5200 deny all from 192.168.0.0/24 to not 192.168.0.0/24 80
/sbin/ipfw add 5500 deny all from 192.168.0.0/24 to not 192.168.0.0/24 80,21,443
/sbin/ipfw add 6000 allow all from any to any
Сделаем файл исполняемым
# chmod 100 /etc/firewall.sh
Часть 4 Настройка FTP (отчеты будем забирать по FTP)
Редактируем /etc/inetd.conf
# ee /etc/inetd.conf
Раскомментируем строчку
ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l
Создадим файл /etc/ftpchroot
//Туда пишем пользователей чтобы они не вышли за пределы домашнего каталога
# ee /etc/ftpchroot
Добавим в него пользователя stat
Добавим пользователя stat в систему
# adduser
Часть 5 Установка приложений
Далее ставим прокси сервер SQIOD
# cd /usr/ports/www/squid
# make
# make install
Базовая настройка прокси сервера
Для этого отредактируем файл /usr/local/etc/squid/squid.conf
#ee /usr/local/etc/squid/squid.conf
http_port 192.168.0.250:8080
cache_mem 64 MB
cache_dir ufs /usr/local/squid/cache 3072 16 256
cache_access_log /usr/local/squid/logs/access.log
cache_log /usr/local/squid/logs/cache.log
cache_store_log /usr/local/squid/logs/store.log
//Access control
//если acl выноситься в отдельный файл то необходимо указывать путь к файлу в кавычках.
acl InternetUsers src "/usr/local/etc/squid/InternetUsers"
//http access
http_access allow InternetUsers
http_access deny all
//And finally deny all other acces to this proxy
http_access allow InternetUsers
http_access deny all
Добавим параметр
visible_hostname InternetServer // В имени не использовать пробелы.
Далее поменяем страницу с ошибками
//error_directory
error_directory /usr/local/etc/squid/errors/Russian-1251
Теперь создадим файл с пользователями Интернет
# ee /usr/local/etc/squid/InternetUsers
добавим в него нашу локальную сеть 192.168.0.0/24
Создадим swap директорию
# /usr/local/sbin/squid -z
Добавим SQUID в автозагрузку (в /etc/rc.conf)
squid_enable=YES
Запустим squid
# /usr/local/sbin/squid -D
Добавим записи о DNS серверах
# ee /etc/resolv.conf
nameserver 82.1.2.3 // DNS провайдера
После перезагрузки прокси сервер и шлюз должны работать.
Для получения данных о всех прошедших пакетах через ваш шлюз воспользуемся trafd
# cd /usr/ports/net-mgmt/trafd
# make
# make install
#
Соберем генератор отчетов по работе SQUIDа
# cd /usr/ports/www/sarg
# make
# make install
Настроим SARG
#ee /usr/local/etc/sarg/sarg.conf
//Установим язык который будет использоваться в отчётах
language Russian_windows1251
//Лог по которому строиться отчёт
access_log /usr/local/squid/logs/access.log
//Заголовок отчётов
title "Internet Statistic Server"
//Директория где будут храниться отчёты
output_dir /usr/ftp/html/squid-reports
//Дата в формате день месяц год
date_format e
//Топ 200 сайтов
topsites_num 200
//Заменим IP адреса именами пользователей
usertab /usr/local/etc/sarg/usertab
//Установим кодировку отчёта
charset Windows-1251
Настроим сохранения статистики trafd и генерации отчетов SARG
//Crontab это планировщик заданий.
//Параметры минута, час, число, месяц, день недели, выполняемый скрипт или команда.
//Crontab -e начало редактирование планировщика для выполнения заданий с правами текущего пользователя.
#crontab -e
0 8,12,16,20 * * 1-7 /usr/local/bin/trafsave rl0 rl1
10 9,17 * * 1-7 /usr/local/bin/sarg
Включаем ротацию логов squid первого числа каждого месяца
//Crontab -u squid -e начало редактирование планировщика для выполнения заданий с правами пользователя squid.
# crontab -u squid -e
0 0 1 * * /usr/local/sbin/squid -k rotate
Просмотр информации собранной trafd и сохранённой trafsave осуществляется программой traflog
P.S. прошу не судить строго это первый опыт написание статьи
Список источников
- Журнал информационных технологий CHIP Special 8/2004(17).
- Дмитрий Новиков ( is@nnz.ru) , "" 03/05/2005.
- (IPFW firewall FreeBSD)
- Игорь Чубин Журнал системный администратор №6(7) июль 2003 стр. 26-34
- Сергей Яремчук Журнал системный администратор №7(8) июль 2003 стр. 44-47
- Сергей Супрунов Журнал системный администратор №4(17) апрель 2004 стр. 10-14
Статья взята с сайта OpenNet.ru