Получение сертификата Let’s Encrypt

Ранее мною была подана заявка на участие в тестировании сервиса выдачи бесплатных SSL сертификатов Let’s Encrypt. И вот сегодня, наконец-то пришло письмо о том что я могу принять участие в тестировании и получить сертификат для указанного в заявке домена.

На данный момент процесс закрытого бета-тестирования Let’s Encrypt закончен и любой желающий может создать сертификат для своего сайта.

В этой статье я опишу процесс создания и автоматического продления сертификатов с помощью сервиса Let’s Encrypt. Я использую Nginx на всех своих сайтах, поэтому, инструкция рассчитана под использование именно этого веб-сервера.

Для автоматизации получения сертификата, Let’s Encrypt использует ACME — специальный клиент написанный на Perl. Все действия осуществляются непосредственно через консоль и после получения сертификата, дальнейшее его продление будет проходить полностью в автоматическом режиме.

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

Перед тем как перейти к процессу создания сертификатов Let’s Encrypt, необходимо определится с расположением файлов ACME. Клиент нам понадобится в дальнейшем для продления сертификатов.

В моем случае ACME будет расположен в директории home:

cd /home

Если следовать официальной инструкции, для загрузки ACME необходимо установить клиент Git:

# apt-get install git

После чего загрузить файлы командой:

# git clone https://github.com/letsencrypt/letsencrypt
# cd letsencrypt

Как альтернативный вариант, я предлагаю просто скачать zip-архив ACME с официального репозитория GitHub.

# wget https://github.com/letsencrypt/letsencrypt/archive/master.zip

Извлекаем архив и переходим в каталог с файлами:

# unzip master.zip
# mv letsencrypt-master letsencrypt
# cd letsencrypt

Для проверки владения доменом, необходимо добавить в настройки виртуального хоста Nginx:

server {
        listen 80;
        server_name test.codebeer.ru;

        root /var/www/test.codebeer.ru;

        location '/.well-known/acme-challenge' {
            default_type "text/plain";
            alias /tmp/letsencrypt-auto';
        }
}

Для уже существующего сайта, нужно добавить в секцию server алиас:

location '/.well-known/acme-challenge' {
    default_type "text/plain";
    alias /tmp/letsencrypt-auto';
}

Создание сертификата Let’s Encrypt

Есть несколько параметров запуска клиента Let’s Encrypt. Подробнее о каждом из них можно прочитать на странице официальной документации. Чтобы создать сертификат, просто выполните команды ниже:

# export DOMAINS="-d test.codebeer.ru -d www.test.codebeer.ru"
# export DIR=/tmp/letsencrypt-auto
# mkdir -p $DIR
# ./letsencrypt-auto certonly --server https://acme-v01.api.letsencrypt.org/directory -a webroot --webroot-path=$DIR --agree-dev-preview $DOMAINS

Не забудьте заменить названия доменов на свои.

В процессе генерации сертификата Let’s Encrypt необходимо будет указать email:

Enter email address (used for urgent notices and lost key recovery)

Примите условия использования:

Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.0.1-July-27-2015.pdf. You 
must agree in order to register with the ACME server at
https://acme-staging.api.letsencrypt.org/directory

Соглашаемся на сохранение вашего адреса в логах Let’s Encrypt:

NOTE: The IP of this machine will be publicly logged as having
requested this certificate. If you're running letsencrypt in manual
mode on a machine that is not your server, please ensure you're okay
with that.

Are you OK with your IP being logged?

Если проверка прошла успешно, то вы увидите следующее сообщение:

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/test.codebeer.ru/fullchain.pem. Your cert
will expire on 2016-03-06. To obtain a new version of the
certificate in the future, simply run Let's Encrypt again.
- If like Let's Encrypt, please consider supporting our work by:

Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

Сгенерированный сертификат и ключи для нашего домена будет расположены в папке:

/etc/letsencrypt/live/test.codebeer.ru/

