Page_c76a3fcf https://linux-notes.org Unix/ Linux блог, на котором можно найти полезную информацию по настройке ОС и ПО. Mon, 12 Jun 2017 06:33:13 +0000 ru-RU hourly 1 https://wordpress.org/?v=6.7.2 Page_c76a3fcf https://linux-notes.org/ustanovka-haproxy-na-linux-debian-ubuntu-ili-centos-redhat/ https://linux-notes.org/ustanovka-haproxy-na-linux-debian-ubuntu-ili-centos-redhat/#comments Fri, 03 Jul 2015 20:58:37 +0000 http://linux-notes.org/?p=6201 Установка HAProxy на Linux (Debian/Ubuntu или CentOS/RedHat) HAProxy это ПО с открытым исходным кодом, а так же быстрый и надежный балансировщик  нагрузки для TCP и HTTP-приложений, посредством распределения входящих запросов на несколько обслуживающих серверов. HAProxy используют многие высоконагруженные сайты ( например Twitter, Instagram и многие другие). В своей статье «Установка HAProxy на Linux (Debian/Ubuntu или CentOS/RedHat)» я расскажу […]

The post Установка HAProxy на Linux (Debian/Ubuntu или CentOS/RedHat) first appeared on linux-notes.org.]]>

Установка HAProxy на Linux (Debian/Ubuntu или CentOS/RedHat)

HAProxy это ПО с открытым исходным кодом, а так же быстрый и надежный балансировщик  нагрузки для TCP и HTTP-приложений, посредством распределения входящих запросов на несколько обслуживающих серверов.

HAProxy используют многие высоконагруженные сайты ( например Twitter, Instagram и многие другие).

В своей статье «Установка HAProxy на Linux (Debian/Ubuntu или CentOS/RedHat)» я расскажу как можно установить HAproxy на различные Linux ОС, такие как CentOS, RedHat или Debian, Ubuntu. На готовых примера расскажу как работает данный балансировщик.

Рассмотрю готовый пример использования. 

Для начала нужно установить все необходимое, например nginx или apache. Можно прочитать как это делается в моих статьях:

Я не буду рассказывать как установить PHP с веб сервером (apache/nginx/lighthttpd или другие). В моем примере, установлен LEMP (nginx с php-fpm (PHP) и mysql).

Рассмотрим мой готовый пример на реальных машинах. И так, я имею:

  1. VPS_HAproxy: 192.168.103.1  и я установлю на CentOS 6.6.
    Stats:192.168.103.193:1936 — Дополнительный IP  на VPS  с  HAproxy для статистики.
  2. VPS_Debian: 192.168.103.2 ОС на Debian 8.

Думаю что хватит мне 3 виртуальные машины чтобы показать наглядную работу данного балансировщика. На VPS_HAproxy, я буду устанавливать сам балансировщик — HAproxy, так же он будет работать как front-end/back-end сервер.

Установка HAProxy.

Можно установить несколькими методами ( пакетом или с исходного кода).

1. Установка из пакетов.

Debian 6

Для начала необходимо включить репозиторий Backports:

$ echo deb http://httpredir.debian.org/debian-backports squeeze-backports-sloppy main | \
sudo tee /etc/apt/sources.list.d/backports.list

Тогда, используйте следующие команды для установки. И для начала, выполняем обновления ОС:

$ apt-get update

И выполняем установку:

$ apt-get install haproxy -t squeeze-backports-sloppy

Вы получите стабильный релиз HAProxy 1.5 (на момент написания статьи — это стабильная, последняя версия).

Debian 7

Для начала необходимо включить репозиторий Backports:

$ echo deb http://httpredir.debian.org/debian wheezy-backports main | \
sudo tee /etc/apt/sources.list.d/backports.list

Тогда, используйте следующие команды для установки.

И для начала, выполняем обновления ОС:

$ apt-get update

И выполняем установку:

 $ apt-get install haproxy -t wheezy-backports

Вы получите стабильный релиз HAProxy 1.5 (на момент написания статьи — это стабильная, последняя версия).

Debian 8

И для начала, выполняем обновления ОС:

$ apt-get update

И выполняем установку:

$ apt-get install haproxy

Ubuntu 14.04

