Как предоставить доступ в интернет серверу с RedOS, если он не имеет прямого подключения?

Программист IT и автоматизация бизнеса
← К списку

Мы с вами рассмотрим распространенную и достаточно частую ситуацию, когда сервер под управлением операционной системы RedOS не имеет прямого доступа в интернет по соображениям безопасности или сетевой архитектуры, но при этом ему необходимо обращаться к внешним веб-сервисам или получать обновления. Разберем, как эффективно решить эту проблему, используя прокси-сервер.

Представьте, что у нас есть сервер RedOS, который находится в изолированном сегменте сети. Для его взаимодействия с внешним миром, например, для работы некоторых функций 1С, получения данных от сторонних API или обновления системных пакетов, нам потребуется посредник. Этим посредником станет прокси-сервер.

Общий принцип работы прокси-сервера

Давайте выясним, что такое прокси-сервер и как он функционирует. Прокси-сервер выступает в роли посредника между нашим RedOS сервером (клиентом) и интернетом. Когда RedOS серверу нужно получить доступ к внешнему ресурсу, он отправляет запрос не напрямую в интернет, а на прокси-сервер. Прокси-сервер, имеющий прямой доступ в интернет, принимает этот запрос, перенаправляет его к целевому веб-сервису, получает ответ и возвращает его обратно на RedOS сервер.

Такой подход обеспечивает несколько важных преимуществ:

  1. Безопасность: Прокси позволяет скрыть внутреннюю структуру нашей сети, так как для внешних ресурсов виден только IP-адрес прокси-сервера. Он также может фильтровать вредоносный трафик.
  2. Контроль: Мы можем централизованно управлять доступом к внешним ресурсам, блокируя нежелательные сайты или разрешая только определенные.
  3. Кэширование: Некоторые прокси-серверы могут кэшировать часто запрашиваемые данные, что снижает нагрузку на внешний канал и ускоряет доступ для пользователей.

Выбор прокси-сервера: Nginx и другие решения

Для реализации проксирования нам понадобится установить и настроить соответствующее программное обеспечение на машине, которая имеет прямой доступ в интернет. Рассмотрим различные варианты прокси-серверов, которые мы можем использовать.

Одним из наиболее популярных и гибких решений является Nginx, который часто используется как обратный прокси. Но существуют и другие достойные альтернативы:

  1. Nginx: Высокопроизводительный веб-сервер, который отлично справляется с функциями обратного прокси. Он позволяет гибко настраивать проброс портов и доменов, что очень удобно, если нашему RedOS серверу нужно обращаться к нескольким разным внешним сервисам.
  2. Squid: Это известный и широко используемый кэширующий прокси-сервер с открытым исходным кодом. Он поддерживает протоколы HTTP, HTTPS и FTP. Squid может значительно снизить нагрузку на внешний канал за счет кэширования часто запрашиваемых данных. В RedOS есть подробная документация по его установке и настройке.
  3. Apache HTTP Server: Также может быть настроен для работы в качестве обратного прокси с помощью модуля mod_proxy.
  4. Lighttpd: Легковесный веб-сервер с открытым исходным кодом, разработанный для высокой производительности и минимального потребления ресурсов, который также может быть использован как прокси.
  5. Varnish: Это специализированный кэширующий HTTP обратный прокси, предназначенный для ускорения доставки контента, особенно полезен для высоконагруженных веб-приложений.
  6. Privoxy: Прокси-сервер с открытым исходным кодом, который фокусируется на приватности и безопасности, модифицируя HTTP-заголовки и веб-страницы. Он не имеет функций кэширования.
  7. Caddy: Современный веб-сервер и обратный прокси, отличающийся простотой использования и автоматической поддержкой HTTPS.
  8. 3proxy и HAProxy: Эти решения также упоминаются в документации RedOS как варианты прокси-серверов, особенно HAProxy хорош для балансировки нагрузки и высокой доступности.

Для нашего сценария, когда RedOS серверу нужно обращаться к конкретным внешним веб-сервисам, Nginx или Squid будут отличным выбором из-за их гибкости и широких возможностей настройки.

Настройка прокси-сервера (на машине с доступом в интернет)

