| Построение шлюза в глобальную сеть на FreeBSD - это один из самых частых случаев использования этой системы. Основные плюсы данного решения это: стабильность, масштабируемость, устойчивость к высоким нагрузкам и естественно бесплатность всего используемого ПО. В этой заметке я опишу свой опыт развертывания Интернет-шлюза на FreeBSD 7.0 RELEASE amd64 с использованием межсетевого экрана IPFW, демона трансляции сетевых адресов natd и прокси-сервер squid. Начнем с установки IPFW. Для этого нужно пересобрать ядро с поддержкой нескольких функций. Заходим в директорию соответствующую архитектуре нашего процессора и делаем копию дефолтного ядра в ROUTER: # cd /usr/src/sys/amd64/conf Редактируем наше новое ядро и добавляем новые функции: cpu HAMMER makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols options IPFIREWALL # собственно файрволл Собираем и устанавливаем ядро: # cd /usr/src Добавляем в rc.conf строки: firewall_enable="YES" Перезагружаемся. Если все нормально, то в итоге у нас должен получиться Следущим этапом у нас будет установка прокси-сервера. # cd /usr/ports/www/squid Дальше редактируем конфигурационный файл сквида. У меня сейчас небольшая /usr/local/etc/squid/squid.conf # порт который слушаем # порт прозрачного прокси # список слов, которые будучи обнаруженными в URL # список ACL которые вызывают несовпадение с кэшем, # собственно - правило что не кэшируем # сколько отдаём ему памяти # Директория для кэша, числа - размер кэша в Mb, # лог доступа - первый параметр путь, второй - формат # лог активности менеджера хранилища. Показывает, какие # файл hosts, проверяемый при запуске. Из него берётся # директория где хранятся HTML c текстами ошибок #debug_options ALL,5 # порты на которе можно ходить пользователям # пользователи у которых просто интернет - с ограничениями # пользователи с полными парвами на доступ в инет # Описываем все сети все IP # описываем локалхост # запрещённые в URL выражения (для всего УРЛа) # запрещённые доменные имена # пользователи с ограниченным доступом в интернет, только # список сайтов для тех у кого их определённый набор # пользователи ICQ # Разрешаем доступ ко всему группе inet_full # Зарубаем запрещённые куски url, рубим рекламу если надо # Разрешаем асечный порт тем у кого есть аська # зарубаем запрещённые домены # зарубаем все порты проме safe_ports # разрешаем инет обычным пользователям # разрешаем инет ограниченным пользователям на разрешённые сайты # блокируем всё лишнее Вкратце по конфигу: слушаем как на стандартном порту, так и прикрутили Дальше создаем и заполняем содержимым все файлы, указанные в этом # chown -R squid:wheel /usr/local/squid Теперь опять вернемся к фаерволу. Он у нас есть, открытый - но толку-то от #!/bin/sh # Прежде, чем мы начнем, сбросим список # Установим префикс команды для набора правил # Нет запретов внутри интерфейса смотрящего в локальную сеть # Нет ограничений на Loopback интерфейсе # Рубим попытки lo0 куда-то лезть и откуда-то лезть на lo0 # отправляем всех на прозрачный squid # Входящий NAT # Позволяем пакету проходить, если предыдущий был добавлен в ############## Outgoing ################ # Исходящий PING # Исходящий NTP # Разрешаем DNS # Выпускаем пользователей в обход сквида # Разрешаем полный выход с сервака ############# Incoming ################ # Запрещаем весь входящий трафик из зарезервированных адресных пространств # Запрещаем ident # Запрещаем весь сервис Netbios. 137=имя, 138=дейтаграмма, 139=сессия # Входящий пинг, несколько типов # Разрешаем входящую www функцию, если есть вэб сервер # Разрешаем входящие безопасные SSH, номер порта лучше сменить # Разрешаем входящую почту SMTP, если есть почтовый сервер # Разрешаем входящую почту POP3, если есть почтовый сервер # Разрешаем RAdmin, номер порта лучше сменить # Разрешаем уже установленные соединения ########### Final ############### # рубим все, что не ушло в скип # Исходящий NAT # Выпускаем пакеты из скипа # Режем все лишнее с занесением в лог Меняем в rc.conf строчку firewall_type="open" на # nohup sh /etc/rules Все тщательно проверяем и приходим к выводу, что у нас не работает RAdmin =) Прокинуть порты на внутренние машины можно стандартными средствами natd, # cd /usr/ports/net/rinetd Правим его конфиг, у меня примерно так выглядит: /usr/local/etc/rinetd.conf 213.221.56.98 4899 192.168.0.100 4899 Добавляем его в rc.conf и стартуем: # echo 'rinetd_enable'="YES" > > rc.conf © Alchemist | |
| Категория: Интересные статьи | Просмотров: 332 | |
Главная » Интернет шлюз на FreeBSD