Tag Archives: сети

Настройка прокси сервера на CentOS

ЦЕЛЬ

Веб прокси сервер.

Требования::

  • Зашифровать подключение через HTTPS.
  • Аутентификация по пользователю/паролю.
  • Расщепление горизонта (split horizon), т.е. проксирование только определенных веб сайтов.

ИСПОЛЬЗУЕМЫЕ РЕШЕНИЯ

  • Прокси сервер
    • Squid
    • nginx
  • Шифрование HTTPS
    • Let’s encrypt
  • Аутентификация
    • PAM
  • Расщепление горизонта
    • PAC
    • plain text
  • Браузер
    • Firefox (поддерживается Chrome)
  • Веб сайт
    • 2ip.ru

ИМПЛЕМЕНТАЦИЯ

  1. Установка прокси сервера
  1. Squid
  2. nginx
  • Настройка прокси сервера HTTP
    1. Без аутентификации
    1. Squid
    2. nginx
  • Проверка
  • PAM basic аутентификация
    1. Squid
    2. nginx
  • Проверка
  • Настройка расщепления горизонта
    1. Plain text
    2. PAC
    3. nginx
    4. Проверка
  • Получение сертификата
    1. nginx
    2. Let’s encrypt
  • Настройка прокси сервера HTTPS с PAM basic аутентификацией
    1. Squid
    2. PAC
    3. Проверка
  • Настройка обновление сертификата автоматически
  • АДРЕСА

    • proxy.example.org — DNS имя прокси сервера
    • 1.1.1.1 — IP адрес прокси сервер внешний (перед NAT)
    • 10.1.1.4 — IP адрес прокси сервер внутренний (за NAT)
    • 195.201.201.32 — IP адрес 2ip.ru (проверка внешнего IP)
    • 2.2.2.2 — IP адрес клиента браузера внешний

    1. УСТАНОВКА ПРОКСИ СЕРВЕРА

    В качестве прокси сервера проверим Squid и nginx.

    1.1. SQUID

    Примечание: вся действия будут производиться под пользователем root. Это не безопасно. Для защиты рекомендуется использовать отдельного пользователя и команду sudo.

    Команда установки

    yum install squid

    1.2. NGINX

    Для работы прокси и аутентификации в nginx нужно установить модули. nginx по умолчанию не понимает метод HTTP CONNECT, поэтому HTTPS проксирование без модуля работать не будет. Для установки модулей nginx придется пересобрать из исходников.

    Команда установки

    yum install nginx

    Узнаем версию nginx

    nginx -V

    смотрим вывод nginx version

    Узнаем опции, с которыми был скомпилирован nginx

    nginx -V

    смотрим вывод configure arguments

    Устанавливаем зависимости для компиляции PCRE, ZLIB, OPENSSL

    yum groupinstall 'Development Tools'
    yum install zlib zlib-devel pcre pcre-devel openssl openssl-devel pam-devel

    Скачиваем исходный код nginx
    Примечание: версию используем ту же, что в выводе команды выше

    mkdir -p /root/sources/nginx
    cd /root/sources/nginx
    wget http://nginx.org/download/nginx-1.14.0.tar.gz
    tar zxf nginx-1.14.0.tar.gz

    Скачиваем модуль PAM
    Примечание: используем PAM модуль из репозитория проекта

    mkdir -p /root/sources/http_auth_pam_module
    cd /root/sources/http_auth_pam_module
    wget https://raw.githubusercontent.com/sto/ngx_http_auth_pam_module/master/ngx_http_auth_pam_module.c
    wget https://raw.githubusercontent.com/sto/ngx_http_auth_pam_module/master/config

    Скачиваем модуль HTTP CONNECT
    Примечание: используем модуль для версии из команды выше. Репозиторий проекта

    mkdir -p /root/sources/http_proxy_connect_module
    cd /root/sources/http_proxy_connect_module
    wget https://raw.githubusercontent.com/chobits/ngx_http_proxy_connect_module/master/patch/proxy_connect_1014.patch
    wget https://raw.githubusercontent.com/chobits/ngx_http_proxy_connect_module/master/ngx_http_proxy_connect_module.c
    wget https://raw.githubusercontent.com/chobits/ngx_http_proxy_connect_module/master/config

    Применим патч http_proxy_connect_module

    cd /root/sources/nginx/nginx-1.14.0
    patch -p1 < /root/sources/http_proxy_connect_module/proxy_connect_1014.patch

    Настраиваем сборку ngnix из исходного кода с модулями
    Примечание: параметры могут отличаться от ваших.

    ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' --add-module=/root/sources/http_auth_pam_module --add-module=/root/sources/http_proxy_connect_module

    Примечание: Для получения команды нужно взять опции компиляции из вывода команды выше и добавить к ним два модуля —add-module=/root/sources/http_auth_pam_module —add-module=/root/sources/http_proxy_connect_module

    Собираем nginx из исходных кодов
    ВНИМАНИЕ: Команда установки сама заменит файлы в папках. Если у вас на этом nginx сервере запущено что-то оно может перестать работать.

    make
    make install

    Читать далее

    Wireshark дешифрока HTTPS

    Все больше в современных сетях используется шифрование с помощью TLS. Благодаря чему в ПО захвата пакетов, таком как Wireshark, невозможно увидеть внутренности пакета. В этом посте рассказывается про асимметричное шифрование, TLS в версии 1.3 и как можно расшифровать его пакеты в Wireshark.

    Содержание:

    • Введение в шифрование с открытым ключом
    • Реализация шифрования в TLS
    • Отличие TLS версии 1.3
    • Дешифровка TLS с помощью Wireshark

    Введение.

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

    Существуют два ключа (псевдослучайная последовательность данных). Для простоты они называются открытый и закрытый ключи. Они связаны между собой таким образом, что шифрование с помощью одного ключа, можно расшифровать с помощью другого.

    Практически это выглядит так. Клиент запрашивает данные у сервера. Сервер шифрует данные с помощью своего закрытого ключа и передает клиенту. Клиент берет открытый ключ сервера и расшифровывает данные. Клиент шифрует данные с помощью открытого ключа сервера и передает их серверу. Сервер расшифровывает данные с помощью своего закрытого ключа. Для этой работы клиенту нужно знать открытый ключ сервера. Он его берет из сертификата сервера.


    Читать далее

    Skype for Business и Juniper SRX внешний доступ

    Небольшой пост по конкретной проблеме в взаимодействии Skype for Business и Juniper SRX.

    Проблема: Показ экрана работает внутри сети. Показ экрана не работает при подключении снаружи.

    Проблема оказалась в следующем:

    Что происходит по шагам:

    1. SfB клиент инициирует TCP подключение отправив SYN сегмент
    2. SfB сервер сбрасывает это TCP подключения отправив RST сегмент
    3. Juniper записывает эту TCP сессию на удаление через 2 секунды
    4. Клиент снова инициирует TCP подключение с теми же самими параметрами (IP адрес источника, IP адрес получателя, порт и протокол)
    5. Сервер принимает TCP подключение
    6. Но для Juniper эта та же самая сессия, помеченная для удаления
    7. Спустя приблизительно 1,5 секунды с момента установления TCP сессии Juniper разрывает сессию
    8. Все следующие пакеты от клиента будут отбрасываться Juniper потому что они не подпадают ни под одну отслеживаемую сессию. И они не смогу создать новую сессию потому что не содержат SYN флага.

    Проблемы могло бы не быть, если выполнялось одно из условий:

    • Клиент Skype for Business инициировал каждое новое соединение TCP с новым портом
    • SRX закрывал TCP сессию сразу при получении RST сегмента

    К счастью, в SRX существует возможность отключить 2 секундное ожидание перед разрывом TCP сессии. Существует даже отдельная KB на сайте Juniper посвященная этой проблеме [2].

    В разделе конфигурации security flow tcp-session есть параметры изменяющие работу с TCP сессиями. Нас интересует настройка rst-invalidate-session. Если ее включить, то соединение будет разрываться сразу при получении RST сегмента.

    Решение кратко:
    В режиме конфигурации SRX ввести

    set security flow tcp-session rst-invalidate-session
    commit
    exit

    Источник 1

    Источник 2

    Filezilla ENETUNREACH или как антивирусы сканируют трафик

    По запросу «Filezilla ошибка ENETUNREACH» поисковая система выдает, что проблема в антивирусе (Касперский) и для ее решения необходимо добавить filezilla.exe в исключения (доверенные приложения). На форуме этого FTP клиента описывается механизм как антивирус анализурует трафик приложения. Дальше будет приведен перевод:

     Касперский перенаправляет весь сетевой трафик через свой процесс avp.exe по адресу 127.0.0.1 порт 1110.

    Как просходит нормальное FTP подключение без сетевого сканирования:

    1. Filezilla создает управляющее TCP-соединение до адреса 93.184.216.23
    2. Операционная система назначает адрес источника IP пакета как адрес исходящего интерфейса допустим 10.0.0.123
    3. После установления соединения для передачи команд Filezilla создает соединение для передачи данных
    4. Адреса источника и получателя IP пакета используются те же, что и в управляющем соединении Т.е. у соеденения для передачи данных адрес источника будет 10.0.0.123, а получателя — 93.184.216.23.

    Читать далее

    Коллектор sFlow на Logstash

    В данном посте будет описана процедура установки коллектора sFlow на базе ELK на CentOS 7 для сбора трафика со свитча Juniper.

    Компоненты:

    • Logstash — система принимающая данные, фильтрующая их и передающая их в Elasticsearch.
    • Elasticsearch — база данных, которая хранит информацию и осуществляет по ней поиск.
    • Kibana — служит для визуального представления данных, хранящихся в Elasticsearch.

    Взаимодействие компонентов выглядит так:

    10.10.10.10 — адрес сервера CentOS, где установлен ELK

    Читать далее

    Juniper SRX IPsec Site-to-Site VPN и Split-DNS

    В данной статье будет рассматриваться настройка VPN между офисами (site-to-site) и особенности, если трафик возникает на самом SRX на примере Split-DNS.

    В Juniper SRX существуют два варианта организации site-to-site VPN: на основе политик (policy based) и на основе маршрутов (route based). Они отличаются способом, по которому трафик попадает в туннель. Здесь будет рассматриваться route based VPN при котором на основании маршрутов в таблице маршрутизации SRX будет принимать решение об включении трафика в туннель. Эти маршруты могут быть получены автоматически (за счет протоколов динамической маршрутизации), но здесь будет показан самый простой ручной вариант, на основе статических маршрутов.

    Когда филиал соединен с центральным офисом, или, когда все серверы расположены в центре обработки данных, до которого организован site-to-site VPN, один из вопросов сетевой доступности является DNS сервер компании. В данном случае речь идет про ситуацию, когда одни и те же доменные сетевые имена для внутрисетевых клиентов и для внешних клиентов разрешаются по-разному. Этот процесс называется split-DNS, когда домен компании обслуживают два DNS сервера: один для клиентов изнутри, второй для клиентов снаружи.

    Клиенты в филиале как правило получают сетевые настройки от DHCP сервера. В филиале SRX может выполнять роль DHCP сервера. В этом случае опция 6 — «DNS сервер» может содержать адрес как внутреннего DNS сервера компании, так и самого SRX. Для чего это может понадобиться? Если в VPN туннель вы направляете только трафик до внутренних серверов и сервисов, то логично, что запросы на внутренний сервер DNS отправлялись только для доменных имен внутренних ресурсов. Именно поэтому выдавать клиентам филиала адрес SRX как DNS сервера позволит регулировать на самом SRX на какой DNS сервер отправлять запрос. Это функция называется Proxy DNS.

    Читать далее

    VPN сервер на основе StrongSwan на CentOS

    В последних версиях мобильной и настольной ОС компании Apple появилась полноценная поддержка VPN подключений по IKEv2. В системах компании Microsoft она была реализована еще с Windows 7. Таким образом можно предположить, что IKEv2 станет мультиплатформенным стандартом для виртуальных сетей, заменив устаревший и небезопасный PPTP.

    В данной статье будет описана настройка StrongSwan как сервера IKEv2 VPN, а также проверено подключение к нему с Windows и MacOS.

    VPN сервер и клиенты IKEv2 могут аутентифицировать себя как по ключам, так и по сертификатам. Причем для каждой стороны можно задать свой выбор. Для уменьшения требований, предъявляемых к клиентам, было выбрано чтобы сервер StrongSwan аутентифицировал клиентов по логину и паролю, а VPN клиенты аутентифицировали сервер по сертификату, выданному доверенным центром сертификации.

    Последовательность действий:

    1. Получение сертификата для сервера StrongSwan
    2. Установка и настройка сервера StrongSwan
    3. Проверка подключения к серверу с Windows и MacOS

    Читать далее