Теперь давайте разберем по шагам, как настроить прокси-сервер на машине, у которой есть прямой доступ в интернет. Мы рассмотрим общие принципы, а затем приведем примеры для Nginx.

  1. Установка прокси-сервера:

    Нам необходимо установить выбранный прокси-сервер на машине, имеющей доступ в интернет. Если мы выбрали Nginx, то команда для RedOS будет примерно такой:

    
    sudo dnf install nginx
    

    Для Squid:

    
    sudo dnf install squid
    
  2. Конфигурация прокси-сервера:

    Это самый важный шаг. Здесь мы определяем, какие запросы прокси-сервер будет принимать и куда их перенаправлять.

    Конфигурация Nginx

    В Nginx мы создаем блок server, который будет слушать определенный порт на нашей локальной машине и перенаправлять трафик на целевые интернет-ресурсы с помощью директивы proxy_pass. Представим, что наш прокси-сервер имеет IP-адрес 192.168.1.10. Нам нужно пробросить доступ к двум внешним сервисам.

    Откроем конфигурационный файл Nginx (обычно /etc/nginx/nginx.conf или в директории /etc/nginx/conf.d/ создадим новый файл, например, proxy.conf):

    
    sudo nano /etc/nginx/conf.d/proxy.conf
    

    И добавим следующее содержимое:

    
    server {
        listen 1180; # Порт, который будет слушать Nginx на 192.168.1.10
        server_name 192.168.1.10; # IP-адрес прокси-сервера
    
        location / {
            proxy_pass http://internetdomain1.com:80; # Целевой интернет-ресурс 1
            proxy_set_header Host internetdomain1.com;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
    
    server {
        listen 1280; # Другой порт для другого сервиса
        server_name 192.168.1.10;
    
        location / {
            proxy_pass https://internetdomain2.com:443; # Целевой интернет-ресурс 2 (HTTPS)
            proxy_set_header Host internetdomain2.com;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_ssl_server_name on; # Важно для HTTPS
        }
    }
    

    После сохранения файла необходимо проверить конфигурацию Nginx и перезапустить его:

    
    sudo nginx -t
    sudo systemctl restart nginx
    sudo systemctl enable nginx
    

    Конфигурация Squid

    Основной файл конфигурации Squid — /etc/squid/squid.conf. В нем мы определяем порты, правила контроля доступа (acl и http_access) и параметры кэширования. Например, чтобы разрешить доступ с нашего RedOS сервера:

    
    http_port 3128 # Порт, который будет слушать Squid
    
    acl localnet src 192.168.1.0/24 # Наша внутренняя сеть, где находится RedOS сервер
    http_access allow localnet
    http_access deny all
    

    После внесения изменений необходимо перезапустить Squid:

    
    sudo systemctl restart squid
    sudo systemctl enable squid
    
  3. Сетевые настройки на прокси-сервере:

    Мы должны убедиться, что брандмауэр на прокси-сервере разрешает входящий трафик на порты, которые слушает наш прокси (например, 1180, 1280 для Nginx или 3128 для Squid). В RedOS мы можем использовать nftables или iptables.

    Пример для nftables (предполагая, что у вас настроен базовый набор правил):

    
    sudo nft add rule ip filter input tcp dport 1180 accept
    sudo nft add rule ip filter input tcp dport 1280 accept
    sudo nft add rule ip filter input tcp dport 3128 accept
    sudo nft list ruleset # Проверить правила
    sudo nft list ruleset > /etc/nftables.conf # Сохранить правила, если они не сохраняются автоматически
    

    Также для корректной работы прокси в некоторых сценариях может потребоваться включить IP-форвардинг на сервере с прокси. Для этого измените параметр net.ipv4.ip_forward в файле /etc/sysctl.conf:

    
    sudo nano /etc/sysctl.conf
    

    Добавьте или измените строку:

    
    net.ipv4.ip_forward = 1
    

    Затем примените изменения:

    
    sudo sysctl -p
    

Настройка RedOS сервера для работы через прокси

Теперь, когда прокси-сервер настроен и готов принимать запросы, нам нужно научить наш RedOS сервер использовать его для доступа в интернет. Мы рассмотрим несколько способов.

  1. Настройка через графический интерфейс (если используется):

    Если на RedOS сервере установлен графический интерфейс (например, MATE или Cinnamon), мы можем настроить прокси через системные параметры. Обычно это находится в "Главном меню" -> "Параметры" -> "Прокси-сервер". Выбираем "Ручная настройка прокси-службы" и указываем IP-адрес и порт нашего прокси-сервера (например, 192.168.1.10 и порт 3128 для Squid или 1180 для Nginx, в зависимости от того, к какому сервису мы обращаемся).

  2. Настройка для обновления пакетов (DNF):

    Для того чтобы менеджер пакетов dnf на RedOS сервере мог получать обновления через прокси, нам нужно добавить соответствующую строку в его конфигурационный файл /etc/dnf/dnf.conf:

    
    sudo nano /etc/dnf/dnf.conf
    

    Добавьте следующую строку в конец файла, указав IP-адрес и порт вашего прокси-сервера (например, для Squid):

    
    proxy=http://192.168.1.10:3128
    

    Если вы используете Nginx для проброса конкретного сервиса, то DNF обычно не будет использовать его напрямую, так как Nginx в данном случае проксирует конкретные HTTP-запросы к внешним ресурсам, а не весь трафик DNF.

  3. Настройка для терминальных приложений (переменные окружения):

    Для большинства терминальных приложений и скриптов, которым нужен доступ в интернет, мы можем настроить общесистемные переменные окружения, указывающие на прокси. Это можно сделать в файле /etc/environment или в профиле пользователя (например, ~/.bashrc или /etc/profile.d/proxy.sh).

    
    sudo nano /etc/profile.d/proxy.sh
    

    Добавьте следующие строки, заменив IP-адрес и порт на ваши данные:

    
    export http_proxy="http://192.168.1.10:3128/"
    export https_proxy="http://192.168.1.10:3128/"
    export ftp_proxy="http://192.168.1.10:3128/"
    export no_proxy="localhost,127.0.0.1,localaddress,.localdomain.com"
    

    После сохранения файла, примените изменения:

    
    source /etc/profile.d/proxy.sh
    

    или просто перезагрузите сессию терминала.

    Важно: Если вы используете Nginx для проброса на конкретный домен через определенный порт (например, 192.168.1.10:1180 для internetdomain1.com), то в приложениях, которые должны обращаться к internetdomain1.com, вы будете указывать адрес http://192.168.1.10:1180 вместо прямого адреса internetdomain1.com. Это особенность работы обратного прокси Nginx, когда он "скрывает" реальный адрес за локальным IP и портом.

  4. Настройка для wget:

    Утилита wget также может быть настроена для работы через прокси. Вы можете указать прокси в командной строке или в файле ~/.wgetrc или /etc/wgetrc:

    
    http_proxy = http://192.168.1.10:3128/
    https_proxy = http://192.168.1.10:3128/
    use_proxy = on
    
  5. Исключения:

    Мы также можем указать список узлов или IP-адресов, для которых прокси использоваться не будет, и доступ к ним будет осуществляться напрямую. Это делается с помощью переменной окружения no_proxy, как показано в примере выше.

Важность безопасности прокси-сервера

Давайте проанализируем ситуацию с безопасностью. Прокси-сервер не только решает проблему доступа, но и может служить дополнительным уровнем защиты. Он скрывает реальные IP-адреса наших внутренних устройств и способен фильтровать вредоносный трафик, прежде чем он достигнет RedOS сервера.

Обратные прокси, такие как Nginx, также могут выполнять SSL/TLS-терминацию. Это означает, что прокси-сервер берет на себя всю работу по шифрованию и дешифрованию HTTPS-трафика, позволяя внутренним серверам работать без необходимости настройки SSL-сертификатов. Это упрощает управление безопасностью внутри сети.

Однако, крайне важно уделять внимание безопасности самого прокси-сервера. Поскольку он является точкой входа и выхода для интернет-трафика, его компрометация может привести к доступу злоумышленников к внутреннему трафику или даже к самой внутренней сети. Регулярные обновления, строгая настройка брандмауэра и минимально необходимые права доступа — это ключевые аспекты обеспечения безопасности прокси-сервера.

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

← К списку