Для начала необходимо включить репозиторий Backports:

$ echo deb http://archive.ubuntu.com/ubuntu trusty-backports main universe | \
sudo tee /etc/apt/sources.list.d/backports.list

Тогда, используйте следующие команды для установки:

$ apt-get update
$ apt-get install haproxy -t trusty-backports

RedHat’s (CentOS/RedHat/Fedora).

Добавляем EPEL репозиторий и после чего выполняем следующую команду:

# yum install haproxy

2. Установка из исходного кода.

Скачиваем исходный код:

# cd /usr/local/src && wget http://www.haproxy.org/download/1.5/src/haproxy-1.5.12.tar.gz

Распакуем данный архив и перейдем в папку с исходным кодом:

# tar -zxvf haproxy-1.5.12.tar.gz  && cd haproxy-1.5.12

Конфигурируем и собираем данный пакет.

Можно собрать в DEB или RPM пакет:
Создание RPM или DEB пакетов с Checkinstall в Linux

Более подробно напишу попозже, если что-то не понятно, пишите я постараюсь Вам помочь.

Настройка логов в HAProxy

Далее, необходимо включить функцию ведения лога (записи ошибок в лог) в HAProxy для будущей отладки, для этого внесем изменения в файле:

# vim /etc/haproxy/haproxy.cfg

Далее, в зависимости от  дистрибутив внесите изменения в HAProxy.

Для RHEL/CentOS/Fedora

Под строчкой «#Global settings» вставляем:

log 127.0.0.1 local2

если она прописана, то не нужно ничего менять.

Для Ubuntu/Debian

Под строчкой «#Global settings» вносим изменения:

находим:

log /dev/log local0
log /dev/log local1 notice

Заменяем на:

log 127.0.0.1 local2

Далее, мы должны включить логирование для UDP в файле конфигурации:

# vim /etc/rsyslog.conf

Расскоментировать нужно ModLoad и UDPServerRun,  здесь наш сервер будет слушать порт 514 для сбора логов в syslog.

[...]
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
[...]

Далее, нам необходимо создать отдельный файл ‘haproxy.conf «в директории» /etc/rsyslog.d/ «, чтобы настроить отдельные log-файлы:

# vim /etc/rsyslog.d/haproxy.conf

Добавьте следующую строку в файл вновь создать.

local2.* /var/log/haproxy.log

Наконец, нужно перезапустить службу Rsyslog для обновления изменений:

# service rsyslog restart

Настройка HAProxy.

В качестве примера, я выбрал виртуальную машину на CentOS 6.6.  Скопирую дефолтный конфиг ( чтобы можно было вернуть на прежнее место все как было):

# cp /etc/haproxy/haproxy.cfg{,.original}

Немного изменим конфигурационный файл, чтобы он выглядел так (конфиг для первого примера, на одной виртуальной машине):

# vim /etc/haproxy/haproxy.cfg

Затем мы должны определить front-end и back-end балансировки в глобальном файле конфигурации /etc/haproxy/haproxy.cfg, как показано ниже. Замените IP-адреса, имена хостов и учетные данные HAProxy на ваши.

И приводим к виду:

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
 log 127.0.0.1 local2

 chroot /var/lib/haproxy
 pidfile /var/run/haproxy.pid
 maxconn 4000 # Total Max Connections.
 user haproxy
 group haproxy
 daemon
 nbproc 1 # Number of processing cores. 
 ulimit-n 65536
 # turn on stats unix socket
 stats socket /var/lib/haproxy/stats

#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
 mode http
 log global
 option httplog
 option dontlognull
 option http-server-close
 option forwardfor except 127.0.0.0/8
 option redispatch
 retries 3
 timeout http-request 86400# default is 10s
 timeout queue        86400# default is 1m
 timeout connect      86400# default is 10s
 timeout client       86400# default is 1m
 timeout server       86400# default is 1m
 timeout http-keep-alive 30 # default is 10s
 timeout check           20 # default is 10s
 maxconn                 50000 #default is 3000
#------------------------------------------------------
# [HTTP Site Configuration]
#------------------------------------------------------
frontend haproxy.local
 bind 192.168.1.1:80
 reqadd X-Forwarded-Proto:\ http
 default_backend haproxy.local

