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

На этом все:)

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

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

    1. img-7
      Vladimir (автор)

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

      1. img-8
        Макс

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

        Делал по вашему примеру:
        [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. img-9
          Vladimir (автор)

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

      2. img-10
        Макс

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

        1. img-11
          Vladimir (автор)

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

  2. img-12
    ZULI

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

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

:) :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.