megavolt0

megavolt0

пикабушник
поставил 97096 плюсов и 203 минуса
отредактировал 1 пост
проголосовал за 1 редактирование
41К рейтинг 3066 подписчиков 1168 комментариев 94 поста 50 в горячем
1 награда
более 1000 подписчиков
53

Иногда от самоизоляции есть польза


А я просто хочу похвастаться, потому что распирает. У меня дочка, за полтора месяца, работая с преподавателем дистанционно! научилась играть на флейте.

Вот одна из мелодий.

Без рейтинга.

41

Pritunl — поставим энтерпрайз на службу человеку

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

Примечание 1: это статья рассчитана на нулевой или начальный уровень читающего. Очень подробно и просто, без занудства.

Примечание 2: Всё описанное в этой статье приведено только в обучающих целях и не должно быть использовано для противоправных действий.

Примечание 3: статья может и будет дорабатываться. Наиболее актуальный вариант как всегда в первоисточнике. Да и конфиги там выглядят как надо.

Pritunl — поставим энтерпрайз на службу человеку VPN, Собственный VPN-сервер, Linux, Длиннопост

Pritunl — тот же OpenVPN, но с преферансом и куртизанками. Почитать можно здесь. На самом деле Pritunl является оболочкой для OpenVPN, предоставляя удобный графический интерфейс для создания конфигураций OpenVPN сервера, создания пользователей, генерации ключей и т.д. Продукт предназначен для энтерпрайза, но есть и бесплатная версия. Её функционал урезан, однако для личных целей или для малого офиса его вполне достаточно. Установка не сложная, советую попробовать.

Нам понадобится любой VPS с поддержкой TUN/TAP. Pritunl можно поставить практически на любую операционную систему. Про это можно почитать здесь. В рамках данной статьи будет применяться CentOS 7.

Обновим сервер командами:

yum -y install epel-release

yum -y update

Для начала настройте безопасную аутентификацию на сервере, как написано здесь. Далее настроим правила файрволла. В текущей статье будет настраиваться следующая конфигурация: порт для web-консоли — 4445, порт для подключение ovpn-клиентов — 443. Для настроийки файрволла используйте вот эту инструкцию. Единственный момент — в файл ipt-set вписывайте не то, что указано в инструкции, а вот такое содержимое:

#!/bin/sh

IF_EXT="venet0"

VPN_PORT="443"

WEBADMIN_PORT="4445"

IPT="/sbin/iptables"

IPT6="/sbin/ip6tables"

# flush

$IPT --flush

$IPT -t nat --flush

$IPT -t mangle --flush

$IPT -X

$IPT6 --flush

# default

$IPT -P INPUT DROP

$IPT -P OUTPUT DROP

$IPT -P FORWARD DROP

$IPT6 -P INPUT DROP

$IPT6 -P OUTPUT DROP

$IPT6 -P FORWARD DROP

# loopback

$IPT -A INPUT -i lo -j ACCEPT

$IPT -A OUTPUT -o lo -j ACCEPT

$IPT6 -A INPUT -i lo -j ACCEPT

$IPT6 -A OUTPUT -o lo -j ACCEPT

# allow forwarding

echo 1 > /proc/sys/net/ipv4/ip_forward

# INPUT chain

# #########################################

$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

$IPT6 -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# ssh

$IPT -A INPUT -p tcp --dport 22 -j ACCEPT

# pritunl_web

$IPT -A INPUT -p tcp --dport $WEBADMIN_PORT -j ACCEPT

$IPT -A INPUT -p tcp --dport 80 -j ACCEPT

# pritunl_vpn

$IPT -A INPUT -p tcp --dport $VPN_PORT -j ACCEPT

$IPT -A INPUT -p udp --dport $VPN_PORT -j ACCEPT

# OUTPUT chain

# #########################################

$IPT -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

$IPT6 -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

Не забудьте про правильное имя внешнего интерфейса в переменной IF_EXT.

Если всё сделано верно, то по команде

iptables -L -n

будет получен такой вывод:

Pritunl — поставим энтерпрайз на службу человеку VPN, Собственный VPN-сервер, Linux, Длиннопост

Обратите внимание, что открыт также порт 80. Это нужно для получения и обновления сертификатов от LetsEncrypt для нашей web-консоли. Не лишним будет проверить, что этот порт не занят. Такое может быть, если при установке операционной системы сразу установлен apache или иной web-сервер. Выполните команду:

netstat -tulnp | grep 80

В ответ мы должны получить ровно ничего, а значит порт свободен.

Если система ругается, что -bash: netstat: command not found, то выполняем команду:

yum install net-tools -y

Теперь пробуем:

netstat -tulnp | grep 80

Если в выводе команды видим:

Pritunl — поставим энтерпрайз на службу человеку VPN, Собственный VPN-сервер, Linux, Длиннопост

то значит порт занят, в данном случае, службой httpd. Остановим её и уберем из автозагрузки:

systemctl stop httpd

systemctl disable httpd

Таким же способом можно проверить незанятость порта 443.

Теперь добавим репозиторий mongodb командой:

tee /etc/yum.repos.d/mongodb-org-4.0.repo << EOF

[mongodb-org-4.0]

name=MongoDB Repository

baseurl=https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.0/x86_64...

gpgcheck=1

enabled=1

gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc

EOF

Добавим репозиторий pritunl командой:

tee /etc/yum.repos.d/pritunl.repo << EOF

[pritunl]

name=Pritunl Repository

baseurl=https://repo.pritunl.com/stable/yum/centos/7/

gpgcheck=1

enabled=1

EOF

Импортируем ключи:

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7....

gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 7568D9BB55FF9E5287D586017AE645C0CF8E292A

gpg --armor --export 7568D9BB55FF9E5287D586017AE645C0CF8E292A > key.tmp; rpm --import key.tmp; rm -f key.tmp

Теперь можно установить mongodb и pritunl командами:

yum -y install pritunl mongodb-org

Запустим службы mongodb и pritunl и добавим в автозагрузку mongodb:

systemctl start mongod pritunl

systemctl enable mongod

Запустите приведенные ниже команды, чтобы увеличить ограничение на количество открытых файлов на сервере. Это нужно для нормальной работы mongodb:

sh -c 'echo "* hard nofile 64000" >> /etc/security/limits.conf'

sh -c 'echo "* soft nofile 64000" >> /etc/security/limits.conf'

sh -c 'echo "root hard nofile 64000" >> /etc/security/limits.conf'

sh -c 'echo "root soft nofile 64000" >> /etc/security/limits.conf'

Когда вы запускаете Pritunl в первый раз, на веб-сервере, работающем через порт 443, вам будет показано приглашение настроить базу данных. Программа установки базы данных запросит ключ установки и URI MongoDB. Чтобы получить ключ установки запустите команду:

pritunl setup-key

В ответ получите тот самый setup-key из цифр и букв.

Теперь можно перейти по адресу https://[IP-адрес вашего сервера] в браузере. Так как сертификат для https пока самоподписанный, то увидим предупреждение. Соглашаемся:

Pritunl — поставим энтерпрайз на службу человеку VPN, Собственный VPN-сервер, Linux, Длиннопост

Получаем приглашение настроить базу данных:

Pritunl — поставим энтерпрайз на службу человеку VPN, Собственный VPN-сервер, Linux, Длиннопост

Используем секретный ключ, полученный ранее командой pritunl setup-key. Строчку URI не трогаем.

Pritunl — поставим энтерпрайз на службу человеку VPN, Собственный VPN-сервер, Linux, Длиннопост

