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

Решил поделиться с общественностью установкой и настройкой прокси сервера 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 комментариев к “SOCKS5 прокси сервер на FreeBSD”

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

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

        Делал по вашему примеру:

        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
        

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

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

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

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

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

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

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

    Ответить

Оставьте комментарий