Pull to refresh

Свой прокси. Волшебство разделения ресурсов в одном браузере

Level of difficultyMedium
Reading time5 min
Views8.7K

Представьте себе ситуацию: вы хотите в одном браузере смотреть любимый сериал на зарубежном сайте, который требует прокси, и одновременно листать локальные новости, где прокси только мешает. Обычно это превращается в жонглирование настройками или даже окнами браузера — скучно и утомительно. Но что, если я скажу, что есть простой и изящный способ объединить эти миры? Сегодня я поделюсь с вами крутым Bash-скриптом для сервера на Ubuntu, который настроит прокси-сервер Squid так, чтобы вы могли легко разделять ресурсы с прокси и без него в одном браузере. Давайте разберёмся, как это работает, и почему это так увлекательно!

Зачем это нужно?

Идея проста, но гениальна: прокси-сервер становится вашим личным швейцаром, который решает, какие запросы отправлять через туннель в другую страну, а какие оставить "дома". Например, вы настроили прокси для доступа к заблокированным сайтам или для маскировки IP, но не хотите, чтобы он затрагивал локальные ресурсы — скажем, ваш банковский сайт или форум соседнего города. Скрипт, о котором я расскажу, создаёт такую возможность через авторизацию и настройки Squid. Это как волшебная кнопка "вкл/выкл" для прокси прямо в вашем браузере!

Что делает скрипт?

Этот маленький шедевр автоматизации, предназначенный для серверов на Ubuntu, берёт на себя всю грязную работу: устанавливает прокси-сервер Squid, настраивает авторизацию (чтобы никто лишний не подключился), маскирует ваш IP для анонимности и даже открывает нужный порт в брандмауэре. Вы просто запускаете его, вводите имя пользователя и пароль, а в конце получаете готовые данные для подключения. Никаких часов в терминале или гугления сложных команд — всё быстро и с энтузиазмом!

Вот сам скрипт, который творит эту магию:

#!/bin/bash

# Проверка прав root
if [ "$EUID" -ne 0 ]; then
    echo "Этот скрипт должен быть запущен с правами root (sudo)"
    exit 1
fi

# Обновление системы
echo "Обновление системы..."
apt update && apt upgrade -y

# Установка Squid если не установлен
echo "Проверка и установка Squid..."
if ! dpkg -l | grep -q squid; then
    apt install squid -y
else
    echo "Squid уже установлен, очищаем предыдущую конфигурацию..."
    systemctl stop squid
    rm -f /etc/squid/squid.conf
fi

# Установка apache2-utils для генерации паролей
echo "Установка инструмента для создания паролей..."
apt install apache2-utils -y

# Установка ufw если не установлен
echo "Проверка и установка ufw..."
if ! dpkg -l | grep -q ufw; then
    apt install ufw -y
fi

# Создание файла паролей
echo "Создание файла паролей для авторизации..."
PASSWORD_FILE="/etc/squid/passwd"
if [ -f "$PASSWORD_FILE" ]; then
    echo "Файл паролей уже существует, будет перезаписан"
    rm -f "$PASSWORD_FILE"
fi

# Запрос имени пользователя и пароля
read -p "Введите имя пользователя для прокси: " PROXY_USER
htpasswd -c "$PASSWORD_FILE" "$PROXY_USER"
echo "Пользователь $PROXY_USER добавлен"
chown proxy:proxy "$PASSWORD_FILE"
chmod 640 "$PASSWORD_FILE"

# Настройка лог-директории
echo "Настройка директории для логов..."
LOG_DIR="/var/log/squid"
if [ ! -d "$LOG_DIR" ]; then
    mkdir -p "$LOG_DIR"
fi
rm -f "$LOG_DIR/access.log" "$LOG_DIR/cache.log"
touch "$LOG_DIR/access.log"
chown proxy:proxy "$LOG_DIR" "$LOG_DIR/access.log"
chmod 750 "$LOG_DIR"
chmod 640 "$LOG_DIR/access.log"

# Настройка logrotate с ограничением размера
echo "Настройка ротации логов с ограничением размера..."
cat > /etc/logrotate.d/squid << EOL
/var/log/squid/access.log {
    daily
    size 100M
    rotate 7
    compress
    missingok
    notifempty
    create 0640 proxy proxy
    postrotate
        /usr/sbin/squid -k rotate
    endscript
}
EOL

# Проверка прав на /var/log
echo "Проверка прав на /var/log..."
if [ ! -w /var/log ]; then
    echo "Устанавливаем права на /var/log для доступа..."
    chmod o+w /var/log
fi