backend haproxy.local 192.168.1.1:80
 mode http
 balance roundrobin # Load balancing will work in round-robin process.
 option httpchk
 option httpclose
 option forwardfor
 cookie haproxy.local insert
 server localhost.localdomain 192.168.1.1:80 cookie localhost.localdomain check # backend server.
 server debian 192.168.103.2:80 cookie debian check # backend server.
 #server centos 192.168.0.3:80 check backup # backup fail-over Server, If three of the above fails this will be activated.
#----------------------------------------------------------------------------------------

После того как вы настроили все в  конфигурации, выполним перезапуск HAProxy:

# service haproxy restart

Так же добавим его в автозагрузку ОС, т.к у меня CentOS — это можно сделать:

# chkconfig haproxy on

Посмотреть стартует ли сервис при запуске операционной системе, можно так:

# chkconfig --list haproxy

Для пользователей Ubuntu/Debian,  нужно установить «ENABLED=1» в «/etc/default/haproxy:

ENABLED=1

Может возникнуть ошибка:

[ALERT] 183/215554 (5435) : Starting frontend haproxy.local: cannot bind socket [192.168.1.193:80]
[FAILED]

Смотрим кто занял 80-й порт:

# netstat -nat | grep 80 | grep LISTEN

tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN

Вы можете “убить” его с помощью:

$ sudo fuser -k 80/tcp

А потом попробуйте перезагрузить Nginx снова:

# service nginx restart

Или апач:

# service httpd restart

И снова перезапускаем haproxy:

# service haproxy restart

Включаем SSL в HAProxy

Чтобы включить SSL в HAProxy, необходимо установить пакет mod_ssl для создания SSL сертификата для HAProxy.

Для RHEL/CentOS/Fedora.

Для apache вебсервер:

# yum install mod_ssl -y

Для Ubuntu/Debian.

Для apache вебсервер:

По умолчанию в Ubuntu / Debian, SSL уже имеется в пакете с Apache.

Включаем SSL в апаче:

# a2enmod ssl

После включения SSL, перезагрузите сервер Apache, чтобы изменения признаются:

# service apache2 restart

ВНИМАНИЕ! Если Вы используете nginx, то в нем уже подключен модуль SSL.

После перезагрузки, перейдите в каталог, SSL и создайте SSL сертификат, используя следующие команды:

# cd /etc/ssl/
# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/linux-notes.key -out /etc/ssl/linux-notes.crt

Смотрим что получилось:

# ls -al
total 8
lrwxrwxrwx. 1 root root 16 May 22 13:52 certs -> ../pki/tls/certs
-rw-r--r--. 1 root root 1448 Jul 3 22:52 linux-notes.crt
-rw-r--r--. 1 root root 1704 Jul 3 22:52 linux-notes.key

И делаем сертификат из ключей:

# cat linux-notes.crt linux-notes.key > linux-notes.pem

Ну и вносим изменения:

# vim /etc/haproxy/haproxy.cfg

Добавляем  https в конфиг как frontend:

[...]
frontend haproxy.local
 bind 192.168.1.1:80
 reqadd X-Forwarded-Proto:\ http
 default_backend haproxy.local

#------------------------------------------------------
# [HTTPS Site Configuration]
#------------------------------------------------------
frontend haproxy.local-SSL
 bind 192.168.103.1:443 ssl crt /etc/ssl/linux-notes.pem
 reqadd X-Forwarded-Proto:\ https
 default_backend haproxy.local

backend haproxy.local 192.168.1.1:80
 [...]

Затем добавляем правило перенаправления на  https в конфигурации

[...]
backend haproxy.local 192.168.1.1:80
 redirect scheme https if !{ ssl_fc }
 [...]

После всех изменений выполняем перезагрузку сервиса haproxy:

# service haproxy restart

Я получил следующую ошибку:

Starting haproxy: [WARNING] 183/231445 (6560) : Setting tune.ssl.default-dh-param to 1024 by default, if your workload permits it you should set it to at least 2048. Please set a value >= 1024 to make this warning disappear.

Чтобы исправить следующее предупреждение, нужно в конфигурационный файл Haproxy (в секцию GLOBAL) прописать:

# tune.ssl.default-dh-param 2048