Не меняя расположение, вам необходимо указать путь к файлам в настройка Nginx или другого веб-сервера.

Продление сертификата Let’s Encrypt

Все сертификаты Let’s Encrypt имеют срок действия равный 90 дней. Поэтому, обновлять вручную сертификаты каждые 3 месяца не совсем удобно. По словам представителей Let’s Encrypt, время жизни сертификата в будущем может быть уменьшено.

Чтобы автоматизировать процесс продления сертификата, необходимо добавить в cron скрипт:

export DOMAINS="-d test.codebeer.ru -d www.test.codebeer.ru"
export DIR=/tmp/letsencrypt-auto
mkdir -p $DIR
/home/letsencrypt/letsencrypt-auto --renew certonly --server https://acme-v01.api.letsencrypt.org/directory -a webroot --webroot-path=$DIR --agree-dev-preview $DOMAINS
service nginx restart

Пользователь для бэкапа данных MySQL

Дата: 04.12.2015Метки:

Достаточно часто можно встретить ситуацию, когда для создания дампа базы MySQL используют учетную запись root. Это не есть правильно с точки зрения безопасности. Поэтому, лучше будет создать отдельного пользователя MySQL, учетные данные которого можно использовать в скриптах.

Для начала создадим нового пользователя MySQL:

CREATE USER 'backup'@'localhost' IDENTIFIED BY 'password';

Установим ему права для бэкапа таблиц. В зависимости от используемого типа хранилища, выполните команды ниже.

Права для бэкапа данных хранилища INNODB:

GRANT SELECT ON *.* TO 'backup'@'localhost';

Права для бэкапа данных хранилища MyISAM:

GRANT SELECT, LOCK TABLES ON *.* TO 'backup'@'localhost';

Скрипт для проверки работы OpenVPN

В процессе использования клиента OpenVPN в Debian 8.2, столкнулся с проблемой, когда после длительного простоя пропадала связь с сервером. Времени выяснить причину такого поведения у меня не было, было известно только то, что в системе после длительного простоя периодически падал процесс отвечающий за работу клиента OpenVPN.

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

Добавим задание в cron:

# crontab -e

В моем случае я буду запускать скрипт для проверки работы OpenVPN каждые 5 минут:

*/5 * * * * ps -A | grep openvpn || /etc/init.d/openvpn start

Настройка DNS-сервера PDNSD

Дата: 26.11.2015Метки: ,

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

С помощью PDNSD мы сможем одновременно отправлять запросы на два различных DNSсервера. Запросы, которые не относятся к внутрисетевым ресурсам будут переадресовываться на Google DNS.

Для локального DNS-сервера, мы будем использовать быстрый и легкий в настройке PDNSD. Кроме простого кэширования, умеет разделять запросы по условию, одновременно отправлять их на несколько DNS-серверов и отдавать клиенту первый вернувшийся ответ.

Установка и настройка PDNSD

Установим PDNSD командой в терминале:

apt-get install pdnsd

В процессе необходимо будет выбрать один из шаблонов настроек, выбираем пункт «Manual».

Открываем файл:

nano /etc/default/pdnsd

Настраиваем параметры запуска PDNSD, для этого нужно изменить значение параметра START_DAEMON как указано в примере ниже:

START_DAEMON=yes

Открываем конфиг PDNSD:

nano /etc/pdnsd.conf

Добавим в него следующие параметры:

global {
        perm_cache=10240;                             // Максимальный размер кэша в килобайтах
        cache_dir="/var/cache/pdnsd";                 // Директория кэша записей DNS                           
        server_ip = 0.0.0.0;                          // Слушать запросы на всех сетевых интерфейсах
        status_ctl = on;                              // Разрешить утилиты pdnsd-ctl для управления кэшем
        min_ttl=15m;                                  // Минимальное время жизни записи в кэше
        max_ttl=1w;                                   // Максимальное время жизни записи в кэше
        timeout=10;                                   // Тайм-аут DNS-запроса
        par_queries=2;                                // Количество одновременно опрашиваемых DNS-серверов
}
// DNS-отвечающий за локальные ресурсы
server {
        label = ".localdomain";                      // Метка секции server
        ip = 10.0.1.2, 10.0.1.3;                     // Адреса локальных DNS
        timeout = 10;                                // Тайм-аут DNS-запроса
        uptest = query;                              // Метод проверки доступности сервера
        interval = 10m;                              // Интервал для теста доступности сервера
        ping_timeout = 300;                          // Тайм-аут для теста ping
}
// Google DNS
server {
        label = "recurse";
        root_server=on;
        randomize_servers = on;
        ip = 8.8.8.8, 8.8.8.4, 77.88.8.8, 77.88.8.1; // Метка секции server
        timeout = 10;                                // Тайм-аут DNS-запроса
        uptest = query;                              // Метод проверки доступности сервера
        interval = 10m;                              // Интервал для теста доступности сервера
        ping_timeout = 300;                          // Тайм-аут для теста ping
        exclude = .localdomain;                      // Исключить запросы по доменному имени
        policy = included;                           // Включающие/исключающие списки для секции server
        preset = off;                                // Состояние удаленного сервера после запуска
}

Чтобы PDNSD слушал запросы на всех интерфейсах, необходимо установить значение параметра server_ip равным 0.0.0.0. Как вариант можно указать имя или ip отдельного интерфейса.

Управление сервером PDNSD

Проверить статус DNS-сервера выполните команду:

pdnsd-ctl status

Чтобы очистить кэш PDNSD:

pdnsd-ctl empty-cache

Открыть доступ к DNS в iptables

Добавьте в iptables правила:

# Открываем DNS для всех пользователей
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -j ACCEPT

# Ограничиваем доступ по MAC
iptables -A INPUT -i eth0 -m mac --mac-source 00:00:00:00:00:00 -j ACCEPT

Настройка шлюза на Debian

Дата: 24.11.2015Метки:

В данной статье я расскажу о настройке шлюза на Debian для раздачи интернета в небольшой локальной сети. Для получения доступа к интернет, на сервере используется OpenVPN подключение. Затем используя NAT, сервер отдает интернет для других компьютеров в локальной сети.

Настройка сетевого интерфейса

Для начала настроим сетевой интерфейс eth0:

auto eth0
iface eth0 inet static
address 10.0.1.2
netmask 255.255.255.0
post-up route add -net 10.0.2.0 netmask 255.255.255.0 eth0
post-up route add -net 10.0.3.0 netmask 255.255.255.0 eth0

При необходимости прописываем статические маршруты для локальной сети.

В содержимое файла:

# nano resolv.conf

Необходимо добавить адреса DNS-серверов:

nameserver 8.8.8.8
nameserver 8.8.4.4

Настройка подключения OpenVPN

Выполним установку и настройку клиента OpenVPN.

# apt-get install openvpn

Переходим в каталог указанный ниже, копируем в него сертификаты и ключи:

# cd /etc/openvpn

Создаем файл с настройками clent.conf, в моем случае я использовал следующие параметры:

client
dev tun
proto tcp
remote 90.90.90.90 1194
nobind
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
auth SHA512
tls-auth ta.key 1
cipher BF-CBC
comp-lzo adaptive
status /var/log/openvpn-status.log
log /var/log/openvpn.log
verb 3
mute 20
route 0.0.0.0 0.0.0.0

Несмотря на то, что на сервере прописан параметр:

push "redirect-gateway def1"

После подключения к серверу OpenVPN, никаких изменений в таблице маршрутизации не происходило. Для того чтобы после подключения клиента OpenVPN в Debian изменялся маршрут по умолчанию, необходимо добавит в clent.conf следующий параметр:

route 0.0.0.0 0.0.0.0

После того как в системе подымется интерфейс tun0, можно переходить к дальнейшей настройке.

Настройка NAT

