Dante. Установка и настройка прокси-сервера
Хотя прокси-серверы очень похожи по своей функции на VPN, они имеют одно существенное отличие — трафик не шифруется, то есть уровень обеспечения безопасности ниже. Несмотря на это, прокси-серверы активно используют, так как этот метод позволяет скрыть свой ip-адрес и фактическое местоположение.
Установка и настройка
Установка пакета SOCKS сервера Dante
$ sudo apt install dante-server
Добавляем службу в автозагрузку
$ sudo systemctl enable dante-server
Редактируем файл конфигурации
$ sudo nano /etc/danted.conf
# # ОБЩИЕ НАСТРОЙКИ СЕРВЕРА # # Все сообщения будут записываться в системный лог syslog logoutput: syslog # Прослушивать клиентов на интерфейсе eth0 на порту 8888 internal: eth0 port = 8888 # Отправлять запросы клиентов во внешний мир через eth0 external: eth0 # Для прослушивания сокета привилегий не нужно, достаточно nobody user.unprivileged: nobody # Аутентификации не будет, потому что разрешены только два ip-адреса clientmethod: none socksmethod: none
# # ПРАВИЛА ДЛЯ ДОСТУПА КЛИЕНТОВ К СЕРВЕРУ # # Эти правила определяют доступ к прокси-серверу, они применяются # еще до того, как какие-либо данные будут получены от клиента. # Прокси-сервер по умолчанию блокирует все входящие соединения # клиентов, поэтому необходимо создать хотя бы одно правило. # разрешается доступ клиенту с ip-адресом 111.111.111.111 куда угодно client pass { from: 111.111.111.111/32 to: 0.0.0.0/0 log: error # connect disconnect } # разрешается доступ клиенту с ip-адресом 222.222.222.222 куда угодно client pass { from: 222.222.222.222/32 to: 0.0.0.0/0 log: error # connect disconnect }
# # ПРАВИЛА ПРОХОЖДЕНИЯ ТРАФИКА ЧЕРЕЗ СЕРВЕР # # Эти правила контролируют прохождение трафика через прокси-сервер в двух # направлениях — от клиентов во внешний мир и обратно. Прокси-сервер по # умолчанию блокирует прохождение трафика, поэтому необходимо создать хотя # бы два правила — во внешний мир и обратно. # любой клиент может отправлять запросы любому внешнему хосту socks pass { from: 0.0.0.0/0 to: 0.0.0.0/0 command: bind connect udpassociate log: error # connect disconnect iooperation } # любой клиент может принимать ответы от любого внешнего хоста socks pass { from: 0.0.0.0/0 to: 0.0.0.0/0 command: bindreply udpreply log: error # connect disconnect iooperation }
Директивы конфигурации
Файл конфигурации состоит из трех групп — общие настройки сервера, правила доступа для клиентов к серверу и правила прохождения трафика через сервер.
1. Общие настройки сервера
Директива logoutput
Куда записывать логи сервера, возможные значения — путь к файлу или ключевые слова syslog
, stdout
, stderr
. Для директивы допускается использование нескольких значений.
logoutput: syslog stdout /var/log/dante.log
Директива errorlog
Куда записывать ошибки сервера, возможные значения — путь к файлу или ключевые слова syslog
, stdout
, stderr
. Директиву можно использовать, чтобы записывать только ошибки и предупреждения. Уровень ошибок задается директивой debug
, которая может принимать значения 0 (нет), 1 (подробно), 2 (очень подробно).
errorlog: /var/log/dante.error.log debug: 2
Директивы internal и external
Директивы используются для указания сетевых интерфесов, к которым должен быть привязан сервер. Аргумент может быть ip-адресом, именем интерфейса или именем хоста. Сервер принимает запросы от клиентов по внутреннему интерфейсу и использует внешний интерфейс при пересылке данных во внешний мир. Обычно внутренний интерфейс подключен к локальной сети, а внешний интерфейс подключен к интернету, но при настройке «обратного прокси» все будет наоборот.
Внутренний и внешний сетевые интерфейсы могут отличаться, если прокси-сервер работает как шлюз и имеет два сетевых интерфейса. Номер порта, на котором сервер принимает запросы, можно изменить, но 1080 — это стандартный номер порта SOCKS.
# Прослушивать запросы от клиентов на интерфейсе с ip-адресом 192.168.110.1 на порту 1080 internal: 192.168.110.1 port = 1080 # Отправлять запросы клиентов во внешний мир через интерфейс с ip-адресом 123.123.123.123 external: 123.123.123.123
Директивы user.privileged и user.notprivileged
Директивы задают имена пользователей операционной системы, которые сервер должен использовать для различных типов операций. Использование директивы user.notprivileged
гарантирует, что сервер не будет выполнять операций от имени root
без необходимости.
Для привязки к порту SOCKS по умолчанию обычно не требуется никаких специальных привилегий. Директива user.privileged
требуется только для некоторых методов аутентификации или если серверу необходимо использовать привилегированные TCP/UDP-порты (номера ниже 1024).
Директивы clientmethod и socksmethod
Директива clientmethod
в качестве аргумента принимает названия методов аутентификации, которые используются до или во время согласования протокола SOCKS. После этого названия методов аутентификации используются в правилах для доступа клиентов к серверу (см. ниже). Допустимые значения — rfc931
, pam.address
, pam.username
.
clientmethod: rfc931
client pass {
from: 192.168.100.0/24 to: 0.0.0.0/0
log: error # connect disconnect
clientmethod: rfc931
}
Директива socksmethod
в качестве аргумента принимает названия методов аутентификации, которые используются после завершения согласования протокола SOCKS. После этого названия методов аутентификации используются в правилах для прохождения трафика через сервер (см. ниже). Допустимые значения — username
, gssapi
, bsdauth
.
socksmethod: username
socks pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
command: bind connect udpassociate
log: error # connect disconnect iooperation
socksmethod: username
}
Чтобы не использовать аутентификацию вовсе — в качестве значения этих директив нужно указать ключевое слово none
.
Пример настройки аутентификации
Чтобы включить аутентификацию по логину и паролю — для директивы socksmethod
нужно установить значение username
. При этом пользователь должен иметь учетную запись на прокси-сервере, а пароль передается в виде простого текста. И нужно добавить в файл конфигурации директиву user.privileged
, чтобы прокси-сервер мог проверить логин и пароль пользователя.
# права root нужны для проверки логина и пароля user.privileged: root # не использовать этот способ аутентификации clientmethod: none # включить аутентификацию по логину и паролю socksmethod: username
Для этого способа аутентификации давайте создадм пользователя, у которого не будет никаких прав в системе.
$ sudo useradd --system --shell /bin/false dante $ sudo passwd dante
Теперь способ аутентификации нужно использовать в правилах прохождения трафика через сервер (см.ниже). Но только в правилах для трафика во внешний мир (bind
, connect
, udpassociate
), в правилах для трафика из внешнего мира (bindreply
, udpreply
) это не допускается.
socks pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
command: bind connect udpassociate
log: error
user: dante # разрешено только пользователю dante
socksmethod: username
}
2. Правила для доступа клиентов к серверу
Эти правила определяют доступ к прокси-серверу, они применяются еще до того, как какие-либо данные будут получены от клиента. Сервер Dante по умолчанию блокирует все входящие соединения клиентов, поэтому необходимо создать хотя бы одно правило.
# запрещается доступ клиенту с ip-адресом 192.168.100.22/32 куда бы то ни было client block { from: 192.168.100.22/32 to: 0.0.0.0/0 log: error # connect disconnect } # разрешается доступ клиентам из локальной сети 192.168.100.0/24 куда угодно client pass { from: 192.168.100.0/24 to: 0.0.0.0/0 log: error # connect disconnect }
3. Правила прохождения трафика через сервер
Эти правила контролируют прохождение трафика через прокси-сервер в двух направлениях — от клиентов во внешний мир и обратно. Эти правила выполняются после аутентификации — это значит, что в правилах можно использовать личность клиента.
Сервер Dante поддерживает пять команд, которые можно использовать в правилаx — bind
, connect
, udpassociate
, bindreply
, udpreply
. Первые три команды соответствуют запросам клиентов: from
— адрес клиента, to
— адрес внешнего хоста. Последние две команды соответствуют ответам внешних хостов: from
— адрес внешнего хоста, to
— адрес клиента. По этой причине для каждого набора команд должны быть созданы отдельные правила.
Сервер Dante по умолчанию блокирует прохождение трафика, поэтому необходимо создать хотя бы два правила — во внешний мир и обратно.
# блокировать прохождение трафика от всех клиентов к серверу www.example.org socks block { from: 0.0.0.0/0 to: www.example.org command: bind connect udpassociate log: error # connect disconnect iooperation } # разрешить прохождение трафика от всех клиентов куда угодно во внешний мир socks pass { from: 0.0.0.0/0 to: 0.0.0.0/0 command: bind connect udpassociate log: error # connect disconnect iooperation } # блокировать прохождение трафика из внешнего мира к серверу ftp.example.org socks block { from: 0.0.0.0/0 to: ftp.example.org command: bindreply udpreply log: error # connect disconnect iooperation } # разрешить прохождение любого трафика из внешнего мира к любому клиенту socks pass { from: 0.0.0.0/0 to: 0.0.0.0/0 command: bindreply udpreply log: error # connect disconnect iooperation }
- Установка WireGuard на Ubuntu 20.04 LTS. Часть вторая из двух
- Установка WireGuard на Ubuntu 20.04 LTS. Часть первая из двух
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 12 из 12
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 11 из 12
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 10 из 12
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 9 из 12
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 8 из 12
Поиск: Linux • Клиент • Конфигурация • Настройка • Сервер • Установка • SOCKS • сокет • proxy • прокси • Dante