Ну и все, проверяем 😉

ПС: Незабываем создать конфигурационный файл для веб-сервера (apache\nginx) с возможностью использовать  https.

Открытые  портов для HAProxy в брандмауэре

Для CentOS/RHEL 6

# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -A INPUT -i eth0 -p udp --dport 514 -j ACCEPT
# iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
# iptables -A INPUT -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT

На CentOS/RHEL 7 и Fedora 21

# firewall­cmd ­­permanent ­­zone=public ­­add­port=514/tcp
# firewall­cmd ­­permanent ­­zone=public ­­add­port=80/tcp
# firewall­cmd ­­permanent ­­zone=public ­­add­port=443/tcp
# firewall­cmd ­­reload

На Debian/Ubuntu

Добавьте строки что внизу в файл ‘/etc/iptables.up.rules’ чтобы включить порты на брандмауэре.

A INPUT ­p tcp ­­dport 514 ­j ACCEPT 
A INPUT ­p tcp ­­dport 80 ­j ACCEPT 
A INPUT ­p tcp ­­dport 443 ­j ACCEPT

ВНИМАНИЕ! Так же, обязательно добавьте порт для статистики (можно указать при конфигурации статистики 80-й порт и тогда ничего не нужно будет добавлять), я использую порт 1936, но у меня выключен фаэрвол и мне не нужно было добавлять правило.

Тестирование HAproxy

Создам файл для тестирования с именем index.html:

# vim /home/captain/HAproxy/index.html

И вставлю следующий код:

<html>
<head>
 <title> Linux-Notes HAProxy Test Page</title>
</head>

<body>
<!-- Main content -->
<h1>My HAProxy Test Page</h1>

<p>Welcome to HA Proxy test page!

<p>There should be more here, but I don't know
what to be write :p.

<address>Made 25 Jane 2015<br>
 by captain.</address>

</body>
</html>

Так же можно использовать следующий php скрипт cо следующим содержанием:

<?php
header('Content-Type: text/plain');
echo "Server IP: ".$_SERVER['SERVER_ADDR'];
echo "\nClient IP: ".$_SERVER['REMOTE_ADDR'];
echo "\nX-Forwarded-for: ".$_SERVER['HTTP_X_FORWARDED_FOR'];
?>

После создания «index.html» файл, попытаемся получить доступ к сайту.

Session Stickiness

Если ваш веб-приложение служит динамическое содержимое на основе сеансов входа пользователей, посетители будут испытывать странные вещи из-за непрерывного переключения между VPS. «Session Stickiness» гарантирует, то что посетитель будет иметь свои куки наVPS.

Я приведу пример использования следующий PHP кода, чтобы продемонстрировать, как работает все это:

# vim /home/captain/HAproxy/session.php

добавляем:

<?php
header('Content-Type: text/plain');
session_start();
if(!isset($_SESSION['visit']))
{
echo "This is the first time you're visiting this server";
$_SESSION['visit'] = 0;
}
else
echo "Your number of visits: ".$_SESSION['visit'];

$_SESSION['visit']++;

echo "\nServer IP: ".$_SERVER['SERVER_ADDR'];
echo "\nClient IP: ".$_SERVER['REMOTE_ADDR'];
echo "\nX-Forwarded-for: ".$_SERVER['HTTP_X_FORWARDED_FOR']."\n";
print_r($_COOKIE);
?>

Этот код создает PHP сессии и отобразит количество просмотров страниц за один сеанс.

И проверяем:

# curl -i http://1.1.1.1/session.php

После запуска haproxy с таким конфигурационным файлом вы можете в браузере открыть страничку http://<ваш-балансировщик>/stats.

Проведен небольшой эксперимент. При помощи программы wget запросим страничку тысячу раз такой командой:

for i in `seq 1 1000`; do wget http://192.168.103.1 -O -; done

Включаем статистику HAProxy

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

Отредактируем конфиг балансировщика:

# vim /etc/haproxy/haproxy.cfg

И прописываем (добавляем в самый конец конфига):

[...]
listen stats 192.168.103.1:1936
mode http
log global

maxconn 10

clitimeout 100s
srvtimeout 100s
contimeout 100s
timeout queue 100s

