понедельник, 27 апреля 2015 г.

Восстановление пароля администратора HostCMS

v 5.0


Для восстановления пароля администратора в случае его утери необходимо иметь доступ к PhpMyAdmin или другому веб-интерфейсу для администрирования СУБД MySQL. Подключитесь к СУБД, выберите нужную базу данных в левом поле. В открывшемся списке таблиц выберите обзор таблицы "users_table". В столбце "User_name" найдите пользователя с Вашим логином и нажмите для него "редактировать". В открывшемся окне для поля "users_password" введите значение 21232f297a57a5a743894a0e4a801fc3, которое соответствует паролю "admin". Авторизируйтесь в системе с использованием Вашего логина и пароля admin, после чего обязательно измените пароля для этого логина.

Проль от базы тут modules/core/config/database.php


v 6.0

В корень кинуть  файл restore_password.php:

<?php
/**
 * Изменение пароля пользователя admin
 *
 * Порядок использования:
 * 1) Загрузите файл http://www.hostcms.ru/download/install/restore_password.php
 * 2) Разместите файл restore_password.php в корне сайта и вызовите http://адрес_сайта/restore_password.php
 * 3) Запомните выведенные логин и пароль.
 *
 * УДАЛЕНИЕ ФАЙЛА:
 * После выполнения файл пытается удалиться самостоятельно, если этого не произошло,
 * удалите файл restore_password.php с сайта вручную.
 */

require_once('bootstrap.php');

$login = 'admin';
$password = Core_Password::get();

$oUser = Core_Entity::factory('User')->getByLogin($login);
if ($oUser)
{
$oUser->password = Core_Hash::instance()->hash($password);
$oUser->save();

?><p>New login is <b><?php echo htmlspecialchars($login)?></b></p><?php
?><p>New password is <b><?php echo htmlspecialchars($password)?></b></p><?php
}
else
{
?><p>User not found</p><?php
}

Core_File::delete(CMS_FOLDER . 'restore_password.php');



пятница, 17 апреля 2015 г.

open_basedir, ISPMANAGER и BITRIX

open_basedir, ISPMANAGER и BITRIX:

При настройки производительности сайта, работающего на нашем любимом битриксе, возникла маленькая проблема, а именно - на сервере установлена панель ISPManager которая по умолчанию прописывает open_basedir для переменных окружения php. Оговорюсь сразу эта переменная нужна для обеспечения безопасности на хостинге, где много пользователей. А когда пользователь один, то этой особенностью можно пожертвовать и получить чуть ли не двух кратный рост производительности. 

Ну а теперь по существу как отключить эту фенечку :D 
Все описанное справедливо для сервера на базе FreeBSD 

1. Заходим в php.ini и проверяем чтобы safe_mode. Он должен быть в состоянии off 


safe_mode = Off


2. Ищем строку ;open_basedir = 
и меняем ее на 

open_basedir = none


3. Сохраняем файл php.ini 

4. Заходим в конфиг apache (httpd.conf), находим php_admin_value open_basedir "путь к сайту" на 

php_admin_value open_basedir none


5. Сохраняем httpd.conf 

6. перегружаем apache 

apachectl restart


Вот и все. Теперь лезем в битру, запускаем тест производительности и радуемся :D 

Так же эта директива помимо виртуального хоста в может быть включена еще для директории глобально в secure.conf 
Так что на всякий пожарный смотрим там тоже и правим по надобности.

воскресенье, 5 апреля 2015 г.

Asterisk iptables

