Все о VPN: как настроить свой собственный VPN с OpenVPN (часть 3)

Наступил 2017 год, и использование VPN стало простым делом. Между множеством внешних проблем конфиденциальности и вашим интернет-провайдером, способным продавать историю просмотров, нет никаких оснований не использовать ее.

Конечно, вы можете оплатить одну из сотен услуг VPN, но, опять же, вы полагаетесь на кого-то в своих данных. Большинство из них действительно хороши, но если вы хотите получить полный контроль, вы можете создать свой собственный VPN на виртуальном частном сервере (VPS) или арендовать свой собственный частный сервер, если вы чувствуете, что с ним действительно хардкор.

Все, что вам нужно для создания VPN, — это программное обеспечение OpenVPN с открытым исходным кодом и Linux (или BSD). Конфигурация может быть задействована, но не исключено, что кто-то, обладающий даже базовыми навыками Linux, сможет реализовать такой дистрибутив, как Ubuntu.

Для этого руководства вам понадобится VPS с Ubuntu. Вы можете легко подобрать его у кого-то вроде DigitalOcean или Linode. Следуйте их основным инструкциям по безопасности для настройки. Убедитесь, что вы не допускаете базовых ошибок, таких как разрешение root-доступа через SSH.

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

Получение того, что вам нужно

Быстрые ссылки

  • Получение того, что вам нужно
  • Настройте брандмауэр
    • Найти интерфейс
    • Основы Iptables
    • Настройте свои правила
      • Loopback
      • пинг
      • SSH
      • OpenVPN
      • DNS
      • HTTP / S
      • NTP
      • TUN
      • логирование
      • Отклонить все остальное
      • NAT маскарадинг
    • Переадресация трафика IPv4
    • Остановите все соединения IPv6
    • Импорт и сохранение в Iptables

Ubuntu упаковывает и распространяет OpenVPN в своих репозиториях. Вам нужно только использовать apt для его установки. Вам также понадобится инструмент для генерации ключей шифрования. Установите их обоих.

$ sudo apt install openvpn easy-rsa

Настройте брандмауэр

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

Iptables — это основной брандмауэр для Linux, и он является вашим лучшим вариантом для контроля доступа к портам Ubuntu. Он уже установлен, поэтому вы можете приступить к настройке правил брандмауэра.

Найти интерфейс

Прежде чем начать писать правила в iptables, выясните, с каким интерфейсом ваш сервер подключен к Интернету. Запустите ifconfig для отображения ваших сетевых интерфейсов. Тот, у которого есть inet addr: соответствующий IP-адрес, к которому вы подключены, является правильным интерфейсом.

Основы Iptables

Обычно не очень хорошая идея произвольно копировать и вставлять вещи в терминал из Интернета. Это особенно верно, когда вы имеете дело с вопросами безопасности. Итак, потратьте некоторое время, чтобы немного узнать о правилах iptables, прежде чем начинать их вводить.

Взгляните на этот пример правила iptables.

-ВХОД -i eth0 -p tcp -m состояние -УСТОЙЧИВОЕ СОСТОЯНИЕ -sport 443 -j ПРИНЯТЬ

Хорошо, так -А означает, что вы собираетесь добавить новое правило. Тогда INPUT означает, что это будет касаться ввода на ваш сервер. Также есть ВЫХОД. Флаг -i сообщает iptables, для какого интерфейса это правило предназначено. Вы можете указать, для какого протокола это правило, с -p. Это правило обрабатывает tcp. -m указывает условие, которому должно соответствовать соединение. В этом случае оно должно соответствовать указанному состоянию. Конечно, затем –state указывает состояние, в данном случае УСТАНОВЛЕННОЕ соединение. Следующая часть сообщает iptables, для какого порта предназначено это правило. Это порт 443, порт HTTPS, здесь. Последний флаг -j. Он обозначает «прыжок» и сообщает iptables, что делать с соединением. Если это соединение удовлетворяет всем требованиям правила, iptables примет это.

Настройте свои правила

Итак, вы должны иметь общее представление о том, как работают правила iptables. Остальная часть этого раздела расскажет вам, как настроить ваши правила по частям.

Лучший способ создать набор правил iptables — создать файл, содержащий все из них. Затем вы можете импортировать все это в iptables сразу. Установка правил по одному может привести к путанице, особенно если вы начинаете новый набор правил с нуля.

