Подвожу итоги проведенной работы в виде полевых заметок собранных в блендере.Тема мануала:
Организовать шлюз в организации для раздачи Интернета от внешнего провайдера до оконечных пользователей. ОС шлюза Freebsd, фаервол IPF, инет раздается пользователям через впн подключение пользователя к шлюзу, ВНП сервер использовал mpd5, он же отсылает поток логов по трафику встроенным инструментом ака netflow tools, поток собирает коллектор nfcapd, а демон nfdump анализирует и выдает отчеты по трафику.
[color=#FF0000]1 Устанавливаем Freebsd 8.2[/color]
1.1 http://forum.qwerty.ru/index.php?showtopic=231345&view=findp...
1.2 перед завершением установки оси нужно включить опцию изменения ядра http://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/kerne...
1.3 мои добавление в фаил ядра ( пункт 4 в статье http://forum.qwerty.ru/index.php?showtopic=231345&view=findp...). дописываем в конце файла
# Extended options max edite
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=999
options IPFIREWALL_FORWARD
options IPFILTER
options IPFILTER_LOG
options IPDIVERT
options DUMMYNET
options QUOTA
options DEVICE_POLLING # для поддержки polling'аoptions NETGRAPH
options NETGRAPH_PPP
options NETGRAPH_PPTPGRE
device if_bridge
#########################################
отступление
рекомендуется после установки оси обновить колекцию портов. я юзал следующие источки. они друг друга дополняют. но можно и не делать это. как показала практика у меня по почти все поставилось новое.
Вариант 1:http://www.opennet.dev/base/sys/port_upgrade.txt.html (у меня файлик не появился. я его взял вот от сюда server# cp /usr/share/examples/cvsup/stable-supfile /etc/)
для инфы http://www.freebsd.org/doc/ru/books/handbook/ports-using.html
нужно установить утилиту portupgrade
пример команд обновления одного порта в ручную:
rehash
pkg_version -v | grep "need"
portupgrade pkgname -r python26-2.6.6
---------------------------------------------
Варинат 2
# portsnap fetch
# portsnap extract
# portsnap update
При последующих запусках:
Код:
# portsnap fetch
# portsnap update
####################################################
[color=#FF0000]2 выполняем установку впн сервера mpd5.[/color]
2.1 ttp://www.lissyara.su/articles/freebsd/security/vpn_mpd5/ - по статье ставим mpd5 . до ходим до пункта "Настраиваем сжатие" и останавливаемся.
после установки mpd5 заливаем мой конфиг
/usr/local/etc/mpd5/mpd.conf
################################################################################
[quote]startup:
# Задаем пароль для доступа в web-intarface
# т.е меняем password на свой пароль
set user ads 12345 admin
# set user password cancer
# configure the console
set console self 127.0.0.1 5005
set console open
# configure the web server
set web self 192.168.33.2 5006
set web open
#--- куда сбрасывает ip/port
set netflow peer 127.0.0.1 9995
#--- период сброса статистики
set netflow timeouts 60 120
default:
load pptp_server
pptp_server:
# Определяем диапазон выдаваемых IP удалённым клиентам
# у меня с ...200 по ...220
set ippool add poolsat 172.180.180.50 172.180.180.150
# set nat enable
create bundle template B
set iface enable proxy-arp
set iface idle 0
set iface enable tcpmssfix
set ipcp yes vjcomp
# IP адрес сервера, который мы будем показывать клиентам
# в моем случае 172.21.19.211 (можно не реальный IP)
set ipcp ranges 172.180.179.1/24 ippool poolsat
# set ipcp ranges 172.180.179.50/24 192.168.33.210/24
# Здесь указываем DNS сервер
set ipcp dns 172.21.2.101
# Здесь указываем Wins сервер
# set ipcp nbns 192.168.10.1
# set iface enable netflow-in netflow-out nat
set iface enable netflow-in
set iface enable netflow-out
# Enable Microsoft Point-to-Point encryption (MPPE)
set bundle enable compression
set ccp yes mppc
set mppc yes compress e40 e56 e128 stateless
# Create clonable link template named L
create link template L pptp
# Set bundle template to use
set link action bundle B
# Multilink adds some overhead, but gives full 1500 MTU
set link enable multilink
set link yes acfcomp protocomp
set link no pap chap eap
set link enable chap
set link enable chap-msv1
set link enable chap-msv2
# We reducing link mtu to avoid GRE packet fragmentation.
set link mtu 1460
set link keep-alive 10 60
# Configure PPTP and open link
# Тут указываем IP сетевой карты или имя интерфейса (rl1) смотрящего в интернет
set pptp self 192.168.33.2
# Allow to accept calls
set link enable incoming[/quote]
#########################################################################################
/usr/local/etc/mpd5/mpd.secret
###################################################################################
#Пользователь Пароль Выдаваемый пользователю IPmax max 172.180.180.50
anton anton 172.180.180.51
andrey andrey 172.180.180.52
natasha natasha 172.180.180.53
# Этим 2 пользователям выдаются динамический IP адреса с ...200 по ...220
# т.е те которые в момент подключения не заняты
#user3 321 *
#user4 321 *
########################################################################################
[color=#FF0000]3 IFP+IPNAT[/color]
3.1. юзаем статья http://www.linuxcenter.ru/lib/articles/networking/freebsd_ga...
3.2 заливаем мои конфиги
* Коенчено в конфигах ставим свои ИП, сети и интерфейсы
/etc/rc.conf
######################################################################
# -- sysinstall generated deltas -- # Mon Jun 6 16:34:29 2011
# Created: Mon Jun 6 16:34:29 2011
# Enable network daemons for user convenience.
# Please make all changes to this file, not to /etc/defaults/rc.conf.
# This file now contains just the overrides from /etc/defaults/rc.conf.
defaultrouter="172.21.2.101"
gateway_enable="YES"
hostname="router"
ifconfig_em0="inet 172.21.2.2 netmask 255.255.255.0"
ifconfig_em1="inet 192.168.33.2 netmask 255.255.0.0"
#static_routes="net1"
#route_net1="-net 192.168.33.0 172.21.2.101"
#firewall_enable="YES"
#firewall_type="OPEN"
#tcp_drop_synfin="YES"
keymap="ru.koi8-r"
sshd_enable="YES"
mpd_enable="YES"
# -- IPF http://www.linuxcenter.ru/lib/articles/networking/freebsd_ga...
ipfilter_enable="YES" # Start ipf firewall
ipfilter_rules="/etc/ipf.rules" # loads rules definition text file
ipmon_enable="YES" # Start IP monitor log
ipmon_flags="-Ds" # D = start as daemon
# s = log to syslog
# v = log tcp window, ack, seq
# n = map IP & port to names
ipnat_enable="YES" # Start ipnat function
ipnat_rules="/etc/ipnat.rules" # rules definition file for ipnat
#softflowd_enable="YES"
#softflowd_interfaces="ng0"
#softflowd_em0_collector="127.0.0.1:8787"
#softflowd_em1_collector="127.0.0.1:8787"
#softflowd_ng0_collector="172.21.2.244:9996"
#softflowd_em0_collector="172.21.2.244:9996"
#softflowd_em1_collector="172.21.2.244:9996"
#flow_capture_enable="YES"
#flow_capture_datadir="/var/netflow"
#flow_capture_remoteip="127.0.0.1"
#flow_capture_localip="127.0.0.1"
#flow_capture_port="8787"
#flow_capture_pid="/var/run/flow-capture/flow-capture.pid"
#flow_capture_flags="-n 287 -S 5"
в конфиге есть наработка по flow tools - она рабочая, н ов процессе работы я от нее отказался. закомментил.
########################################################################
/etc/ipf.rules
###############################################################################
# -- No restrictions on Loopback Interface [1]
pass in quick on lo0 all
pass out quick on lo0 all
# -- No restrictions on Local Interface [2]
pass in quick on em1 all
pass out quick on em1 all
# -- Let clients behind the firewall send out to the internet,
# -- and replies to come back in by keeping state [3]
pass out quick on em0 proto tcp all keep state
pass out quick on em0 proto udp all keep state
pass out quick on em0 proto icmp all keep state
# -- Let's people access the services running on
# -- this system [4]
#pass in quick on em0 proto tcp from any to any\
# port 30000 >< 50000 flags S keep state #PASV FTP
# FTP
#pass in quick on em0 proto tcp from any to any port = 21
# SSH
#pass in quick on em0 proto tcp from any to any port = 22
#pass in log quick on em0 proto icmp from any \
# Ping
#to 62.16.105.195/8 icmp-type 8 keep state
# DNS
#pass in quick on em0 proto tcp/udp from any to any port = 53
# WWW
#pass in quick on em0 proto tcp from any to any port = 80
#pass in quick on em0 proto tcp from any to any port = 443
# RAdmin
#pass in quick on em0 proto tcp from any to any port = 4899
# [traceroute to internal host 2nd stage: receiving error code of icmp-type 3
# (destination unreachable) and icmp-type 11 (time exceeded)]
#pass in quick on em0 proto icmp from any to any icmp-type 3 keep state keep frags
#pass in quick on emo proto icmp from any to any icmp-type 11 keep state keep frags
#pass in quick on em0 proto tcp from any to any port = 25 flags S keep state keep frags
#block out all
#block in all
block in quick on em0 all
block out quick on em0 all
#--- ipf.rules end
#Жмем Ctrl + c и пишем exit
#
#где,
#
# lo0 - устройство loopback.
# fxp0 - сетевая карта смотрящая во внутреннею сеть.
# em0 - сетевая карта смотрящая в Internet.
#
#[1] - устройство loopback должно быть обязательно разрешено все для правильной работы;
#[2] - ни каких запретов внутренней LAN;
#[3] - разрешить исходящие TCP, UDP & ICMP сессии с сохранением соединения;
#[4] - открыть порты на сетевые службы;
############################################################################
/etc/ipnat.rules
##################################################################################
#--- ipnat.rules begin#rdr em0 172.21.2.2/16 port 80 -> 192.168.0.5 port 80 tcp [1]
#rdr em0 62.16.105.195/32 port 4899 -> 192.168.0.5 port 4899 tcp
#map em0 172.21.0.0/8 -> 0/16 proxy port ftp ftp/tcp
#map em0 172.21.0.0/8 -> 0/16 portmap tcp/udp 1025:65000
#map em0 192.168.33.0/24 -> 0/32
map em0 172.180.180.0/24 -> 0/32
#map em0 192.168.33.0/24 -> 172.21.2.2/16
#--- ipnat.rules end
#[1] - переброска входящих соединений на внутренний WEB сервер. Тоже самое с портом 4899 для RAdmin;
#[2] - проксирование FTP входящих/исходящих запросов;
#[3] - распределяет все исходящие сессия на порты от 1025 до 65000;
#[4] - тоже что и [3], но перекидывает все исходящие без рамок на используемые поты для сессий (можно не указывать, работать все равно будет).
##########################################################################################
[color=#FF0000]4. Ставим коллектор и декриптор логов nfdump[/color]
4.1
router# whereis nfdump
nfdump: /usr/local/bin/nfdump /usr/local/man/man1/nfdump.1.gz /usr/ports/net-mgmt/nfdump
router# cd /usr/ports/net-mgmt/nfdump
router# make inastall clean
4.2 создаем каталог для логов
/var/netflow - например
Запуск колектора из командной строки nfcapd -z -w -D -T all -l /var/netflow/ -I any -S 2
отчет один из: nfdump -R /var/netflow/ -o extended -s srcip -s ip/flows -s dstport/pps/packets/bytes -s record/bytes
Примеры команд отчетов
маны по этому софту:
http://nfdump.sourceforge.net/
http://www.freebsd.org/cgi/man.cgi?query=nfcapd&apropos=0&se...
http://www.freebsd.org/cgi/man.cgi?query=nfdump&apropos=0&se...
4.3 ставим nfcapd в автозапуск при старте Оси
* Смотрим где у нас лежит запускной фаил службы и даем на ее прова запуска:
router# whereis nfcapd
nfcapd: /usr/local/bin/nfcapd /usr/local/man/man1/nfcapd.1.gz
router# chmod 777 /usr/local/bin/nfcapd
* создаем скрипт запуска в /etc/rc.d/имя_скрипта и наполняем его:
#!/bin/sh
/usr/local/bin/nfcapd -z -w -D -T all -l /var/netflow/ -I any -S 2
* даем права запуска
chmod 777 /etc/rc.d/имя_скрипта
* автозапуск я сделал при помощи Крона
/etc/crontab списываем спроку
#minute hour mday month wday who command
@reboot root sh /etc/rc.d/имя_скрипта
то есть задача крона говорит, что скрипт будет юзаца при загрузки ОСи.