Включаем на сервере поддержку IP forwarding, для этого откройте файл:

# nano /etc/sysctl.conf

И раскомментируйте в нем следующую строку:

#net.ipv4.ip_forward=1

Чтобы изменения вступили в силу, необходимо загрузим переменные ядра:

# sysctl -p

Далее настраиваем NAT в iptables. По очереди в консоли выполните следующие команды:

iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.0.1.0/24 -j ACCEPT                        # Разрешить форвардинг для всей подсети
iptables -A FORWARD -m mac --mac-source 00:00:00:00:00:00 -j ACCEPT # Или ограничить по MAC
iptables -P FORWARD DROP
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

Сохраняем правила в файл:

# iptables-save > /etc/iptables.conf

Чтобы правила автоматически применялись при загрузке Debian, необходимо их прописать в rc.local:

# nano /etc/rc.local

Добавьте в него команду ниже:

iptables-restore < /etc/iptables.conf

Теперь, если прописать адрес 10.0.1.2 в качестве шлюза, на компьютере должен появится интернет.

Настройка правил iptables

После того как мы настроили все основные параметры, добавим в iptables правила для безопасности сервера:

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -I INPUT 1 -i lo -j ACCEPT

iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 6 -j ACCEPT
iptables -I INPUT -m mac --mac-source 3E:D7:88:A6:66:8E -j ACCEPT                   # Открыть все порты
iptables -I INPUT -p tcp --dport 22 -m mac --mac-source 48:5B:39:AE:6D:7D -j ACCEPT # Открыть порт SSH

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

Сохраняем правила в файл:

# iptables-save > /etc/iptables.conf

Настройка OpenVPN в Debian

Рассмотрим процесс установки OpenVPN на примере дистрибутива Debian 8.2. Задача состоит том, чтобы использовать сервер на базе OpenVPN в качестве шлюза для выхода в интернет. В результате мы получаем белый ip, можем обойти ограничения провайдера и дополнительно сжать и зашифровать весть трафик, который идет через сервер.

Я выбрал OpenVPN благодаря его надёжности и безопасности. По сравнению с аналогичными туннельными протоколами, OpenVPN абсолютно не прихотлив к способу доступа к сети интернет. При необходимости, клиент OpenVPN можно настроить даже через HTTP прокси-сервер.

Установка сервера OpenVPN

Для работы OpenVPN необходима поддержка TUN/TAP интерфейса на сервере. Как правило, с этим не должно возникнуть проблем при использовании физической машины или виртуализации KVM.

А вот в случае использования OpenVZ, необходимо активировать поддержку TUN/TAP в настройках контейнера. Чтобы проверить, что система поддерживает TUN-интерфейс, необходимо выполнить команду:

# ls -l /dev/net/tun
crw-rw-rw- 1 root root 10, 200 Nov 19 23:02 /dev/net/tun

Установим OpenVPN на сервере:

# apt-get install openvpn

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

# mkdir /etc/openvpn/easy-rsa/

Копируем в нее утилиты и конфиги для работы с ключами:

# cp -r /usr/share/easy-rsa/* /etc/openvpn/easy-rsa/

Переходим в директорию:

# cd /etc/openvpn/easy-rsa/

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

# nano vars

Меняем следующие строки на свои значения:

export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="[email protected]"

После правки vars необходимо инициировать переменные:

# source ./vars
NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys

Очищаем каталог keys/server от старых сертификатов и ключей:

# ./clean-all

Создаем корневой сертификат:

# ./build-ca

В квадратных скобках указаны значения по умолчанию, которые были заданы в файле vars. Если вы хотите оставить значения без изменений, нужно просто нажимать клавишу «Ввод».

Далее генерируем сертификаты сервера и клиента:

# ./build-key-server server
# ./build-key client1
# ./build-key client2

Для каждого клиента нужно сгенерировать отдельные ключи.

Генерируем ключ Диффи — Хеллмана:

# ./build-dh

Cоздаем ключ для tls-аутификации:

# openvpn --genkey --secret keys/ta.key

Все сгенерированные сертификаты и ключи находятся в директории:

/etc/openvpn/easy-rsa/keys/

Копируем сертификаты и ключи сервера в директорию OpenVPN:

# cd keys
# cp server.crt server.key ca.crt dh2048.pem ta.key /etc/openvpn/

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

client1.crt
client1.key
ca.crt
ta.key

На этом этапе установка OpenVPN закончена. Теперь выполним настройку сервера OpenVPN.

Настройка сервера OpenVPN

Копируем и распаковываем пример конфигурационного файла в содержимое директории OpenVPN:

# cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
# gzip -d /etc/openvpn/server.conf.gz

В зависимости от наших потребностей, изменяем настройки сервера OpenVPN:

nano /etc/openvpn/server.conf

Пример настройки OpenVPN:

local 90.90.90.90                    # Внешний ip сервера, указываем если на машине несколько адресов.
port 1194                            # Порт на котором будет принимать соединения сервер OpenVPN.
proto tcp                            # Для лучшего быстродействия рекомендуется указать udp.
                                     # Если вы используете прокси, необходимо указать tcp.
dev tun                              # Интерфейс туннеля
ca ca.crt                            # Путь к корневому сертификату
cert server.crt                      # Путь к сертификату сервера
key server.key                       # Путь к ключу сервера
dh dh1024.pem                        # Путь к ключу Диффи - Хеллмана
server 10.8.0.0 255.255.255.0        # Пул DHCP виртуальной сети OpenVPN. Работает только с TLS-клиентами в режиме tun.
ifconfig-pool-persist ipp.txt        # Запоминать динамически выданные адреса.
;client-config-dir ccd               # Директория для клиентских конфигов
;push "route 10.0.1.1 255.255.255.0" # Передаем маршрут клиенту (сеть-клиента).
push "redirect-gateway def1"         # Установить шлюзом по умолчанию удаленный сервер.
;push "dhcp-option DNS 8.8.8.8"      # Передаем DNS клиенту.
;client-to-client                    # Если нужно, чтобы клиенты видели друг друга.
keepalive 10 120                     # Каждые 10 секунд посылать ping, перезапустить туннель если сервер не отвечает в течении 120 секунд.
tls-server                           # Включаем TLS
auth SHA512                          # Для аутентификации используются ключи SHA512
tls-auth ta.key 0                    # Путь к ключу TLS
cipher BF-CBC                        # Метод шифрования
comp-lzo adaptive                    # Включить сжатие
user nobody                          # Права, с которыми будет работать OpenVPN.
group nogroup
persist-key                          # Не перечитывать файлы ключей при перезапуске туннеля.
persist-tun                          # Оставить без изменения устройства tun/tap при перезапуске OpenVPN.
status openvpn-status.log            # Лог с информацией о текущих соединениях.
log /var/log/openvpn.log             # Путь к лог-файлу.
verb 3                               # Уровень детализации лога.
mute                                 # В лог будет записываться до 10 сообщений из одной категории.

Создадим директорию для клиентских настроек:

mkdir /etc/openvpn/ccd

После завершения настройки OpenVPN, перезагружаем сервер:

reboot

В случае успешного запуска OpenVPN в системе должен появится новый tun0 интерфейс:

# ifconfig
tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:10.8.0.1  P-t-P:10.8.0.2  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

Это означает, что OpenVPN сервер запущен. В случае проблем с запуском OpenVPN, используем лог-файл:

# nano /var/log/openvpn.log

Настройки маршрутизации для клиентов OpenVPN

После подключения клиента к серверу OpenVPN, шлюз будет изменен на IP виртуальной сети сервера. Если клиент OpenVPN находится в локальной сети, вам необходимо дополнительно настроить маршрутизацию для доступа к ресурсам внутри сети. Для этого создаем файл в каталоге ccd с тем же именем ключа клиента:

