На волне блокировки Telegram настроим приватный socks/proxy сервер для работы мессенджера.
В остальном, прокси-сервер может решать любые другие задачи в работе администратора или разработчика.
Поскольку вся инфраструктура моего проекта и компании завязана на Telegram, то обойтись без этого удобного инструмента будет очень сложно, переходить на другие мессенджеры - не вижу смысла, нормальных аналогов нет под требуемые задачи, вывод - использовать proxy, как временное решение.
Блокировка мессенджера планируется на территории РФ, в связи с этим будем использовать любой зарубежный сервер, подойдет самая простая VDS в минимальной конфигурации. (Если вам требуется такая VDS - свяжитесь со мной [email protected] или Telegram)
Шаг 1. Настройка сервера
На данном этапе выполняем настройку сервера для безопасного соединения.
Отключаем SElinux
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config |
Изменяем порт подключения к сервису SSH
sed -i -r "s/#Port 22/Port 54997/" /etc/ssh/sshd_config |
Указываем работу только по IPv4 протоколу на определенном адресе
sed -i -r "s/#AddressFamily any/AddressFamily inet/" /etc/ssh/sshd_config |
Где $SERVER_IP_ADDR$
- реальный IP-адрес сервера.
Отключаем IPv6 протокол
cat << EOT > /etc/sysctl.d/01-ipv6.conf |
sysctl -p /etc/sysctl.d/01-ipv6.conf |
Принудительно устанавливаем вторую версию протокола SSH
В SSH2 используются мощные алгоритмы шифрования, кроме того поддерживается возможность обнаружения умышленного искажения данных. (Протокол SSH, версии 2 - AES-128, AES-192, AES-256, blowfish, CAST-128, ArcFour)
sed -i -r -e "s/#Protocol 2/Protocol 2/" /etc/ssh/sshd_config |
Ограничиваем количество неудачных попыток входа
sed -i -r "s/#MaxAuthTries 6/MaxAuthTries 2/" /etc/ssh/sshd_config |
Перезагружаем сервис SSH и проверяем:
systemctl restart sshd |
# lsof -i :54997 -P -n |
Добавляем правила на файрвол для нового порта, а также убираем дефолт
firewall-cmd --permanent --zone=public --add-port=54997/tcp |
Шаг 2. Отключение логирования
Конечно же в целях сохранения дискового пространства :)
Отключаем хранение истории
unset HISTFILE |
Отключаем сервисы syslog/rsyslog и аудит системы
systemctl stop rsyslog && systemctl disable rsyslog |
С сервисом Auditd придется немного пошаманить, поскольку просто так его отключить нельзя.
sed -i -r "s/RefuseManualStop=yes/RefuseManualStop=no/" /usr/lib/systemd/system/auditd.service |
Удаляем объекты директорий
unlink /var/log/messages && ln -s /dev/null /var/log/messages |
Шаг 3. Установка 3proxy
Установим необходимые пакеты, которые понадобятся в процессе сборки.
yum groupinstall "Development tools" -y |
Клонируем исходные файлы с git и компилируем:
git clone https://github.com/z3APA3A/3proxy.git |
Шаг 4. Настройка 3proxy
Выполняем настройку нашего прокси-сервера к конфигурационном файле nano /etc/3proxy.cfg
#!/usr/local/etc/3proxy/bin |
Список пользователей задается с помощью команды users.
С помощью одной команды можно задать несколько пользователей, можно давать несколько команд users. USERDESC - описание пользователя.
Описание пользователя состоит из трех полей разделенных двоеточием - имени, типа пароля и пароля. Например:
users admin:CL:mysecret test:CL:yourpassword test1:CL:password1 |
Обратите внимание на двойные кавычки - они необходимы для второго пользователя, т.к. в его пароле встречается знак $
, который для файла 3proxy.cfg
означает включение другого файла.
Поддерживаются следующие типы паролей:
- тип не указан - использовать системную авторизацию для данного пользователя (пока не реализовано).
- CL - пароль в открытом тексте
- CR - пароль в формате crypt() (только MD5)
- NT - пароль в формате NT в шестнадцатеричной кодировке
NT и crypt пароли могут быть использованы для импорта учетных записей из Windows/Samba и Unix соответственно (для Windows можно использовать утилиты семейства pwdump). Учетные записи удобно хранить в отдельном файле (в таком случае можно хранить их построчно в формате, типичном для файлов паролей).
Создать пароль можем командой:
openssl passwd -1 -salt xyz yourpass |
Сохраняем конфигурационный файл и заупускаем сервис:
service 3proxy start |
Добавляем в автозапуск:
chkconfig 3proxy on |
Шаг 5. Настройка файрвола
# Открываем порт для socks-прокси: |
Шаг 6. Настройка Telegram на работу через socks
Также можно использовать socks-прокси на все подключение.
Проверяем:
Настройка завершена.
Troubleshooting
ERR_SOCKS_CONNECTION_FAILED
в Google Chrome
Google Chrome не работает через SOCKS с авторизацией. Пока не нашел как исправить, но придумаю костыль какой-нибудь.
Too many authentication failures for username
Используйте параметр IdentitiesOnly=yes
при подключении по SSH
$ ssh -o IdentitiesOnly=yes [email protected] -p 54997 |