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

    Базовая настройка сетевых интерфейсов в RedHat и Ubuntu

    Базовая настройка сетевых интерфейсов в RedHat и Ubuntu.

    В семье операционных систем Linux существует несколько подходов к настройке сетевых интерфейсов. Здесь будет рассмотрен способ ручной правки конфигурационных файлов в двух популярных дистрибутивах Red Hat/CentOS и Debian/Ubuntu.

    В рассматриваемых системах файлы ответственные за сетевую конфигурацию располагаются в разных местах и имеют разный синтаксис.

    В Red Hat/CentOS

    Файл Назначение
    /etc/sysconfig/network-scripts/ifcfg-<интерфейс> IP-адрес, тип, маска
    /etc/sysconfig/network Имя машины, домен, шлюз

    В Debian/Ubuntu

    Файл Назначение
    /etc/network/interfaces Интерфейс, IP-адрес, тип, маска, шлюз
    /etc/hostname Имя машины

    Настройка DNS-клиента у рассматриваемых систем одинакова

    Файл Назначение
    /etc/resolv.conf Домен и DNS-суффикс

    Пример сетевой конфигурации Red Hat/CentOS
    Файл /etc/sysconfig/network-scripts/ifcfg-eth0

    DEVICE=eth0
    BOOTPROTO=static
    HWADDR=00:30:48:56:A6:2E
    IPADDR=10.10.29.66
    NETMASK=255.255.255.192
    ONBOOT=yes

    Файл /etc/sysconfig/network

    NETWORKING=yes
    NETWORKING_IPV6=no
    HOSTNAME=fileserver
    DOMAINNAME=domain.com
    GATEWAY=10.10.29.65

    Пример сетевой конфигурации для Debian/Ubuntu
    Файл /etc/network/interfaces

    iface eth0 inet static
    address 192.168.1.100
    netmask 255.255.255.0
    network 192.168.1.0
    broadcast 192.168.1.255
    gateway 192.168.1.254

    Файл /etc/hostname содержит одну строку с именем машины

    Примет DNS-конфигурации — файл /etc/resolv.conf

    search domain.com
    nameserver 10.0.80.11
    nameserver 10.0.80.12
    nameserver 202.67.222.222

    Опция search указывает домен, используемый для разрешения неполных имен, т.е. вместо fileserver будет вестись поиск fileserver.domain.com.

    В заключении несколько наиболее часто используемых сетевых команд

    Команда Операция
    ifconfig Информация об интерфейсах
    route –n Информация о маршрутах
    netstat –tulpan Информация об открытых портах и соединениях
    ethtool <имя_интерфейса> Информация о физических параметрах интерфейса

    Примеры команд по управлению сетевыми настройками. Данные настройки сбрасываются при перезагрузке

    • Для интерфейсов
      Назначение ip-адреса интерфейсу

      ifconfig <eth*> <ip_адрес> netmask <маска_подсети> up

      Например, ifconfig eth0 192.168.99.14 netmask 255.255.255.0 up

    • Для маршрутов
      Назначение маршрута(шлюза) по-умолчанию

      route add default gw <ip_адрес_шлюза>

      Например, route add default gw 192.168.99.254

      Добавление маршрута

      route add [-net|-host] <IP/Net> netmask <маска_подсети> gw <ip_адрес_шлюза> dev <eth*>

    Удаленный доступ на Ubuntu с Windows машины

    В данной статье будет описано как организовать удаленный доступ к машине под Ubuntu с машины под Windows при этом будут использоваться такие утилиты как SSH, Putty, Tight VNC и Vino. Общий принцип работы: с компьютера под Windows создается защищенный SSH-туннель до Ubuntu и через него создается VNC-подключение (удаленный рабочий стол).

    Статья делится на четыре части:

    Читать далее

    Базовая установка и проверка LAMP

    Слегка начал изучать Linux и столкнулся с проблемой, что некоторые приложения требуют для своей работы предустановленную связку Apache, MySQL и PHP. При чем в руководствах к ним, установка LAMP не описывается. Поэтому пока не запомню, оставлю эту заметку. Установка производиться на Ubuntu.

    Самый простой способ установки LAMP одной коммандой:

    sudo apt-get install lamp-server^

    В процессе установки будет предложено ввести пароль root для MySQL.

    Далее идет проверка правильности установки Apache. Для этого достаточно вбить адрес

    http://localhost/

    Если Apache установлен корректно, появится страница с заголовком «It works!»

    Затем идет проверка PHP. Создается php-файл в папке

    /var/www/

    с единственной строкой

    <?php phpinfo(); ?>

    Перезагружается Apache

    sudo /etc/init.d/apache2 restart

    или по-новому

    sudo service apache2 restart

    И в адресную строку браузера вбиывается

    http://localhost/<название_вашего_файла>.php

    Если PHP успешно установлен, должна появиться страница с его настройками.

    Если необходимо вносить изменения в PHP, конфигурационный файл находится по адресу:

    /etc/php5/apache2/php.ini

    дополнительные конфигурационные файлы в папке:

    /etc/php5/apache2/conf.d

    Следом идет проверка MySQL. Для начала выясняется bind address сервера командой:

    cat /etc/hosts | grep localhost

    скорее всего он будет соответствовать 127.0.0.1.

    Далее отрывается конфигурационный файл MySQL, доступный по адресу:

    /etc/mysql/my.cnf

    и ищется строка, начинающееся с «bind-address». Указанный в ней адрес должен соответствовать адресу из hosts.

    Для входа в mysql в shell набираем

    mysql -u root -p

    Будет предложено ввести пароль root, который был указан при установке MySQL.
    Далее можно создать пользователей и наделить их правами. Создадим пользователя admin и разрешим ему полный доступ к MySQL

    GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' IDENTIFIED BY '<пароль>' WITH GRANT OPTION;

    Создать базу данных

    CREATE DATABASE <имя_бд>;

    Дать права только на эту БД

    GRANT ALL ON <имя_БД>.* TO 'admin'@'localhost' IDENTIFIED BY '<пароль>';

    Просмотреть список доступных БД

    SHOW DATABASES;

    Для выбора БД, в которой будет происходить работа

    USE <имя_бд>;

    Для просмотра таблиц в выбранной БД

    SHOW TABLES;

    Для сохранения выборки в отдельный файл по адресу /var/lib/db/mysql/<папка_базы>

    SELECT * INTO OUTFILE '<название_файла>' FROM <название_таблицы>;

    Для графического управление MySQL используется phpMyAdmin, для его установки:

    apt-get install phpmyadmin

    Во время его установки будет предложено выбрать веб-сервер (Apache2), создание новой БД для нужд самого phpMyAdmin (Yes), и пароль root от MySQL, который был указан во время его установки.
    Доступ к phpMyAdmin осуществляется по адресу:

    http://localhost/phpmyadmin/

    Логин: root, пароль был указан при установке MySQL.
    Веб-сайты следует располагать по адресу:

    /var/www/

    Источник