Создайте файл в каталоге / tmp для создания ваших правил.

$ vim / tmp / ipv4

Запустите этот файл с помощью * filter. Это говорит iptables, что то, что следует, будет правилами для фильтрации пакетов.

Loopback

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

-INPUT -i lo -j ПРИНЯТЬ
-ВХОД! -i lo -s 127.0.0.0/8 -j ОТКЛОНИТЬ
-A ВЫХОД -o lo -j ПРИНЯТЬ

пинг

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

-A INPUT -p icmp -m состояние --state NEW --icmp-type 8 -j ПРИНЯТЬ
-A INPUT -p icmp -m состояние - СОСТОЯНИЕ УСТАНОВЛЕНО, СВЯЗАНО -j ПРИНЯТЬ
-A ВЫХОД -p icmp -j ПРИНЯТЬ

SSH

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

Также может быть хорошей идеей изменить ваши соединения SSH с порта 22, так как это по умолчанию, что потенциальные злоумышленники будут пытаться. Если вы это сделаете, обязательно измените его в правилах iptables.

-ВХОД -i eth0 -p tcp -m состояние - состояние НОВОЕ, УСТАНОВЛЕНО --dport 22 -j ПРИНЯТЬ
-A ВЫХОД -o eth0 -p tcp -m состояние - УСТАНОВЛЕНО --sport 22 -j ПРИНЯТЬ

OpenVPN

Этот следующий фрагмент разрешает трафик к серверу OpenVPN и от него через UDP.

-ВХОД -i eth0 -p udp -m состояние - состояние НОВОЕ, УСТАНОВЛЕНО --dport 1194 -j ПРИНЯТЬ
-A ВЫХОД -o eth0 -p udp -m состояние - СОСТОЯНИЕ УСТАНОВЛЕНО --sport 1194 -j ПРИНЯТЬ

DNS

Теперь разрешите DNS-соединения через UDP и TCP. Вы хотите, чтобы ваш VPN обрабатывал DNS, а не ваш провайдер. Это одна из причин, по которой вы изначально настраиваете VPN.

-ВХОД -i eth0 -p udp -m состояние - СОСТОЯНИЕ УСТАНОВЛЕНО --sport 53 -j ПРИНЯТЬ
-A ВЫХОД -o eth0 -p udp -m состояние --Новое состояние, УСТАНОВЛЕНО --dport 53 -j ПРИНЯТЬ
-A ВХОД -i eth0 -p tcp -m состояние - СОСТОЯНИЕ УСТАНОВЛЕНО --sport 53 -j ПРИНЯТЬ
-A ВЫХОД -o eth0 -p tcp -m состояние - состояние НОВОЕ, УСТАНОВЛЕНО --dport 53 -j ПРИНЯТЬ

HTTP / S

Чтобы Ubuntu мог обновляться самостоятельно, вам нужно добавить набор правил, разрешающих исходящее соединение HTTP и HTTPS. Обратите внимание, что эти правила позволяют серверу только инициировать HTTP-соединения, поэтому вы не можете использовать его в качестве веб-сервера или подключаться к нему через порт 80 или порт 443.

-ВХОД -i eth0 -p tcp -m состояние - СОСТОЯНИЕ УСТАНОВЛЕНО --sport 80 -j ПРИНЯТЬ
-A ВХОД -i eth0 -p tcp -m состояние - СОСТОЯНИЕ УСТАНОВЛЕНО --sport 443 -j ПРИНЯТЬ
-A ВЫХОД -o eth0 -p tcp -m состояние --Новое состояние, УСТАНОВЛЕНО --dport 80 -j ПРИНЯТЬ
-A ВЫХОД -o eth0 -p tcp -m состояние --Новое состояние, УСТАНОВЛЕНО --dport 443 -j ПРИНЯТЬ

NTP

Чтобы часы вашего сервера работали правильно, вам понадобится NTP. NTP позволяет вашему серверу синхронизироваться с серверами времени по всему миру. Наличие неправильных часов на вашем сервере может вызвать проблемы с подключением, поэтому рекомендуется использовать NTP. Еще раз, вы должны принимать только исходящие и уже установленные соединения.