В этой статье рассматривается простой пример конфигурации iptables для работы с Asterisk Проверим установлено ли IPTables
[root@localhost ~]# rpm -q iptables iptables-1.3.5-5.3.el5_4.1 Посмотрим текущие правила используя команду -L
[root@localhost ~]# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT icmp -- anywhere anywhere ACCEPT all -- anywhere anywhere ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh REJECT all -- anywhere anywhere reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT) target prot opt source destination REJECT all -- anywhere anywhere reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT) target prot opt source destination Настройка общих правил. Создадим новые правила # iptables -P INPUT ACCEPT Эта команда разрешит все входящие подключения что позволит нам избежать блокировки нашего соединения, если конфигурирование производится через ssh. # iptables -F Данная команда сбросит все текущие правила по умолчанию и применит только созданное нами правило. # iptables -A INPUT -i lo -j ACCEPT Это простое правило разрешает все подключения на адаптер loopback. Интерфейс loopback определяется системой как lo и по умолчанию имеет адрес 127.0.0.1 Команда -А добавляет новое правило в конец заданной цепочки INPUT. Опция -i вместе именем интерфейса lo разрешает все виды трафика через заданный интерфейс. Опция -j указывает на цель данного правила ACCEPT, принять все подключения. iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT Некоторые части этого правила уже вам знакомы. Далее присутствует опция -m которая используется для загрузки модуля state. Модуль state проверяет состояние пакета и определяет является ли он новым-NEW, уже созданным-ESTABLISHED или новым, но связанным-RELATED с уже установленным соединением. Состояние ESTABLISHED указывает на то, что пакет принадлежит уже установленному соединению через которое пакеты идут в обоих направлениях. Признак NEW подразумевает, что пакет открывает новое соединение или пакет принадлежит однонаправленному потоку. Признак RELATED указывает на то что пакет принадлежит уже существующему соединению, но при этом он открывает новое соединение. iptables -A INPUT -p tcp --dport 22 -j ACCEPT Это правило добавляется к цепочке INPUT и говорит, что все пакеты, приходящие по протоколу TCP (-p tcp), на порт 22 (–dport 22), должны быть приняты(-j ACCEPT). Используется для подключения по ssh c портом по умолчанию. Если вам требуется открыть доступ к веб серверу цепочка будет выглядеть также, за исключением номера порта. iptables -A INPUT -p tcp --dport 80 -j ACCEPT Хочу заметить, что php приложения являются очень уязвимым местом часто используемым для взлома Asterisk. iptables -P INPUT DROP Помните, первое правило? Когда мы устанавливаем политику по умолчанию для входных цепей принять? Это правило меняет политику по умолчанию для входных цепочек обратно в DROP, что и требуется, если вы хотите на самом деле блокировать трафик поступающий на ваш сервер. iptables -P FORWARD DROP Запретим маршрутизацию трафика iptables -P OUTPUT ACCEPT Разрешим весь исходящий трафик. service iptables save Сохраним созданные правила. Правила для Asterisk Рассмотрим правила для SIP, RTP, IAX, AMI iptables -A INPUT -p udp -m udp --dport 5060 -j ACCEPT iptables -A INPUT -p udp -m udp --dport 5061 -j ACCEPT iptables -A INPUT -p udp -m udp --dport 10000:20000 -j ACCEPT iptables -A INPUT -p udp -m udp --dport 4569 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 5038 -j ACCEPT Если вы используете TCP: iptables -A INPUT -p tcp -m tcp --dport 5060 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 5061 -j ACCEPT iptables -A INPUT -p udp -m udp –dport 5060 -j ACCEPT – это правило разрешает инициацию SIP подключений к вашему серверу Asterisk от удаленных пользователей или провайдера. Если у вас нет удаленных пользователей, а например только sip транк от провайдера, хорошая идея разрешить инициацию только с определенных ip адресов или сетей. iptables -A INPUT -p udp -m udp -s 123.123.123.123 --dport 5060 -j ACCEPT iptables -A INPUT -p udp -m udp -s 192.168.0.0/24 --dport 5060 -j ACCEPT Первое правило разрешает соединение только с адреса 123.123.123.123, второе только с адреса 125.125.125.125. Третье из сети 192.168.0.XXX для ваших локальных абонентов. iptables -A INPUT -p udp -m udp –dport 10000:20000 -j ACCEPT – Данное правило разрешает RTP трафик. Кода иницировано SIP соединение по порту 5060 голосовые потоки направляются на порты из указанного диапазона. Хочу также заметить что многие АТС используют для инициации SIP соединения и для RTP трафика разные интерфейсы. Т.е. если адрес SIP сервера вашего провайдера 123.123.123.123, то RTP трафик, к примеру, может исходить с ip адреса 123.123.123.124 и т.п. Диапазон rtp портов задается в файле /etc/asterisk/rtp.conf. iptables -A INPUT -p udp -m udp –dport 4569 -j ACCEPT – Разрешает подключения по протоколу IAX. В отличие от SIP для инициации соединения и для голосовых пакетов RTP используется один и тот же порт. iptables -A INPUT -p tcp -m tcp –dport 5038 -j ACCEPT – Разрешает подключения к Asterisk Manager Interface. service iptables save Сохраним новые правила в debian и ubuntu добавили пакет iptables-persistent который использует iptables-save/iptables-restore #service iptables-persistent Usage: /etc/init.d/iptables-persistent {start|restart|reload|force-reload|save|flush} Фильтрация по именам сканеров iptables -I INPUT -p udp --dport 5060 -m string --string "friendly-scanner" --algo bm -j DROP iptables -I INPUT -p udp --dport 5060 -m string --string "sip-scan" --algo bm -j DROP iptables -I INPUT -p udp --dport 5060 -m string --string "sundayddr" --algo bm -j DROP iptables -I INPUT -p udp --dport 5060 -m string --string "iWar" --algo bm -j DROP iptables -I INPUT -p udp --dport 5060 -m string --string "sipsak" --algo bm -j DROP iptables -I INPUT -p udp --dport 5060 -m string --string "sipvicious" --algo bm -j DROP Настройка IPtables в несколько кликов Смотрите также: NAT, SIP и Asterisk Asterisk + Fail2Ban iptables, asterisk artikle/iptables.txt · 

1061: служба в настоящее время не может принимать команды? - есть ответ - Вопросы и ответы



  1. netsh wlan stop hostednetwork
  2. перезагрузка
  3. включить общий доступ (к vpn)
  4. netsh wlan start hostednetwork 

пятница, 3 апреля 2015 г.

Настройка VPN подключения l2tp на сервере Centos 6.5

Инсталляция необходимого ПО


# yum install -y xl2tpd
# chkconfig --level 345 xl2tpd on


Настройка 


# cp /etc/xl2tpd/xl2tpd.conf /etc/xl2tpd/xl2tpd.conf.bkp
# nano /etc/xl2tpd/xl2tpd.conf
[global]
access control = yes
auth file = /etc/ppp/chap-secrets

[lac moyvpn]
lns = vpn.domen.ru
redial = yes
redial timeout = 10
require chap = yes
require authentication = no
name = имя_пользователя
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
require pap = no
autodial = yes
tunnel rws = 8
tx bps = 100000000
flow bit = no


# cp /etc/ppp/options.xl2tpd /etc/ppp/options.xl2tpd.bkp
# nano /etc/ppp/options.xl2tpd
asyncmap 0000
name имя_пользователя
remotename L2TP
ipparam moyvpn
connect /bin/true
mru 1460
mtu 1460
nodeflate
nobsdcomp
persist
maxfail 0
nopcomp
noaccomp
noauth
novj
novjccomp
noipx
nomp
refuse-eap
refuse-pap
unit 0


# cp /etc/ppp/chap-secrets /etc/ppp/chap-secrets.bkp
# nano /etc/ppp/chap-secrets
имя_пользователя * пароль *


# service xl2tpd start


Ждем получения ip адреса (по разному от сразу до 3-х минут).