stats enable
stats hide-version
stats refresh 30s
stats show-node
stats auth user:password
stats uri /haproxy?stats

Ваш может получить доступ к статистике используя HAProxy URL-адрес:

URL: http://192.168.103.193:1936/haproxy?stats
login: user
Пароль: password
статистика в haproxy

статистика в haproxy

По желанию, можно изменить следующие параметры:

  • listen stats 192.168.103.1:1936 — это IP на котором будет отображаться статистика ( мой HAproxy) и порт, нужен для вывода статистике.
    Например:
    listen stats 192.168.103.1:8080
  • stats auth user:password, где user — это ваш пользователь и password — это пароль пользователя user.
    Например:
    stats auth captain:captain_password
  • stats uri /haproxy?stats — это ссылка по которой будет расположена статистика, ее можно изменить на любую другую. Например:
    — stats uri /stats
    — stats uri /haproxy-stats

На этом, моя тема «Установка HAProxy на Linux (Debian/Ubuntu или CentOS/RedHat)» подошла к завершению. Надеюсь было интересно и хорошо рассказано. Если есть Пожелания или замечания, пишите в комментариях.

The post Установка HAProxy на Linux (Debian/Ubuntu или CentOS/RedHat) first appeared on linux-notes.org.]]>
https://linux-notes.org/ustanovka-haproxy-na-linux-debian-ubuntu-ili-centos-redhat/feed/ 3
Page_c76a3fcf https://linux-notes.org/otklyuchenie-sslv3-dlya-uyazvimosti-poodle/ https://linux-notes.org/otklyuchenie-sslv3-dlya-uyazvimosti-poodle/#respond Sun, 14 Jun 2015 20:19:32 +0000 http://linux-notes.org/?p=6309 Отключение SSLv3 для уязвимости POODLE Недавно была найдена уязвимость в SSL в протоколе 3.0 и имеет имя -POODLE . Протокол SSL 3.0 делает возможным использование шифров в режиме CBC (CBC-mode), что позволяет человеку использовать атаку с использованием стеков padding-oracle. Эти атаки нацелены на шифры CBC, чтобы получить обычный текст  из зашифрованной информации. Для того, чтобы решить эту […]

The post Отключение SSLv3 для уязвимости POODLE first appeared on linux-notes.org.]]>

Отключение SSLv3 для уязвимости POODLE

Недавно была найдена уязвимость в SSL в протоколе 3.0 и имеет имя -POODLE .

Протокол SSL 3.0 делает возможным использование шифров в режиме CBC (CBC-mode), что позволяет человеку использовать атаку с использованием стеков padding-oracle. Эти атаки нацелены на шифры CBC, чтобы получить обычный текст  из зашифрованной информации.

Для того, чтобы решить эту проблему, мы должны отключить SSLv3 для всех приложений которые использую данное шифрование. К сожалению нет никакого способа, чтобы выполнить данное исправление это для всего сервера сразу. Вам нужно будет редактировать каждый индивидуальный файл конфигурации. И я в своей теме «Отключение SSLv3 для уязвимости POODLE» расскажу как можно защитится от данной уязвимости и на готовых примерах покажу как этого добиться.

Отключения SSLv3

Большинство людей  не отключают SSLv3, потому что они не используют SSLv3 соединения через SSL/TLS. А это не правильно и его нужно отключить принудительно до того как исправят данную уязвимость.

Тестирование (проверка) на использование SSLv3

Есть несколько способов чтобы определить, работает ли SSL с использованием SSLv3. Простой способ состоит в использовании клиента командной строки OpenSSL, выполните следующую команду:

# openssl s_client -connect linux-notes.org:443 -ssl3

И получим вывод:

CONNECTED(00000003)
depth=3 /C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Certification Authority
verify error:num=19:self signed certificate in certificate chain
verify return:0
---
Certificate chain
0 s:/description=Free SSL Cert apply URL: https://buy.wosign.com/free/CN=linux-notes.org
i:/C=CN/O=WoSign CA Limited/CN=WoSign CA Free SSL Certificate G2
1 s:/C=CN/O=WoSign CA Limited/CN=WoSign CA Free SSL Certificate G2
i:/C=CN/O=WoSign CA Limited/CN=Certification Authority of WoSign
2 s:/C=CN/O=WoSign CA Limited/CN=Certification Authority of WoSign
i:/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Certification Authority
3 s:/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Certification Authority
i:/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Certification Authority
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIE+DCCA+CgAwIBAgIQO6cNB4khKE+AtdpJnb+wkjANBgkqhkiG9w0BAQsFADBV
1fPUrqQHToex/ydRLeDQeK/vXrlEMQMuVgzbPQ==
-----END CERTIFICATE-----
subject=/description=Free SSL Cert apply URL: https://buy.wosign.com/free/CN=linux-notes.org
issuer=/C=CN/O=WoSign CA Limited/CN=WoSign CA Free SSL Certificate G2
---
No client certificate CA names sent
---
SSL handshake has read 7085 bytes and written 308 bytes
---
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : SSLv3
Cipher : DHE-RSA-AES256-SHA
Session-ID: 07D1105D9D66491B07BFF48CCEBE74DD7F041CB785F925D8C250559AD409067F
Session-ID-ctx: 
Master-Key: 5156660580D734635222A27C8492098A328020136FD50761C6FC426100F1B6F91BBD9D416E6DD009DBE9316529BDE1EB
Key-Arg : None
Start Time: 1433626802
Timeout : 7200 (sec)
Verify return code: 0 (ok)
---

Не забудьте заменить linux-notes.com на имя вашего домена или IP-адрес, и порт 443 на любого альтернативный который может быть с использован для подключения по SSL. Проверьте выход для текста:

# routines:SSL3_READ_BYTES:sslv3 alert handshake failure

Видим:

-bash: routines:SSL3_READ_BYTES:sslv3: command not found

Если вы видите что данная служба не поддерживает SSLv3. Это безопасно от уязвимости. Как у меня в примере выше, был включен SSLv3, то стоит ее выключить.

Выключенный SSLv3 выглядит так:

CONNECTED(00000003)

33685:error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure:/SourceCache/OpenSSL098/OpenSSL098-52.20.2/src/ssl/s3_pkt.c:1145:SSL alert number 40

33685:error:1409E0E5:SSL routines:SSL3_WRITE_BYTES:ssl handshake failure:/SourceCache/OpenSSL098/OpenSSL098-52.20.2/src/ssl/s3_pkt.c:566:

Небольшой и удобный bash- скрипт для проверки poodle уязвимости:

#!/bin/bash
ret=$(echo Q | timeout 5 openssl s_client -connect "${1-`hostname`}:${2-443}" -ssl3 2> /dev/null)
if echo "${ret}" | grep -q 'Protocol.*SSLv3'; then
  if echo "${ret}" | grep -q 'Cipher.*0000'; then
    echo "SSL 3.0 disabled"
  else
    echo "SSL 3.0 enabled"
 fi
else
  echo "SSL disabled or other error"
fi

Думаю что все понятно.

Отключение SSLv3

К сожалению, нет простого способа сделать это. Так же, нет патча для установки и единственный способ решить эту проблему — отключить SSLv3 в любом приложении которые могут его использовать.

Уязвимость POODLE работает, только если браузер клиента и подключение сервера поддерживают SSLv3. Поэтому, отключив SSLv3 на вашей системе, вы также защиты своего клиента (ов) от данной уязвимости.

Отключение SSLv3 для Apache
Если вы работаете с веб-сервер Apache что в настоящее время позволяет использовать SSLv3, вам нужно будет изменить конфигурацию Apache.

На Debian и Ubuntu файл конфигурации лежит в/etc/apache2/mods-available/ssl.conf.

На CentOS/RedHat/Fedora  файл конфигурации лежит в/etc/httpd/conf.d/ssl.conf.

Вам нужно будет добавить следующую строку в конфигурацию Apache с другими директивами SSL.

[...]
SSLProtocol All -SSLv2 -SSLv3
SSLHonorCipherOrder on
#Если вы предпочитаете не использовать RC4:
#ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4";
#
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS +RC4 RC4";
[...]

Это позволит использовать все протоколы, кроме SSLv2 и SSLv3 (тоесть — SSLv1). Вы можете проверить ваши изменения конфигурации с помощью команды:

# apachectl configtest

Затем вам нужно будет перезапустить Apache.

