Прописать IPv6 адрес в DNS

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

Последние несколько лет активно обсуждается вопрос дефицита запаса адресов стандарта IPv4. И судя по имеющейся информации, на сегодняшний день свободных адресов фактически не осталось. В итоге, полный переход на IPv6 неминуем.

Несколько лет назад начат процесс модернизации крупных узлов сети. На замену старому протоколу постепенно внедряется более совершенный IPv6, который позволит использовать триллионы адресов. Пока интернет постепенно переходит на IPv6, предлагаю протестировать новый стандарт на своих сайтах.

Для этого вам понадобится сервер с выделенным адресом IPv6. После настройки сетевых интерфейсов, необходимо добавить в DNS записи AAAA, которые будут указывать на адрес вашего сервера:

# Для IPv6
@      AAAA    2a00:1450:8003::93
www    AAAA    2a00:1450:8003::93

# Для IPv4
@      A       216.58.209.174
www    A       216.58.209.174

Таким образом, для одного домена, мы указываем одновременно А и AАAA записи, которые указывают на IPv4 и IPv6 адреса нашего сервера.

Пользователь для бэкапа данных 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

Настройка iptables для IPv6

Ранее я уже описывал процесс настройки iptables для Linux VPS. В этой записи я расскажу как использовать аналогичные правила для IPv6-подключения. В Linux для работы с протоколом IPv6 есть отдельная версия утилиты iptables — ip6tables.

В примере ниже вы можете увидеть набор правил для ip6tables, которые я использую на своем WEB-сервере. Как вы уже заметили, список достаточно небольшой. Разрешены входящие ICMP-пакеты и открыты порты 80 и 443.

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

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

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

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

ip6tables-save > /etc/ip6tables.conf

Чтобы восстановить настройки ip6tables:

ip6tables-restore < /etc/ip6tables.conf

Настройка 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

Авторизация прокси по NTLM в Linux

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

В корпоративной среде основанной на продуктах Microsoft, достаточно часто можно встретить использование прокси-сервера встроенного в ISA Server/Forefront TMG. Как правило, авторизация пользователей на таком прокси производится c помощью NTLM.

Если на сегодняшний день в Windows большинство программ имеют встроенную поддержку NTLM, то Linux этим похвастаться не может. Связи с чем, в данной статье речь пойдет о механизме использования прокси с NTLM аутентификацией в Linux.

Для этого мы будем использовать cntlm — небольшой, быстрый промежуточный HTTP-прокси, который возьмет функцию NTLM аутентификации на себя. Его задача пропускать через себя запросы от программ к прокси-серверу.

Установка cntlm

Чтобы установить cntlm в Debian/Ubuntu выполните следующую команду:

# apt-get install cntlm

Для установки cntlm в CentOS/RHEL необходимо подключить репозиторий Epel. После чего выполнить команду:

# yum -y install cntlm

Настройка cntlm

Откройте конфигурационный файл:

# nano /etc/cntlm.conf

Установите имя пользователя, домен, адрес и порт прокси-сервера, локальный интерфейс и порт на котором cntlm будет принимать входящие соединения:

Username        user
Domain          domain.net
Proxy           192.168.1.1:8080
Listen          127.0.0.1:3128

Запускаем cntlm:

# cntlm -c /etc/cntlm.conf

Выясним какой тип авторизации использует наш прокси-сервер:

# cntlm -c /etc/cntlm.conf -M http://ya.ru
Password:
Config profile  1/4... OK (HTTP code: 200)
----------------------------[ Profile  0 ]------
Auth            NTLMv2
PassNTLMv2      C9ACE7FB80841EB5B94D1C4E10D7DB5B
------------------------------------------------

Теперь когда мы знаем тип используемой аутентификации и хеш нашего пароля. Необходимо добавить в сntlm.conf следующие параметры:

Username        user
Domain          domain.net
Proxy           192.168.1.1:8080
Listen          127.0.0.1:3128
Auth NTLM
PassNTLMv2      C9ACE7FB80841EB5B94D1C4E10D7DB5B

Для использования cntlm в качестве локального прокси в Linux, нужно настроить переменные окружения http_proxy, https_proxy, ftp_proxy:

# export {http,https,ftp}_proxy="http://127.0.0.1:3128/"

Чтобы отключить прокси, выполните команду:

# unset {http,https,ftp}_proxy

Настройка OpenVPN через покси

Достаточно часто приходится работать в условиях ограниченного доступа к сети интернет. Область применения HTTP/HTTPS прокси достаточно узкая и используется в основном для работы браузера и прочих поддерживающих подключение через прокси программ.

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

Подробнее о установке и настройке OpenVPN вы можете прочитать в отдельной статье. Отмечу, что для работы клиента через прокси, OpenVPN должен принимать соединения на 80 или 443 порту. А для передачи данных должен использоваться протокол TCP. За данные функции отвечают следующие настройки:

port 443
proto tcp

Аналогичные настройки необходимо произвести на стороне клиента.

Если вы используете клиент OpenVPN в Windows, то его GUI поддерживает настройку соединения через прокси. В случае запуска клиента на Linux или в режиме службы, необходимо прописать адрес прокси и данные для авторизации в конфигурационном файле OpenVPN.

OpenVPN поддерживает соединения через HTTP прокси-сервер, со следующими режимами аутентификации:

  • Без проверки подлинности
  • Обычная проверка подлинности
  • NTLM аутентификация

Предположим, что наш HTTP прокси расположен в локальной сети по адресу 192.168.1.1 и принимает соединения на 8080 порту. В этом случае, необходим добавить в конфигурационный файл клиента OpenVPN следующие настройки:

# Без проверки подлинности
http-proxy 192.168.1.1 8080

# Обычная проверка подлинности
http-proxy 192.168.1.1 8080 stdin basic

# NTLM аутентификация
http-proxy 192.168.1.1 8080 stdin ntlm

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

http-proxy 192.168.1.1 8080 proxy-auth.txt ntlm

Содержимое файла proxy-auth.txt:

username
password

Настройка 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