# less /var/log/messages
Jan  5 21:00:07 gateway pppd[7958]: local  IP address 95.31.31.8
Jan  5 21:00:07 gateway pppd[7958]: remote IP address 85.21.0.243


Появляется интерфейс ppp0

# ifconfig ppp
ppp0      Link encap:Point-to-Point Protocol
          inet addr:95.31.31.8  P-t-P:78.107.1.154  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1460  Metric:1
          RX packets:3 errors:0 dropped:0 overruns:0 frame:0
          TX packets:87540191 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:30 (30.0 b)  TX bytes:39058515021 (36.3 GiB)


Таблица маршрутизации выглядит следующим образом.

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
bras409-l0.msk. *               255.255.255.255 UH    0      0        0 ppp0
192.168.2.0     *               255.255.255.0   U     0      0        0 eth1
10.111.0.0      *               255.255.248.0   U     0      0        0 eth0
link-local      *               255.255.0.0     U     1002   0        0 eth0
link-local      *               255.255.0.0     U     1003   0        0 eth1
default         10.111.0.1      0.0.0.0         UG    0      0        0 eth0


Получаю данные о присвоенном Default Gateway
# eth0_gw=`/sbin/route -n | awk '/^0.0.0.0/ {print $2}'`
# echo $eth0_gw
10.111.0.1


Получаю данные о присвоенном нам сервере авторизации L2TP
# vpn_server=`/sbin/route -n | awk '/ppp0/ {print $1}'`
# echo $vpn_server
85.21.0.243



Возможно, что предварительно нужно прописать маршруты до dns и до l2pt сервера.
Последний раз когда настраивал, прокатило и без них.

route add -host 85.21.192.3 gw $eth0_gw
route add -host 213.234.192.8 gw $eth0_gw
route add -host 85.21.192.5 gw $eth0_gw

# route del default
# route add default dev ppp0
# route add -host $vpn_server gw $eth0_gw


Вот что получилось. (Поднят ppp интерфейс и по умолчанию пакеты отправляются ему).
При этом маршрут до L2TP сервера должен быть прописан. (Иначе, сервер не знает где ему авторизовываться, интерфейс ppp падает, все перестает работать).

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
85.21.0.243     10.111.0.1      255.255.255.255 UGH   0      0        0 eth0
85.21.0.243     0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
192.168.2.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1
10.111.0.0      0.0.0.0         255.255.248.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1003   0        0 eth1
0.0.0.0         0.0.0.0         0.0.0.0         U     0      0        0 ppp0


Пинг пошел.

# ping ya.ru
PING ya.ru (93.158.134.3) 56(84) bytes of data.
64 bytes from www.yandex.ru (93.158.134.3): icmp_seq=1 ttl=55 time=3.91 ms
64 bytes from www.yandex.ru (93.158.134.3): icmp_seq=2 ttl=55 time=4.00 ms


Остается только настроить NAT.

-----------------------------------------------------

Если нужно добавить статические маршруты, можно это сделать в файле:
# vi /etc/sysconfig/network-scripts/route-eth0

10.0.0.0/8 via 10.111.0.1
62.205.179.146 via 10.111.0.1
85.21.79.0/24 via 10.111.0.1
85.21.90.0/24 via 10.111.0.1
85.21.52.198 via 10.111.0.1
85.21.52.254 via 10.111.0.1
85.21.138.3 via 10.111.0.1
83.102.146.96/27 via 10.111.0.1
83.102.237.231 via 10.111.0.1
195.14.50.1 via 10.111.0.1
195.14.50.3 via 10.111.0.1
195.14.50.16 via 10.111.0.1
195.14.50.26 via 10.111.0.1
85.21.192.3 via 10.111.0.1
213.234.192.8 via 10.111.0.1
85.21.192.5 via 10.111.0.1

Быстро настроить VPN

VPN в каждый дом / Хабрахабр: "openswan "



'via Blog this'



VPN в каждый дом



Всем привет! Желание сделать VPN сервер максимально простым в установке и удобным в использовании назревало уже давно. За основу я взял L2TP/IPsec, эта технология нативно поддерживается всеми устройствами и в отличии от PPTP не вызывает проблем при подключении через сотовых операторов.

tl;dr
Для установки нам потребуется машинка с Ubuntu 14.04 на борту и «белым» IP-адресом, любой VPS подойдет. Достаточно ввести эту волшебную строчку:
 curl -sS https://sockeye.cc/instavpn.sh | sudo bash 