-ВХОД -i eth0 -p udp -m состояние - СОСТОЯНИЕ УСТАНОВЛЕНО --sport 123 -j ПРИНЯТЬ
-A ВЫХОД -o eth0 -p udp -m состояние --Новое состояние, УСТАНОВЛЕНО --dport 123 -j ПРИНЯТЬ

TUN

Разблокируйте интерфейс TUN, который OpenVPN использует для туннелирования трафика.

-ВХОД -i tun0 -j ПРИНЯТЬ
-A ВПЕРЕД -i tun0 -j ПРИНЯТЬ
-A ВЫХОД -o tun0 -j ПРИНЯТЬ

Вы должны разрешить TUN пересылать трафик на ваш обычный интерфейс для VPN. Этот IP-адрес вы найдете в конфигурации OpenVPN. Если вы измените его в конфигурации, измените его и в своих правилах.

-ВПЕРЕД -i tun0 -o eth0 -s 10.8.0.0/24 -j ПРИНЯТЬ
-A ВПЕРЕД -m состояние - УСТАНОВЛЕНО, СВЯЗАНО -j ПРИНЯТЬ

логирование

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

-A INPUT -m limit –limit 3 / min -j LOG –log-prefix «iptables_INPUT_denied:» –log-level 4
-FORWARD -m limit –limit 3 / min -j LOG –log-prefix «iptables_FORWARD_denied:» –log-level 4
-OUTPUT -m limit –limit 3 / min -j LOG –log-prefix «iptables_OUTPUT_denied:» –log-level 4

Отклонить все остальное

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

-ВХОД -j ОТКЛОНИТЬ
-А ВПЕРЕД -j ОТКАЗАТЬ
-А ВЫХОД -j ОТКЛОНИТЬ

Закройте файл с помощью команды COMMIT, чтобы iptables передал все правила.

OpenVPN правила iptablesOpenVPN правила iptables

NAT маскарадинг

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

$ sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Переадресация трафика IPv4

Вам потребуется включить пересылку трафика IPv4, чтобы он мог проходить между VPN и фактическим сетевым интерфейсом вашего сервера. Откройте /etc/sysctl.d/99-sysctl.conf с помощью sudo.

Найдите строку ниже и раскомментируйте ее, удалив #.

net.ipv4.ip_forward = 1

Остановите все соединения IPv6

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

Прежде чем устанавливать правила для iptables, вы должны отключить IPv6 везде в системе.

Добавьте следующие строки в /etc/sysctl.d/99-sysctl.conf. Если вы закрыли его из предыдущего раздела, снова откройте его с помощью sudo.

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
net.ipv6.conf.eth0.disable_ipv6 = 1

Активируйте свои изменения.

$ sudo sysctl -p

Прокомментируйте все строки IPv6 в / etc / hosts. Тебе здесь тоже понадобится sudo.

# :: 1 ip6-localhost ip6-loopback
# fe00 :: 0 ip6-localnet
# ff00 :: 0 ip6-mcastprefix
# ff02 :: 1 ip6-allnodes
# ff02 :: 2 ip6-allrouters

Наконец, вы можете написать правила iptables IPv6. Создайте для них файл в / tmp / ipv6.

*фильтр
-ВХОД -j ОТКЛОНИТЬ
-А ВПЕРЕД -j ОТКАЗАТЬ
-А ВЫХОД -j ОТКЛОНИТЬ
COMMIT

Видите, они простые. Отклонить все.

Импорт и сохранение в Iptables

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

Начните с очистки всего остального, что там есть. Вы не хотите, чтобы какие-либо старые правила мешали.

$ sudo iptables -F  sudo iptables -X

Импортируйте ваши правила IPv4 и IPv6.

$ sudo iptables-restore < /tmp/ipv4
$ sudo ip6tables-restore < /tmp/ipv6

Вы, вероятно, никогда не захотите делать это снова. Итак, вам понадобится новый пакет, чтобы навсегда сохранить ваши правила.

$ sudo apt install iptables-persistent

Во время установки пакет попросит вас сохранить существующие правила. Ответьте «Да».

Если вы внесете изменения позже, вы также можете обновить сохраненные конфигурации.

$ sudo service netfilter-persistent save

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

Кликните сюда: Следующая Страница

Ссылка на основную публикацию