Некоторое время будет идти создание и настройка базы данных.

Pritunl — поставим энтерпрайз на службу человеку VPN, Собственный VPN-сервер, Linux, Длиннопост

После это появится запрос логина и пароля.

Pritunl — поставим энтерпрайз на службу человеку VPN, Собственный VPN-сервер, Linux, Длиннопост

Логин и пароль получим в ssh-консоли командой:

pritunl default-password

Вводим логин и пароль и попадаем в web-консоль. Нас сразу попросят сделать базовые настройки.

Pritunl — поставим энтерпрайз на службу человеку VPN, Собственный VPN-сервер, Linux, Длиннопост

Здесь вам нужно сделать как инимум одну настройку: поменять порт с 443 на 4445. Также рекомендую изменить имя пользователя и пароль с дефолтных на свои.

Также, если у Вас есть доменное имя и настроена DNS-запись на IP-адрес сервера (подробнее можно найти в этой статье), то може вписать это имя в поле «Lets Encrypt Domain». Это позволит ходить в консоль по имени, а не по IP-адресу и не получать указанное выше предупреждение браузера при каждом входе. Если использовать доменное имя не планируется, оставьте поле пустым. Вы всегда можете вернуться к этим настройкам позднее.

Когда настройки сделаны, нажмите Save. Если вы ввели доменное имя, то некоторое время будет происходить получение сертификата Lets Encrypt . Обычно 5-10 секунд.

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

-- https://[IP-адрес вашего сервера]:4445 — если доменное имя не используется

-- https://[имя сервера]:4445 — если доменное имя используется

Теперь мы видим консоль

Pritunl — поставим энтерпрайз на службу человеку VPN, Собственный VPN-сервер, Linux, Длиннопост

Осталось сделать еще одну вещь, прежде, чем мы начнем конфигурировать vpn-сервер.

Мы будем в web-консоли создавать vpn-серверы, а pritunl будет сам прописывать правила для них в iptables. При этом, в начале статьи, мы сделали свои настройки iptables. Нужно сделать так, чтобы это всё уживалось и не конфликтовало. Выше, после установки mongodb и pritunl мы добавили в автозагрузку только mongodb. И это неспроста. Теперь в файл /root/ipt-set в самом конце мы допишем строчки:

# Starting Pritunl Service

systemctl start pritunl

Сохраним и перезагрузим сервер командой reboot.

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

Всё, ssh-консоль больше не нужна, заходим в web-консоль и работаем с ней. Жмём сверху в меню «Users», а потом кнопку «Add Organization».

Pritunl — поставим энтерпрайз на службу человеку VPN, Собственный VPN-сервер, Linux, Длиннопост

Вводим любое имя организации. Не важно.

Pritunl — поставим энтерпрайз на службу человеку VPN, Собственный VPN-сервер, Linux, Длиннопост

И нажимаем «Add». Теперь жмём «Add User». Здесь вводим имя будущего пользователя, а также пин-код. В пин-коде должно быть не менее 6 цифр. Он используется как второй фактор при авторизации. Email вводить не обязательно.

Pritunl — поставим энтерпрайз на службу человеку VPN, Собственный VPN-сервер, Linux, Длиннопост

Жмём «Add» и получаем запись нового пользователя.

Pritunl — поставим энтерпрайз на службу человеку VPN, Собственный VPN-сервер, Linux, Длиннопост

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

Сверху в меню выбираем «Servers»

Pritunl — поставим энтерпрайз на службу человеку VPN, Собственный VPN-сервер, Linux, Длиннопост

Жмём кнопку «Add Server» и, в появившемся окне, сверху, «Advanced».

Pritunl — поставим энтерпрайз на службу человеку VPN, Собственный VPN-сервер, Linux, Длиннопост

На скриншоте цветом выделены параметры, на которые нужно обратить внимание:

-- Name — любое понятное вам имя сервера.

-- Port — порт, на котором будет работать сервер. В моём примере я ставлю 443.

-- Protocol — протокол. В моём примере я ставлю tcp.

-- Encryption Cipher — ставим AES 256bit или 512bit.

-- DNS Server — DNS сервер, к которому будут обращаться клиенты. Я поставил гугловые восьмёрки.

-- Enable Google Authenticator — если поставите галочку, то клиенты смогут дополнительно, при аутентификации, использовать одноразовые пароли из Google Authenticator. Сначала потренеруйтесь без этой опции. Её можно включить позже.

-- Bind Address — впишите внешний IP вашего сервера к которому будет привязан vpn-сервер.

-- Hash Algorithm — ставьте SHA-256.

-- Allow Multiple Devices — если галочка стоит, то клиент сможет использовать свой конфиг и ключи на нескольких устройствах одновременно.

-- Block Outside DNS — если галочка стоит, то клиенты будут использовать только тот DNS -сервер, который прописан здесь.

-- Inter-Client Communication — если галочка стоит, то клиенты могут видеть друг друга по виртуальным IP-адресам.

Настраиваем и жмём Add. Теперь нужно привязать сервер к организации.

Pritunl — поставим энтерпрайз на службу человеку VPN, Собственный VPN-сервер, Linux, Длиннопост

Жмём кнопку «Attach Organization»

и привязываем наш сервер к организации.

Т.е. мы можем создать разные организации (например отдельные организации для рабочих и домашних устройств или для разных отделов в офисе), у каждой организции свой набор пользователей и серверов. Это позволит очень гибко предоставлять и прекращать доступы. Один сервер можно привязать к нескольким организациям.

Итоговый вид такой:

Pritunl — поставим энтерпрайз на службу человеку VPN, Собственный VPN-сервер, Linux, Длиннопост

Оратите внимание: вместе с организацией к серверу прикрепился и пользователь этой организации.

Запускаем сервер кнопкой «Start Server» и видим, что сервер запустился

Pritunl — поставим энтерпрайз на службу человеку VPN, Собственный VPN-сервер, Linux, Длиннопост

Дальше в меню выбираем «Users». Используя иконки напротив имени пользователя скачиваем конфиг с ключами.

Например если так:

Pritunl — поставим энтерпрайз на службу человеку VPN, Собственный VPN-сервер, Linux, Длиннопост

То будет предложено несколько временных ссылок на разные типы ахивов. Скачиваем zip, внутри него стандартный ovpn-файл, который добавляем в OpenVPN-клиент.

Или так:

Pritunl — поставим энтерпрайз на службу человеку VPN, Собственный VPN-сервер, Linux, Длиннопост

Тогда будет скачан tar-архив, но внтури всё тот же ovpn-файл.

Если нажать на стрелочку, то увидите виртуальный адрес клиента (или несколько адресов, если клиенту разрешено использовать профиль на нескольких устройствах):

Pritunl — поставим энтерпрайз на службу человеку VPN, Собственный VPN-сервер, Linux, Длиннопост

Как использовать готовый ovpn-файл, описано во второй половине этой статьи.

На этом, думаю, достаточно. Пользуйтесь. В web-консоли ещё куча кнопок, кроме описанных здесь. Их все можно нажимать, найдёте ещё много интересного.

Связь с автором в чатике канала Телеграм.

Показать полностью 21
750

Реверс-прокси на службе человечества

Реверс-прокси на службе человечества Инструкция, Linux, Https, Длиннопост, Информационная безопасность

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

И для начала статья про реверс-прокси. Используя его, можно создать зеркало любого сайта, в том числе не доступного в вашей стране пребывания, и спокойно пользоваться им без всяких VPN. А можно поставить реверс-прокси как защитный барьер перед каким-то web-сервисом. В общем вот Вам инструмент, пользуйтесь. На одном копеечном сервере Вы можете поднять хоть сотню зеркал дл личного пользования.