# Создание конфигурационного файла Squid с маскировкой IP
echo "Создание конфигурации Squid..."
cat > /etc/squid/squid.conf << EOL
# Базовые настройки
http_port 3128

# Настройка авторизации
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwd
auth_param basic children 5
auth_param basic realm Proxy Authentication Required
auth_param basic credentialsttl 2 hours

# Правила доступа
acl authenticated proxy_auth REQUIRED
http_access allow authenticated
http_access deny all

# Маскировка IP клиента
forwarded_for off
request_header_access X-Forwarded-For deny all
request_header_access Via deny all
request_header_access From deny all

# Дополнительные настройки
cache_dir ufs /var/spool/squid 100 16 256
coredump_dir /var/spool/squid
access_log stdio:/var/log/squid/access.log
EOL

# Установка правильных прав на конфиг
chown root:root /etc/squid/squid.conf
chmod 644 /etc/squid/squid.conf

# Проверка конфигурации
echo "Проверка конфигурации Squid..."
squid -k parse
if [ $? -eq 0 ]; then
    echo "Конфигурация верна"
else
    echo "Ошибка в конфигурации, проверьте /etc/squid/squid.conf"
    exit 1
fi

# Проверка и создание директории кэша
echo "Проверка и создание кэша..."
if [ ! -d /var/spool/squid ]; then
    mkdir -p /var/spool/squid
fi
chown proxy:proxy /var/spool/squid
chmod 750 /var/spool/squid
squid -z
if [ $? -ne 0 ]; then
    echo "Ошибка при инициализации кэша"
    exit 1
fi

# Настройка брандмауэра (ufw)
echo "Настройка брандмауэра..."
ufw allow 3128/tcp
ufw allow 22
ufw --force enable
echo "Порт 3128 открыт для TCP"

# Запуск и включение автозапуска Squid
echo "Запуск Squid..."
systemctl restart squid
if [ $? -ne 0 ]; then
    echo "Ошибка запуска Squid, проверьте логи: journalctl -xeu squid.service"
    exit 1
fi
systemctl enable squid

# Проверка статуса
echo "Проверка статуса Squid..."
systemctl status squid --no-pager

# Вывод информации для подключения
IP_ADDRESS=$(hostname -I | awk '{print $1}')
echo "------------------------------------------------"
echo "Прокси настроен!"
echo "IP сервера: $IP_ADDRESS"
echo "Порт: 3128"
echo "Пользователь: $PROXY_USER"
echo "Для подключения используйте: http://$PROXY_USER:PASSWORD@$IP_ADDRESS:3128"
echo "------------------------------------------------"

exit 0

Как это настроить?

Для начала вам понадобится сервер на Ubuntu (срипт писался именно для Ubuntu 22.04) — если у вас его ещё нет, можно взять надёжный VPS, например, у HostVDS, где всё быстро и удобно настраивается. Тем более этот хостер принимает карты МИР, да и цены у него одни из самых низких. В общем - разберетесь.

А дальше — проще простого:

Сохраните скрипт в файл, например, setup_proxy.sh.

Откройте терминал на вашем Ubuntu-сервере.

Дайте файлу права на выполнение: chmod +x setup_proxy.sh.

Запустите его с правами суперпользователя: sudo ./setup_proxy.sh.

Следуйте подсказкам: введите имя пользователя и пароль, когда попросят.

После завершения скрипт выдаст вам IP-адрес сервера, порт (3128) и данные для авторизации. Запомните их — они пригодятся для проверки!

Какие расширения подойдут для вашего браузера?

В магазине расширений Google Chrome есть несколько расширений, которые позволяют управлять доступом к сатам при помощи прокси. Лично я остановился на Smart Proxy. Там всё довольно просто - правила добавляются автоматически. Стоит только сначала выбрать режим "Умный прокси". Далее заходим на нужный сайт, нажимаем на значок расширения и в выпавшем мень ставим галочку напротив названия сайта. С этого момента сайт будет открываться через предварительно настроенный вами (в этом приложении) прокси.

Почему это круто?

Этот скрипт — как ключ к свободе в интернете. Вы больше не привязаны к глобальным настройкам прокси, которые либо работают для всего, либо нет. Теперь у вас есть контроль: включайте прокси там, где нужно, и отключайте там, где он мешает. Это не просто инструмент, а целая философия удобства и гибкости. Попробуйте — и вы не захотите возвращаться к старым способам!

Так что запускайте терминал на своём сервере, пробуйте этот скрипт и делитесь впечатлениями.

Tags:
Hubs:
Total votes 8: ↑2 and ↓6-4
Comments32

Articles