и через несколько минут у вас будет рабочий VPN с управлением через браузер (httр://ip-address:8080/) или консоль (instavpn -h).


Что внутри?


После загрузки скрипт загружает сам VPN сервер (openswan и xl2tpd), node.js и vnstat, настраивает конфиги и iptables, устанавливает веб-интерфейс. Если вы используете Security Groups или любой другой внешний файрвол, придется открыть следующие порты: 4500/udp, 500/udp, 1701/udp, 8080/tcp

Это слишком дорого для меня


Такие провайдеры как DigitalOcean или OVH предоставят вам вполне подходящую машинку за 5 долларов в месяц. Если поискать получше, можно сократить расходы до 2-3$. Имхо, чашка кофе в месяц — не такая уж и большая цена за защиту от меняющих SSL-сертификаты провайдеров, блокировок сайтов, прослушки в публичных точках доступа и прочих «радостей» Интернета

Ссылки


Репозиторий на GitHub

upd от Ernillew: Сидящим за NATом пользователям Windows может понадобится добавить одно значение в реестр. support.microsoft.com/kb/926179



Iptables
Открываем порты для своих нужд

iptables -t nat -A PREROUTING -p tcp --dport 3389 -j DNAT --to-destination 17?.???.???.30
iptables -A FORWARD -p tcp --dport 3389 -j ACCEPT


Сообщаем брандмауэру «выпускать» трафик через публичный интерфейс eth0, иначе доступ будет ограничен, хотя это может быть полезно в ряде случаев.

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE


В /etc/sysctl.conf:
net.ipv4.ip_forward = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0


Что делает скрипт см. ниже.

Openswan в качестве IPSec-сервера, xl2tpd (есть в EPEL) — в качестве провайдера L2TP с аутентификацией по PPP.
IPSec предоставляет безопасность на пакетном уровне, а L2TP выступает в роли транспорта. Для настройки требуется CentOS 6 с внешним IP и правами суперпользователя; порты 1701 (TCP), 4500 (UDP) и 500 (UDP) должны быть разрешены в брандмауэре.
Iptables и sysctl
Сообщаем брандмауэру «выпускать» трафик через публичный интерфейс eth0, иначе доступ будет ограничен, хотя это может быть полезно в ряде случаев.
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Не забудьте включить форвардинг IP-пакетов и отключить приём/отправку ICMP-перенаправлений на всех интерфейсах, они могут быть использованы злоумышленником для изменения таблиц маршрутизации.
В /etc/sysctl.conf:
net.ipv4.ip_forward = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0

В командной строке:
for iface in /proc/sys/net/ipv4/conf/*; do 
  echo 0 > $iface/accept_redirects; 
  echo 0 > $iface/send_redirects; 
done
sysctl -p

xL2TPd

Пул IP-адресов (ip range) для выдачи подключившимся клиентам.
В /etc/xl2tpd/xl2tpd.conf:
[global]
ipsec saref = yes
force userspace = yes

[lns default]
ip range = 172.16.1.30-172.16.1.100
local ip = 172.16.1.1
refuse pap = yes
require authentication = yes
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes
Список ваших DNS-серверов (ms-dns), например, Google Public DNSили Yandex.DNS.
В /etc/ppp/options.xl2tpd:
require-mschap-v2
ms-dns 8.8.8.8
ms-dns 8.8.4.4
auth
mtu 1200
mru 1000
crtscts
hide-password
modem
name l2tpd
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4

Openswan (IPSec)

Каталог для работы Pluto (dumpdir), включаем NAT-T (nat_traversal), чтобы IPSec-пакет во всей сети обрабатывался как обычный пакет UDP/IP и хост получателя не проводил проверок целостности. Добавьте локальные подсети (RFC1918) за исключением уже используемой в NAT (virtual_private), Подробнее: ipsec.conf(5).
version 2.0

config setup
    dumpdir=/var/run/pluto/
    nat_traversal=yes
    virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v6:fd00::/8,%v6:fe80::/10
    protostack=netkey
    oe=off

conn L2TP-PSK-NAT
    rightsubnet=vhost:%priv
    also=L2TP-PSK-noNAT

conn L2TP-PSK-noNAT
    authby=secret
    pfs=no
    auto=add
    keyingtries=8
    ikelifetime=8h
    keylife=1h
    type=transport
    left=%SERVERIP%
    leftprotoport=17/1701
    right=%any
    rightprotoport=17/%any
Pre-shared Key (PSK). Ключ должен быть длинным и случайным. 
В /etc/ipsec.secrets:
%SERVERIP%  %any:   PSK "2FYjhC12qgs0i98Rcb0jVtVBmqrFBrInHqqsxf04zE5bP85Syxy2sUe3ZJmjeaHy"
Данные для CHAP-аутентификации.
В /etc/ppp/chap-secrets:
alice          l2tpd   uye69opZ            *
bob            l2tpd   cYKtyVSe            *

четверг, 2 апреля 2015 г.

CentOS 6: настройка сети - HowToIT.ru

CentOS 6: настройка сети - HowToIT.ru: "system-config-network-tui"



'via Blog this'

CentOS 6: настройка сети

Настройка сети CentOSЭто руководство пояснит как настроить сетевое подключение, изменить IP-адрес или добавить новую сетевую карту в системе CentOS 6. Существует несколько способов настроить сеть в CentOS 6 используя командную строку.
Внимание! Помните, что если вы производите настройку сети удаленно всегда есть вероятность того, что в случае если соединение оборвется или вы неправильно произведете настройку вы не сможете повторно подключится к системе.
В данном руководстве не предполагается возможность использования NetworkManager, поэтому в первую очередь необходимо его отключить и включить службу network:
chkconfig NetworkManager off
chkconfig network on
service NetworkManager stop
service network start
Узнать текущее состояние сетевых интерфейсов, а также используемые ip-адреса можно выполнив команду ifconfig без параметров.
Ниже представлено три способа настройки сети из командной строки.

Способ 1: Быстрый запуск сетевого соединения CentOS 6:
Выполните данную команду (естественно, заменив ip-адрес и маску подсети вашими настройками) для включения сети, если вы хотите сами задать ip-адрес и маску подсети:
ifconfig eth0 192.168.0.10 netmask 255.255.255.0
Для отключения сетевого интерфейса выполните:
ifconfig eth0 down
Если же вы хотите, чтобы настройки были получены автоматически по DHCP, то выполните следующую команду:
dhclient eth0
В данном случае, чтобы прекратить работу сетевого интерфейса необходимо будет завершить работу программы dhclient:
killall dhclient
При настройке сети подобным образом, после перезагрузки конфигурирование придется производить заново.


Способ 2: Использования утилиты командной строки system-config-network-tui
Выполните команду для запуска утилиты конфигурирования сети:
system-config-network-tui
Нажмите "Конфигурация устройства".

system-config-network-tui

Выберите интерфейс сетевой карты, который будете настраивать.

Выбор сетевого интерфейса

Укажите, следует ли использовать DHCP (в том случае, если сетевой адрес в вашей сети присваивается автоматически) или введите настройки статического ip-адреса, как показано на примере ниже.

Настройки сети CentOS 6 system-config-network-tui

Сохраните настройки.
В том случае, если вы указали статический ip-адрес перейдите в раздел "Конфигурация DNS" и укажите DNS-сервера.

Настройка DNS CentOS

Сохраните настройки и выйдите из программы.
Перезапустите службу сети:
service network restart
Проверьте настройки командой:
ifconfig
Если сеть не была подключена, то возможно, в файлах настройки не включено автоматическое подключение. Для немедленного подключения выполните:
ifconfig eth0 up
А для настройки автоматического подключения поставите значение "ONBOOT" равным "yes" в файле /etc/sysconfig/network-scripts/ifcfg-eth0
Для отключения сети выполните:
ifconfig eth0 down

Способ 3: Настройка сети CentOS с помощью файлов конфигурации
Вы также можете настроить сеть вручную, внеся соответствующие параметры в файлы конфигурации, практически также, как это делает утилита system-config-network-tui. Этот способ полезен в том случае, если у вас еще не установлена утилита конфигурирования сети.
Перейдите в каталог /etc/sysconfig/network-scripts/
cd /etc/sysconfig/network-scripts/
Откройте файл конфигурации для редактирования ifcfg-eth0
vi ifcfg-eth0
Внесите/измените записи в файле для задания статической настройки сетевого интерфейса:
DEVICE=eth0  #Наименование интерфейса, это значение присваивается системой
HWADDR=08:00:27:6c:e1:fc  #MAC-адрес, менять без необходимости не нужно
TYPE=Ethernet  #Тип интерфейса
UUID=e2f7b74a-ec49-4672-81cf-ff9c30d8ebdd  #Идентификационный номер интерфейса
ONBOOT=yes  #Запускать интерфейс при загрузке
NM_CONTROLLED=no #Контролируется ли интерфейс службой NetworkManager
BOOTPROTO=none  #Не использовать DHCP
IPADDR=192.168.1.99  #IP-адрес
NETMASK=255.255.255.0  #Маска подсети
GATEWAY=192.168.1.1  #Шлюз
DNS1=192.168.1.1  #DNS-сервер
IPV6INIT=no  #Отключение использования ipv6
USERCTL=no  #Запрет обычному пользователю на управление сетевым интерфейсом
Для получения динамических настроек через DHCP: 
DEVICE=eth0  #Наименование интерфейса, это значение присваивается системой
HWADDR=08:00:27:6c:e1:fc  #MAC-адрес, менять без необходимости не нужно
TYPE=Ethernet  #Тип интерфейса
UUID=e2f7b74a-ec49-4672-81cf-ff9c30d8ebdd  #Идентификационный номер интерфейса
ONBOOT=yes  #Запускать интерфейс при загрузке
NM_CONTROLLED=no #Контролируется ли интерфейс службой NetworkManager
BOOTPROTO=dhcp  #Использовать DHCP
IPV6INIT=no  #Отключение использования ipv6
USERCTL=no  #Запрет обычному пользователю на управление сетевым интерфейсом
Настройки DNS серверов отдельно укажите в файле /etc/resolv.conf (в том случае, если вы получаете настройки по DHCP - этого делать не нужно):
vi /etc/resolv.conf
nameserver 192.168.1.1
nameserver 192.168.1.2

Перезапустите службу network, при этом сеть подключится автоматически:
service network restart

вторник, 10 марта 2015 г.


CentOS → Настройка сервера VoIP Asterisk на PBX Elastix (CentOS) - Часть 1


    Когда-то давно я разворачивал сервер VoIP в офисе, выбор был между Trixbox и Elastix, правда у Elastix был странный глюк со стабильностью работы транка к провайдеру, проблема была в том что транк падал по необъяснимой причине, в логах по данному поводу ничего вразумительного не было, в результате, после тестирования, предпочтения были отданы Trixbox, который, в тестовой среде, показал себя просто отлично, и результатом стало успешное использование более 2х лет. Тут мне на поддержку перешла новая компания, в планах которой было использовать VoIP в этот раз я решил еще раз протестировать Elastix. Визуально Elastix более функционален т.к. содержит больше функций из коробки, остальное можно добавлять с помощью модулей. 
    В функционале Elastix есть, собственно PBX-сервер, mail-сервер, jabber (openfire), статистика. Все остальное можно добавить самому.
    Я хочу настроить сервер Asterisk с тремя подключенными телефонами, мы будем использовать 2 провайдера VoIP — PCtel.ruи sipnet.ru
    Первый обеспечивает дешевую телефонную связь по РФ 1 руб. за мин. второй позволяет звонить на прямые московские номера до 40 мин в день бесплатно, при условии что у вас на счету более 5 у.е., в общем для тестирования данные провайдеры легко настраиваются, а в дальнейшем, с небольшими изменениями, можно подключать к любому провайдеру с сохранением функционала.
    Мы настроим диалплан, чтобы звонки на мобильные телефоны и городские телефоны в других городах автоматически шли через pctel.ru, а на городские Москвы через sipnet.ru, при этом входящие звонки будут попадать на номер 100, если он недоступен или не отвечает, через 10 сек, перенаправлен на номер 200, если и он не отвечает то «пиликать» должны все телефоны — 100, 200, 300.
    Я не буду рассматривать процесс установки системы, он весьма прост и нагляден.
    Для работы нам понадобится дистрибутив Elastix, актуальную версию которого, можно скачать с сайта разработчика

    Подготовительная часть

    Для начала обновим систему, зайдя под пользователем root и паролем который вы указали при установке системы:

    yum -y update

    Перезагрузимся, чтобы применить обновления:

    reboot


    ну и идем в web консоль, если случайно вы не задали статистический IP адрес вашему серверу, то IP можно узнать зайдя в консоль, под пользователем root( на скриншоте подчеркнуто красным):
    elastix console

    Если требуется настроить сеть то идем во вкладку System, а там в Network и жмем на кнопку Edit Network Parameters (на скриншоте обведено красным)


    Редактируем настройки сети- если требуется, далее идем настраивать экстеншены- вкладка PBX.

    1 Настраиваем экстеншены, для подключения телефонов пользователей


    Выбираем устройство SIP:


    Первый пользователь с внутренним номером 100 у нас будет оператор (operator) в поле DisplayName, укажем его имя латиницей, тогда у того кому он звонит, будет высвечиваться его имя(при условии что телефон, у того кто принимает звонок, поддерживает данную функцию есть такие что не поддерживают, тогда высвечивается номер), также мы активируем функцию, Call Waiting, весьма полезная вещь, нужна она для того, если поступил новый звонок, во время того как пользователь уже разговаривает, а телефон имеет 2 канала, то пользователь может переключиться на вторую линию, а первый звонок будет находиться в режиме удержания и к нему можно будет вернуться, если телефон пользователя имеет только одну линию, то положив трубку, он будет переключен на новый входящий звонок. Для подключения экстеншена к VoIP серверу нам нужно придумать пароль, !!! для тестовых целей!!! я использовал 123456qw.

    Все поля которые менялись, выделены красным:


    Далее, включим голосовую почту, для указанного пользователя, для того чтобы пользовтель мог ее проверить, требуется указать пароль, который мы зададим в виде цифр, его ведь будут набирать кнопками на телефоне:


    Экстеншены 200 и 300 создаем аналогичным образом, в результате, у нас должно появится 3 эктеншена — Operator с номером 100, Megatronov с номером 200 и Kukueva с номером 300, остается только применить изменения


    На данном этапе, если настроены и подключены внутренние телефоны, уже можно звонить внутренним абонентам, связь будет работать, но вешний мир нам, пока, не доступен. Для того чтобы звонить наружу и получать звонки, нам требуется создать транк.

    2 Создание транка в Asterisk
    Транк это ничего иное как подключение к провайдеру или внешней линии, через него к нам будут приходить входящие вызовы и уходить исходящие.

    Для упрощения понимания, мы будем использовать какие-то данные для подключения к SIP провайдерам, после регистрации у нас будет логин и пароль для подключения, в примерах, я буду использовать данные пользователей:
    логин: USER_LOGIN
    пароль: PASSWORD
    Остальные данные будут представлены по ходу дела.

    Настраиваем транк для подключения к PCtel.ru

    Сначала мы настроим подключение к провайдеру PCtel.ru, для того чтобы начать полноценно пользоваться их сервисом, требуется зарегистрироваться и закинуть на счет 200 руб (меньше не принимают!). После регистрации у вас будет аккаунт с логином и паролем и внутренний номер абонента (например 000000000)
    Переходим в раздел Tranks и создаем SIP транк т.к. подключение к провайдеру у нас идет по протоколу SIP


    Придумаем имя транка, я назвал pctel.ru. Чувствуете задумку, а?! :)



    ну и вторая часть настройки транка


    ну и теперь в виде текста, поля с настройками:
    PEER Details:

    type=friend
    secret=PASSWORD
    defaultuser=USER_LOGIN@sip.pctel.ru
    fromuser=USER_LOGIN
    fromdomain=sip.pctel.ru
    host=sip.pctel.ru
    port=5060
    insecure=invite
    qualify=no
    disallow=all
    allow=alaw&ulaw&g729&h261
    dtmfmode=rfc2833
    canreinvite=no
    nat=yes


    ну и Regirter Strings

    USER_LOGIN:PASSWORD@sip.pctel.ru/000000000


    Где:
    USER_LOGIN — указываем логин
    PASSWORD — указываем пароль для подключения
    000000000 — указываем номер который нам достался при регистрации

    Настраиваем транк для sipnet.ru

    Тут все примерно тоже самое, также задаем название для транка sipnet.ru:


    ну и вторая часть


    настройки текстом:
    PEER Details:
    username=000000000
    type=friend
    secret=PASSWORD
    qualify=yes
    insecure=invite
    host=sipnet.ru
    fromuser=000000000
    fromdomain=sipnet.ru
    dtmfmode=rfc2833
    disallow=all
    allow = alaw&ulaw&g729
    nat = yes


    Regirter Strings
    000000000:PASSWORD@sipnet.ru

    Где:
    000000000 — SIP ID выдается при регистрации
    PASSWORD — пароль

    Нам требуется сохранить и применить изменения, а также, настроить правила маршрутизации звонков -входящих и исходящих.
    На этом, с транками, мы закончили, если все данные для подключения указаны правильно, мы подключены к SIP провайдерам.

    3 Настраиваем исходящую маршрутизацию звонков — Outbound Routers
    Чтобы звонить на внешние номера, нам необходимо настроить исходящую маршрутизацию. На данном этапе, мы настроим простую систему, из соображений-чтобы все просто работало, остальные навороты в конце статьи.

    Начнем с pctel.ru

    Идем в пункт Outbound Routers (у меня уже был создан исходящий маршрут, то я привел его содержимое) и создаем новый маршрут, назвав его pctel-out, как указано на скриншоте, то что менялось выделено красным:


    Лирическое отступление: Набор номера у PCtel.ru идет следующий 0+7+XXX+XXX+XX+XX т.е. 0 потом код страны 7, потом 10ти-значный номер телефона.
    По этому в пункте: Dial Patterns that will use this Route указан номер 07XXXXXXXXXX, таким образом, все звонки начинающиеся на 07 и содержащие 10 цифр, автоматически будут идти через транк pctel.ru
    В пункте Trunk Sequence for Matched Routes указываем транк через который будет идти звонок, а это у нас pctel.ru.

    Настраиваем маршрутизацию для sipnet.ru

    Тут все действия аналогичны предыдущим, задаем название исходившего маршрута sipnet-out

    У sipnet.ru набор номера идет через 7-ХХХ-ХХХ-ХХ-ХХ таким образом все номера, набор которых идет начиная с 7, будет идти через транк sipnet.ru

    Тестируем работу исходящих вызовов.
    Для этого нам достаточно иметь только 1 мобильный телефон, ну и немного денег на счете sip-провайдеров, чтобы можно было совершать исходящие звонки.
    Звоним, сами себе, сначала через pctel.ru набрав 07-XXX-XXX-XX-XX, где вместо Х вбиваем свой номер мобильного, на мобильном определился номер входящего звонка, затем просто набрав 7-XXX-XXX-XX-XX определился другой номер, видно что маршрутизация звонков работает и идет через разных провайдеров, трубку на мобильном можно не снимать-чтобы деньги не уходили.

    4 Настройка группы вызовов — Ring Group.

    Собственно из названия функции Ring Group понятно что она формирует группу телефонов при звонке на номер группы, телефоны будут звонить у всех членов данной группы, пока кто-то не снимет трубку.
    Телефонный номер группы будет 600, а назовем мы ее Allusers в нее будут входить номера 100,200,300.
    Подробнее на скриншоте, все что менялось, выделено красным

    Расскажу подробнее о том что там изображено:
    Group Description: — название группы
    Extension List: — список номеров входящих в эту группу это номера 100,200,300 -номера вписываются с новой строки
    Extension Quick Pick — в этом меню можно выбрать номера которые будут входить в эту группу они добавятся в Extension List.
    Destination if no answer: — куда будет отправлен звонок, если нет ответа.

    5 Настраиваем входящую маршрутизацию звонков — Inbound Routers

    Можно считать что мы вышли на финишную прямую, как было оговорено ранее, все входящие звонки будут попадать на номер 100, если он не отвечает, то переводиться на номер 200, ну а если и он не отвечает, то на номер группы 600 (чтобы звонили все телефоны 100,200,300).
    Идем в раздел Inbound Routers, ну и заполняем поля, все что менялось подчеркнуто красным.

    Рассмотрим подробнее то что мы тут наделали:
    1 — Названия правила для маршрутизации входящих звонков, я назвал его IncomingCall — чтобы было понятно за что оно отвечает.
    2 — Устанавливем галку signal ringing
    3 — В пункте Set Destination указываем куда будут идти входящие звонки, а это у нас внутренний номер 100

    Сохраняем изменения и применяем настройки, нам остается протестировать работу маршрутизации входящих звонков.
    Для этого нам нужно позвонить на шлюз SIP провайдера и набрать внутренний номер абонента, у sipnet.ru телефоны доступа из городов можно посмотреть на странице customer.sipnet.ru/cabinet/do_showphones у pctel.ru это единый номер +74995034004 (на который хрен дозвонится).
    Пример sipnet.ru для Москвы +7(499)346-42-00 + SIP ID звонок придет на внутренний номер 100.
    Как было оговорено в начале статьи, логика работы АТС будет следующая: звонок приходит на номер 100, если в течении 10 сек номер не отвечает, то звонок уходит на номер 200 если и он не отвечает, то звонок уходит на группу номеров 600 в результате чего должны звонить все телефоны 100, 200 и 300.
    Отлично звонок приходит на номер 100, теперь нам нужно чтобы звонок в случае если номер не отвечает отправлялся на номер 200 а если и он не ответит то на группу с номером 600.
    Для этих целей существует функция Follow Me

    7 Настройка функции следования — Follow Me
    Идем в пунскт с названием Follow Me и там вы выбираем экстеншен к которому мы хотим применить данные правила, выбираем номер 100
    Изменения выделены на скриншоте:

    Подробнее о том что там менялось:
    Ring Time (max 60 sec) указываем значение 10 т.е. если в течение 10 сек на номер 100 не отвечает, то звонок будет перенаправлен на внутренний номер 200, который указан в пункте Destination if no answer:
    Сохраняем изменения и переходим к настройке номера 200, тут все примерно тоже самое, но с небольшими отличиями, подробнее на скриншоте:

    Тут есть небольшие отличия, что если ответа от номера не будет в течении 5 сек, то звонок будут переведен на группу с номером 600.
    Вот так все просто.

    8 Настройка плана набора-DialPlan

    Ну и теперь самое главное, работа с набором номера и преобразование набранного номера клиентом в правила набора устанавливаемые SIP провайдером.

    Собственно идея, я хочу чтобы звонки идущие на городские номера москвы автоматически шли через sipnet.ru, а на все остальные через pctel.ru, суть в том что набор номера у этих провайдеров разный, а пользователям довольно трудно объяснить как и через кого звонить, они обязательно всё забудут или перепутают, по этому у пользователя должен быть один способ набора номера, а остальное на себя берет АТС, а как и что она делает с номером пользователю знать и не надо, да и зачем все эти системы нужны, если они не решают рутинные задачи и такие нюансы приходится держать в голове. По старой традиции звонок наружу идет через 9, этот способ принят почти повсеместно, где его нет, то там скорее всего, настраивал какой-то извращенец «эстет» со своим тонким видением мира.
    В общем набор номера будет иметь следующий вид 9-8-495-ХХХ-ХХ-ХХ это при звонке на городские номера или 9-8-ХХХ-ХХХ-ХХ-ХХ при звонках на мобильные и т.п.
    Почему именно 8?!
    Я ориентируюсь на свою маму, которая даже в мобильном набирает так как она привыкла и ей трудно объяснить что правильно +7, ничего не поделать человек старой закалки, ну мы используем клиенто-ориентированный подход, и это правильно…

    Для начала определимся с переменными и их значениями:

    X — любая цифра 0—9
    Z — любая цифра 1—9
    N — любая цифра 2—9
    [123] — может быть любая из цифр, указанная в квадратных скобках т.е. или 1 или 2 или 3
    . — одна или несколько произвольных цифр;
    | — позволяет удалить все что было указано до этого знака, пример 9|4951234567, тогда набранный номер будет иметь вид 94951234567, увидев данное правило Asterisk отрежет значения указанный перед | таким образом, в транк будет набран номер 4951234567 без 9.

    Для начала, заходим в раздел настройки исходящих маршрутов Outbound Routers и в списке находим маршрут 9_outside, нам он не нужен и мы его удаляем иначе система нам не даст создать правило, где уже есть 9 в наборе.
    После этого переходим к маршруту pctel-out, в пункте Dial Patterns that will use this Route у нас указано правило, которое начинает работать если пользователь набрал 07ХХХХХХХХХХ, т.е. набрал 07 и десятизначный номер мобильного телефона, тогда набор удовлетворяет правилу и звонок уходит через транк pctel.ru
    Запись преобразования номера имеет следующую структуру
    prepend + prefix | match pattern
    Давайте представим что мы хотим позвонить на мобильный тогда запись плана набора будет иметь вид 98|XXXXXXXXXX набор на телефоне будт выгладеть так 980001234567.

    Делаем набранному номеру «обрезание»
    98-префикс, а 0001234567-match pattern, префикс будут удален сервером и набор номера будет следующий 0001234567, а в транк попадет только 10 цифр, чего у PCtel не достаточно и у нас не хватает 07 чтобы правильно выполнить набор номера и совершить звонок, чтобы набор номера был выполнен как надо, нам требуется добавить 07 в начале набора, т.е. склеить номер из частей, одна часть есть у сервера, а пользователь предоставит завершающую часть.

    «Склеиваем» номер для выполнения звонка
    Нам нужно добавить 07 к набору, во тут нам понадобится пункт prepend в правиле обработки номера, добавим туда недостающие цифры.
    Тогда правило принимает вид:
    07+98|XXXXXXXXXX
    При выполнении звонка 98 будет вырезано, а 07 добавлено спереди и набор получает вид 070001234567 что pctel.ru примет на раз и совершит звонок, но это все применительно к звонкам на 10ти-значные федеральные номера мобильных телефонов и тут проблемы нет все будет работать как часы, а т.к. основной трафик у нас будет идти именно через pctel.ru, то у нас появляется проблема, если в вызываемом номере больше 10 знаков, то вызов не пройдет, это может произойти при звонке на городские номера других городов, где вместе с кодом города и городским номером будет больше 10 знаков.
    Что делать?!
    «Пилить» правила набора под 11, 12 значные номера и т.д.-не вариант, правило должно быть одно и применимо ко всем.
    тогда набор принимает вид
    07+98|. переменную (.) я указывал в примерах, вернитесь и взгляните за что она отвечает.
    Таким образом мы создали 1 правило которое удовлетворяет всем требованиям, для выполнения звонка через pctel.ru, само правило имеет вид:


    Сохраним изменения и переходим к редактированию правил sipnet-out
    Как я писал в начале, sipnet.ru у нас будет использоваться для того чтобы звонить на городские номера Москвы.
    Чтобы снова вспомнить правила обработки номера опять приведу исходник:
    prepend + prefix | match pattern
    Телефонные номера москвы бывают в кодах 495 и 499, а набор номера у sipnet.ru начинается на 7, таким образом правила обработки набранного номера принимает вид:
    7+98|495XXXXXXX и 7+98|499XXXXXXX т.е. после 495 может быть 7 знаков, можно забабахать 2 правила и все будет работать, но можно его немного оптимизировать, чтобы количество правил было меньше, тогда правило принимает вид:
    7+98|49[59]XXXXXXX
    где переменная [59] может быть или 5 или 9, тогда у нас получилось что при наборе 98 будет вырезано и набор примет вид 7495ХХХХХХХ
    таким образом, набранные номера в наборе которых присутствует 495 или 499 после которых идут 7 цифр, автоматически будут маршрутизироваться в транк sipnet.ru

    Итог:
    В результате всех наших действий, у нас получился простой сервер VoIP в котором звонки автоматически распределяются между провайдерами в зависимости от того куда звонит пользователь. У нас создан универсальный способ набора номера вида 98ХХХХХХХХХХ, о правилах набора которого пользователю можно не замарачиваться т.к. система сделают всю рутинную работу за него, пользователь просто набирает номер, а что там внутри происходит его не волнует, ему важен результат.
    Прошу обратить внимание что данная конфигурации была представлена исключительно в целях ознакомления, некоторые моменты там сделаны не оптимально и я об этом знаю, но зато она дает получить представление о ее принципах работы и сделать быстрый старт в освоении VoIP в целом и Asterisk в частности.
    Ну и как всегда, нашли ошибку пишите в личку или на email, есть вопросы, прошу в комментарии.

    В ходе написания статьи были использованы ссылки:
    Пример настройки подключения к PCtel.ru
    Пример настройки подключения к Sipnet.ru
    Сообщения пользователя ded, дай бог ему здоровья!

    Split / разбить dump

    //Разбить дамп по 50000 строк for i in `ls *.sql`; do split -d -l 50000 -a 4 --additional-suffix=.sql $i "$(basename "$i" .sq...