# nano /etc/openvpn/ccd/client1

Добавим в файл следующие параметры:

push "route 192.168.1.0 255.255.255.0"
push "dhcp-option DNS 192.168.1.1"

Первая строка добавляет маршрут в локальную сеть клиента. Вторая строка задает DNS-сервер, который будет использоваться после подключения.

Включаем NAT на OpenVPN сервере

Чтобы использовать OpenVPN для выхода в интернет, на сервере необходимо задать правило для маршрутизации трафика из сети OpenVPN в локальную сеть или сеть интернет-провайдера.

Включаем поддержку IP forwarding, открываем в файл:

# nano /etc/sysctl.conf

В котором необходимо раскомментировать строку:

#net.ipv4.ip_forward=1

Загрузим переменные ядра:

# sysctl -p

Прописываем правила iptables. Нужно разрешить клиентам из подсети 10.8.0.0/24 доступ в интернет, разрешить принимать пакеты из интернета и пропустить трафик клиентов через NAT.

# iptables -A FORWARD -i tun0 -j ACCEPT
# iptables -A FORWARD -i tun0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
# iptables -A FORWARD -i eth0 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Замените eth0 на имя своего внешнего интерфейса. Следует отметить, правило MASQUERADE создает нагрузку на процессор. Поэтому, предпочтительнее использовать SNAT:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source ВНЕШНИЙ_IP

Сохраним и добавим правила в автозагрузку:

# iptables-save > /etc/iptables.conf
# echo "iptables-restore < /etc/iptables.conf" >> /etc/rc.local

Настройка клиента OpenVPN

Если OpenVPN не установлен, для установки клиента в Debian или Ubuntu необходимо выполнить команду:

# apt-get install openvpn

Копируем на компьютер клиента ключи и сертификаты из списка ниже:

client1.crt
client1.key
ca.crt
ta.key

Переносим ключи и сертификаты в директорию OpenVPN:

/etc/openvpn/

Копируем и распаковываем пример конфигурационного файла в содержимое директории OpenVPN:

# cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/

Открываем файл в текстовом редакторе:

nano /etc/openvpn/client.conf

Добавим в содержимое файла следующие параметры:

client
dev tun
proto tcp
remote 90.90.90.90 1194                        # Адрес и порт сервера OpenVPN
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
tls-auth ta.key 1
auth SHA512
cipher BF-CBC
comp-lzo adaptive
;log /var/log/openvpn.log
;status /var/log/openvpn-status.log
verb 3
mute 20
;route 192.168.1.0 255.255.0.0                 # Можно прописать маршрут в локальную сеть, если это не сделано на сервере.

Для Windows необходимо положить файл client.ovpn в папку:

C:\Program Files\OpenVPN\config\

Опции протокола, шифрования и сжатия у клиента и сервера должны быть одинаковые. При необходимости вы можете настроить OpenVPN через прокси. На этом настройка OpenVPN в Debian закончена, теперь пора проверить его работоспособность. Перезапустим OpenVPN:

service openvpn restart

Пингуем 10.8.0.1, если пинг проходит, значит все хорошо.

PING 10.8.0.1 (10.8.0.1) 56(84) bytes of data. 64 bytes from 10.8.0.1: icmp_req=1 ttl=64 time=30 ms

Настройка iptables на VPS

Дата: 19.11.2015

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

Основной принцип настройки iptables следующий: сначала мы закрываем доступ ко всем портам на сервере, а затем с помощью отдельных правил открываем все необходимые порты на сетевых интерфейсах.

В качестве примера рассмотрим настройки iptables на Web-сервере. Мы оставляем открытыми для всех HTTP/HTTPS порты сервера. Для доступа к серверу по SSH, открыт ограниченный доступ по IP. Дополнительно я разрешил ICMP пакеты, для того чтобы можно было пропинговать сервер.

*filter
-F

-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT

-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-I INPUT 1 -i lo -j ACCEPT

