В этой короткой записке написано про установку Cake Billing на CentOS.
Cake Billing занимается учетом VPN PPTP трафика. Предназначение биллинга - учет трафика не большого офиса или домашней сети, что ясно написано на сайте разработчика - "for SOHO" (for Small Office/Home Office). Программа имеет следующие возможности, виды отчетов и минусы:
Возможности
- Учёт трафика
- Поддержка нескольких тарифов
- Ограничение доступа в интернет по расходу времени и трафика (концепция лицевого счёта и положительного баланса)
Виды отчетности
- Интенсивность расхода трафика (часы суток, дни недели, дни месяца)
- Объём израсходованного трафика (суммарный, пользователи) за календарные периоды (сутки, неделя, месяц)
- Объём израсходованного трафика (суммарный, пользователи) за заданный период
Минусы
- Максимальное количество клиентских машин по которым ведется учет трафика не превышает 253 компьютера
- Не которые сложности при установке веб сервера Resin
- При использовании шифрования возрастает нагрузка на процессор шлюза
- Точность подсчета трафика VPN, меньше чем у "Netflow"
Для установки данного биллинга, потребуется Linux машина с двумя сетевыми картами.
Процесс установки и настройки идет по следующей последовательности:
- Установка и настройка Postgres SQL
- Установка и настройка Radius сервер
- Установка и настройка PPP/PPTP
- Установка веб сервера Resin
- Установка Cake web интерфейса
Если у вас возникнут вопросы, документация находится тут: http://code.google.com/p/cakebilling/wiki/CakeToc
Устанавливаем и настраиваем БД Postgres:
# yum install postgresql postgresql-server perl-DBD-Pg -y
Создаем пользователя базы и саму базу для Cake:
# service postgresql start
# su postgres
bash-3.2$ > createuser -P -D -A cake
bash-3.2$ > password: cake
bash-3.2$ > createdb -O cake -E WIN cake
bash-3.2$ > createlang plpgsql cake
bash-3.2$ > exit
# nano /var/lib/pgsql/data/pg_hba.conf
local all all trust
host all 127.0.0.1/32 trust
host all all 10.168.50.0 255.255.255.0 trust
# service postgresql restart
Заливаем таблицы для созданной базы:
# wget http://cakebilling.googlecode.com/files/cake-v1.0.1.sql
# psql -Ucake -W -d cake -f cake-v1.0.1.sql
Password: cake
Проверяем базу, что получилось:
# psql -Ucake cake -c "select * from cake.users;"
# service postgresql restart
Устанавливаем Freeradius:
# yum install freeradius freeradius-postgresql -y
# wget http://pkgs.repoforge.org/radiusclient/radiusclient-0.3.2-0.2.el5.rf.i386.rpm
# rpm -ivh radiusclient-0.3.2-0.2.el5.rf.i386.rpm
Настройка Freeradius:
Правим файл /etc/raddb/radiusd.conf
## some need locations variables
# Различные файловые переменные.
# Приведено для gentoo.
# Если ставите из исходников,
# скопируйте эти переменные из
# /opt/freeradius/etc/raddb/radiusd.conf
prefix = /usr
exec_prefix = /usr
sysconfdir = /etc
localstatedir = /var
sbindir = /usr/sbin
logdir = ${localstatedir}/log/radius
raddbdir = ${sysconfdir}/raddb
radacctdir = ${logdir}/radacct
# Месторасположение конфигурационных и лог файлов.
confdir = ${raddbdir}
run_dir = ${localstatedir}/run/radiusd
#
# The logging messages for the server are appended to the
# tail of this file.
#
log_file = ${logdir}/radius.log
# Каталог с подгружаемыми модулями.
libdir = /usr/lib
# Месторасположение pid-файла. Содержащего идентификатор процесса.
pidfile = ${run_dir}/radiusd.pid
# Имя пользователя и группа от которых запускается FreeRADIUS
user = radiusd
group = radiusd
# Максимальное время (в секундах) используемое для обработки запроса.
max_request_time = 30
# Удалить запросы которые обрабатываются более чем max_request_time
delete_blocked_requests = no
# Время ожидания (в секундах) перед очисткой reply запроса отправленного NAS.
cleanup_delay = 5
# Максимальное количество запросов хранимых сервером. Это число должно быть равно количеству клиентов помноженному на 256.
# К примеру для четырех клиентов оно будет 1024.
max_requests = 5120
#Использовать все доступные интерфейсы.
bind_address = *
# Закрепить за FreeRADIUS конкретный port. Если указан ноль,
# то значение берется из /etc/services
port = 0
# Запретить/разрешить ip адреса в dns имена.
# Включение этой опции может сильно снизить производительность.
hostname_lookups = no
# Создавать/несоздавать отладочные файлы при падении сервера.
allow_core_dumps = no
# Разрешить использование регулярных выражений.
regular_expressions = yes
extended_expressions = yes
# Записывать полный User-Name аттрибут если найден в запросе.
log_stripped_names = no
# Записывать в лог попытки авторизации.
log_auth = yes
# Записывать в логи пароли при авторизации.
# log_auth_badpass - не корректные пароли
# log_auth_goodpass - корректные пароли
log_auth_badpass = yes
log_auth_goodpass = no
# Включить/выключить коллизию пользователей.
usercollide = no
# конвертировать логин и/или пароль до или после авторизации.
lower_user = no
lower_pass = no
## удалить пробелы в логине и/или пароле.
nospace_user = no
nospace_pass = no
# настройки безопасности от возможных DoS аттак.
security {
# Максимальное допустимое количество аттрибутов в RADIUS пакете.
max_attributes = 200
# Задержка (в секундах) перед отправкой Access-Reject пакета.
reject_delay = 1
# Не отвечать на запросы Status-Server
status_server = no
}
# Конфигрурация клиентов RADIUS сервера.
# Описывается в отдельном файле.
$INCLUDE ${confdir}/clients.conf
# Отключить snmp поддержку.
snmp = no
$INCLUDE ${confdir}/snmp.conf
# Настрока пула процессов.
thread pool {
# количество первоначально запущенных процессов.
start_servers = 5
# Максимально возможное количество процессов.
max_servers = 32
# Динамическая регулировка количества процессов.
min_spare_servers = 3
max_spare_servers = 10
# Количество принимаемых запросов процессом. МОжет помочь при утечках памяти в
# RADIUS сервере. Если выставить 300, процессы будут периодически перегружаться
# для уборки мусора.
max_requests_per_server = 0
}
# Секция конфигурации динамических модулей.
modules {
# Модуль PAP авторизации.
# Необходим для обработки запросов с PAP авторизацией.
# encryption_scheme указывает в каком виде хранятся пароли.
# clear - подразумевает в открытом виде.
pap {
encryption_scheme = clear
}
# Модуль CHAP авторизации.
# Необходим для обработки запросов с CHAP авторизацией.
# authtype подразумевает обработку запросов только с аттрибутом Auth-Type=CHAP
chap {
authtype = CHAP
}
# Модуль преобработки запросов.
# Т.е. перед авторизацией пакета.
preprocess {
# huntgroups - хинт группы см. файл huntgoups.
# hints - хинты.
huntgroups = ${confdir}/huntgroups
hints = ${confdir}/hints
# Обработка Cisco VSA.
with_cisco_vsa_hack = no
}
# Модуль Microsoft CHAP авторизации.
# Поддерживает так же еще и Microsoft CHAP v2
# authtype подразумевает обработку запросов только с аттрибутом Auth-Type=MS-CHAP
# use_mppe = no указывает на отсутствие шифрования VPN туннеля.
mschap {
authtype = MS-CHAP
use_mppe = no
}
# Модуль записей Livingston RADIUS типа.
# usersfile содержит авторизационные записи пользователей.
# Рекомендуется использовать только для тестов и выставления значений по умолчанию.
# acctusersfile содержит пользователей подлежащих учету (аккаунтингу).
# compat - совместимость. При использовании файлов только FreeRADIUS можно отключить.
files {
usersfile = ${confdir}/users
acctusersfile = ${confdir}/acct_users
compat = no
}
# Запись детального лога аккаунтинговых пакетов.
detail {
detailfile = ${radacctdir}/%{Client-IP-Address}/detail-%Y%m%d
detailperm = 0600
}
# Запись детального лога пакетов авторизации.
detail auth_log {
detailfile = ${radacctdir}/%{Client-IP-Address}/auth-detail-%Y%m%d
detailperm = 0600
}
# Запись детального лога reply пакетов.
#
detail reply_log {
detailfile = ${radacctdir}/%{Client-IP-Address}/reply-detail-%Y%m%d
detailperm = 0600
}
# Создать уникальный ключ для аккаунтинг сессии.
# Многие NAS повторно используют Acct-Session-ID.
# key перечисление аттрибутов для генерации Acct-Session-ID
acct_unique {
key = "User-Name, Acct-Session-Id, NAS-IP-Address, Client-IP-Address, NAS-Port"
}
# Конфигурация авторизации и аккаунтинга посредством СУБД
# содержится в отдельном файле cakesql.conf
$INCLUDE ${confdir}/cakesql.conf
}
# Авторизация
# сначала идет пакет передается в preprocess
# где может быть модифицирован.
# Далее chap mschap обрабатывают chap и mschap авторизацию.
authorize {
preprocess
chap
mschap
# Ведем логи пакетов авторизации.
auth_log
files
# отключаем авторизацию через sql
# сначала необходимо отладить проверить на уровне файлов.
#cake_sql
# включаем авторизацию через sql
cake_sql
}
authenticate {
Auth-Type PAP {
pap
}
Auth-Type CHAP {
chap
}
Auth-Type MS-CHAP {
mschap
}
}
# Преобразование аккаунтинговых пакетов.
preacct {
preprocess
}
#
# Секция ведения аккаунтинга.
#
accounting {
# Создание Acct-Session-Id если ваш NAS генрит их вполне корректно можете
# убрать.
acct_unique
# Создавать detail лог.
detail
# Помещать аккаунтинговые пакеты в СУБД
# cake_sql
# включаем помещение аккаунтинговых пакетов в СУБД
cake_sql
}
# Секция ведения логов reply-пакетов
post-auth {
# Вести детальный лог репли пакетов.
reply_log
}
Правим файл /etc/raddb/clients.conf
# секция описывает клиента c ip адресом 127.0.0.1.
# secret - секретное слово указывается еще на NAS желательно выбрать что-то отличное от test
# shortname - короткое имя используемое в качестве псевдонима.
# nastype - используется radcheck.pl т.е. внешним скриптом. В нашей системе оно используется.
# Поэтому выставленно other.
# Подобным же образом добавьте других клиентов.
client 127.0.0.1 {
secret = test
shortname = localhost
nastype = other
}
Скачиваем dictionary.ppp:
# cd /etc/raddb
# wget -c http://cakebilling.googlecode.com/files/dictionary.ppp
Редактируем /etc/raddb/dictionary:
$INCLUDE /usr/share/freeradius/dictionary
$INCLUDE /etc/raddb/dictionary.ppp
Редактируем /etc/radiusclient/dictionary:
#
# Updated 97/06/13 to livingston-radius-2.01 miquels@cistron.nl
#
# This file contains dictionary translations for parsing
# requests and generating responses. All transactions are
# composed of Attribute/Value Pairs. The value of each attribute
# is specified as one of 4 data types. Valid data types are:
#
# string - 0-253 octets
# ipaddr - 4 octets in network byte order
# integer - 32 bit value in big endian order (high byte first)
# date - 32 bit value in big endian order - seconds since
# 00:00:00 GMT, Jan. 1, 1970
#
# Enumerated values are stored in the user file with dictionary
# VALUE translations for easy administration.
#
# Example:
#
# ATTRIBUTE VALUE
# --------------- -----
# Framed-Protocol = PPP
# 7 = 1 (integer encoding)
#
#
# Following are the proper new names. Use these.
#
ATTRIBUTE Acct-Interim-Interval 85 integer
ATTRIBUTE Session-Octets-Limit 227 integer
ATTRIBUTE Octets-Direction 228 integer
ATTRIBUTE PPPD-Upstream-Speed-Limit 230 integer
ATTRIBUTE PPPD-Downstream-Speed-Limit 231 integer
ATTRIBUTE PPPD-Upstream-Speed-Limit-1 232 integer
ATTRIBUTE PPPD-Downstream-Speed-Limit-1 233 integer
ATTRIBUTE PPPD-Upstream-Speed-Limit-2 234 integer
ATTRIBUTE PPPD-Downstream-Speed-Limit-2 235 integer
ATTRIBUTE PPPD-Upstream-Speed-Limit-3 236 integer
ATTRIBUTE PPPD-Downstream-Speed-Limit-3 237 integer
ATTRIBUTE User-Name 1 string
ATTRIBUTE Password 2 string
ATTRIBUTE CHAP-Password 3 string
ATTRIBUTE NAS-IP-Address 4 ipaddr
ATTRIBUTE NAS-Port-Id 5 integer
ATTRIBUTE Service-Type 6 integer
ATTRIBUTE Framed-Protocol 7 integer
ATTRIBUTE Framed-IP-Address 8 ipaddr
ATTRIBUTE Framed-IP-Netmask 9 ipaddr
ATTRIBUTE Framed-Routing 10 integer
ATTRIBUTE Filter-Id 11 string
ATTRIBUTE Framed-MTU 12 integer
ATTRIBUTE Framed-Compression 13 integer
ATTRIBUTE Login-IP-Host 14 ipaddr
ATTRIBUTE Login-Service 15 integer
ATTRIBUTE Login-TCP-Port 16 integer
ATTRIBUTE Reply-Message 18 string
ATTRIBUTE Callback-Number 19 string
ATTRIBUTE Callback-Id 20 string
ATTRIBUTE Framed-Route 22 string
ATTRIBUTE Framed-IPX-Network 23 ipaddr
ATTRIBUTE State 24 string
ATTRIBUTE Session-Timeout 27 integer
ATTRIBUTE Idle-Timeout 28 integer
ATTRIBUTE Termination-Action 29 integer
ATTRIBUTE Called-Station-Id 30 string
ATTRIBUTE Calling-Station-Id 31 string
ATTRIBUTE Acct-Status-Type 40 integer
ATTRIBUTE Acct-Delay-Time 41 integer
ATTRIBUTE Acct-Input-Octets 42 integer
ATTRIBUTE Acct-Output-Octets 43 integer
ATTRIBUTE Acct-Session-Id 44 string
ATTRIBUTE Acct-Authentic 45 integer
ATTRIBUTE Acct-Session-Time 46 integer
ATTRIBUTE Acct-Input-Packets 47 integer
ATTRIBUTE Acct-Output-Packets 48 integer
ATTRIBUTE Acct-Terminate-Cause 49 integer
ATTRIBUTE Chap-Challenge 60 string
ATTRIBUTE NAS-Port-Type 61 integer
ATTRIBUTE Port-Limit 62 integer
ATTRIBUTE Connect-Info 77 string
#
# Experimental Non Protocol Attributes used by Cistron-Radiusd
#
ATTRIBUTE Huntgroup-Name 221 string
ATTRIBUTE User-Category 1029 string
ATTRIBUTE Group-Name 1030 string
ATTRIBUTE Simultaneous-Use 1034 integer
ATTRIBUTE Strip-User-Name 1035 integer
ATTRIBUTE Fall-Through 1036 integer
ATTRIBUTE Add-Port-To-IP-Address 1037 integer
ATTRIBUTE Exec-Program 1038 string
ATTRIBUTE Exec-Program-Wait 1039 string
ATTRIBUTE Hint 1040 string
#
# Non-Protocol Attributes
# These attributes are used internally by the server
#
ATTRIBUTE Expiration 21 date
ATTRIBUTE Auth-Type 1000 integer
ATTRIBUTE Menu 1001 string
ATTRIBUTE Termination-Menu 1002 string
ATTRIBUTE Prefix 1003 string
ATTRIBUTE Suffix 1004 string
ATTRIBUTE Group 1005 string
ATTRIBUTE Crypt-Password 1006 string
ATTRIBUTE Connect-Rate 1007 integer
#
# Integer Translations
#
# User Types
VALUE Service-Type Login-User 1
VALUE Service-Type Framed-User 2
VALUE Service-Type Callback-Login-User 3
VALUE Service-Type Callback-Framed-User 4
VALUE Service-Type Outbound-User 5
VALUE Service-Type Administrative-User 6
VALUE Service-Type NAS-Prompt-User 7
# Framed Protocols
VALUE Framed-Protocol PPP 1
VALUE Framed-Protocol SLIP 2
# Framed Routing Values
VALUE Framed-Routing None 0
VALUE Framed-Routing Broadcast 1
VALUE Framed-Routing Listen 2
VALUE Framed-Routing Broadcast-Listen 3
# Framed Compression Types
VALUE Framed-Compression None 0
VALUE Framed-Compression Van-Jacobson-TCP-IP 1
# Login Services
VALUE Login-Service Telnet 0
VALUE Login-Service Rlogin 1
VALUE Login-Service TCP-Clear 2
VALUE Login-Service PortMaster 3
# Status Types
VALUE Acct-Status-Type Start 1
VALUE Acct-Status-Type Stop 2
VALUE Acct-Status-Type Accounting-On 7
VALUE Acct-Status-Type Accounting-Off 8
# Authentication Types
VALUE Acct-Authentic RADIUS 1
VALUE Acct-Authentic Local 2
VALUE Acct-Authentic PowerLink128 100
# Termination Options
VALUE Termination-Action Default 0
VALUE Termination-Action RADIUS-Request 1
# NAS Port Types, available in 3.3.1 and later
VALUE NAS-Port-Type Async 0
VALUE NAS-Port-Type Sync 1
VALUE NAS-Port-Type ISDN 2
VALUE NAS-Port-Type ISDN-V120 3
VALUE NAS-Port-Type ISDN-V110 4
# Acct Terminate Causes, available in 3.3.2 and later
VALUE Acct-Terminate-Cause User-Request 1
VALUE Acct-Terminate-Cause Lost-Carrier 2
VALUE Acct-Terminate-Cause Lost-Service 3
VALUE Acct-Terminate-Cause Idle-Timeout 4
VALUE Acct-Terminate-Cause Session-Timeout 5
VALUE Acct-Terminate-Cause Admin-Reset 6
VALUE Acct-Terminate-Cause Admin-Reboot 7
VALUE Acct-Terminate-Cause Port-Error 8
VALUE Acct-Terminate-Cause NAS-Error 9
VALUE Acct-Terminate-Cause NAS-Request 10
VALUE Acct-Terminate-Cause NAS-Reboot 11
VALUE Acct-Terminate-Cause Port-Unneeded 12
VALUE Acct-Terminate-Cause Port-Preempted 13
VALUE Acct-Terminate-Cause Port-Suspended 14
VALUE Acct-Terminate-Cause Service-Unavailable 15
VALUE Acct-Terminate-Cause Callback 16
VALUE Acct-Terminate-Cause User-Error 17
VALUE Acct-Terminate-Cause Host-Request 18
#
# Non-Protocol Integer Translations
#
VALUE Auth-Type Local 0
VALUE Auth-Type System 1
VALUE Auth-Type SecurID 2
VALUE Auth-Type Crypt-Local 3
VALUE Auth-Type Reject 4
#
# Cistron extensions
#
VALUE Auth-Type Pam 253
VALUE Auth-Type None 254
#
# Experimental Non-Protocol Integer Translations for Cistron-Radiusd
#
VALUE Fall-Through No 0
VALUE Fall-Through Yes 1
VALUE Add-Port-To-IP-Address No 0
VALUE Add-Port-To-IP-Address Yes 1
#
# Configuration Values
# uncomment these two lines to turn account expiration on
#
#VALUE Server-Config Password-Expiration 30
#VALUE Server-Config Password-Warning 5
$INCLUDE /etc/radiusclient/dictionary.microsoft
Редактируем /etc/raddb/users
# необходимо для авторизации через SQL.
# при проведении авторизации через SQL раскоментируйте.
# DEFAULT Auth-Type:=Local# тестовый пользователь. Если будете тестировать с pppd и mschap авторизацией пропишите
# Auth-Type:=MS-CHAP вместо Auth-Type:=Local, иначе RADIUS сервер не авторизует клиента.test Auth-Type:=Local, User-Password == "test"
#test Auth-Type:=MS-CHAP, User-Password == "test"
Service-Type = Framed-User,
Framed-Protocol = PPP,
Framed-IP-Address = 192.168.0.200,
Framed-IP-Netmask = 255.255.255.0,
Framed-Route = "192.168.1.0/24 192.168.200.204/32 1",
Reply-Message = "Just Test",
Acct-Interim-Interval = 60,
# Session-Timeout = 120,
Framed-Routing = Broadcast-Listen,
Framed-Compression = None
Правим файл /etc/raddb/cakesql.conf:
sql cake_sql{
# Указываем драйвер для PostgreSQL
driver = "rlm_sql_postgresql"# указываем PostgreSQL сервер.
server = "127.0.0.1"
# указываем логин к базе.
login = "cake"
# пароль который вы задавали при заведении пользователя cake.
password = "cake"# Указываем базу.
radius_db = "cake"# Создавать файл трассировки для SQL рапросов.
# Создается только при указании опции -x
sqltrace = yes
sqltracefile = /var/log/radius/sqltrace.sql# Количество подключений к СУБД
num_sql_socks = 30# Имя пользователя запрашиваемого в СУБД.
# Возможно применение регулярных выражений.
sql_user_name = "%{User-Name}"# запрос на авторизацию. Если запрос возвращает ничего RADIUS считает, что такого пользователя нет
# и отдает Auth-Reject
authorize_check_query = "select * from cake.auth_check('%{SQL-User-Name}')"# после успешной авторизации выполняется этот запрос который возвращает reply аттрибуты для пользователя.
# Они могут содержать лимиты для пользователя и сопутствующую информацию.
authorize_reply_query = "select * from cake.auth_reply('%{SQL-User-Name}')"# запрос ведет запись alive пакетов сессии содержащих промежуточные значения использования ресурсов.
accounting_update_query = "select cake.acct_update('%{Acct-Unique-Session-Id}', %{Acct-Output-Octets},%{Acct-Input-Octets})"# запрос ведет запись пакета начала сессии.
accounting_start_query = "select start_session('%{Acct-Unique-Session-Id}','%{SQL-User-Name}')"# запрос ведет запись пакета конца сессии.
accounting_stop_query = "select stop_session(%{Acct-Input-Octets},%{Acct-Output-Octets},'%{Acct-Unique-Session-Id}')"}
Скачиваем dictionary.microsoft словарь по этой ссылке:
http://download.files.namba.kz/files/2763915
Копируем его в папку /etc/radiusclient
# cp dictionary.microsoft /etc/radiusclient
Добавляем в автозагрузку Freeradius:
# chkconfig --level 35 radiusd on
Устанавливаем не обходимое для поддержки VPN (PPP/PPTP):
# yum remove ppp -y
# wget http://poptop.sourceforge.net/yum/stable/packages/ppp-2.4.4-14.1.rhel5.i386.rpm
# rpm -ivh ppp-2.4.4-14.1.rhel5.i386.rpm
# wget http://poptop.sourceforge.net/yum/stable/packages/pptpd-1.3.4-2.rhel5.i386.rpm
# rpm -ivh pptpd-1.3.4-2.rhel5.i386.rpm
Настройка PPP/PPTP:
Добавляем в /etc/radiusclient/servers наш RADIUS сервер.
localhost test
Изменяем в /etc/radiusclient/radiusclient.conf сервер для авторизации и аккаунтинга, добавляем две строчки в конец файла:
authserver localhost:1812
acctserver localhost:1813
Изменяем файл /etc/ppp/options.pptpd:
lock
name pptpd
nodeflate
nobsdcompauth
+chap
+mschap-v2
+mschap
-pap
nomppe
silent#добавьте эту опцию если у ваших клиентов реальные ip адреса
proxyarpms-dns 192.168.1.1
plugin /usr/lib/pppd/2.4.4/radius.so
Редактируем файл /etc/pptpd.conf:
option /etc/ppp/options.pptpd
localip 192.168.1.2
remoteip 192.168.0.2-254
Здесь указываем IP адрес нашей внешней сетевой карты (у меня - 192.168.1.2)
Добавляем службу в автозагрузку:
# chkconfig --level 35 pptpd on
Устанавливаем Java Machine with JNI:
Устанавливаем необходимые зависимости:
# yum install autoconf automake binutils gcc libtool -y
# yum install httpd-devel openssl-devel lynx -y
Качаем пакет jdk-6u27-linux-i586-rpm.bin от сюда http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u27-download-440405.html
Алтернативная ссылка: http://download.files.namba.kz/files/3391997
Java JDK под номером v1.7 (v7.0) не работает с веб сервером Resin!
Если вы, по ошибке установили JDK 1.7, удалите пакет с системы:
# yum remove jdk
Установим скаченный пакет Java:
# chmod 755 jdk-6u27-linux-i586-rpm.bin
# ./jdk-6u27-linux-i586-rpm.bin
Устанавливаем web сервер Resin v4 (resin-4.0.19.zip):
Скачаем Resin с официального сайта:
# wget http://www.caucho.com/download/resin-4.0.22.zip
Алтернативная ссылка: http://download.files.namba.kz/files/3392060
Распакуем zip архив:
# unzip resin-4.0.22.zip
# cd resin-4.0.22
И запускаем следующие команды:
./configure --prefix=/opt/resin --with-java-home=/usr/java/jdk1.6.0_27 --disable-ssl --enable-jni
# make
# make install
Устанавливаем сам Cake (веб интерфейс):
# wget http://cakebilling.googlecode.com/files/cake-1.0.3.war
# cp cake-1.0.3.war /opt/resin/webapps/cake.war
# service resin start
Редактируем файл:
/opt/resin/webapps/cake/WEB-INF/cake.xml -> db_password="cake"
/opt/resin/webapps/cake/WEB-INF/cake.xml -> db_connstr="jdbc:postgresql://localhost/cake"
Добавим в автозагрузку БД Postgres и веб сервер Resin:
# chkconfig --level 35 postgresql on
# chkconfig --level 35 resin on
# reboot
Вход в веб интерфейс, введите в браузере:
http://127.0.0.1:8080/cake
Логин - admin
Пароль - 1234
Если появляется ошибка при входе в веб интерфейс - 500 servlet exception, значить вы используете старый cake.sql
Все дело в том что старый cake.sql, не содержить в себе нужных хранимых процедур/функций, что ясно видно при детальном осмотре ошибки 500 servlet execption. Используйте cake-v1.0.1.sql - в нем все есть =)
Установка и настройка BIND для организации кэширующего DNS сервера
Запускаем Terminal (черный экран) который находится в меню: Applications -> Accessories -> Terminal.
Вводим следующие команды:
# yum install bind -y
Отредактируем конфигурационный файл BIND (named):
# gedit /etc/named.conf
В нем надо вставить адрес нашей локальной подсети и IP адрес сетевой карты которая смотрит в локалку, для этого надо поменять всего две строчки:
listen-on { 127.0.0.1; 192.168.50.2; }; # IP адрес сетевой карты
allow-query { 127.0.0.1; 192.168.50.0/24; }; # Адрес локальной сети
Сохраняем файлик.
Теперь проверим работу DNS сервера, введя команду старта сервиса:
service named start
Starting named: [ OK ]
Сервис named запустился нормально.
Добавим службу named (он же Bind) в автозагрузку:
# chkconfig --level 35 named on
Установка Squid
# yum install squid -y
# service squid start
# chkconfig --level 2345 squid on
Включим режим работы прозрачного прокси:
/etc/squid/squid.conf -> http_port 3128 transparent
Настройка iptables, включение NAT
Для настройки NAT, потребуется создать файл правил iptables:
# gedit /etc/sysconfig/firewall.sh
Далее в этот файл вставьте следующий текст:
#!/bin/bash
# chkconfig: 345 30 99
# description: Starts and stops iptables based firewall
# Очистка всех цепочек iptables
iptables -F
iptables -F -t nat
iptables -F -t mangleiptables -X
iptables -t nat -X
iptables -t mangle -X
# Политика по умолчанию, запретить все что не разрешено
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
# Разрешаем обращение к lo интерфейсу
iptables -A INPUT -i lo -p all -j ACCEPT
iptables -A INPUT -i eth1 -j ACCEPT
iptables -A OUTPUT -o lo -p all -j ACCEPT
iptables -A OUTPUT -o eth1 -j ACCEPT# Пропускать уже инициорванные, а также их дочерние
iptables -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT# Пропускать новые, иницированные, а также их дочерние
iptables -A OUTPUT -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
# Разрешить форвардинг для новых, иницированных, а также их дочерних
iptables -A FORWARD -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
# Настройка NAT, подсеть 192.168.2.0/255.255.255.0 - у нас виртуальная# 192.168.1.10 - IP адрес карты смотрящей в Интернет
iptables -t nat -A POSTROUTING -s 192.168.2.0/255.255.255.0 -j SNAT --to-source 192.168.1.10
# Заворачиваем трафик VPN сети с 80 порта на порт 3128 (Squid)
iptables -t nat -I PREROUTING -i eth1 -p tcp -s 192.168.2.0/24 --dport 80 -j DNAT --to-destination 10.168.50.2:3128
# Разрешаем пинг
iptables -A INPUT -i eth1 -p ICMP -j ACCEPT
iptables -A OUTPUT -o eth1 -p ICMP -j ACCEPT# Разрешаем DNS запросы с локальной сети до сервера
iptables -A INPUT -s 10.168.50.0/24 -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -d 10.168.50.0/24 -p udp --sport 53 -j ACCEPT
iptables -A INPUT -s 10.168.50.0/24 -p tcp --dport 53 -j ACCEPT
iptables -A OUTPUT -d 10.168.50.0/24 -p tcp --sport 53 -j ACCEPT# Разрешаем VPN подключения из локальной сети к нашему серверу
iptables -A INPUT -s 10.168.50.0/24 -p tcp --dport 1723 -j ACCEPT
iptables -A OUTPUT -d 10.168.50.0/24 -p tcp --sport 1723 -j ACCEPT
iptables -A INPUT -p gre -j ACCEPT# Поднимаем алиасы на для подсетей, это требуется чтобы разделить юзеров по подсетям
# В named.conf надо добавить в allow-query наши подсети!
ifconfig eth1:1 192.168.100.0/24 up
ifocnfig eth1:1 192.168.150.0/24 up
Где:
192.168.2.0/255.255.255.0 - виртуальная подсеть
192.168.1.2 - IP адрес внешней сетевой карты которая подключена к провайдеру.
Сделаем наш скрипт исполняемым:
# chmod 750 /etc/sysconfig/firewall.sh
Добавим его в автозагрузку, для этого откроем файл:
# gedit /etc/rc.d/rc.local
И впишем в него строчку (в конец файла):
/etc/sysconfig/firewall.sh
Включим форвардинг /etc/sysctl.conf:
net.ipv4.ip_forward = 1
# reboot
Проверка Интернет подключения с клиентского ПК
Теперь осталось завести учетные записи пользователей в системе.
Создайте учетную запись на имя "Vasya" с паролем "1234".
Далее требуется протестировать соединение с нашим сервером, для этого возьмите клиентский компьютер в локальной сети.
Создайте на нем новое подключение "Подключение к виртуальной частной сети" со следующими параметрами:
- Введите IP адрес VPN сервера локальной сети
- Шифрование: Не обязательное (Подключится даже если нет шифрования)
- Протоколы: CHAP, MS CHAP, MS CHAP v2
- Тип VPN: PPTP VPN
- Логин и пароль: Vasya/1234
Тестовое подключение в моем случае осушествлялось с машины под управлением Windows XP SP3.
Конфигурационные файлы системы тут:
Скрины системы: