Показаны сообщения с ярлыком CentOS. Показать все сообщения
Показаны сообщения с ярлыком CentOS. Показать все сообщения

понедельник, 25 января 2016 г.

sh скрипт для резервного копирования сайта

Скрипт для резервного копирования сайта. Ссылка на источник https://dev.1c-bitrix.ru/community/blogs/howto/945.php

#!/bin/sh
doc_root=$1
name=$2
if [ -z $doc_root ]; then
   echo Usage: $0 /path/to/document/root [backup_name]
   exit
fi

if [ -z $name ]; then
   name=backup
fi

dbconn=$doc_root/bitrix/php_interface/dbconn.php

readcfg() {
   grep $1 $dbconn | sed 's/.*"\(.*\)".*/\1/'
}

host=`readcfg DBHost`
username=`readcfg DBLogin`
password=`readcfg DBPassword`
database=`readcfg DBName`

utf=`grep 'BX_UTF' $dbconn | grep true`

if [ -z "$utf" ]; then
   charset=cp1251
else
   charset=utf8
fi

backup_dir=$doc_root/bitrix/backup

if [ ! -e $backup_dir ]; then
   mkdir $backup_dir
fi

cd $doc_root && 
mysqldump -h$host -u$username -p$password --default-character-set=$charset $database > $backup_dir/$name.sql && 
tar -cf $backup_dir/$name.tar $backup_dir/$name.sql &&  
rm $backup_dir/$name.sql &&
tar -rf $backup_dir/$name.tar --exclude '*bitrix/tmp/*' --exclude '*bitrix/updates/*' --exclude '*bitrix/backup/*' --exclude '*bitrix/*cache/*' . && 
gzip -f -9 $backup_dir/$name.tar && 
echo OK && exit
echo Error

пятница, 24 июля 2015 г.

Как узнать что именно грузит сервер?

  1. Открываем top или htop, ловим высоконагруженный pid апача
  2. lsof -p PID — покажет с какими ресурсами работает pid
Также в логах апача можно включить запись времени обработки каждого запроса посмотрите у кого это время длинное, так вычислите не только сайт, но и конкретное место сайта 
LogFormat "%h %l %u %t \"%r\" %>s %bb %D" common
в конце — время обработки запроса в микросекундах

четверг, 9 июля 2015 г.

Сам себе сотовый роуминг. Создание GSM гейта на asterisk + донгл от сотового оператора / Хабрахабр

оригинал: Сам себе сотовый роуминг. Создание GSM гейта на asterisk + донгл от сотового оператора / Хабрахабр:

Создание GSM гейта на asterisk + донгл от сотового оператора




asterisk -vvvvvvvvvr
service asterisk restart
rasterisk -x reload
rasterisk -x "dongle discovery"
rasterisk -x "dongle show device state dongle0" | egrep "State|IMEI"
asterisk -vvvvr
CLI> dongle show devices
CLI> sip show peers
CLI> sip show registry
CLI> core set debug 4
покажет всё что пишется и читается из модема
cat /dev/ttyUSB2 # для получения диагностики
для ввода команд
stty -iutf8 hupcl -icrnl -opost -onlcr -isig -icanon -echo -echoe -echok -F /dev/ttyUSB2
echo -e "AT+ZCDRUN=8\r\n" > /dev/ttyUSB2 # отключаем автоподключение USB CD-ROM
echo -e "AT+ZCDRUN=E\r\n" > /dev/ttyUSB2 # только модем, отключить кардридер и автозагрузку USB CD-ROM




Открываем порты которые использует астериск и на которые нужно делать проброс: udp 5000-31000. 
проверить порты yum install nmap

nmap -sU -O localhost
Поднимаем сервер на линукс http://www.elastix.org/index.php/en/
необходимый софт:
— usb-modeswitch: www.draisberghof.de/usb_modeswitch/#download
оба архива www.draisberghof.de/usb_modeswitch/usb-modeswitch-1.2.5.tar.bz2 и www.draisberghof.de/usb_modeswitch/usb-modeswitch-data-20121109.tar.bz2

Итак.


У вас есть линукс, у вас есть донгл.

Втыкаете, делаете lsusb.
Находите там строку похожую на
Bus 001 Device 004: ID 12d1:1446 Huawei Technologies Co., Ltd.

12d1 это вендор (huawey)
1446 это устройство (E173 в моем случае)
Но не все так просто.
Эти чрезвычайно юзер-френдли модемы устроены так, что после того как их втыкаешь в usb это флешка. С чем нам поможет справится usb_modeswitch.
Устанавливаем usb_modeswitch
так:
wget http://www.draisberghof.de/usb_modeswitch/usb-modeswitch-2.2.1.tar.bz2
wget http://www.draisberghof.de/usb_modeswitch/usb-modeswitch-data-20150115.tar.bz2
yum install libusb libusb-devel minicom wvdial
wget http://pkgs.repoforge.org/usb_modeswitch/usb_modeswitch-1.2.3-1.el6.rf.x86_64.rpm
wget http://pkgs.repoforge.org/usb_modeswitch-data/usb_modeswitch-data-20120120-1.el6.rf.noarch.rpm
yum -y --nogpgcheck install usb_modeswitch-1.1.5-1.el5.rf.x86_64.rpm usb_modeswitch-data-20120120-1.el5.rf.noarch.rpm

или так:
wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el5.rf.x86_64.rpm
rpm -ivh rpmforge-release-0.5.3-1.el5.rf.x86_64.rpm 
yum install usb_modeswitch  
yum install usb_modeswitch-data   


nano /etc/usb-modeswitch.conf
DefaultVendor = 0x12d1
DefaultProduct = 0x1f01
MessageEndPoint = "0x01"
MessageContent =
"55534243000000000000000000000011060000000000000000000000000000"




Для каждого модема: usb_modeswitch -v 0x12d1 -p 0x1446 -H -s 5 -M 55534243000000000000000000000011060000000000000000000000000000

не забудьте поменять 12d1 и 1446 на свои цифры из lsusb!
Запускаете lsusb снова и вы увидите там примерно тоже самое что и раньше, но вторая 4-ка цифр вашего донгла будет другой.
Это значит что все прошло успешно и теперь ваш модем это модем.

[root@localhost asterisk]# ls /dev | grep USB
ttyUSB0
ttyUSB1
ttyUSB2
ttyUSB3

ttyUSB4


[root@localhost ~]# dmesg | grep tty
console [tty0] enabled
usb 1-1: GSM modem (1-port) converter now attached to ttyUSB0
usb 1-1: GSM modem (1-port) converter now attached to ttyUSB1
usb 1-1: GSM modem (1-port) converter now attached to ttyUSB2

usb 1-1: GSM modem (1-port) converter now attached to ttyUSB3

Вот тут-то и должна отработать та самая опция про USB Serial Driver ядра и в /dev должны появится несколько устройств /dev/ttyUSB0 /dev/ttyUSB1 и т.д.
Это интерфейсы к модему, какие-то звуковые, какие-то управления, насколько я понял какой из них какой зависит от модема.

Треть дела сделана, цифровой интерфейс к сотовой сети у нас есть, переходим к астериску.


Не буду описывать его установку, будем считать что он поставлен (не настроен, просто установлен). Если из исходников, то хорошо. Если пакет — понадобится еще и -dev, потому что мы будем собирать chan_ модуль к нему.

yum install asterisk-devel

А именно тот самый chan_dongle.

wget http://asterisk-chan-dongle.googlecode.com/files/chan_dongle-1.1.r10.tgz
tar -xzvf chan_dongle-1.1.r10.tgz
cd chan_dongle-1.1.r10/
./configure
make

Если видим 
usr/include/asterisk/module.h:458:5: note: expected 'int (*)(struct ast_channel *, const char *)' but argument is of type 'int (*)(struct ast_channel *, void *)'
Качаем пропатченный исходник https://github.com/jstasiak/asterisk-chan-dongle/archive/asterisk11.zip
2. Ставим autoconf и automake
3. Разархивируем исходник, переходим в его папку и выполняем одну за другой команды: 
aclocal
autoconf
automake -a

и снова
DESTDIR="/usr/lib64/asterisk/modules" ./configure //если 64
./configure //если 32
make
make install


chown :asterisk /var/lock/; 
chmod g+w /var/lock/;

Копируем дефолтный конфиг из /etc/chan_dongle.conf в папку с конфигом астериска.
make install

ls /usr/lib64/asterisk/modules
cp etc/dongle.conf /etc/asterisk/
nano /etc/asterisk/dongle.conf

Запускаем asterisk прямо без настройки.
Запускаем asterisk -rv и попадаем в консоль.
Пишем module load chan_dongle.so.
Модуль загрузится и скорее всего о чем-нибудь начнет ругаться.
Но по выполнении команды dongle show devices покажет что-то вроде

ID Group State RSSI Mode Submode Provider Name Model Firmware IMEI IMSI Number
dc_4823_7851 0 Free 11 0 0 MegaFon RUS E173 11.126.15.00.209 xxxxxxxxxxxxxxxx xxxxxxxxxxxxxxx xxxxxxxxxxx

выходим

Открываем на редактирование файл /etc/asterisk/dongle.conf и в самом низу, где описывается устройство [dongle0]
комментируем все кроме строки imei, куда вписываем imei вашего модема из строки которую показал dongle show devices
и дописываем
[dongle0]
imei=xxxxxxxxxxxxxxxx
context=dongle-incoming; контекст
group=0
rxgain=3; увеличение громкости
txgain=3; увеличение громкости
resetdongle=yes; сбрасывать карту при инициализации
u2diag=-1
usecallingpres=yes
callingpres=allowed_passed_screen

Теперь модуль chan_dongle можно вписать в /etc/asterisk/modules.conf в виде строки load => chan_dongle.so
чтобы он подргужался сам при запуске asterisk.
Перезапускаем asterisk.
Вот теперь, по правильному imei, chan_dongle должен сам все правильно найти — и какие из устройств являются командными, и какие аудио, и так далее.
Запускаем asterisk -rv, выполняем dongle show devices и видим свой модем. Все в порядке.
echo 'KERNEL=="ttyUSB*", OWNER="asterisk", GROUP="dialout"' > /etc/udev/rules.d/10-modem.rules

Теперь к настройке астериска.


Все что нам нужно находится в файлах sip.conf и extensions.conf
Начнем с sip.conf
Находим секцию [general] и дописываем:
[general]
externip=х.х.х.х; внешний айпишник астериска, не важно его или гейта который прокидывает к нему порты, это внешний айпишник, адрес которого будут содержать пакеты идущие к астериску и он будет считать их своими
externaddr=х.х.х.х; тоже самое
localnet=192.168.0.0/255.255.0.0; сеть, которую астериск будет считать внутренней и не устраивать сложные танцы с маскарадом для нее
nat=force_rport,comedia; необходимый режим работы если астериск за натом и к нему прокидываются порты
context=public; контекст, в который приходят звонки по умолчанию. важно чтобы тут был какой-то контекст в котором будет совершенно не определен план звонков, чтобы все звонки по умолчанию никуда не попадали! в интернете полно ботов которые сканят день и ночь на предмет плохо настроеных астерисков чтобы звонить через них на халяву
allowguest=no; не принимать звонки неизвестно от кого.

С настройкой по умолчанию закончено, теперь в этом же файле описываем одного клиента (наш софтовый телефон)
[me]
type=friend
host=dynamic
secret=пароль
context=default
canreinvite=yes
dtmfmode=rfc2833
permit=0.0.0.0/0.0.0.0
qualify=yes

me — это будет логин, пароль где задать понятно.

Записываем sip.conf. Тут все.

Открываем extensions.conf — это план звонков, описание того куда и как передаются звонки.

То что нам нужно, так это описать два контекста: [dongle-incoming] — то, что делать со звонками поступающими в модем и [default] — то, что делать со звонками поступающими с софт. телефона.
Начинаем с простого:
[default]
exten => _7X.,1,Dial(Dongle/dongle0/holdother:+${FILTER(0-9,${EXTEN})})
exten => _+7X.,1,Dial(Dongle/dongle0/holdother:+${FILTER(0-9,${EXTEN})})
exten => _8X.,1,Dial(Dongle/dongle0/holdother:+7${FILTER(0-9,${EXTEN:1})})
exten => _007X.,1,Dial(Dongle/dongle0/holdother:+7${FILTER(0-9,${EXTEN:3})})
exten => h,1,Hangup()


Это фактически 4-ре строки которые делают одно и то же, только первая когда телефон назначения подходит под шаблон 7цифры, вторая когда +7цифры, третья 8цифры и 4-я 007цифры (во многих софтовых телефонах стоит опция передавать “+” как “00”).
И делает каждая строка одно и то же — передает звонок в канал dongle0 (наш модем) в виде +7цифры.
Ну и последняя строка вызовется при событии “трубка положена” и просто кладет трубку. Впрочем ее можно даже не писать, это формальность.

Чтобы было доходчиво как это работает — любой поступивший звонок с телефона зарегистрировавшегося на астериске под аккаунтом me будет обрабатываться в контексте [default], как указано в опции context для [me]. В контексте [default] номер назначения будет сверен с шаблоном и, если попадет под один из шаблонов, то будет исполнено действие “Dial(Dongle...)”. Кстати если номер назначения в шаблон не попадет, звонок будет сброшен как неизвестно куда направляемый, можете попробовать позвонить куда-нибудь типа +4..., если интересно. Тоже какой-никакой способ защититься от телефонных мошенников, хоть не в Уганду звонить будут, если как-то проберутся.

Теперь контекст [dongle-incoming], для звонков поступающих на сотовый номер:
[dongle-incoming-sms]
exten => sms,1,Noop(Incoming SMS from ${CALLERID(num)} ${BASE64_DECODE(${SMS_BASE64})})
exten => sms,n,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} — ${DONGLENAME} — ${CALLERID(num)}: ${BASE64_DECODE(${SMS_BASE64})}' >> /var/log/asterisk/sms.txt)
exten => sms,n,Hangup()

[dongle-incoming-ussd]
exten => ussd,1,Noop(Incoming USSD: ${BASE64_DECODE(${USSD_BASE64})})
exten => ussd,n,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} — ${DONGLENAME}: ${BASE64_DECODE(${USSD_BASE64})}' >> /var/log/asterisk/ussd.txt)
exten => ussd,n,Hangup()

[dongle-incoming]
include => dongle-incoming-sms
include => dongle-incoming-ussd

exten => _X.,1,Dial(SIP/me)
exten => h,1,Hangup()


Тут все еще проще — любой входящий звонок передается как звонок для клиента [me].
Верхние два раздела включенные как include => dongle-incoming-sms принимают sms и ussd соответственно, и записывают их в обычные текстовые файлы /var/log/asterisk/sms.txt и /var/log/asterisk/ussd.txt где их можно потом прочитать (кодировка UTF-8).

Эпилог


Вот вкратце и все. Но это только самая основа, если кому-то реально интересно как, или не получится у самого (все-таки те кто может все это повторить я уверен на 95% могут все это сделать и сами, без инструкции, и даже дополнить всем чего тут не хватает), я могу продолжить развив эту тему — как настроить sms чтобы они принимались и отправлялись на софт-клиент так же как звонки; как изменить dialplan таким образом чтобы номер был занят когда SIP клиент не подключен, либо звонящий попадал в Voicemail.

PS. В результате всего одного дня настройки я получил свой собственный телефонный номер за границей на котором так и не смог потратить 200 рублей денег положенных перед отъездом, хоть и пользовался им постоянно, и родственникам звонил и принимал звонки. Несравнимый опыт использования с роумингом где деньги можно было кидать как в топку тепловоза.

PPS. WARNING, DISCLAIMER: поступила информация:
«Дело в том, что использование любых шлюзов прямо запрещено всеми сотовыми операторами. Вот „Условия оказания услуг связи МТС“:

Пункт 1.3 Услуги связи МТС не могут быть использованы Абонентом без дополнительного письменного согласования с Оператором для… установки шлюзов для доступа к сети
электросвязи и Интернет-телефонии…

Такие же пункты есть в условиях других операторов сотовой связи, ибо маржа на роуминге зашкаливающая, и отказываться от такого навара операторы не будут. За использование подобного шлюза могут просто заблокировать сим-карту.»


Возможные проблемы:

at_response.c:384 at_response_error: [dongle] Error checking subscriber phone number
Модем заблокирован. В DC-Unlocker для e1550 команда DC-AT^CARDLOCK="65441898" с кодом Flasheo

OpenVPN на CentOS 6


yum install openvpn
yum install easy-rsa


Перед тем как приступать к настройкам следует проверить существуют ли в системе интерфейсы tun/tap. Вводим:
cat /dev/net/tun
cat: /dev/net/tun: File descriptor in bad state
Обратите внимание на статус: «File descriptor in bad state» — значит здесь всё есть хорошо.

На следующем шаге следует создать дополнительные файлы и каталоги, поменять права и контекст на них:
touch /etc/openvpn/server.conf
touch /etc/openvpn/ip.sv
mkdir /var/log/openvpn
chown openvpn.openvpn /etc/openvpn/*
chcon -u system_u /etc/openvpn/*
restorecon -v -R /etc/openvpn/*

cp -ai /usr/share/easy-rsa/2.0 ~/easy-rsa
cd ~/easy-rsa

Прознать какая версия openssl стоит в системе:
rpm -qa openssl
openssl-1.0.0-27.el6_4.2.i686

Теперь выполняем всё по порядку:
. ./vars
Обратите внимание — две точки через пробел
Удаляем всё и подготовим к генерации каталог /usr/share/openvpn/easy-rsa/2.0/keys:
./clean-all

Создаём файл ca.key — он нужен и серверу и клиенту. Генератор будет задавать различные вопросы, можно жать Enter на всех вопросах:
./build-ca


Генерируем сертификат и ключ для сервера:
./build-key-server server

Теперь генерируем файл параметров по алгоритму Diffie-Hellman:
./build-dh 

Генерируем сертификат и ключ для клиента velowup (такое вот имя у клиентского сертификата):
./build-key velowup


И последним создаем общий ключ для клиентов и сервера. Это TLS-ключ:
openvpn --genkey --secret ta.key

Теперь следует создать каталоги в конфигурационной директории для ключей:
mkdir /etc/openvpn/.key
mkdir /etc/openvpn/.tls

Переместить сгенерированные файлы в соответствующие каталоги:
cp key/* /etc/openvpn/.key/
cp ta.key /etc/openvpn/.tls/

Поправить контекст:
chcon -u system_u /etc/openvpn/.key/* 
restorecon -v /etc/openvpn/.key/* 
chcon -u system_u /etc/openvpn/.tls/* 
restorecon -v /etc/openvpn/.tls/* 
chcon -u system_u /etc/openvpn/.key/ 
restorecon -v /etc/openvpn/.key/ 
chcon -u system_u /etc/openvpn/.tls/ 
restorecon -v /etc/openvpn/.tls/

Разрешаем tcp на порту 1723 в SELinux:
semanage port -a -t openvpn_port_t -p tcp 1723


При загрузке системы автоматически поднимаются все VPN соединения, для которых в папке /etc/openvpn есть соответствующие файлы с расширением .conf
Конфигурационный файл сервера /etc/openvpn/server.conf привести к следующему виду:
# Какой интерфейс слушать?
#(У кого-то это может быть ip адрес интерфейса, который смотрит в интернет. Скорее всего это скорее всего eth0)
local 91.214.71.127

# Какой порт слушать?
port 1723

# На каком протоколе будем работать?
proto tcp-server

# В каком режиме работать? Мостом (tap) или маршрутизация (tun)
dev tun0
;dev tap0

# MTU
tun-mtu 1392

# Разрешить аутентификацию по паролю
#auth-user-pass
# Пути к корневому сертефикату, сертификату и закрытому ключу.
ca /etc/openvpn/.key/ca.crt
cert /etc/openvpn/.key/server.crt
key /etc/openvpn/.key/server.key

# Параметры Диффи-Хелмана
dh /etc/openvpn/.key/dh2048.pem

# Отключить проверку пользовательских сертификатов
# client-cert-not-required
# username-as-common-name

# Настройка режима сервера и ИП адресов для выдачи клиентам. Сервер возьмет
# себе 10.10.20.1
# На каждом клиенте указывается адрес сервера 10.10.20.1. Закомментируйте эту
# строку, если вы используете ethernet мост.
server 10.10.20.0 255.255.255.0
;ifconfig 172.16.1.1 255.255.255.0
;ifconfig-pool 172.16.1.2 172.16.1.96

# Установите серверный режим для ethernet моста.
# Вы должны сначала в своей ОС настроить мост
# между TAP и NIC интерфейсом.
# Затем вы должны вручную установить
# IP/маску на мост, к примеру 10.8.0.4/255.255.255.0.
# В заключении мы должны установить диапазон IP
# адресов в этой подсети для выделения клиентам
# (начало=10.8.0.50 конец=10.8.0.100).
# Оставьте эту строку закоментированной, если вы
# не используете ethernet мост.
;server-bridge

# Режим сервера
daemon
mode server

# Разрешаем использовать TLS
tls-server

# Разрешить клиентам доступ VPN клиентам между друг другом?
#client-to-client

# Сопоставления клиент <-> виртуальный IP-адрес
# хранятся в этом файле. Если OpenVPN упадет или
# будет перезапущен, повторно подключающимся клиентам могут быть назначены
# из пула такие же виртуальные IP-адреса, которые были назначены им в прошлый
# раз.
ifconfig-pool-persist /etc/openvpn/ip.sv

;client-config-dir /etc/openvpn/.clt

# Передача клиенту параметров маршрутизации, где X.X.X.X — IP адрес вашего eth0, что смотрит в интернет
push «route 192.168.0.0 255.255.255.0»

# Передаем клиенту настройку шлюза
;push «route-gateway 192.168.0.2»

# Некоторые Windows-специфичные сетевые настройки
# могут быть переданы клиентам, такие как адреса DNS-
# или WINS-серверов. ПРЕДОСТЕРЕЖЕНИЕ:
# openvpn.net/faq.html#dhcpcaveats
push «dhcp-option DNS 192.168.0.2»
;push «dhcp-option DNS 192.168.0.1»

# Чтобы весь трафик при подключении к VPN шел через VPN-сервер (это заставляет
# клиента изменить шлюз по умолчанию на vpn-сервер),
# нужно добавить следующую строчку в основной конфиг openvpn.conf.
;push «redirect-gateway»

# Проверка соединения
keepalive 10 120

# Для большей безопасности и защиты от ДОС и флуда выдаём клиентам ta.key. На сервере 0, на клиентах 1.
tls-auth /etc/openvpn/.tls/ta.key 0

# Допустимые алгоритмы шифра. Надо прописывать так же и на клиенте.
cipher AES-256-CBC
#cipher AES256-SHA

# размер ключа в битах
#keysize 2048

# алгоритм хэширования
auth SHA512

# Включить сжатие. Если да, то надо прописывать и на клиенте.
comp-lzo

# Максимальное количество одновременно подключенных клиентов
max-clients 20

# От какого пользователя и группы работать серверу?
user openvpn
group openvpn

# persist-опции скажут OpenVPN при перезагрузке воздержаться от доступа
# к определенным ресурсам,
# т.к. они могут быть недоступны из-за понижения привелегий.
persist-key
persist-tun

# Файл состояния текущих соединений. Перезаписывается раз в минуту.
status /var/log/openvpn/openvpn-status.log

# Куда писать логи?
log-append /var/log/openvpn/openvpn.log

# Уровень детализации лога
verb 5

# Не записывать больше повторяющихся сообщений сразу
mute 20



Теперь можно переходить к настройкам файервола.
В iptables перед строчками, запрещающими все INPUT и FORWARD
-A INPUT -j REJECT --reject-with icmp-host-prohibited 
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

пишем:

-A INPUT -i tun0 -j ACCEPT 
-A FORWARD -i tun0 -j ACCEPT

Также добавляем строки «натизации»:
*nat 
:PREROUTING ACCEPT [4:614]
:POSTROUTING ACCEPT [18:936]
:OUTPUT ACCEPT [18:936]
-A POSTROUTING -s 10.10.20.0/24 -o eth0 -j MASQUERADE

«Рестартим» iptables:
service iptables restart

Запускаем openvpn
service openvpn start

Проверяем что сервис открыл порт да и вообще работает:
netstat -nlp | grep 1723 tcp 0 0 192.168.0.2:1723 0.0.0.0:* LISTEN

Если всё нормально, ставим OpenVPN в автозапуск:
chkconfig openvpn on


Настройка клиента OpenVPN
Поскольку дома на рабочей машине стоит CentOS, то установку и настройку клиентской части буду вести относительно этой операционки, хотя отличие для других дистрибутивов и операционных систем минимальны.
Создать каталоги, в которых будут располагаться клиентские ключевые файлы:
mkdir /etc/openvpn/.key/ mkdir /etc/openvpn/.tls/

Наисекретнейшим образом стоит перенести на будущую клиентскую машину файлы, ранее сгенерированные на сервере:
ca.crt dh2048.pem velowup.crt velowup.key

в каталог /etc/openvpn/.key/.
А файл ta.key пусть полежит в каталоге etc/openvpn/.tls.
Файл конфигурации клиента OpenVPN следующего вида:

# Укажем, что мы являемся клиентом
client
tls-client
# В каком режиме работать? Мостом (tap) или маршрутизация (tun)
dev tun

# На каком протоколе работать
proto tcp-client

# Адрес и порт сервера (Хоть IP хоть доменное имя)
remote wostok.su 1723

# Бесконечно пробовать разрешить имя хоста OpenVPN-сервера.
resolv-retry infinite

# Не «биндиться» к интерфейсу
nobind

# Стараться сохранять некоторое объекты между перезапусками
persist-key
persist-tun

# Параметры SSL/TLS.
# Смотрите файл конфигурации сервера для более
# подробного описания. Лучше всего использовать
# отдельные пары .crt/.key-файлов
# для каждого клиента. Один ca-файл
# может быть использован для всех клиентов.
ca /etc/openvpn/.key/ca.crt
dh /etc/openvpn/.key/dh2048.pem
cert /etc/openvpn/.key/velowup.crt
key /etc/openvpn/.key/velowup.key

# Если на сервере используется ключ tls-auth,
# то каждый клиент также должен иметь этот ключ.
tls-auth /etc/openvpn/.tls/ta.key 1

# Выбор криптографического шифра (cipher).
# Если опция cipher используется на сервере,
# то вы также должны указать её здесь.
cipher AES-256-CBC
auth SHA512

# Включить сжатие
comp-lzo

# Уровень журналирования
verb 4

# Не записывать повторяющиеся сообщения более чем
mute 20

# От какого пользователя и группы работать клиенту?
user openvpn
group openvpn

# Куда писать журнальные данные о работе клиента?
log-append /var/log/openvpn/openvpn_client.log
status /var/log/openvpn/status_client.log

;route 172.16.1.0 255.255.255.0
Вот, собственно, и все настройки. Дальше запуск клиента и выполнение требуемых операций из далека:
/usr/sbin/openvpn /etc/openvpn/client.conf
yum install -y pritunl-*.rpm
systemctl start mongod pritunl
systemctl enable mongod pritunl
# open "https://localhost:9700/"

пятница, 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

Split / разбить dump

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