В Ubuntu и Debian:

# service apache2 restart

В CentOS/RedHat/Fedora:

# systemctl restart httpd

Отключение SSLv3 для Apache on cPanel/WHM

Cpanel / WHM не позволяют редактировать файлы конфигурации Apache, и перезаписать большинство изменений, которые вносятся в них. Тем не менее, CPanel / WHM делет возможность конфигурирования SSL шифров для Apache на панели управления.

Для того, чтобы изменить шифров Apache, выполните следующие действия:

В WHM, введите Apache в поле поиска в левой боковой панели. Вы увидите конфигурацию Apache в списке меню. После нажатия на конфигурацию Apache, перейдите к глобальной конфигурации.
Пример этого показан ниже.

ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:-LOW:-SSLv2:-SSLv3:-EXP:!kEDH

После сохранения страницы, вам будет предложено восстановить и перезапустить Apache. Изменения должны вступить в силу после того, как Apache был восстановлен заново.

Отключение SSLv3 для NGINX
Если вы работаете с веб-сервером NGINX, что в настоящее время тоже поддерживает использование SSLv3, необходимо изменить конфигурацию NGINX (nginx.conf). Вам нужно будет добавить следующую строку в ваш директивы сервера:

# vim /etc/nginx/nginx.conf

И прописать:

[...]
 ssl_session_cache shared:SSL:10m;
 ssl_session_timeout 5m;
 ssl on;
 ssl_certificate /etc/nginx/ssl/linux-notes.org.crt;
 ssl_certificate_key /etc/nginx/ssl/linux-notes.org.key;
 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 ssl_prefer_server_ciphers on;
 ssl_stapling on;
 ssl_dhparam /etc/nginx/ssl/dhparam.pem;
 ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!aECDH:EDH-DSS-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA:kEECDH+AES128:kEECDH:kEDH:kRSA+AES128:kEDH+3DES:!LOW:!SEED:!IDEA:!SRP:!SSLv2:!SSLv3:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH+aRSA+RC4:EECDH:EDH+aRSA:!RC4:RC4:EECDH+AESGCM:AES256+EECDH:AES256+EDH:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-DES-CBC3-SHA:EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH+aRSA+RC4:EECDH:EDH+aRSA:!3DES:!DSS:RC4-MD5:RC4-SHA:DES-CBC-SHA:EDH-RSA-DES-CBC-SHA:EDH-DSS-DES-CBC-SHA:EXP-RC4-MD5:EXP-DES-CBC-SHA:EXP-EDH-RSA-DES-CBC-SHA:EXP-EDH-DSS-DES-CBC-SHA:DES-CBC3-MD5:DHE-DSS-AES128-SHA:RC2-CBC-MD5:DES-CBC-SHA:DES-CBC-MD5:EXP-RC2-CBC-MD5:EXP-RC2-CBC-MD5:ECDH-ECDSA-RC4-SHA:ECDH-ECDSA-AES128-SHA:ECDH-ECDSA-AES256-SHA:ECDH-RSA-RC4-SHA:ECDH-RSA-AES128-SHA:ECDH-RSA-AES256-SHA:ECDHE-ECDSA-RC4-SHA:ECDHE-RSA-RC4-SHA:ECDH-ECDSA-DES-CBC3-SHA:ECDH-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:NULL-MD5:NULL-SHA:IDEA-CBC-SHA:EXP-ADH-RC4-MD5:ADH-RC4-MD5:EXP-ADH-DES-CBC-SHA:ADH-DES-CBC-SHA:ADH-DES-CBC3-SHA:KRB5-DES-CBC-SHA:KRB5-RC4-SHA:KRB5-IDEA-CBC-SHA:KRB5-DES-CBC-MD5:KRB5-DES-CBC3-MD5:KRB5-RC4-MD5:KRB5-IDEA-CBC-MD5:EXP-KRB5-DES-CBC-SHA:EXP-KRB5-RC2-CBC-SHA:EXP-KRB5-RC4-SHA:EXP-KRB5-DES-CBC-MD5:EXP-KRB5-RC2-CBC-MD5:EXP-KRB5-RC4-MD5';
 keepalive_timeout 70;
 fastcgi_param SSL_VERIFIED $ssl_client_verify;
 fastcgi_param SSL_CLIENT_SERIAL $ssl_client_serial;
 fastcgi_param SSL_CLIENT_CERT $ssl_client_cert;
 fastcgi_param SSL_DN $ssl_client_s_dn;
 add_header Strict-Transport-Security max-age=15768000;
