SOCKS5 прокси сервер на FreeBSD

Тема старая (апрель 2018 г.) противостояние Telegram и РКН заставило меня зарегистрировать VDS сервер в не соседнем государстве и установить на него Socks5 прокси-сервер.
Решил поделиться с общественностью установкой и настройкой прокси сервера 3Proxy в среде FreeBSD.

Будем ставить из портов:

  1. Обновляем порты:
    # portsnap fetch update
  2. Устанавливаем 3Proxy
    # cd /usr/ports/net/3proxy && make install clean
  3. Разрешаем запуск:
    # echo "threeproxy_enable="YES"" >> /etc/rc.conf
  4. Правим конфигурационный файл:
    # vi /usr/local/etc/3proxy.cfg

    До следующего вида:
    daemon
    nscache 65536
    # DNS Servers
    nserver 8.8.8.8
    nserver 8.8.4.4
    timeouts 1 5 30 60 180 1800 15 60
    # Директория под логи (создаст сам)
    log /var/log/3proxy/log D
    rotate 60
    
    # Включаем авторизацию
    auth strong
    # Описываем пользователей (Имя:ТИП:Пароль)
    users user1:CL:password1
    users user2:CL:password2
    # Какие порты обслуживаем
    allow * * * 80 HTTP
    allow * * * 443 HTTPS
    # Запрещаем остальные порты
    deny *
    # Либо разрешаем все
    # allow *
     
    # Описываем наши сетевые интерфейсы, 
    # если интерфейс один, один IP в ext. и int (или можно не указывать). 
    external 222.222.222.222
    internal 222.222.222.222
    
    # Количество соединений
    maxconn 150
    # SOCKS5 сервер на 43434 порту
    socks -p43434
    # HTTP Proxy-server на 8989 порту
    proxy -n -p8989
    setgid 65534
    setuid 65534
  5. Запускаем сервер:
    # /usr/local/etc/rc.d/3proxy start
     Starting threeproxy.
  6. Проверим:
    # /usr/local/etc/rc.d/3proxy
     statusthreeproxy is running as pid 44333.

В конфигурационном файле мы создали двух пользователей:
user1 с паролем password1 и user2 с паролем password2, тип пароля CL  — чистым текстом, что не очень красиво, но можно задать пароль в формате crypt().
Для этого создадим пароль немного присолив:

# openssl passwd -1 -salt free password3
$1$free$J5rNKlRJ0ZqIsQxJWdhYb/

В конфигурационном файле создадим нового пользователя user3 (запись заключаем в кавычки из-за попадающихся в пароле символов: $, /):
users "user3:CR:$1$free$J5rNKlRJ0ZqIsQxJWdhYb/"

Рестартуем наш 3Proxy:
# /usr/local/etc/rc.d/3proxy restart

Пользователей можно вообще исключить из конфигурационного файла, сделать отдельный подключаемый файл с пользователями, для этого в конфигурационном файле делаем подключение файла пользователей:
users $/usr/local/etc/3proxy/passwd

Создаем директорию для файла пользователей:
mkdir /usr/local/etc/3proxy/

В файле /usr/local/etc/3proxy/passwd перечислим пользователей:
user1:CL:password1
user2:CL:password2
user3:CR:$1$free$J5rNKlRJ0ZqIsQxJWdhYb/

Рестартуем  3Proxy:
# /usr/local/etc/rc.d/3proxy restart

На этом все:)

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Комментарии: 8
  1. Макс

    У вас указана команда flush перед командами proxy и socks, а команда flush сбрасывает все ACL’и. Это означает, что у вас proxy и socks будут запущены без каких-либо ограничений вообще, т.е. доступны будут любые порты и адреса. Проверьте.

    1. Vladimir (автор)

      Спасибо за комментарий, но это не так.

      1. Макс

        Я на практике проверил.
        Причем долго не мог понять в чем дело.

        Делал по вашему примеру:
        [code]
        auth strong
        allow * * * 80-88,8080-8088 HTTP
        allow * * * 443,8443 HTTPS
        allow * * 12.34.56.78 995
        allow * * 12.34.56.78 465
        deny *
        flush
        maxconn 20
        socks -p12345
        [/code]

        При этом ограничения по 995 и 465 не работали.
        Как только убрал flush — все стало работать.
        Как посмотрел другие примеры + почитал документацию (хотя она крайне плохая, практически никакая) — подумал, что все логично

        У вас есть какое-то иное объяснение для этого?

        Я провел много тестов, чтобы убедиться, что ограничения в одном случае работают, а в другом нет. Комбинаторно перебрал кучу вариантов (т.е. менял IP, когда работали, и проверял разные комбинации; и так же, когда не работало).

        Тут беда с форматированием, не знаю как написать — он все enter съедает.
        В общем, написал везде, где перевод строки. Как седлать нормально — не знаю

        1. Vladimir (автор)

          Максим, а вы правы!
          Действительно flush сбрасывает разрешающие-запрещающие правила.
          У меня не было задачи ограничивать по портам, по этому не обратил внимание, что не работает ограничение с указанием портов

          1. Макс

            Ну вот. Отлично, что разобрались. Спасибо, что исправили. А то ваша ссылка в гугле одна из первых, думаю, что немало людей себе неверно настроили до этого. Я бы тоже не заметил, если бы не решил все тщательно протестировать :)

      2. Макс

        Для какой цели вы там используете flush перед proxy и socks? Т.е. какую функцию он несете, как вы считаете? (Зачем он нужен именно там)

        1. Vladimir (автор)

          Сброс существующего списка доступа, хз как оно сюда попало

  2. ZULI

    пытаюсь настроить прокси, http работает нормально, socks не хочет :(
    в чем может быть проблема?

Добавить комментарий

Этот сайт защищен reCAPTCHA и применяются Политика конфиденциальности и Условия обслуживания применять.

:) :D :( :o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.