-A INPUT -p icmp --icmp-type 8 -j ACCEPT
-A INPUT -p icmp --icmp-type 6 -j ACCEPT
-A INPUT -p tcp -s 80.80.80.80 --dport 22 -j ACCEPT

-A INPUT -p tcp --dport http -j ACCEPT
-A INPUT -p tcp --dport https -j ACCEPT

COMMIT

Для того чтобы применить настройки, их необходимо сохранить в текстовый файл iptables.conf, а затем восстановить правила с помощью команды:

iptables-restore < /etc/iptables.conf

Для применения настроек iptebles после загрузки Debian/Ubuntu, добавьте эту команду в файл /etc/rc.local

Cменить пароль root

Дата: 19.11.2015Метки:

Чтобы сменить пароль root для операционной системы CentOS/Fedora/Debian, необходимо в терминале выполнить команду:

# passwd root

После чего дважды новый пароль.

Сохранить/восстановить настройки iptables

Дата: 19.11.2015Метки:

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

iptables-save > /etc/iptables.conf

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

iptables-restore < /etc/iptables.conf

Если необходимо автоматически восстанавливать настройки iptables после каждой перезагрузки сервера, добавьте команду в содержимое файла /etc/rc.conf

Установить модуль PhpRedis для PHP 7

Дата: 12.11.2015Метки: ,

Для использования Redis в PHP необходимо использовать дополнительные модули, либо такие php-библиотеки как Predis. С точки зрения скорости, более предпочтителен первый вариант. По моему опыту, производительность сервера PHP 7 в сочетании с модулем PhpRedis примерно в два раза выше по сравнению с использованием для этих целей библиотеки Predis.

Информацию по установке PHP 7 в Debian можно прочитать в этой статье. В данной записи речь пойдет о том как установить модуль PhpRedis для PHP 7. Мне не удалось найти PhpRedis в виде готового для использования в PHP 7 модуля. Поэтому, чтобы установить PhpRedis, придется собирать модуль из исходников. Для этого скачиваем исходники с репозитория GitHub:

cd /usr/src
wget https://github.com/edtechd/phpredis/archive/php7.zip

Распаковываем содержимое архива:

unzip php7.zip

Переходим в содержимое директории:

cd /usr/src/phpredis-php7

Если вы хотите хранить в базе Redis такие файлы как изображения или сжатые GZIP страницы, вам необходима поддержка модулем сериализации. Для этого понадобится библиотека igbinary.h.

mkdir /usr/src/phpredis-php7/ext
cd /usr/src/phpredis-php7/ext
wget https://github.com/igbinary/igbinary/archive/php7-dev-playground2.zip
unzip php7-dev-playground2.zip
mv igbinary-php7-dev-playground2 igbinary
cd /usr/src/phpredis-php7

С помощью команды phpize, необходимо выполнить подготовку окружения PHP-расширения:

phpize

В моем случае PHP 7 был установлен из исходников, поэтому необходимо указать полный путь:

/usr/local/php7/bin/phpize

Если вы не знаете расположение файла, его можно найти с помощью команды:

find -name phpize

Далее выполним команду:

./configure

В процессе я получил следующую ошибку:

Cannot find php-config. Please use --with-php-config=PATH

Пользуясь поиском, находим расположение файла php-config. В моем случае, файл расположен по следующему пути /usr/local/php7/bin/php-config. Затем повторно выполним команду:

./configure --with-php-config=/usr/local/php7/bin/php-config 
--enable-redis-igbinary

Выполним компиляцию модуля PhpRedis:

make

Далее необходимо вручную скопировать файл redis.so в каталог модулей PHP. А затем указать путь к файлу. Следует отметить, что расположения файлов и директорий указанных ниже, может отличаться от ваших.

cp modules/redis.so /usr/local/php7/modules

Указываем путь к файлу модуля в файле php.ini:

extension=/usr/local/php7/modules/redis.so

Чтобы применить настройки перезапусти PHP-FPM:

service php7-fpm restart