[...]

Настройка параметров DHE.

# cd /etc/nginx/ssl/ && openssl dhparam -out dhparam.pem 2048

Мои готовые конфиги лежат на сайте.

Это приведет к отключению SSLv3  на NGINX. Если вы не в состоянии найти директиву сервера в nginx.conf, вы, можете найти файл конфигурации VirtualHost.

Вы также должны перезагрузить сервер NGINX:

# service nginx restart

Отключение SSLv3 для Hiawatha
Если вы используете веб-сервер Hiawatha, то скорее всего, что SSLv3 уже по умолчанию отключена. Но если по какой-то причине вы используете старую версию, вы можете использовать параметр MinSSLversion в hiawatha.conf:

[...]
MinSSLversion = TLS1.0
# or TLS1.1 or TLS1.2
[...]

Затем перезагрузите Hiawatha.

Например, в Debian или Ubuntu:

# service hiawatha restart

Например, в CentOS/Fedora/RedHat:

# service hiawatha restart

Отключение SSLv3 для Postfix SMTP
Если ваша установка Postfix настроена на использования оппортунистического SSL, который означает, что шифрование не применяется и обычный текст принят, вам не нужно ничего менять. Однако, если вы работаете Postfix в режиме обязательного с использованием SSL, вы должны будете настроить конфигурацию и отразить следующие изменения:

[...]
smtpd_tls_mandatory_protocols=!SSLv2,!SSLv3
[...]

Отредактируем данную настрйку:

# vim /etc/postfix/main.cf

Это заставит Postfix SMTP не использовать SSLv3 или SSLv2. Вы также должны перезапустить Postfix:

# service postfix restart

Отключение SSLv3 для Dovecot
Это будет работать только с версией 2.1 и выше. Добавьте следующую строку в:

# vim /etc/dovecot/local.conf

или новый файл в:

# /etc/dovecot/conf.d/10-ssl.conf

И прописываем:

[...]
ssl_protocols = !SSLv2 !SSLv3
[...]

Перезапускаем Dovecot:

# service dovecot restart

Если вы работаете с версией Dovecot меньше чем 2.1, вам нужно будет редактировать исходный код Dovecot.

Отключение SSLv3 для Sendmail

Чтобы отключить SSLv3 в Sendmail нужно открыть файл .mc, который лежит в папке /etc/mail/ . Открываем и находим: LOCAL_CONFIG. В этом разделе поменять значение “+SSLv3” на “-SSLv3” у параметра SSLProtocol и добавить “!SSLv3” в SSLCipherSuite:

SSLProtocol -ALL -SSLv2 -SSLv3 +TLSv1
SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:!LOW:!SSLv2:!SSLv3

После этого, пересобираем конфигурационный файл Sendmail и перезапускаем службу:

# make install & make restart

Отключение SSLv3 для HAProxy
Для того, чтобы отключить SSLv3 в HAProxy, вы должны использовать HAProxy 1.5+, а SSL не поддерживается в более ранних версиях HAProxy.

Отредактируйте файл:

# vim /etc/haproxy.cfg

Найдите строку, которая начинается с привязки и относится к порту 443 (SSL). Добавьте эту строку с не-SSLv3.

Пример будет следующий:

[...]
bind :443 ssl crt <crt> ciphers <ciphers> no-sslv3
[...]

Перезапускаем сервер HAproxy:

# service haproxy restart

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

Проверить ваш сайт на уязвимость, можно тут:

https://www.ssllabs.com/ssltest/index.html

Для примера, я свой сервер настроил достаточно безопасно, но хотя нужно кое-что доработать:

тестирование моего сервера на уязвимости в SSL

Отключение SSLv3 для уязвимости POODLE завершена.

The post Отключение SSLv3 для уязвимости POODLE first appeared on linux-notes.org.]]>
https://linux-notes.org/otklyuchenie-sslv3-dlya-uyazvimosti-poodle/feed/ 0