Примечание 1: это статья рассчитана на нулевой или начальный уровень читающего. Очень подробно и просто, без занудства.

Примечание 2: Всё описанное в этой статье приведено только в обучающих целях и не должно быть использовано для противоправных действий. Администрация сайта не несёт ответственность за действия третьих лиц, использующих инструкции из данной статьи. Все скриншоты и адреса сайтов в этой статье являются художественным вымыслом, совпадения с реальными адресами и сайтами случайно.

Примечание 3: статья может и будет дорабатываться. Наиболее актуальный вариант как всегда в первоисточнике. Да и конфиги там выглядят как надо.

Nginx это не только web-сервер, но и кое что получше. Его можно использовать в качестве обратного прокси или реверс-прокси. Что это значит? Реверс-прокси это посредник между пользователем и реальным web-сервером. Это значит, мы можем скрыть от пользователя (или от того, сто фильтрует наш трафик ) настоящий адрес web-сервера, обеспечить доступ по https к серверу, который умеет только http, можем подменить домен web-сервера, можем фильтровать содержимое трафика как с целью подмены содержимого сайта, так и для защиты web-сервера от атак злодеев, можем кэшировать сайт для ускорения, можем балансировать нагрузку, можем… Да очень много можем! Например, сделать своё собственное зеркало RuTracker или любого другого сайта, к которому нет доступа обычным способом.


Лучше всего показывать на реальных примерах. Нам понадобится VPS с минимальными характеристиками. Nginx не требователен к ресурсам. Главное, чтобы хватило лимитов трафика под Вашу задачу. В данной статье для скриншотов будет использоваться VPS с операционной системой CentOS 7. Для других операционных систем конфиги абсолютно аналогичны. Старайтесь использовать минимальную конфигурацию операционной системы без дополнительных пакетов.

Реверс-прокси на службе человечества Инструкция, Linux, Https, Длиннопост, Информационная безопасность

Также нам понадобится домен. Можете использовать домен третьего уровня у какого-то своего домена, но лучше для таких дел арендовать отдельный новый платный домен, или арендовать бесплатный домен где-нибудь на freenom.com. Вы должны быть готовы к тому, что ваш домен добавят в реестр запрещенных сайтов. Это не должно затронуть какие-либо другие Ваши сервисы, кроме реверс-прокси. Для этого домена нужно добавить A запись с IP адресом нашего VPS. Как арендовать домен и настраивать DNS записи можно почитать здесь. Для примера в статье будет использоваться домен mydomain.com


Как арендовать и первично настроить VPS описано здесь, здесь и здесь. Должен быть разрешён доступ к серверу по портам tcp/22, tcp/80 и tcp/443. Если вы используете эту статью для настройки файрволла, то конфиг ipt-set будет выглядеть так:


#!/bin/sh

IF_EXT="venet0"

IPT="/sbin/iptables"

IPT6="/sbin/ip6tables"

# flush

$IPT --flush

$IPT -t nat --flush

$IPT -t mangle --flush

$IPT -X

$IPT6 --flush

# loopback

$IPT -A INPUT -i lo -j ACCEPT

$IPT -A OUTPUT -o lo -j ACCEPT

# default

$IPT -P INPUT DROP

$IPT -P OUTPUT DROP

$IPT -P FORWARD DROP

$IPT6 -P INPUT DROP

$IPT6 -P OUTPUT DROP

$IPT6 -P FORWARD DROP

# allow forwarding

echo 1 > /proc/sys/net/ipv4/ip_forward

# NAT

# #########################################

# SNAT - local users to out internet

$IPT -t nat -A POSTROUTING -o $IF_EXT -j MASQUERADE

# INPUT chain

# #########################################

$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# ssh

$IPT -A INPUT -i $IF_EXT -p tcp --dport 22 -j ACCEPT

# WEB

$IPT -A INPUT -i $IF_EXT -p tcp --dport 80 -j ACCEPT

$IPT -A INPUT -i $IF_EXT -p tcp --dport 443 -j ACCEPT

# OUTPUT chain

# #########################################

$IPT -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

Обновим сервер:

yum -y update

yum -y install epel-release

Ставим собственно Nginx

yum -y install nginx

Пробуем запустить

systemctl start nginx

Теперь, если мы попробуем в браузере перейти по адресу нашего домена http://mydomain.com (вы, соответсвенно вводите своё имя домена), то должны увидеть страницу-заглушку. Типа такой:

Реверс-прокси на службе человечества Инструкция, Linux, Https, Длиннопост, Информационная безопасность

Также можно проверить работоспособность службы командой:

systemctl status -l nginx

Вывод команды должен выглядеть так:

Реверс-прокси на службе человечества Инструкция, Linux, Https, Длиннопост, Информационная безопасность

Если возникли проблемы и служба не запускается, то скорее всего вы используете не минимальный дистрибутив операционной системы и в системе уже установлен какой-то web-сервер, который занимает порт. Чтобы проверить это, установим сетевые утилиты

yum install net-tools -y

И проверим, кто занимает порт

netstat -tulnp | grep 80

В выводе команды вы можете увидеть, например:

tcp 0 0 :::80 :::* LISTEN 104/httpd

Это значит, что установлен Apache и запущен его демон httpd. Убираем это командами:

systemctl stop httpd

systemctl disable httpd

А потом пробуем запустить службу Nginx как описано выше. Если всё хорошо, добавляем её в автозагрузку:

systemctl enable nginx

Переходим к конфигу Nginx. Откройте файл /etc/nginx/nginx.conf

Напомню, все манипуляции с фалами я делаю с помощью программ WinSCP, как это описано в этой статье. В качестве редактора рекомендую использовать программу Notepad++. Установите её на свой компьютер и укажите в настройках WinSCP путь к редактору в меню Options->Preferences->Editors. Он должен быть первым в списке для использования по умолчанию.

Реверс-прокси на службе человечества Инструкция, Linux, Https, Длиннопост, Информационная безопасность

В конфиге уже есть секция

