Yvision.kzYvision.kz
kk
Разное
Разное
399 773 постов41 подписчиков
Всяко-разно
1
23:08, 28 июля 2011

Cake Billing — установка и настройка на CentOS5

Blog post image

В этой короткой записке написано про установку 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
nobsdcomp

auth
+chap
+mschap-v2
+mschap
-pap
nomppe
silent

#добавьте эту опцию если у ваших клиентов реальные ip адреса
proxyarp

ms-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 mangle

iptables -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.

Конфигурационные файлы системы тут:

http://rusfolder.com/44059982

http://rghost.ru/6lWPcPWbQ

https://dropmefiles.com/v0wBY

Скрины системы:

Картинка 1

Blog post image

Картинка 2

Blog post image

Картинка 3

Blog post image

Картинка 4

Blog post image

1
1705
1