Захотелось мне тут с работы получить доступ к своим двум локальным сетям, доступным из дома. Простой и легковесный прокси-сервер с авторизацией — неплохое решение, на мой взгляд. 3proxy многоплатформенный компактный прокси-сервер, просто находка, ну не ставить же для таких простых задач SQUID, в самом деле. Вот об установке и настройке 3proxy на домашнем сервере мы и поговорим сегодня. Постарался сделать комментарии в конфиге как можно более подробными.

Приступим, пожалуй.

Для сборки:

sudo apt-get install build-essential

Скачиваем стабильную версию:

cd /usr/src
wget http://3proxy.ru/0.6.1/3proxy-0.6.1.tgz

Распаковываем:

tar zxvf 3proxy-0.6.1.tgz

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

cd 3proxy-0.6.1

Перед компиляцией добавим одну строчку, чтобы сервер был анонимным:

cd src
nano proxy.h

Добавить строку:

#define ANONYMOUS 1

Возвращаемся на уровень выше

cd ../

Собираем

make -f Makefile.Linux

Создаем директорию под лог-файлы, копируем бинарник ‘3proxy’ и создаем конфиг ‘3proxy.cfg’ в ‘/usr/local/3proxy’

mkdir -p /usr/local/3proxy/logs
cp 3proxy /usr/local/3proxy
cd /usr/local/3proxy
nano 3proxy.cfg

Пример моего конфига (изменен 25.09.2010):

#-------------3proxy.cfg------------
# ВНИМАНИЕ! Не должно быть пробелов
# перед любыми опциями конфигурации.
#-------------3proxy.cfg------------

# Важно указать данное значение, так как только при нем процесс 3proxy уйдет в background
daemon

# Записывать pid текущего процесса в файл
pidfile /usr/local/3proxy/3proxy.pid

# IP адреса
# меняем 192.168.1.2 на ip адрес вашего сервера (internal и external)
internal 192.168.1.2
external 192.168.1.2

# Пропишем правильные серверы имен, посмотрев их на своем сервере в /etc/resolv.conf
nserver 192.168.1.1

# Оставим размер кэша для запросов DNS по умолчанию
nscache 65536
# Равно как и таймауты
timeouts 1 5 30 60 180 1800 15 60

# Создаем двух пользователей zerochaos и zchaos и назначаем им пароли
users zerochaos:CL:password
users zchaos:CL:password

# Путь к логам и формат лога, к имени лога будет добавляться дата создания
log /usr/local/3proxy/logs/3proxy.log D
logformat "- +_L%t.%. %N.%p %E %U %C:%c %R:%r %O %I %h %T"
rotate 30

# Конфигурация FTP (ftp и icq), Web-proxy (http и https), SOCKS5-proxy
flush
auth strong
maxconn 32
# разрешим использовать прокси только тем пользователям, которых добавили в самом начале конфига и с определенным IP
allow zerochaos,zchaos 192.168.1.4,95.95.95.95 * * *
# запустим ftp прокси на порту 3127
#ftppr -p3127
# запустим web прокси на порту 3128
proxy -p3128
# запустим socks прокси на порту 3129
#socks -p3129

# Запустить административный веб-интерфейс на порту 8081
#admin -p8081

# Ограничиваем толщину канала для каждого пользователя, zerochaos и zchaos в 20000 bps
#bandlimin 20000 zerochaos,zchaos
#bandlimin 10000 test

# Отслеживать изменения в файле конфигурации
#monitor /usr/local/3proxy/3proxy.cfg

# Запускаем сервер от пользователя nobody
# (возможно в вашей ОС uid и gid пользователя nobody будут другими, для их определения воспользуйтесь командой id nobody)
setgid 65534
setuid 65534

Выставляем права

chown -R nobody:nogroup /usr/local/3proxy

Создаем init-script ‘3proxy’ в ‘/etc/init.d’ (переписан с нуля 25.09.2010, идущий по умолчанию с дистрибутивом, иногда запускал 3proxy в двух экземплярах)

cd /etc/init.d
nano 3proxy

#!/bin/sh

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/3proxy/3proxy
DAEMON_OPTS=/usr/local/3proxy/3proxy.cfg
NAME=3proxy
DESC=3proxy

test -f $DAEMON || exit 0

set -e

case "$1" in
start)
echo -n "Starting $DESC: "
start-stop-daemon --start --quiet --pidfile /usr/local/3proxy/$NAME.pid \
--exec $DAEMON $DAEMON_OPTS
echo "done."
;;
stop)
echo -n "Stopping $DESC: "
start-stop-daemon --stop --quiet --pidfile /usr/local/3proxy/$NAME.pid \
--exec $DAEMON
echo "done."
;;
*)
N=/etc/init.d/$NAME
# echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
echo "Usage: $N {start|stop}" >&2
exit 1
;;
esac

exit 0

Выставляем права и добавляем в автозагрузку:

sudo chmod +x /etc/init.d/3proxy
sudo update-rc.d 3proxy defaults

Запускаем прокси-сервер

/etc/init.d/3proxy start

Проверяем слушается ли наш порт:

netstat -an | grep -i listen

Ну и проверим висит ли наш процесс:

ps ax | grep [3]proxy

На этом настройка закончена. Будут вопросы, задавайте в комментариях. Не смотря на подробные комментарии в конфиг-файле, советую почитать официальные маны на сайте, наверняка почерпнете что-то полезное для себя.