22.10.2008

Firewall + transparent squid на FreeBSD 7.0

Качаем и устанвливаем по хэндбуку, ничего сложного там нет. Когда дойдете до выбора пакетов выбрать kernel-developer (вроде бы так называется). Ну естественно разрешить логин по ssh и настроить сетку тоже лучше с самого начала.

Заходим в /sys/i386/conf/ (надеюсь вы установили исходники ядра )
#cd /sys/i386/conf
#
cp GENERIC /root/FIREWALL
#копируем конфиг ядра в рутовую папку, пусть он там валяется
#ln -s /root/FIREWALL #делаем символьную ссылку в /sys/i386/conf

Дописываем в конец нашего конфига ядра (на лисяре есть хорошая статья по конфигурации ядра)
#ee /root/FIREWALL
#my conf
options INCLUDE_CONFIG_FILE
#firewall
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=5
options IPFIREWALL_FORWARD
options IPDIVERT
options DUMMYNET
options IPFIREWALL_NAT #ipfw kernel nat support
options LIBALIAS
#options IPFIREWALL_DEFAULT_TO_ACCEPT
Опции нужны для файрвола, описывать их все мне лень.

Дальше заходим и пишем в /etc/make.conf (перед этим лучше ознакомиться со статьей, но имейте ввиду, что там конфигурация для версии 6.0)
#ee /etc/make.conf
CPUTYPE?= #смотри man make.conf
CFLAGS=-O1 -pipe #опции оптимизации
CFLAGS+= -DIPFIREWALL_NAT
NO_PROFILE=true
NO_CPU_CFLAGS=false
NO_CPU_COPTFLAGS=false

COMPAT4X=true

#чтоб не собирать всякую хрень
MAKE_KERBEROS4=false
MAKE_KERBEROS5=false
NO_GAMES=true
NO_BLUETOOTH=true
NO_DICT=true
NO_INET6=true

#опции для перла
PERL_VER=5.8.8
PERL_VERSION=5.8.8
PERL_ARCH=mach
NOPERL=no
WITH_PERL=yes
WITHOUT_PERL=no
WITH_BIND_LIBS=yes

DOC_LANG= en_US.ISO8859-1 ru_RU.KOI8-R
#опции для апдейта
SUP_UPDATE=
SUP= /usr/bin/csup
SUPFLAGS= -g -L 2 -z
SUPHOST= cvsup4.ru.FreeBSD.org
SUPFILE= /usr/share/examples/cvsup/standard-supfile
PORTSSUPFILE= /usr/share/examples/cvsup/ports-supfile
DOCSUPFILE= /usr/share/examples/cvsup/doc-supfile

KERNCONF=FIREWALL #или имя конфига вашего ядра

#можно указать локальное зеркало
MASTER_SITE_OVERRIDE?= \
ftp://my.local.mirror/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/


Создаем и редактируем /etc/src.conf
#ee /etc/src.conf
WITHOUT_DICT="yes"
WITHOUT_GAMES="yes"
WITHOUT_HTML="yes"
WITHOUT_INET6="yes"
WITHOUT_INET6_SUPPORT="yes"
WITHOUT_USB="yes"
WITHOUT_X11="yes"
NO_BLUETOOTH="yes"
KERNCONF=FIREWALL

Дальше добавляем строчки файрвола в /etc/rc.conf (опять шлю на лисяру)
#ee /etc/rc.conf
firewall_enable="YES"
firewall_type="/etc/rc.firewall"
firewall_logging="YES"
gateway_enable="YES"

Пишем скрипт для запуска файрвола указаный в /etc/rc.conf (просто привожу сдесь свой, для прозрачного проксирования на сквида, за разьяснениями см статью выше)
 
