Tag Archives: linux

Настройка прокси сервера на 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

    Читать далее

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

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

    Компоненты:

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

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

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

    Читать далее

    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

    Читать далее

    Установка Redmine на CentOS 6.5 с PostgreSQL 9.3

    В данном посте рассказывается как поставить систему управления проектами Redmine на CentOS с сохранением БД в PostgreSQL. В качестве фронденда будет использоваться nginx в связке с Phusion Passenger. Поскольку установка тестовая, все будет располагаться на одной машине. Версии ПО по возможности используются последние на момент написания, поэтому применяется сборка из исходных кодов.

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

    1. Ruby — интерпретируемый язык
    2. Node.js — JavaScript сервер
    3. Ruby on Rails — веб-фрэймворк на базе Ruby
    4. ImageMagick — библиотека для экспорта диаграмм Ганта в PNG
    5. Phusion Passenger — сервер приложений для Ruby on Rails
    6. nginx — веб-сервер
    7. PostgreSQL — сервер баз данных
    8. Redmine — система управления проектами

    Читать далее

    Загрузка ОС / Booting OS

    Первоначальная загрузка ОС происходит в сл. последовательности: POST->BIOS -> загрузчик(и)->загрузчик ОС–> ОС.

    После нажатия кнопки питания запускается POST для первичной проверки устройств, затем загружается BIOS, которая последовательно проходит по списку загрузочных устройств в поисках первого загрузочного (у которого два последних байта первого сектора 0xAA55). Найдя загрузочное устройство, BIOS загружает загрузочный сектор в память (по адресу 0x7C00) и передает управление загрузочному коду, в случае, если устройство HDD, то этот код, вероятнее всего, Master Boot Record (MBR).

    Ограничение на размер первоначального загрузчика не позволяют его сделать богатым по функционалу. Этот первоначальный раздел, называемый главной загрузочной записью (MBR), ограничен 512 байтами и находится в самом начале диска, а непосредственно сам загрузчик занимает 446 байт, т.к. помимо него в MBR также присутствует Partition table – таблица разделов (партиций) диска. MBR проверяет список разделов диска в поисках раздела, обозначенного как загрузочный, т.е. того, у которого установлен флаг «активный».

    Особенности разметки диска в MBR: диск может иметь максимум 63 партиции из них только 4 могут быть primary (первичными). Только одну из primary можно разделить на logical партиции, т.е. сделать из нее extended партицию (таким образом, получится 3 primary патриции + возможность создать до 59 logical патриций внутри одной extended). Максимальный размер одного HDD около 2 Тб.

    Восстановление MBR на Windows XP – fixmbr из Recovery Console, Windows Vista и 7 – bootrec/FixMbr из Recovery Eviroment.

    На Linux – grub-install записывает GRUB в MBR.

    Найдя загрузочный раздел, MBR загружает загрузочный сектор из него (chain loading). Этот загрузочный сектор содержит либо ОС-независимый загрузчик, либо загрузчик самой ОС, для которого главная задача – загрузить ядро ОС, которое уже продолжит загрузку самой ОС.

    Загрузчик может быть как один, так и несколько, которые последовательно загружают один другого по цепочке (chain loading) полностью передавая управление новому. Применительно к загрузчику GRUB, необходимость загрузки по цепочке возникает для ОС, не поддерживающихся GRUB.

    Загрузчики могут быть разными: GNU GRUB (Linux), BOOTMGR (Vista и новее), NTLDR (XP и ранее). В них присутствуют настройки, позволяющие загружать разные ОС, либо различные режимы одной ОС. Либо передавать цепочку управления загрузкой следующему загрузчику (GRUB -> BOOTMGR).

    Читать далее

    Device-mapper и DM-multipath

    В статье про настройку iSCSI LUN на NetApp была затронута тема многоканальности (multipathing). Напомню, что это побочное явления использования нескольких физических каналов между целевым сетевым хранилищем данных (СХД) и сервером-инициатором, свойственное всем блочным протоколам. При наличии нескольких путей до инициатора, презентованный ему LUN (Logical Unit Number) будет виден столько раз, сколько существует путей. Поэтому прибегают к помощи вспомогательных средств для группирования всех этих «фантомных» LUN в единственный. В Windows это делается средствами MPIO, в Linux – демоном multipathd, который является компонентом device-mapper, именно о последних двух и пойдет речь в данной статье.

    Device-Mapper

    Device-mapper является частью ядра Linux, и основным его назначением является трансляция (mapping) одного блочного устройства в другое. На основе device-mapper строятся такие системы как LVM2, софтовый RAID и др. Device-mapper представляет некое «виртуальное» блочное устройство, и все данные, которые проходят через него, он посылает на другое, уже «реальное» блочное устройство.

    Это виртуальное блочное устройство представляет собой таблицу, в которой описывается проброс каждого логического блока этого устройства на реальные физические блочные устройства.

    При ссылке на «реальное» блочное устройство DM может использовать как его имя, отображаемое в файловой системе (/dev/sda), так и старший (major) и младший (minor) номера устройства в формате major:minor.

    Читать далее

    SFTP и SSHFS

    Продолжаем тему FTP и рассмотрим протокол SFTP.

    SFTP расшифровывается как SSH File Transfer Protocol — SSH-протокол для передачи файлов. Он предназначен для копирования и выполнения других операций с файлами поверх надёжного и безопасного соединения. Как правило, в качестве базового протокола, обеспечивающего соединение, и используется протокол SSH2, но это необязательно.

    В сравнении с другим протоколом, тоже предназначенным для копирования файлов поверх SSH — протоколом SCP, который позволяет только копировать файлы, SFTP даёт возможность выполнять намного больше операций с ними: например, докачивать файл после разрыва соединения или удалять файл на сервере и многие другие операции.

    Существует заблуждение, что SFTP это просто обычный FTP, работающий поверх SSH. В действительности SFTP — это новый протокол, разработанный с нуля. Ещё его иногда путают с Simple File Transfer Protocol. SFTP расшифровывается как SSH File Transfer Protocol и ничего общего с Simple File Transfer Protocol не имеет.

    Сам по себе протокол SFTP не обеспечивает безопасность работы; это делает нижележащий протокол. Как правило, SFTP используется в сочетании с протоколом SSH2 (он даже был разработан той же рабочей группой). Можно использовать SFTP и с другими протоколами, например SSH1, но это сопряжено с дополнительными трудностями.

    Сервер SFTP

    SFTP-сервер встроен в OpenSSH. Он реализуется с помощью программы sftp-server. Для того чтобы включить sftp-server в sshd, необходимо указать его в конфигурационном файле sshd_config в качестве подсистемы:

    Subsystem sftp /usr/lib/openssh/sftp-server

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

    Клиент SFTP

    SFTP-клиент sftp встроен в пакет OpenSSH. Пример команд использования клиента SFTP:

    sftp user@host:файл1

    sftp скачивает файл1 с сервера и записывает его в текущий каталог с под именем файл1

    sftp user@host:dir

    переводит sftp в интерактивный режим и работа на удалённом сервере начинается с определённого каталога.

    В интерактивном режиме команды SFTP клиента похожи на команды FTP: get, cd, ls, mkdir, put, pwd, rm и пр.

    Программа sftp использует в качестве транспорта ssh, и аутентификация на удалённом сервере выполняется средствами ssh.

    В качестве SFTP-клиента для Windows может использоваться WinSCP, PSFTP из пакета PuTTY или кроссплатформенный ftp-клиент Filezilla.

    Клиент SSHFS

    Использование SFTP можно не только родным клиентом, но и SSHFS, дающим возможность монтировать файловую систему удаленной машины, на которой включен SFTP.

    Пример команды монтирования через SSHFS:

    sshfs user@host:dir local_mount_point ssh_options

    Пример демонтирования:

    fusermount -u local_mount_point

    Также если вы часто монтируете одну и ту же директорию по SSHFS, ее можно внести в fstab для автоматического монтирования при включении машины, внеся следующую строку в /etc/fstab:

    user@host:dir local_mount_point fuse.sshfs  defaults  0  0

    Однако придется каждый раз при попытке монтирования вводить логин и пароль, и чтобы избежать этого, можно настроить авторизацию SSH на основе ключей, которая была описана ранее.

    Стоит понимать, что в отличие от NFS/SMB в SSHFS не предустановлено никаких механизмов для контроля доступа к одному файлу нескольких пользователей.

    Источник 1
    Источник 2
    Источник 3
    Источник 4
    Источник 5
    Источник 6