server {

listen 80 default_server;

listen [::]:80 default_server;

server_name _;

root /usr/share/nginx/html;


# Load configuration files for the default server block.

include /etc/nginx/default.d/*.conf;


location / {

}


error_page 404 /404.html;

location = /40x.html {

}


error_page 500 502 503 504 /50x.html;

location = /50x.html {

}

}

Именно эта секция выводит страницу-заглушку. А вот ниже есть закоментированный пример секции https (порт 443) страницы-заглушки. Крайне желательно эту секцию сделать работающей. Нам понадобятся сертификаты. Установим certbot и получим сертификат командами:

yum -y install certbot python2-certbot-nginx

certbot certonly

На запрос:

Реверс-прокси на службе человечества Инструкция, Linux, Https, Длиннопост, Информационная безопасность

Вводим 1


На запрос:

Реверс-прокси на службе человечества Инструкция, Linux, Https, Длиннопост, Информационная безопасность

Вводим свой действующий e-mail. На него будут приходить в уведомления. Например, если срок сертификата истекает и его необходимо продлить.


Напомню: Let’s Encrypt выдаёт сертифакты со сроком действия три месяца.

Далее принимаем соглашение и отказываемся от рассылок, вводим, соответственно, A и N

Реверс-прокси на службе человечества Инструкция, Linux, Https, Длиннопост, Информационная безопасность
Реверс-прокси на службе человечества Инструкция, Linux, Https, Длиннопост, Информационная безопасность

Дальше нужно ввести имя Вашего домена. В моём случае это mydomain.com. И нажать Enter. Если у Вас настроена A запись, как указано в начале статьи, и прошло достаточно времени (запись должна прореплицироваться на все DNS-сервера, это можета занимать до 24-х часов, дожен пинговаться адрес домена), то будет получен сертификат и мы получим вывод в консоли:

IMPORTANT NOTES:

- Congratulations! Your certificate and chain have been saved at:

/etc/letsencrypt/live/mydomain.com/fullchain.pem

Your key file has been saved at:

/etc/letsencrypt/live/mydomain.com/privkey.pem

Your cert will expire on 2020-02-26. To obtain a new or tweaked

version of this certificate in the future, simply run certbot

again. To non-interactively renew *all* of your certificates, run

"certbot renew"

Заметьте, тут сразу есть пути к файлам сертификата и их можно очень удобно скопировать в конфиг. Возвращаемся к файлу /etc/nginx/nginx.conf, раскоментируем секцию для https и исправим пути на сертификат. Получится так:

# Settings for a TLS enabled server.


server {

listen 443 ssl http2 default_server;

listen [::]:443 ssl http2 default_server;

server_name _;

root /usr/share/nginx/html;


ssl_certificate "/etc/letsencrypt/live/mydomain.com/fullchain.pem";

ssl_certificate_key "/etc/letsencrypt/live/mydomain.com/privkey.pem";

ssl_session_cache shared:SSL:1m;

ssl_session_timeout 10m;

ssl_ciphers HIGH:!aNULL:!MD5;

ssl_prefer_server_ciphers on;


# Load configuration files for the default server block.

include /etc/nginx/default.d/*.conf;


location / {

}


error_page 404 /404.html;

location = /40x.html {

}


error_page 500 502 503 504 /50x.html;

location = /50x.html {

}

}

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

systemctl restart nginx

И проверяем, что старница-заглушка доступна в браузере по адресу https://mydomain.com (вы вводите своё имя домена).


В конфиге /etc/nginx/nginx.conf обратите внимание на строчку

include /etc/nginx/conf.d/*.conf;

Это значит, что если мы в папке /etc/nginx/conf.d/ разместим файл с расширением .conf, то он будет включен в основной конфиг и выполнен вместе с ним. Так и будем делать. Файл /etc/nginx/nginx.conf закрываем и больше не трогаем.


Теперь определим, к чему мы будем проксировать трафик. Например, я хочу чтоб при переходе по адресу test.mydomain.com, во-первых, происходила переадресация на адрес https://test.mydomain.com (мы за безопасность и шифрование), а во-вторых, открывался сайт eng.rkn.gov.ru.


Сначала создадим домен третьего уровня вида test.mydomain.com


Категорически рекомендую использовать для проксирования только домены третьего уровня. Если какому-то регулятору не понравится то, что у вас по этому адресу расположено, он забанит именно домен третьего уровня и не забанит домен второго уровня. По крайней мере, скорее всего не забанит :).

Т.е. создадим на DNS-сервере А запись test (вы подставляете своё имя) с тем же IP-адресом, что и основной домен mydomain.com (вы подставляете своё имя). Дождитесь, чтобы запись прореплицировалась по DNS-серверам. Можно проверить, что домен пингуется командой на VPS:

ping test.mydomain.com -c 3

Должны корректно пройти три пинга

PING test.mydomain.com (185.nnn.nnn.nnn) 56(84) bytes of data.

64 bytes from vpsNNNN.hostsailor.com (185.nnn.nnn.nnn): icmp_seq=1 ttl=64 time=0.031 ms

64 bytes from vpsNNNN.hostsailor.com (185.nnn.nnn.nnn): icmp_seq=2 ttl=64 time=0.019 ms

64 bytes from vpsNNNN.hostsailor.com (185.nnn.nnn.nnn): icmp_seq=3 ttl=64 time=0.019 ms


--- test.secfall.com ping statistics ---

3 packets transmitted, 3 received, 0% packet loss, time 2000ms

rtt min/avg/max/mdev = 0.019/0.023/0.031/0.005 ms

В папке /etc/nginx/conf.d/ создаём файл с именем вида test.mydomain.com.conf следующего содержания:

server {

listen 80;

server_name test.mydomain.com;

location /.well-known/acme-challenge {

alias /usr/share/nginx/html/.well-known/acme-challenge;

}

location / {

return 301 https://$server_name$request_uri;

}

}

Перезапускаем службу Nginx и, с помощью команды certbot certonly, делаем сертификат для нашего домена третьего уровня test.mydomain.com (подставляете свои имена).


Если сертификат получен, дописываем (т.е. добавляем с новой строчки в конце) в файл /etc/nginx/conf.d/test.mydomain.com.conf секцию для https:

server {

listen 443 ssl;

server_name test.mydomain.com;


access_log /var/log/nginx/test.mydomain.com.access.log;

error_log /var/log/nginx/test.mydomain.com.error.log;


client_max_body_size 0;

underscores_in_headers on;


ssl_certificate /etc/letsencrypt/live/test.mydomain.com/fullchain.pem;

ssl_certificate_key /etc/letsencrypt/live/test.mydomain.com/privkey.pem;


ssl_stapling on;

ssl_stapling_verify on;

location /.well-known/acme-challenge {

alias /usr/share/nginx/html/.well-known/acme-challenge;

}


location / {

proxy_set_header Host eng.rkn.gov.ru;

add_header Front-End-Https on;

add_header Referer-Policy no-referrer;

proxy_pass http://eng.rkn.gov.ru;

}

}

Рассмотрите внимательно конфиг. В нём test.mydomain.com вы заменяете на своё имя домена, а eng.rkn.gov.ru на имя того сервера, который будете проксировать. И обратите внимание, что в данном конфиге к eng.rkn.gov.ru сервер обращается по http, а нам отдаёт по https. Такое полезно, когда web-сервер расположен где-то во внутренней инфраструктуре и нет необходимости или возможности прикрутить к нему https.


Например, есть некий сервис который вообще не умеет в https. Мы устанавливаем его на сервер, привязываем к адресу localhost и к порту, например, 8080. Теперь к сервису нельзя обратится извне, а только «изнутри» сервера по адресу http://localhost:8080. На этот же сервер ставим реверс-прокси, как написано выше, и указываем


proxy_pass http://localhost:8080;


Т.е. Nginx будет обращаться к этому же серверу на localhost к нашему сервису по порту 8080. А нам будет отдавать нормальный https. Да ещё всякой фильтрации для безопасности можно навесить, чтобы помешать злодеям ломать наш сервис. Но об этом ниже.

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

systemctl status -l nginx

смотрим, в чём ошибка. Обычно Nginx достаточно внятно пишет, что ему не нравиться, и даже укавает номер строки конфига, где есть ошибка.


Если служба запустилась без ошибок, то в браузере открываем адрес test.mydomain.com Получится как-то так:

Реверс-прокси на службе человечества Инструкция, Linux, Https, Длиннопост, Информационная безопасность

Обратите внимание, что хотя мы не писали в адресе https, сервер сам перевёл нас на зашифрованный трафик. Всё, мы сделали зеркало сайта! Дальше можно дорабатывать конфиг. Например добавить строчку


proxy_cookie_domain rkn.gov.ru $host;

proxy_pass_header Set-Cookie;

Это позволит обеспечить корректную работу куков и нормальную авторизацию на проксируемом сайте. Получится так (показан кусок конфига, только с параметрами проксирования):

location / {

proxy_cookie_domain eng.rkn.gov.ru $host;

proxy_pass_header Set-Cookie;


proxy_set_header Host eng.rkn.gov.ru;

add_header Front-End-Https on;

add_header Referer-Policy no-referrer;

proxy_pass http://eng.rkn.gov.ru;

}

Можно включить фильтрацию текста. Например заменять слово «Roskomnadzor» на «Roskompozor». Нужно дописать пару строчек (показан кусок конфига, только с параметрами проксирования):

location / {

proxy_cookie_domain rkn.gov.ru $host;

proxy_pass_header Set-Cookie;

proxy_set_header Host eng.rkn.gov.ru;

add_header Front-End-Https on;

add_header Referer-Policy no-referrer;

proxy_pass http://eng.rkn.gov.ru;

sub_filter "Roskomnadzor" "Roskompozor";

sub_filter_once off;

}

Директива

sub_filter «Roskomnadzor» «Roskompozor»;

показывает что на что менять.

Директива

sub_filter_once off;

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

Сохряняем конфиг, перезапускаем службу Nginx и с помощью комбинации Ctrl+F5 (чтобы игнорировать кэш браузера) обновляем страницу в браузере. Получится как-то так :)

Реверс-прокси на службе человечества Инструкция, Linux, Https, Длиннопост, Информационная безопасность

Теперь про фильтрацию заголовков. Это нужно делать, если проксируете трафик к какому-то своему сервису и нужно его дополнительно защитить. Я покажу часть конфига с проксированием со всеми основными примочками безопасности (кусок с ними выделен линиями). Я не буду расписывать — для чего они. Это тема отдельной статьи. Если интересно — легко сможете нагуглить.

location / {

proxy_cookie_domain rkn.gov.ru $host;

proxy_pass_header Set-Cookie;

proxy_set_header Host eng.rkn.gov.ru;

#------------------------------------------------------------------------------------------------------------------------------------------

proxy_headers_hash_max_size 512;

proxy_headers_hash_bucket_size 64;

proxy_set_header Accept-Encoding "";

proxy_set_header X-Forwarded-Proto $scheme;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

add_header X-Content-Type-Options nosniff;

add_header X-XSS-Protection "1; mode=block";

add_header Content-Security-Policy "default-src 'self';

frame-ancestors https://framer.mozilla.org;

form-action 'self';

base-uri 'self';

script-src 'self' https://mc.yandex.ru https://ssl.google-analytics.com;

img-src 'self' https://mc.yandex.ru https://ssl.google-analytics.com;

style-src 'self' 'unsafe-inline' https://mc.yandex.ru https://fonts.googleapis.com;

font-src 'self' https://mc.yandex.ru https://themes.googleusercontent.com;

frame-src https://mc.yandex.ru;

object-src 'none'

";

add_header X-Frame-Options "DENY";

proxy_cookie_path / "/; HTTPOnly; Secure";

#------------------------------------------------------------------------------------------------------------------------------------------

add_header Front-End-Https on;

add_header Referer-Policy no-referrer;

proxy_pass http://eng.rkn.gov.ru;

}

Если Вам нужно добавить ещё одно зеркало, то порядок действий такой:


1. Добавляет новую A запись с доменом третьего уровня на DNS-сервере. Ждем, пока не начнёт пинговаться с нашего VPS.

2. Создаем ещё один файл конфига в папке /etc/nginx/conf.d/ с секцией для 80 порта (для http) и перезапускаем Nginx.

3. Делаем сертификаты с помощью certbot.

Дописываем секцию для https в конфиг. Указывем пути на сертификаты. Перезапускаем Nginx.


Еще можно добавить ключ для алгоритма Диффи-Хелмана. Настроить автообновлене сертификатов. Как сделать, описано в этой статье.


P.S. Всё, что описано в статье - может сделать каждый! Это не сложно. Повышая свою грамотность в современных технологиях вы делаете мир лучше.

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

Показать полностью 10
27

Возможно мошенники

В интернете появился сайт, якобы продающий криптовалюту GRAM. Якобы запущен самим Павлом Дуровым. Хотел бы Вас предостеречь: с высокой вероятностью это мошенники. Домен ton-blockchain.org зарегистрирован 2019-07-27 в России. Данные регистрана скрыты. Когда я задал уточняющий вопрос по этим фактам в форме обратной связи - меня заблокировали :) Теперь для моего IP сайт ton-blockchain.org отдает ошибку 404. Кстати новость о продаже валюты разместили на портале eadaily.com. Позор таким журналистам.

Возможно мошенники Криптовалюта, Обман, Gram
386

Ростелеком, что с нами стало?

Начну с избитой фразы.

Ростелеком, сядь, нам надо поговорить.

Ростетелеком, ты говно.

Нет, нет, не уходи, я готов обосновать.

Ростелеком, я с тобой уже больше 10 лет. Не потому, что ты хороший, нет, ты говно, но у меня нет выбора. Твой монополизм лишает выбора.

Ростелеком, ты говно.

Я плачу тебе исправно, с запасом, авансом и весьма не мало. Мне нужна скорость. Мне нужен статический IP. Ты говоришь, что в моём мухосранске это будет стоить дорого  и я не спорю. Я плачу. ПлачУ и плАчу, но плачУ.

Ростелеком, ты говно.

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

Ростелеком, ты говно.

Я старался искать хорошее. Мне не удавалось тебе дозвониться. Я звонил часами, но не мог услышать живого человека. Бездушный робот играл мне музыку. Но потом появился чат в личном кабинете.  Я смог решать проблемы в переписке с живым человеком. И пусть это были такие проблемы, которые не возникли бы у нормального провайдера, пусть. Пусть здесь тоже надо было ждать очереди, пусть. Я всем рассказывал, как это круто. Как я теперь, всего лишь за час-полтора могу решить свою проблему.

Но сегодня ты превзошел сам себя. Уже 14 часов, как мой интернет (оплаченный авансом) превратился в тыкву. В круглую, цвета поноса, кубанскую (я с Краснодарского края) тыкву. И я не могу войти в личный кабинет. Ты говоришь, что у меня "нет доступа в Единый личный кабинет". Всегда был, а сегодня нет. И я не могу тебе дозвониться. Я пробовал восстанавливать парооль, мне приходило письмо, но не помогло. Я пробовал зарегистрироваться снова, но ты мне сказал, что я уже зарегистрирован.

РОСТЕЛЕКОМ. ТЫ. ГОВНО.

ГОРИ В АДУ.

69

Старинный итальянский семейный рецепт

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

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

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

Это старинный рецепт пасты Pasta con stufato nel suo stesso succo, carne sotto una salsa di pomodoro bianco. Вам может показаться, что рецепт весьма не прост. И это так. Но не отчаивайтесь, у мужчин навык его приготовления заложен на генетическом уровне.

И да. Если этот рецепт наберёт больше 93-х плюсов, я расскажу Вам о грандиозном рецепте due uova con salsiccia a forma di mezzaluna.

Итак, приступим.

Нам понадобятся:

1. Вода с солью - одна кастрюля

Старинный итальянский семейный рецепт Рецепт, Паста, Старинный рецепт, Кулинария, Бредохрень, Длиннопост

2. Тушенное в собственному соку мясо carne nel suo stesso succo - одна банка

Старинный итальянский семейный рецепт Рецепт, Паста, Старинный рецепт, Кулинария, Бредохрень, Длиннопост

3. Сама паста - одна пачка Pasta a forma di tubo (здесь и далее, ни в коем случае не реклама. Все ингредиенты выбирались по жёлтым ценникам в Пя.....чке. Жёлтый - значит вкусный. Кроме снега.)

Старинный итальянский семейный рецепт Рецепт, Паста, Старинный рецепт, Кулинария, Бредохрень, Длиннопост

Для начала сварим соль в воде. Доведите воду до кипения, засыпьте соль и поварите. Как только соль сварилась, высыпайте пасту. И тут же яростно её мешайте. Снимайте пробу с пасты каждые 95 секунд. Итальянские повара рекомендуют для этого блюда состояние пасты "Al dente". Отделите воду от готовой пасты любым известным вам способом. Если ни один способ не известен - импровизируйте.

Старинный итальянский семейный рецепт Рецепт, Паста, Старинный рецепт, Кулинария, Бредохрень, Длиннопост

Теперь добавим к пасте наше восхитительное мясо nel suo stesso succo.

Старинный итальянский семейный рецепт Рецепт, Паста, Старинный рецепт, Кулинария, Бредохрень, Длиннопост
Старинный итальянский семейный рецепт Рецепт, Паста, Старинный рецепт, Кулинария, Бредохрень, Длиннопост

Господи, как же это соблазнительно выглядит. Но не расслабляемся. Тщательно размешиваем, но не взбалтываем.

Старинный итальянский семейный рецепт Рецепт, Паста, Старинный рецепт, Кулинария, Бредохрень, Длиннопост

Накроем крышкой. Паста должна "дойти" и напитаться ароматами специй и мяса. Дадим ей на это 10 минут.

Пока приготовим соус "salsa di pomodoro bianco". Его вкус изумительно тонок и как никакой другой способен подчеркнуть гастрономическую изысканность нашей пасты.

Возьмём белый и красный соусы.

Старинный итальянский семейный рецепт Рецепт, Паста, Старинный рецепт, Кулинария, Бредохрень, Длиннопост

Смешаем их в любой подходящей посуде. Наверняка у вас дома есть что-то из китайского фарфора или яванского хрусталя. Не стесняйтесь и не мелочитесь. Изысканность блюда требует и изысканной посуды.

Старинный итальянский семейный рецепт Рецепт, Паста, Старинный рецепт, Кулинария, Бредохрень, Длиннопост

Просто инь-янь.

Старинный итальянский семейный рецепт Рецепт, Паста, Старинный рецепт, Кулинария, Бредохрень, Длиннопост

Пришло время сформировать блюдо к подаче на стол. Откройте крышку и вдохните запах Италии. Это не передаваемый тонкий аромат! Разместите порцию пасты на тарелке. Щедро добавьте соуса "salsa di pomodoro bianco". Всё, не нужно никуда ехать. Италия у Вас дома. Наслаждайтесь.

Старинный итальянский семейный рецепт Рецепт, Паста, Старинный рецепт, Кулинария, Бредохрень, Длиннопост
Старинный итальянский семейный рецепт Рецепт, Паста, Старинный рецепт, Кулинария, Бредохрень, Длиннопост
Показать полностью 12
49

Сколько стоит сайт? Развитие IT сектора на Кубани.

Сколько стоит сделать сайт с доменом и хостингом на год? Глупый вопрос, скажете вы. И будете правы. Смотря какой сайт, смотря какой домен...

Упростим задачу. Сайт с вот таким дизайном

Сколько стоит сайт? Развитие IT сектора на Кубани. Коррупция, Распил, Северский район, Краснодарский край, Афипский, Афипское городское поселение, Дизайн, Верстка

на домене sevadm[точка]ru?

Администрации Северского района Краснодарского края в 2016 году он обошёлся 65800 рублей, а продлили его размещение в мае этого года за 12074,33 рубля. На год.

Картинка не передаст всего технологического совершенства и прелестей дизайна. Рекомендую сходить и приобщиться.

Но суммы хоть и безобразно не адекватные, но мелкие. В IT активы нужно вкладывать. Видимо так подумала администрация Северского района и разместила аукцион на 500 000 рублей с предметом закупки "Оказание услуги по разработке официального сайта администрации МО Северский район".

Если почитать ТЗ, то:

1. Сайт исполнителю нужно наполнить с нуля. Причём наполнить ровно тем, что есть на уже существующем сайте. Получается 65800 рублей потрачены неэффективно?

2. Под описание функционала попадает ЛЮБАЯ распространённая CMS.

3. Требования к дизайну (а кто-то ведь скажет - дизайн это дорого и сложно) просто никакие. Порядок согласования дизайна практически никак не определён.

500 (пятьсот) тысяч рублей. Товарищи фрилансеры-сайтоделатели, ваш труд жутко недооценён.

А если серьёзно: не равнодушными гражданами уже направлен запрос в прокуратуру.

P.S. На закуску рекомендую взглянуть на сайт Афипского городского поселения (afipskij[точка]ru). Кажется я знаю, где будут дальше развивать IT-сектор.

P.P.S. Есть, кто шарит в вёрстке и печати? Полляма за 222 222,22 см2 это норм?

Боремся с борцами. Как спрятать свой сервер от сканеров РКН.

На Geektimes появилась статья, описывающая новые методы борьбы с обходом блокировок Telegram.

Там всё просто. Из некоторой подсети, принадлежащей Mail.ru, ведётся сканирование интернета на предмет наличия VPN и proxy, предоставляющих доступ в Telegram.

Исключительно глупая и смешная затея. Но шутки в сторону. Будем преодолевать.

Боремся с борцами. Как спрятать свой сервер от сканеров РКН. Обход блокировок, Роскомнадзор, Глупость, Telegram

1. Для тех, кто настраивал сервера по моим статьям.

В файл /root/ipt-set, в раздел

# INPUT chain
# #########################################

добавить раздел

#RKN
$IPT -A INPUT -s 5.61.16.0/21 -j DROP
$IPT -A INPUT -s 5.61.232.0/21 -j DROP
$IPT -A INPUT -s 79.137.157.0/24 -j DROP
$IPT -A INPUT -s 79.137.174.0/23 -j DROP
$IPT -A INPUT -s 79.137.183.0/24 -j DROP
$IPT -A INPUT -s 94.100.176.0/20 -j DROP
$IPT -A INPUT -s 95.163.32.0/19 -j DROP
$IPT -A INPUT -s 95.163.212.0/22 -j DROP
$IPT -A INPUT -s 95.163.216.0/22 -j DROP
$IPT -A INPUT -s 95.163.248.0/21 -j DROP
$IPT -A INPUT -s 128.140.168.0/21 -j DROP
$IPT -A INPUT -s 178.22.88.0/21 -j DROP
$IPT -A INPUT -s 178.237.16.0/20 -j DROP
$IPT -A INPUT -s 178.237.29.0/24 -j DROP
$IPT -A INPUT -s 185.5.136.0/22 -j DROP
$IPT -A INPUT -s 185.16.148.0/22 -j DROP
$IPT -A INPUT -s 185.16.244.0/23 -j DROP
$IPT -A INPUT -s 185.16.246.0/24 -j DROP
$IPT -A INPUT -s 185.16.247.0/24 -j DROP
$IPT -A INPUT -s 188.93.56.0/21 -j DROP
$IPT -A INPUT -s 194.186.63.0/24 -j DROP
$IPT -A INPUT -s 195.211.20.0/22 -j DROP
$IPT -A INPUT -s 195.218.168.0/24 -j DROP
$IPT -A INPUT -s 217.20.144.0/20 -j DROP
$IPT -A INPUT -s 217.69.128.0/20 -j DROP

Применить настройки командой

bash /root/ipt-set

или просто перезагрузить сервер.

2. Для всех остальных.

Добавить правила в iptables командами:

sudo iptables -A INPUT -s 5.61.16.0/21 -j DROP
sudo iptables -A INPUT -s 5.61.232.0/21 -j DROP
sudo iptables -A INPUT -s 79.137.157.0/24 -j DROP
sudo iptables -A INPUT -s 79.137.174.0/23 -j DROP
sudo iptables -A INPUT -s 79.137.183.0/24 -j DROP
sudo iptables -A INPUT -s 94.100.176.0/20 -j DROP
sudo iptables -A INPUT -s 95.163.32.0/19 -j DROP
sudo iptables -A INPUT -s 95.163.212.0/22 -j DROP
sudo iptables -A INPUT -s 95.163.216.0/22 -j DROP
sudo iptables -A INPUT -s 95.163.248.0/21 -j DROP
sudo iptables -A INPUT -s 128.140.168.0/21 -j DROP
sudo iptables -A INPUT -s 178.22.88.0/21 -j DROP
sudo iptables -A INPUT -s 178.237.16.0/20 -j DROP
sudo iptables -A INPUT -s 178.237.29.0/24 -j DROP
sudo iptables -A INPUT -s 185.5.136.0/22 -j DROP
sudo iptables -A INPUT -s 185.16.148.0/22 -j DROP
sudo iptables -A INPUT -s 185.16.244.0/23 -j DROP
sudo iptables -A INPUT -s 185.16.246.0/24 -j DROP
sudo iptables -A INPUT -s 185.16.247.0/24 -j DROP
sudo iptables -A INPUT -s 188.93.56.0/21 -j DROP
sudo iptables -A INPUT -s 194.186.63.0/24 -j DROP
sudo iptables -A INPUT -s 195.211.20.0/22 -j DROP
sudo iptables -A INPUT -s 195.218.168.0/24 -j DROP
sudo iptables -A INPUT -s 217.20.144.0/20 -j DROP
sudo iptables -A INPUT -s 217.69.128.0/20 -j DROP

P.S.

Подсети и кусок файла ipt-set с ними размещены на GitHub. Там я их буду пополнять по мере необходимости. Следите за новостями в Telegram на моём канале @secfall (не является рекламой, прибыли не приносит, одни убытки)

Показать полностью
96

Ещё раз о старом. Как обойти блокировки интернет-ресурсов и не страдать 2.

Предисловие.

Я снова в эфире и снова приветствую своих три килоподписчика.

Эта статья, также, как и прошлая, не писалась для Пикабу. Если заминусите, то мне по-прежнему пофиг.

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

ВАЖНО (еще раз)

В статье даны ссылки на сайты. Эти сайты ни мне, никому-либо другому не приносят прибыли, никто их раскруткой не занимается. Это не реклама!

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

Ну если заминусите, то и хрен с ним. Я на рейтинг не ананирую.

На самом деле миллион мануалов на эту тему. Инструкцию написана только для того, чтобы показать, как в написанные по моим статьям конфиги впилить самостоятельно работающий прокси-сервер. Если Вам лениво делать свой или вы соменваетесь, поможет ли он Вам — воспользуйтесь демонстрационным бесплатным тестовым сервисом rknsucks.xyz

Но лучше сделать свой.

Ещё раз о старом. Как обойти блокировки интернет-ресурсов и не страдать 2. Блокировка telegram, Обход блокировок, Прокси, Прокси-Сервер, 3proxy, Настройка, Telegram, Длиннопост

Небольшое техническое описание нашего будущего сервиса:

ОС: CentOS 7 x64

Используемое ПО: 3proxy

Протокол прокси: SOCKSv4-5

Аутентификация: По желанию


Кроме того, для иллюстрирования работы сервиса будет настроен прокси-сервер по адресу proxy.rknsucks.xyz

Это доменное имя будет смотреть на тот же сервер, что ovpn.rknsucks.xyz из прошлой статьи.

Я уже писал как установить и настроить 3proxy, но там мы делали прозрачный прокси-сервер для клиентов OpenVPN сервера.

Здесь же мы сделаем прокси-сервер как самостоятельный сервис. Это позволит использовать его отдельно от OpenVPN.

Опишу весь порядок установки. Также дам примеры конфигов iptables для разных случаев установки сервера.

Да, можно было бы установить 3proxy моим скриптом автоустановки, но поскольку в прошлой статье мы правили /root/ipt-set, то скрипт вернёт нам его к дефолтному состоянию и поломает работу OpenVPN. Поэтому поставим руками, тем более, что ничего сложного тут нет.

Ладно, для лентяев в разделе 2 статьи будет скрипт автоматической установки 3proxy. Этот скрипт делает ровно всё то, что написано в разделе 1.

Все конфиги можно найти на GitHub.


Краткое содержание:
1. Установка прокси-сервера 3proxy вручную
2. Установка прокси-сервера 3proxy скриптом
3. Настройка iptables

1. Установка прокси-сервера 3proxy вручную


Подготовим сервер, если он еще не готов:

yum install epel-release -y
yum update -y
yum upgrade -y
yum install wget -y

Для компиляции нам понадобиться компилятор:

yum -y install gcc

Перейдём во временную папку

cd /tmp

и скачаем актуальную версию 3proxy

wget https://github.com/z3APA3A/3proxy/archive/0.8.12.tar.gz

Номер последней версии можно узнать тут. На момент написания статьи это 0.8.12.

Распаковываем (не забудьте исправить команду под скачанную версию):

tar -xvzf 0.8.12.tar.gz

И переходим в папку с исходниками:

cd 3proxy-0.8.12

Компилируем

make -f Makefile.Linux

Создаём папку для бинарника и pid-файл:

mkdir -p /opt/3proxy/bin
touch /opt/3proxy/3proxy.pid

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

cp ./src/3proxy /opt/3proxy/bin
cp ./cfg/3proxy.cfg.sample /opt/3proxy/3proxy.cfg

В папке /etc/systemd/system с помощью WinSCP или любым удобным для Вас способом создаем файл 3proxy.service следующего содержания:

3proxy.service

Теперь откроем файл /opt/3proxy/3proxy.cfg

Удалите всё его содержимое и вставьте следующее:

3proxy.cfg

Здесь для нас важны следующие строчки:

external 185.45.193.66 — внешний ip-адрес Вашего сервера
allow * — строчка разрешений для клиентов. В таком виде она разрешает любые подключения.

В общем виде строчка разрешений имеет такой формат:

allow <userlist> <sourcelist> <targetlist> <targetportlist> <commandlist> <weekdays> <timeperiodslist>

где нас интересуют следующие поля:

<userlist> — список логинов пользователей через запятую
<sourcelist> — список сетей клиентов через запятую. Сеть задается в формате xxx.yyy.zzz.mmm/l, где l — длина маски сети (количество ненулевых байт). Например, 192.168.1.0/24 соответствует сети с маской 255.255.255.0.
<targetlist> — список сетей назначения через запятую
<targetportlist> — список портов назначения через запятую. можно задать диапазон портов через -, например, 80,1024-65535

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

Если хотите разрешать подключение к прокси только по логину и паролю, то конфиг будет такой:

3proxy.cfg

Где строчки:

users proxyuser1:CL:password1
users proxyuser2:CL:password2

задают логины и пароли пользователей прокси-сервера.

Образец файла.

Мне, для сервера proxy.rknsucks,xyz, важно пропускать трафик только к сетям Telegram, а весь остальной блокировать. Тогда в конфиге моего сервера строчка будет имеет вид (не используемые поля заменяем *):

allow * * 91.108.4.0/22,91.108.8.0/22,91.108.56.0/22,149.154.160.0/20,149.154.164.0/22,91.108.16.0/22,91.108.56.0/23,149.154.168.0/22,91.108.12.0/22,149.154.172.0/22,91.108.20.0/22,91.108.36.0/23,91.108.38.0/23,109.239.140.0/24,149.154.174.0/24

Напомню, что адреса подсетей нужного сайта можно получить на специализированных ресурсах. Например, на https://bgp.he.net

Ещё раз о старом. Как обойти блокировки интернет-ресурсов и не страдать 2. Блокировка telegram, Обход блокировок, Прокси, Прокси-Сервер, 3proxy, Настройка, Telegram, Длиннопост
Ещё раз о старом. Как обойти блокировки интернет-ресурсов и не страдать 2. Блокировка telegram, Обход блокировок, Прокси, Прокси-Сервер, 3proxy, Настройка, Telegram, Длиннопост

Можно список подсетей назначения реализовать и по-другому. Прописать их не в конфиге прокси, а в iptables (т.е. в моём случае в файле /root/ipt-set). Учитывая, что у меня на одной машине подняты и OpenVPN, и прокси, такой способ будет являться для меня предпочтительным и описан в разделе 3 статьи. Если подсетей, для которых нужно настроить ограничения, много, то тут лучше использовать более взрослые способы настройки iptables. Например ferm. Вы можете выбирать то, что лучше подходит к Вашей задаче.

Не забудьте сохранить и закрыть конфиг.

Можно попробовать запустить прокси-сервер командой:

systemctl start 3proxy

И проверить его состояние командой:

systemctl status 3proxy
Ещё раз о старом. Как обойти блокировки интернет-ресурсов и не страдать 2. Блокировка telegram, Обход блокировок, Прокси, Прокси-Сервер, 3proxy, Настройка, Telegram, Длиннопост

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

systemctl enable 3proxy

На этом ручные настройка и запуск прокси-сервера завершены.

2. Установка прокси-сервера 3proxy скриптом


Тут всё будет просто. Мой скрипт установки есть на GitHub. Он очень простой. Скачивает, компилирует, устанавливает, делает конфиг, запускает добавляет в автозагрузку 3proxy. Проверка ошибок минимальна. Просто, чтобы сократить рутину. Скрипт не настраивает файрволл и/или iptables.

Чтобы воспользоваться запустите команду:

wget https://raw.githubusercontent.com/secfall/3proxy_install/mas... && bash 3proxy_install.sh

Если будет ошибка из-за отсутствия пакета wget, то тогда так

yum -y install wget
wget https://raw.githubusercontent.com/secfall/3proxy_install/mas... && bash 3proxy_install.sh

3. Настройка iptables для прокси


3.1 Если у Вас уже настроен iptables по статье «Анонимность в интернете своими руками. Установка и настройка VPN сервера» или моим скриптом автоустановки OpenVPN, то приводим файл /root/ipt-set к такому виду:

Пример ipt-set

Обращаем внимание на строчки

IF_EXT="venet0"
OVPN_PORT="443"
# openvpn
$IPT -A INPUT -i $IF_EXT -p tcp --dport $OVPN_PORT -j ACCEPT

Должны быть правильно указаны название физического интерфейса, порт и протокол OpenVPN сервера.

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

bash /root/ipt-set

3.2 Если у Вас уже настроен iptables по статье «Избирательная маршрутизация в OpenVPN«, то приводим файл /root/ipt-set к такому виду:

Пример ipt-set

Также обращаем внимание на строчки

IF_EXT="venet0"
OVPN_PORT="443"
# openvpn
$IPT -A INPUT -i $IF_EXT -p tcp --dport $OVPN_PORT -j ACCEPT

Должны быть правильно указаны название физического интерфейса, порт и протокол OpenVPN сервера.

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

bash /root/ipt-set

ВАЖНО: указанный выше конфиг не ограничивает клиента по адресам назначения. Т.е. если в конфиге прокси-сервера не указаны разрешенные сети назначения (как написано в разделе 1 этой статьи) и такие сети не указаны в файле /root/ipt-set, то клиент прокси сервера сможет через него ходить на любой ресурс.

Если вы хотите ограничить список разрешённых сетей назначения через iptables, то тогда в файле /root/ipt-set строчки (если не используете IPv6, то только первая строчка):

$IPT -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT6 -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

Правим на:

$IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT6 -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Т.е. мы запрещаем новые исходящие соединения, но разрешаем исходящий трафик по уже установленным соединениям.

Теперь настроим правила исходящих соединений на примере Telegram и MyIP.ru (и еще разрешим исходящие на гугловые DNS). В раздел # OUTPUT chain файла /root/ipt-set допишем:

# DNS
$IPT -A OUTPUT -d 8.8.8.8/32 -j ACCEPT
$IPT -A OUTPUT -d 8.8.4.4/32 -j ACCEPT
# Telegram
$IPT -A OUTPUT -d 91.108.4.0/22 -j ACCEPT
$IPT -A OUTPUT -d 91.108.8.0/22 -j ACCEPT
$IPT -A OUTPUT -d 91.108.56.0/22 -j ACCEPT
$IPT -A OUTPUT -d 149.154.160.0/20 -j ACCEPT
$IPT -A OUTPUT -d 149.154.164.0/22 -j ACCEPT
$IPT -A OUTPUT -d 91.108.16.0/22 -j ACCEPT
$IPT -A OUTPUT -d 91.108.56.0/31 -j ACCEPT
$IPT -A OUTPUT -d 149.154.168.0/22 -j ACCEPT
$IPT -A OUTPUT -d 91.108.12.0/22 -j ACCEPT
$IPT -A OUTPUT -d 149.154.172.0/22 -j ACCEPT
$IPT -A OUTPUT -d 91.108.20.0/22 -j ACCEPT
$IPT -A OUTPUT -d 91.108.36.0/31 -j ACCEPT
$IPT -A OUTPUT -d 91.108.38.0/31 -j ACCEPT
$IPT -A OUTPUT -d 91.108.56.0/31 -j ACCEPT
$IPT -A OUTPUT -d 91.108.56.0/22 -j ACCEPT
$IPT -A OUTPUT -d 91.108.4.0/22 -j ACCEPT
$IPT -A OUTPUT -d 67.198.55.0/24 -j ACCEPT
$IPT -A OUTPUT -d 149.154.168.0/22 -j ACCEPT
$IPT -A OUTPUT -d 149.154.172.0/22 -j ACCEPT
$IPT -A OUTPUT -d 149.154.164.0/22 -j ACCEPT
$IPT -A OUTPUT -d 109.239.140.0/22 -j ACCEPT
$IPT6 -A OUTPUT -d 2001:b28:f23f::/48 -j ACCEPT
$IPT6 -A OUTPUT -d 2001:b28:f23d::/48 -j ACCEPT
$IPT6 -A OUTPUT -d 2001:67c:4e8::/48 -j ACCEPT
# MyIP.ru
$IPT -A OUTPUT -d 178.62.9.171/32 -j ACCEPT

Пример файла.

Теперь пользователь нашего сервиса, причем и пользователь прокси, и пользователь vpn, сможет ходить только на подсети Telegram и на сайт myip.ru.

Не забываем применить настройки командой

bash /root/ipt-set

Ну вот и всё. Осталось вписать адрес и порт сервера в настройки клиента Telegram (Настройки -> Данные и диск -> Настройки прокси).

Показать полностью 3
Отличная работа, все прочитано!