#ee /etc/rc.firewall
#!/bin/sh
FwCMD="/sbin/ipfw"
LanOut="rl0" #out interface
LanIn="fxp0" #in interface
IpOut="10.83.32.24" #out ip
IpIn="192.168.0.1" #in ip
NetMask="24" #my mask
NetIn="192.168.0.0" #inner network
#ip_lan="192.168.0" #template for users ip address
${FwCMD} -f flush
${FwCMD} add check-state
#rules for local interface
${FwCMD} add allow ip from any to any via lo0
${FwCMD} add deny ip from any to 127.0.0.0/8
${FwCMD} add deny ip from 127.0.0.0/8 to any
#go to squid
${FwCMD} add 10 fwd 127.0.0.1,3128 tcp from ${NetIn}/${NetMask} to any 80 via ${LanOut}
#allow all established conections
${FwCMD} add allow tcp from any to any established
#allow all in trafic (for server)
${FwCMD} add allow ip from ${IpOut} to any out xmit ${LanOut}
#allow DNS
${FwCMD} add allow udp from any 53 to any via ${LanOut}
#allow ftp
${FwCMD} add allow tcp from any to ${IpOut} 21 via ${LanOut}
${FwCMD} add allow tcp from any to ${IpOut} 49152-65535 via ${LanOut}
#allow ssh
${FwCMD} add allow tcp from any to ${IpOut} 22 via ${LanOut}
#allow all tcp for LanIn
${FwCMD} add allow tcp from any to any via ${LanIn}
#allow all udp for LanIn
${FwCMD} add allow udp from any to any via ${LanIn}
#allow all icmp for LanIn
${FwCMD} add allow icmp from any to any via ${LanIn}
#allow icq
${FwCMD} add allow tcp from ${NetIn} to any 5190 in via ${LanIn} setup
#NAT rules
NatIP="10.83.32.24"
${FwCMD} nat 123 config ip ${NatIP} log
${FwCMD} add 20 nat 123 ip from 192.168.0.0/24 to any
${FwCMD} add 30 nat 123 ip from any to ${NatIP}
#deny for all
#${FwCMD} add deny ip from any to any (можно не прописывать так как это правило собирается по дефолту если не указано обратное)

Ставм cvsup

#cd /usr/ports/net/cvsup-without-gui
#make install clean
Теперь апдейтимся (перед этим лучше прочесть хэндбук)
#cd /usr/src
#make update
обновляет системные исходники и дерево портов, займет довольно много времени, но без апдейта у меня многие порты не собирались, да и вообще свежачок
# rm -rfv /usr/obj #удаляем ненужный хлам
# make -j4 buildworld
# make -j4 buildkernel
собираем ядро и мир
# make installkernel
ставим ядро
#reboot
грузимся с новым ядром
#shutdown now (или при загрузке выбрать 4й пункт)
входим в сингл юзер моде (при этом сетка как и все сервисы вырубится так что по ssh сидеть не получится, придется перется к серваку)
# mount -u /
# mount -a
монтируем корень и остальную хрень
# mergemaster -p (можно и не делать)
# cd /usr/src
# make installworld
устанавливаем мир
#make delete-old
удаляем старье всякое
# mergemaster
# reboot
ребутаемся и грузмся обновленными
# cd /usr/src
# make delete-old-libs
удаляем старые библиотеки
Все, с обновлением пока покончили, теперь ставим сквида

#cd /usr/ports/www/squid30/
#make config
В менюшке выбираем SQUID_IPFW для поддрежки прозрачного прокси и можно еще SQUID_ICAP если потом захочется прикрутить антивирус. Далле
#make install clean
открываем /etc.rc.conf и добавляем туда squid_enable="YES"
Редактируем /usr/local/etc/squid/squid.conf, нас инткересуюи теги acl и http_access , можно их просто олностью удалить и вместо них написать
include /usr/local/etc/squid/acl.conf
include /usr/local/etc/squid/http_access.conf
и создать эти два файла
#ee include /usr/local/etc/squid/acl.conf
# TAG: acl
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8
acl localnet src 192.168.0.0/24 # RFC1918 possible internal network
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT

#ee /usr/local/etc/squid/http_access.conf
# TAG: http_access
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access deny to_localhost
http_access allow localnet
http_access deny all

Осталось только создать кэш сквида
#squid -z
И запустить
#squid
Все


Комментариев нет: