четверг, 29 июня 2017 г.

Оптимизация Linux Mint

Сегодня я обнаружил что Linux mint 18 стал грузиться медленнее чем Linux mint 17. Что не очень хорошо для моего ноутбука. Я выяснил что это связано с ненужными службами, приложениями, визуальными эффектами. Существует множество оптимизаций, позволяющих повысить скорость работы дистрибутива Linux Mint.
В этой статье мы рассмотрим как выполняется оптимизация Linux Mint. Я покажу только максимально безопасные. Проверял их сам на Toshiba Satelite l20 - 101 с Linux Mint 18.1 xfce и на компьютере HP Elite 7200 c linux mint 18.1 MATE. Перед дальнейшими инструкциями установите все обновления, чтобы не возникло ненужных ошибок.

Оптимизация Linux Mint

1. Оперативная память

При работе с Linux Mint выполнение различных операций со временем осуществляется медленнее. К счастью, это можно минимизировать. На жестком диске существует отдельный раздел для хранения данных, помещенных в оперативную память, который называется разделом подкачки. Интенсивность использования ядром дистрибутива Linux Mint раздела подкачки может быть изменена с помощью специального параметра конфигурации системы.
Вначале надо проверить величину этого параметра. Откройте терминал - ctrl + alt + t и выполните команду:
$ cat /proc/sys/vm/swappiness
Должно быть число 60. Дальше надо установить приложения gksu и leafpad. Можно через Synaptic или Терминал. В терминале используйте команду, она запросит ваш пароль
$ sudo apt install gksu leafpad
Установим новое значение параметра. Перейдите по пути /etc/ и откройте файл sysctl.conf текстовым редактором, либо командой:
$ gksudo leafpad /etc/sysctl.conf
В конце надо будет добавить vm.swappiness=10. Сохраните файл и перезагрузите ваш Компьютер / Ноутбук.

2. Настройка кэша inode

Только для ПК с 1 гб и больше так как это оптимизация приведет к долгому хранению системных файлов в оперативной памяти. Откройте файл /etc/sysctl.conf:
$ gksudo leafpad /etc/sysctl.conf
Опуститесь вниз файла и добавьте эту строчку в конце:
$ vm.vfs_cache_pressure=50

3. Настройка zram

Только ПК с оперативной памятью 768 Мб или больше. Внимание это может привести к нестабильной работе всей системы! Сделайте бэкап данных.
Работа данной оптимизации:
  • Центральный процессор вашего компьютера (CPU) будет использоваться более интенсивно, так как будут осуществляться постоянные сжатие и распаковка данных;
  • Если система полностью заполнит файл подкачки в оперативной памяти, она начнет дополнительно использовать классический раздел подкачки на жестком диске. При этом она также может переместить в этот раздел часть файла подкачки из оперативной памяти, что еще более замедлит ее работу;
  • На данный момент рассматриваемый модуль все еще является экспериментальным, поэтому реализованный в рамках него дополнительный уровень хранения данных может снизить стабильность работы системы.
Нужен пакет zram-config. Можете через synaptic, но я больше люблю использовать терминал.
$ sudo apt install zram-config
Перезагрузите ПК после установки. Можно командой:
$ reboot
Надо проверить работу данного модуля:
$ cat /proc/swaps
Должен появится отчёт о разделах на /dev/zram. Если система стала работать неправильно или zram вам уже не нужен, то делаем следующее:
$ sudo apt purge zram-config
Если у вас мало оперативной памяти, то вы точно заметите ускорение Linux Mint 18. Подробнее про настройку zram в linux написано в другой статье.

4. Отключение индексации

Как и в Windows, в Linux есть приложение для ускорения поиска, которое также тормозит работу системы. Данное приложение удалить полностью через synaptic нельзя. Он удалит лишь его часть. Следовательно надо использовать терминал.
$ sudo apt purge apt-xapian-index
Перезагрузите ПК для окончания применения изменений.

5. Оптимизация LibreOffice

Как всем известно, java имеет очень медленный компилятор. Скорость запуска LibreOffice повысилась раза в 3 после отключения java. Но она стоит там не просто так. Некоторые функции требуют java. Так что если вам они нужны то не отключайте. Откройте приложение Writer.
Зайдите в меню Сервис — Параметры LibreOffice — Расширенные возможности» и убрать флажок «Использовать виртуальную машину Java». Включить поддержку можно в любой момент просто вернув галочку в том поле:

6. Настройка автозагрузки

В Wndows это msconfig, а в Linux есть несколько способов решения этой задачи. Автозапуск сильно замедляет как и запуск системы, так и работу в целом. Часть программ настраивается через графический интерфейс - Меню - Параметры - Автозапуск. В XFCE это Сеансы и запуск. Но там не все службы. Далее, я буду писать зачем нужна каждая из служб, которые я буду отключать и как их отключить через терминал. Сначала смотрим скорость загрузки системы:
$ systemd-analyze
Выключить:
$ sudo systemctl disable служба
Включить:
$ sudo systemctl enable служба
avahi-daemon.service - это процесс для обнаружения ПК в домене .local. Если у вас один пк в домашней сети или у вас нет домена .local. То можно смело отключать:
$ sudo systemctl disable avahi-daemon.service
cgmanager.service - предназначен для управления cgroup. Служба нужна только людям использующих контейнер LXC. Этот контейнер позволяет создавать виртуальные машины почти без потерь производительности. Но я не использую виртуализацию. Отключаю:
$ sudo systemctl disable cgmanager.service  
cups-browsed.service – это служба для принтеров. Сейчас у меня нет принтера, но если появится я просто включу эту службу.
$ sudo systemctl disable cgmanager.service  
geoclue.service – это служба, которая отправляет вашу геолокацию приложениям. Без каких-либо вопросов отключаем:
$ sudo systemctl disable geoclue.service  
Службы vm2-lvmetad и lvm2-monitor относятся к службам управления логическими томами (LVM – Logical Volume Management). Если вы не используете логические тома то можно отключать. Если при установке вы выбрали автоматическую, то у вас все первичные.
$ sudo systemctl disable vm2-lvmetad.service 
$ sudo systemctl disable lvm2-monitor.service  
Результаты выполнения может быть таким:
Failed to execute operation: No such file or directory и
Removed symlink /etc/systemd/system/sysinit.target.wants/lvm2-monitor.service
ModemManager.service – это интерфейс, позволяющий реализовать подключение к сети интернет, используя мoдемы, каналы связи (2G/3G/4G/CDMA). У меня вообще шнур так что отключаю.
$ sudo systemctl disable ModemManager.service
speech-dispatcher.service - это унифицированный API, который имеет предназначение для изменения порядка вызова синтезатора, так же позволяет предотвратить наложения звука при нескольких приложениях, использующих звук. Я не планирую включать сразу штук 8 песен. Так что отключаю:
$ sudo systemctl disable speech-dispatcher.service   
ssh.service - это сервис удаленного управления системой через терминал. Я таким не пользуюсь => отключаем.
$ sudo systemctl disable ssh.service 
ufw.service – служба межсетевого экрана. Это брандмауэр. Мне он нужен, но многим нет.  Будем не отключать а удалять. Через Synaptic или терминал.
$ sudo apt purge ufw 

Я перечислил все службы, которые можно отключить безболезненно для системы. Теперь перезагрузка и тест скорости. После отключения служб вы точно заметите ускорение работы linux mint.
$ reboot
$ systemd-analyze
Читайте подробнее про ускорение загрузки Linux в отдельной статье.

7. Настройка окружения

Визуальные эффекты делают систему красивой. Если вы любите MacOS вам не пережить их отключение. Те, кто пользовался Windows 7 aero знают как это всё тормозит.
Linux Mint Cinnamon: для начала необходимо открыть: «Меню — Параметры системы — Эффекты» и отключить все эффекты в открывшемся окне. Далее, необходимо открыть: «Меню — Параметры системы — Общие» и активировать переключатель в пункте списка «Отключить композитинг для полноэкранных окон».
Linux Mint Mate: откройте «Меню — Настройки — Окна», перейдите на вкладку «Общие» открывшегося окна и уберите флажок «Включить композитный менеджер».
Linux Mint Xfce: необходимо «Меню — Параметры рабочего стола» и изменить оконный менеджер с «Xfwm4 + Compositing» на «Xfwm4».
Не забудьте поставить фоном один сплошной цвет.

8. Браузеры

Каждое дополнительное расширение для firefox и chromium замедляют его запуск и работу. удалите ненужные вам. Например, вместо онлайн читалки поставить локальную программу.
Теперь конкретно про firefox. В первую очередь следует ввести в адресную строку веб-браузера about:config и нажать клавишу Enter. Далее, нужно нажать на кнопку Я принимаю на себя риск!.
Вам следует ввести в поле поиска на открывшейся странице запрос sessionstore и использовать двойной клик для редактирования значения параметра browser.sessionstore.interval. По умолчанию он имеет значение 15000, соответствующее 15 секундам. Вы можете добавить к значению несколько нулей таким образом, чтобы оно превратилось в значение 15000000 и нажать на кнопку OK для сохранения изменений.
Далее, переключите эти параметры в положение false:
  • browser.sessionstore.restore_on_demand
  • browser.sessionstore.resume_from_crash
  • services.sync.prefs.sync.browser.sessionstore.restore_on_demand
Осталось закрыть все окна веб-браузера Firefox и перезапустить его.

9. Очистка Linux Mint

В Linux, как и в Windows скапливается мусор. Но в отличие от Windows у него нет реестра, что даёт возможность удалить весь мусор.
$ sudo apt autoclean
$ sudo apt autoremove
Не забудьте удалить ненужные программы. Например, мне не нужен VLC когда стоит dragon player.
$ sudo apt purge vlc

10. Установка драйверов

Многие забывают поставить нужные драйвера и устройства используются не на максимум своих возможностей. Например, у меня не было драйвера процессора. Откройте меню и впишите драйвера. Я заменил свободный драйвер nvidia на проприетарный. Все стало гораздо быстрее.

11. Оптимизация tmp

Если у вас много оперативной памяти можно ещё больше ускорить систему с помощью перемещения файлов с жесткого диска на виртуальный раздел в оперативной памяти. Откройте терминал.
$ sudo cp -v /usr/share/systemd/tmp.mount /etc/systemd/system/ 
$ sudo systemctl enable tmp.mount 
$ reboot 
Проверка работы:
$ systemctl status tmp.mount 
Если вам он больше не нужен просто удалите его:
$ sudo rm -v /etc/systemd/system/tmp.mount 
$ reboot 

12. Оптимизация wifi

Оптимизация Linux Mint также может включать ускорение wifi. Узнаем как названа ваша сетевая карта в системе:
$ iwconfig 
Затем вы сможете узнать название. Например, wlp2s0. Отключим энергосбережение.
$ gksudo xed /etc/NetworkManager/conf.d/default-wifi-powersave-on.conf 
Строчку:
wifi.powersave = 3
меняем на:
wifi.powersave = 0
Теперь сохраняем документ и перезагружаем ПК. Выполните команду для проверки:
$ iwconfig 
Если появилась надпись Power management:off то вы все настроили. Для сетевых карт intel есть особый способ ускорения, поскольку система для неё использует драйвер iwlwifi. Нужно активировать функцию Tx AMPDU.
Функция AMPDU предназначена для ускорения передачи данных путем объединения нескольких наборов данных друг с другом. До версии 18.1 включалась автоматически, но была убрана из-за проблемных чипсетов.
В первую очередь следует убедиться в том, что для взаимодействия с чипсетом вашей беспроводной сетевой карты используется именно драйвер iwlwifi.
$ lsmod | grep iwlwifi 
Если появилась строка «iwlwifi» то можно продолжать.
$ echo "options iwlwifi 11n_disable=8" | sudo tee /etc/modprobe.d/iwlwifi11n.conf 
Теперь нужно перезагрузить ПК. Перед перезагрузкой запишите себе эту команду:
$ sudo rm -v /etc/modprobe.d/iwlwifi11n.conf 
Она нужна для отката изменений если сеть не будет работать.

Выводы

Теперь вы знаете как выполняется ускорение Linux Mint 18. Я очень надеюсь что помог другим пользователям. Пишите в комментариях вашу скорость запуска и скорость работы после проделанных изменений. Насколько вам помогла оптимизация Linux Mint 18 по сравнению с тем, как было раньше?

суббота, 24 июня 2017 г.

Как установить бесплатный SSL-сертификат для своего сайта

Let’s Encrypt — это центр сертификации (англ. certification authority, CA), предоставляющий лёгкий способ получения и установки TLS/SSL-сертификатов, обеспечивающих возможность использования протокола HTTPS на веб-сервере. Работа с Let’s Encrypt упрощена наличием клиента Certbot, который автоматизирует большую часть работы. Тем не менее, бесплатный SSL-сертификат можно установить на веб-сервер вручную, независимо от его конфигурации.
Полный перечень программного обеспечения, в котором работа с сертификатами уже автоматизирована, вы можете найти на официальном сайте Certbot. Стоит отметить, что полная или частичная автоматизация возможна с помощью не только Certbot, но и другого программного обеспечения. Списки поддерживаемых операционных систем и браузеров, а также клиентов и библиотек постоянно обновляются.
В этом руководстве мы расскажем, как при помощи Certbot получить бесплатный SSL-сертификат и использовать его в Nginx на Ubuntu 16.04. Мы также покажем, как настроить автоматическое обновление SSL-сертификата во избежание истечения его срока действия. Если у вас запущен другой веб-сервер, следуйте его документации, чтобы узнать, как использовать сертификат для вашей конфигурации.
Let's Encrypt

Шаг 0. Подготовка

Перед тем, как приступить к работе, вам нужно убедиться в нескольких вещах.
У вас должен быть установлен сервер на Ubuntu 16.04, и создан пользователь (не root), для которого настроены sudo привилегии. Узнать, как это сделать, вы можете, следуя руководству по первичной настройке сервера на Ubuntu 16.04.
Вы должны быть владельцем доменного имени, для которого планируется использовать сертификат, или иметь доступ к его настройке. Если у вас нет зарегистрированного доменного имени, вы можете сделать это, используя один из регистраторов (например, Namecheap или GoDaddy).
После регистрации домена убедитесь, что создана запись A, которая связывает ваш домен и публичный IP-адрес вашего сервера. Это необходимо, потому что Let’s Encrypt проверяет, что вы являетесь владельцем домена, на который выдаётся сертификат. Например, если вы хотите получить сертификат для example.com, такое доменное имя должно указывать на ваш сервер, чтобы проверка прошла. Мы будем использовать доменные имена example.com и www.example.com, поэтому необходимы DNS-записи для обоих доменов.
Если все требования выполнены, приступаем к установке Certbot — клиента Let’s Encrypt.

Шаг 1. Устанавливаем Certbot

Первым шагом на пути к получению SSL-сертификата является установка клиента Certbot на ваш сервер. Разработчики Certbot поддерживают собственный репозиторий с актуальной версией программного обеспечения. Поскольку Certbot находится в стадии активной разработки, для установки свежей версии стоит использовать именно этот репозиторий.
Для начала добавьте репозиторий:
sudo add-apt-repository ppa:certbot/certbot
Нажмите ENTER для подтверждения. После этого необходимо обновить пакеты:
sudo apt-get update
По завершении установите Certbot, используя команду apt-get:
sudo apt-get install certbot
Теперь Certbot готов к использованию.

Шаг 2. Получаем SSL-сертификат

Certbot предоставляет несколько способов получения SSL-сертификатов при помощи разных плагинов. В отличие от плагина для Apache, который описан в другом руководстве, большинство плагинов помогут вам только получить сертификат, который придётся настроить на вашем сервере вручную. Плагины, которые позволяют только получать сертификаты и не устанавливают их, называются «аутентификаторами», так как они используются для подтверждения подлинности сервера, которому сертификат выдаётся.
Давайте разберёмся, как использовать плагин Webroot для получения SSL-сертификата.

Использование плагина Webroot

Алгоритм работы Webroot включает в себя создание специального файла в директории /.well-known. Она размещается в корневом каталоге веб-сервера (document root) и может быть открыта сервисом Let’s Encrypt для проверки. В зависимости от ваших настроек, вам может понадобиться явно разрешить доступ к папке /.well-known.
Если вы ещё не установили Nginx, сделайте это, следуя руководству по установке Nginx на Ubuntu 16.04.
Чтобы убедиться в том, что папка доступна сервису Let’s Encrypt, внесем небольшие изменения в конфигурацию Nginx. По умолчанию файл конфигурации находится в папке /etc/nginx/sites-available/default. Мы будем использовать редактор Nano для внесения изменений:
sudo nano /etc/nginx/sites-available/default
Внутри блока server добавьте такой блок location:
# Добавить в SSL-блок server

location ~ /.well-known {
    allow all;
}
Вам также стоит посмотреть, где расположен корневой каталог веб-сервера (document root), так как этот путь необходим при работе с Webroot. Если вы используете стандартный файл конфигурации, она будет расположена в /var/www/html.
Сохраните и закройте файл.
Проверьте вашу конфигурацию на синтаксические ошибки:
sudo nginx -t
Если ошибок нет, перезапустите Nginx, используя эту команду:
sudo systemctl restart nginx
Теперь, когда мы знаем webroot-path, можно выполнить запрос на получение SSL-сертификата. При помощи ключа -d указываются доменные имена. Если вы хотите использовать единый сертификат для нескольких доменных имен (например, example.com и www.example.com), не забудьте добавить их все. Также убедитесь, что вы заменили значения webroot-path и доменные имена на соответствующие вашим:
sudo certbot certonly –webroot –webroot-path=/var/www/html -d example.com -d www.example.com
Если это первый запуск Certbot, вам будет предложено ввести адрес электронной почты и подтвердить согласие с правилами использования сервиса. После этого вы увидите сообщение об успешном завершении и путь, куда были сохранены ваши сертификаты:
# Пример сообщения

IMPORTANT NOTES:

— Congratulations! Your certificate and chain have been saved at
  /etc/letsencrypt/live/example.com/fullchain.pem. Your cert will expire
  on 2017-07-26. To obtain a new or tweaked version of this certificate
  in the future, simply run certbot again. To non-interactively renew *all*
  of your certificates, run "certbot renew"

— If you lose your account credentials, you can recover through e-mails
  sent to sammy@example.com.

— Your account credentials have been saved in your Certbot configuration
  directory at /etc/letsencrypt. You should make a secure backup of
  this folder now. This configuration directory will also contain
  certificates and private keys obtained by Certbot so making regular
  backups of this folder is ideal.

— If you like Certbot, please consider supporting our work by:
  Donating to ISRG / Let’s Encrypt: https://letsencrypt.org/donate
  Donating to EFF: https://eff.org/donate-le
Обратите внимание, что путь к сертификату и дата истечения срока его использования указаны в начале сообщения.
Примечание 1. Если в процессе вы получите ошибку вроде Failed to connect to host for DVSNI challenge, значит, вам нужно настроить файрвол вашего сервера, разрешив TCP-трафик на портах 80и 443.
Примечание 2. Если для вашего домена используется маршрутизация через такой DNS-сервис, как CloudFlare, вам придется временно отключить её до тех пор, пока сертификат не будет получен.

Файлы сертификата

После получения сертификата у вас должны появиться следующие файлы в PEM-кодировке:
  • cert.pem — сертификат вашего доменного имени;
  • chain.pem — цепочка сертификатов Let’s Encrypt;
  • fullchain.pem — объединённые cert.pem и chain.pem;
  • privkey.pem — приватный (секретный) ключ вашего сертификата.
Важно запомнить расположение этих файлов, так как они будут использоваться в конфигурации вашего сервера. Сами файлы расположены в папке /etc/letsencrypt/archive. Однако Certbot создает симлинкина наиболее актуальные файлы сертификата в папке /etc/letsencrypt/live/ваше_доменное_имя/. Так как символьные ссылки указывают на наиболее актуальные файлы сертификата, именно этот путь лучше использовать при обращении к ним.
Вы можете проверить существование файлов, используя такую команду (подставьте ваше доменное имя):
sudo ls -l /etc/letsencrypt/live/ваше_доменное_имя/
Результатом выполнения команды должны быть указанные выше файлы сертификата. Теперь вы можете настроить ваш сервер так, чтобы fullchain.pem использовался в качестве файла сертификата, а privkey.pem в качестве ключа сертификата.

Генерация ключа по алгоритму Диффи-Хеллмана

Для повышения безопасности вам необходимо сгенерировать ключ по алгоритму Диффи-Хеллмана. Для генерации ключа длиной 2048 бит используйте такую команду:
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Процесс может занять несколько минут.

Шаг 3. Настраиваем TLS/SSL на веб-сервере

Теперь, когда у вас есть SSL-сертификат, необходимо настроить веб-сервер Nginx так, чтобы он начал его использовать.
Внесем некоторые изменения в нашу конфигурацию:
  1. Создадим сниппет конфигурации, содержащий расположение нашего SSL-ключа и файлов сертификата.
  2. Создадим сниппет конфигурации, содержащий настройки устойчивого SSL, которые можно будет использовать в будущем для любого сертификата.
  3. Обновим блоки server в конфигурации Nginx, которые будут управлять SSL-запросами и использовать оба вышеуказанных сниппета.
Такой подход к настройке Nginx позволяет сохранить блоки server чистыми и сделать конфигурацию доступной для повторного использования.

Создаем сниппет конфигурации для SSL-ключа и сертификата

Сперва создадим сниппет конфигурации Nginx в папке /etc/nginx/snippets.
Для правильного распознавания назначения файла назовем его ssl-, затем укажем доменное имя и в конце поставим .conf:
sudo nano /etc/nginx/snippets/ssl-example.com.conf
В этом файле необходимо установить соответствие директивы ssl_certificate файлу сертификата и ssl_certificate_key — соответствующему ключу. В нашем случае это будет выглядеть так:
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
Когда добавите эти строки, сохраните и закройте файл.

Создаем сниппет конфигурации с устойчивыми настройками шифрования

Следующим шагом мы создадим другой сниппет, определяющий некоторые настройки SSL. Это позволит Nginx подключить устойчивый «набор шифров» SSL (англ. cipher suite) и некоторые дополнительные функции, которые помогут обеспечить безопасность нашего сервера.
Прим. перев. Cipher Suite — это совокупность алгоритмов, используемых в конкретной TLS/SSL-сессии:
  • алгоритм выработки сессионных ключей шифрования;
  • алгоритм, используемый для аутентификации сервера;
  • непосредственно сам симметричный алгоритм шифрования трафика;
  • и алгоритм контроля целостности (MAC, message authentication code).
Установленные нами параметры могут быть использованы повторно для конфигураций Nginx в будущем, поэтому дадим файлу стандартное название:
sudo nano /etc/nginx/snippets/ssl-params.conf
Для настройки безопасной связки Nginx-SSL мы будем использовать рекомендации сайта Cipherli.st. Он создан для предоставления быстрого доступа к готовым настройкам шифрования популярного программного обеспечения. Дополнительная информация доступна в руководстве по настройке SSL для Nginx.
Примечание. Предлагаемые стандартные настройки на сайте Cipherli.st обеспечивают устойчивую безопасность, но иногда это приводит к ухудшению совместимости. Если вам необходимо поддерживать более старые версии клиентов, используйте альтернативный список настроек, доступный при нажатии на значок «Yes, give me a ciphersuite that works with legacy/old software.» Составить такой список можно и вручную.
Для наших целей можно скопировать предлагаемые настройки целиком. Нам потребуется внести лишь некоторые изменения.
Сперва добавим DNS-резолвер. Используем для нашего руководства тот, что предлагает Google. Затем установим в качестве параметра ssl_dhparam указатель на файл ключа Диффи-Хеллмана, который мы сгенерировали ранее.
И, наконец, почитайте о протоколе HTTP Strict Transport Security, или HSTS. Он обеспечивает повышенную безопасность, но его некорректное использование может привести к серьезным последствиям. В этом руководстве мы отключим заголовочный файл по умолчанию, но вы можете не делать этого, если уверены, что понимаете последствия:
# Источники: https://cipherli.st/
# и https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
# отключаем заголовочный файл HSTS
# add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;

ssl_dhparam /etc/ssl/certs/dhparam.pem;
После внесения изменений сохраните и закройте файл.

Настраиваем конфигурацию Nginx для SSL

Теперь, когда мы подготовили сниппеты, можно обновить нашу конфигурацию Nginx и подключить SSL.
В данном руководстве мы полагаем, что вы используете стандартный файл с блоками server, расположенный в папке /etc/nginx/sites-available. Если вы используете другой файл с блоками server, замените название в представленных ниже командах.
Перед тем, как двигаться дальше, давайте сделаем резервную копию нашего текущего файла с блоками server:
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak
Теперь откройте файл с блоками server для внесения изменений:
sudo nano /etc/nginx/sites-available/default
Внутри ваш блок server, вероятно, начинается так:
server {
 listen 80 default_server;
 listen [::]:80 default_server;

# Конфигурация SSL

# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;

. . .
Изменим текущую конфигурацию так, чтобы незашифрованные HTTP-запросы автоматически перенаправлялись на шифрованный HTTPS. Такой способ обеспечивает лучшую безопасность. Если вы хотите разрешить и HTTP-, и HTTPS-трафик, используйте альтернативную конфигурацию, представленную в следующем разделе.
Разделим конфигурацию на два отдельных блока. После первых двух директив listen добавим директиву server_name, указывающую на доменное имя вашего сервера. Затем установим перенаправление на созданный нами второй блок server. После этого закроем текущий блок:
server {
 listen 80 default_server;
 listen [::]:80 default_server;
 server_name example.com www.example.com;
 return 301 https://$server_name$request_uri;
}

# Конфигурация SSL

# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;

. . .
Следующим шагом необходимо открыть новый блок server сразу за текущим, чтобы оставшаяся часть конфигурации попала в него. Мы можем раскомментировать обе директивы listen, использующие порт 443. К этим строкам можно добавить http2, чтобы включить HTTP/2 внутри блока. После этого нам останется подключить оба настроенных нами сниппета в файл:
Примечание. У вас может быть только одна директива listen, которая подключает модификатор default_server для каждой комбинации версии IP и порта. Если для выбранных портов у вас включены другие блоки server, для которых настроен default_server, вам придется удалить модификатор у одного из блоков.
server { 
 listen 80 default_server;
 listen [::]:80 default_server;
 server_name example.com www.example.com;
 return 301 https://$server_name$request_uri;
}

server {

# Конфигурация SSL

listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
include snippets/ssl-example.com.conf;
include snippets/ssl-params.conf;

. . .
После внесения изменений сохраните и закройте файл.

Альтернативная конфигурация: разрешаем HTTP- и HTTPS-трафик

Если вы хотите или вынуждены разрешить и шифрованный, и нешифрованный контент, вам придётся настроить Nginx немного иначе. Так делать не стоит, но в некоторых ситуациях это может быть необходимо. По сути, мы склеим разделенные блоки server в один и уберём перенаправление:
server {
 listen 80 default_server;
 listen [::]:80 default_server;
 listen 443 ssl http2 default_server;
 listen [::]:443 ssl http2 default_server;

 server_name example.com www.example.com;
 include snippets/ssl-example.com.conf;
 include snippets/ssl-params.conf;

. . .
После внесения изменений сохраните и закройте файл.

Шаг 4. Настраиваем файрвол

Если у вас включен файрвол ufw, вам необходимо обновить настройки и разрешить SSL-трафик. К счастью, Nginx регистрирует несколько профилей с ufw после установки.
Вы можете посмотреть текущие настройки, введя:
sudo ufw status
Вероятно, результат будет выглядеть следующим образом, означая, что на сервере разрешён только HTTP-трафик:
Status: active

To              Action            From
–              ——            —-
OpenSSH         ALLOW             Anywhere
Nginx HTTP      ALLOW             Anywhere
OpenSSH (v6)    ALLOW             Anywhere(v6)
Nginx HTTP(v6)  ALLOW             Anywhere (v6)
Чтобы разрешить HTTPS-трафик, можно включить профиль «Nginx Full» и удалить лишний профиль «Nginx HTTP»:
sudo ufw allow ’Nginx Full’
sudo ufw delete allow ’Nginx HTTP’
Теперь состояние файрвола должно выглядеть так:
sudo ufw status
Status: active

To              Action            From
–              ——            —-
OpenSSH         ALLOW             Anywhere
Nginx Full      ALLOW             Anywhere
OpenSSH (v6)    ALLOW             Anywhere (v6)
Nginx Full (v6) ALLOW             Anywhere (v6)

Шаг 5. Подключаем изменения в Nginx

Теперь, когда мы внесли изменения в конфигурацию и обновили правила файрвола, нужно перезапустить Nginx, чтобы изменения вступили в силу.
Первым делом стоит проверить и убедиться, что синтаксические ошибки в наших файлах отсутствуют. Это можно сделать, введя:
sudo nginx -t
В случае успеха ваш результат должен выглядеть следующим образом:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Если ваш результат совпадает с тем, что вы видите выше, значит, ваш файл конфигурации не содержит синтаксических ошибок. Для активации изменений безопасно перезапустим Nginx:
sudo systemctl restart nginx
Теперь TLS/SSL-сертификат от Let’s Encrypt на месте и файрвол разрешает трафик на портах 80 и 443. На этом этапе протестируйте работоспособность TLS/SSL-сертификата, зайдя на ваш домен в браузере по HTTPS.
Вы можете использовать инструмент Qualys SSL Labs Report, чтобы посмотреть оценку конфигурации вашего сервера:
# Наберите в браузере:
https://www.ssllabs.com/ssltest/analyze.html?d=example.com
Такая настройка SSL должна показать рейтинг A+.

Шаг 6. Настраиваем автоматическое обновление

Сертификаты от Let’s Encrypt действуют только в течение 90 дней. Это побуждает пользователей к автоматизации процесса обновления. Нам понадобится создать регулярно запускающуюся команду для проверки и автоматического обновления сертификатов, срок которых истекает.
Для запуска проверки ежедневных обновлений мы будем использовать Cron — стандартный системный сервис для запуска повторяющихся задач. Задачи Cron указываются в файле под названием crontab:
sudo crontab -e
Вставьте следующую строчку в конец файла, затем сохраните и закройте его:
. . . 
15 3 * * * /usr/bin/certbot renew –quiet –renew-hook "/bin/systemctl reload nginx"
Часть строчки 15 3 * * * означает «запускай следующую команду в 3:15 ночи ежедневно». Вы можете выбрать любое время.
Команда renew для Certbot проверит все сертификаты, установленные в системе, и обновит каждый, срок использования которого истекает менее, чем через 30 дней. Ключ –quiet говорит Certbot’у ничего не выводить и не ждать ввода от пользователя. –renew-hook "/bin/systemctl reload nginx" перезагрузит Nginx, чтобы он использовал новые файлы сертификата, но только в случае, если произошло обновление.
Cron будет запускать эту команду каждый день. Все установленные сертификаты будут автоматически обновлены и подгружены, когда останется меньше 30 дней до истечения срока их действия.

Заключение

В данном руководстве мы установили клиент сервиса Let’s Encrypt — Certbot, загрузили SSL-сертификаты для наших доменов, настроили Nginx, чтобы он использовал эти сертификаты, и настроили автоматическое обновление. Если у вас остались вопросы по использованию Certbot, его документация вам поможет.

четверг, 22 июня 2017 г.

Загрузочная флешка Windows в Linux

Бывают случаи, когда вам нужно записать windows на флешку в linux, например, когда вы хотите поставить эту систему второй для использования специализированных программ, или вам нужно переустановить систему своим знакомым. Или же есть пользователи Linux, которые решили вернуться на windows, но единственную флешку уже перезаписали под Linux LiveUSB.
Загрузочная флешка Windows в Linux создается достаточно просто. Я предлагаю несколько способов решения этой проблемы. Все их я перечислил ниже.

Загрузочная флешка windows в Linux

Загрузочную флешку можно создать с помощью терминала или специальных графических утилит. Сначала рассмотрим ручной способ.

Способ 1. Терминал и Gparted

Запустите терминал через главное меню или с помощью сочетания клавиш "Ctrl + Alt + T" в Ubuntu и Ubuntu подобных, кроме Kubuntu. Установите gparted и ntfsprogs. В Ubuntu для этого используйте команду:
$ sudo apt install gparted ntfsprogs
Далее, нам нужно отформатировать флешку. Можно сделать это через gparted, а можно в терминале.
Для форматирования флешки в Gparted в правом верхнем углу нажимаем на иконку диска и выбираем флешку.
Правой кнопкой мыши на разделе и в контекстном меню жмем "Отмонтировать":
Затем нажимаем "форматировать в …" в открывшемся меню выбираем "ntfs".
Нажимаем "применить".
Отвечаем на вопрос "Применить эту операцию?" согласием. Командой все сделать немного проще:
$ sudo mkfs.ntfs /dev/sdb1
Вместо sdb1 название вашей флешки (не метка!). Чтобы узнать как она называется выполните:
$ fdisk -l
Идём дальше. Откройте Gparted, если вы его ещё не открыли. И выберите флешку, если ещё не выбрали. Нажмите правой кнопкой мыши и выберите "Установить флаги". Поставьте галочку boot и нажмите "применить".
Дальше нужно открыть образ windows.iso.
$ sudo mkdir /media/iso
$ sudo mount windows7.iso /media/iso -t udf -o loop
Осталось только скопировать все файлы из образа на флешку:
$ cp -R /media/iso/* /run/media/имя_флешки
Где /run/media/имя_флешки - точка монтирования вашей флешки. Его можно посмотреть просто перейдя в папку /run/media или /media и посмотрев название вложенной туда папки.
$ ls /run/media
Это был способ для тех, кто не любит ставить много одноразовых утилит в систему. создание загрузочной флешки windows в linux с помощью сторонних утилит выглядит проще.

Способ 2. утилита winUSB

Пожалуй, это самый простой способ создания. Установка в Ubuntu:
$ sudo add-apt-repository ppa:colingille/freshlight
$ sudo apt update
$ sudo apt install winusb
Установка Debian / Ubuntu 14
$ sudo add-apt-repository ppa:colingille/freshlight
$ sudo apt-get update
$ sudo apt-get install winusb
Интерфейс простой. Нажмите сверху на кнопку "обзор"(иконка папка) и выберите образ. Затем нажмите "Install" и дождитесь окончания.

Способ 3. Утилита Etcher

Если WinUSB не помог, не запустился, его нет для вашего дистрибутива, вам поможет утилита Etcher. Утилита в настоящее время находится в интенсивной разработке, но даже в бета-версии, программа исправно выполняет свою функцию писателя iso-образов. Etcher поддерживает запись Linux, macos 10.9 +, Windows 7+. Может быть, создана загрузочная флешка windows 10 в linux.
Зайдите официальный сайт утилиты и скачайте .deb / .rpm пакет. Или если ваш дистрибутив не поддерживает эти пакеты, скачайте .appimage файл. Он должен работать на всех дистрибутивах.

После установки вы можете запустить программу из главного меню или из appimage файла, если вы выбрали этот путь. Когда программа запустится, найдите у себя загруженный iso-образ:
Вставьте флешку:
Нажмите кнопку "Flash" и дождитесь окончания записи. У вас появится примерно такая надпись:

Выводы

Как видите, создание загрузочной флешки windows в linux не так уж сложно. Это были все способы, которые знал. Если они вам помогли напишите об этом. Если вы знаете еще способы, напишите обязательно их в комментариях!

четверг, 15 июня 2017 г.

Что значит 502 bad gateway Nginx

Начинающие веб-мастера и системные администраторы временами сталкиваются с ошибкой 502 bad gateway nginx. Nginx - это не просто один из лучших веб-серверов, в то же время, он проектировался как отличный прокси. Логически можно предположить, что эта ошибка возникает, когда что-то не так со шлюзом.
И необязательно чтобы вы использовали Nginx в качестве прокси для доступа к сети. Нет, для работы большинства сайтов требуется генерация динамического контента, например, на php. Поэтому Nginx часто выступает в прокси для Apache или php-fpm. В этой статье мы рассмотрим что означает 502 bad gateway Nginx, как исправить ее.

Что означает 502 bad gateway Nginx

Как и следует из названия, эта ошибка значит, что Nginx попытался связаться со шлюзом и у него ничего не вышло. Например, запросы от пользователей принимает Nginx, поскольку он работает быстро и потребляет мало ресурсов, а за генерацию контента отвечает php-fpm. Если сервис php-fpm во время обработки запроса получил какую-либо ошибку и не вернул результата, или же он вообще отключен и Nginx не может получить к нему доступ мы получим такую ошибку.
Вот основные причины:
  • Nginx используется в качестве прокси для Apache или php-fpm, но эти сервисы не запущены;
  • Nginx используется качестве прокси для php-fpm, но параметры доступа к сокету неверно настроены;
  • Неверно настроены значения размера буфера и таймаута для php-fpm в nginx.conf;
  • Ошибки в конфигурации Nginx.

Как исправить ошибку 502 bad gateway Nginx

1. Анализ логов и перезапуск

Чтобы исправить ошибку нужно выяснить что случилось со шлюзом. Лучший способ сделать это - посмотреть логи Nginx, там обязательно должно быть что-то написано и намного подробнее, чем в выводе браузера:
$ tail -f /var/log/nginx/error.log
Это уже должно дать вам некоторые подсказки что делать дальше. Еще в первую очередь не помешает проверить файл конфигурации Nginx на ошибки:
$ nginx -t

Допустим, у нас в качестве шлюза для генерации динамического содержимого используется php-fpm. Тогда нужно проверить запущен ли вообще этот сервис:
$ ps aux | grep php
Если все процессы уже запущены, попробуйте перезапустить их с помощью systemd:
$ sudo systemctl restart php-fpm
Если процесс остановлен, то его нужно запустить:
$ sudo systemctl start php-fpm
Это самая распространенная причина, вызывающая ошибку 502 Bad Gateway и обычно после перезапуска сервиса все будет работать, вам осталось выяснить только почему он завершился. В этом вам может помочь просмотр лога php-fpm:
$ sudo tail -f /var/log/php7.0-fpm.log
Но если такой рецепт не помог, и ошибка 502 bad gateway nginx нужно идти дальше. Внимательно пересмотрите лог, возможно, там уже есть ответ.

2. Доступность php-fpm и владелец

Также эта ошибка может возникать при проблемах доступа к файлу сокета php-fpm, например, когда этот файл называется по другому или для него выставлены неверные права. Сначала убедитесь, что в конфигурационном файле /etc/nginx/nginx.conf указан правильный адрес файла сокета php-fpm:
location ~ \.php$ {
fastcgi_pass unix:/var/run/php7.0-fpm.sock;
include fastcgi_params;
}
Файл /var/run/php7.0-fpm.sock должен действительно существовать в файловой системе. Дальше нужно убедиться, что у сокета правильный владелец, это должен быть тот же пользователь, от имени которого запускается Nginx, группа тоже должна соответствовать. Откройте файл /etc/php7.0/fpm/pool.d/www.conf и найдите строчки user и group. Они должны иметь такое же значение, как строчка user в конфиге nginx.conf:
listen = /var/run/php7.0-fpm.sock
listen.owner = www-data
listen.group = www-data
После того как выставите правильные параметры, перезапустите сервисы:
$ sudo service php5-fpm restart
$ sudo service nginx restart

3. Время отклика и размер буфера

Возможно, размер буфера и время ожидания ответа от fastcgi настроены неверно и программа просто не успевает обработать большой запрос. Попробуйте увеличить такие параметры в /etc/nginx/nginx.conf. Если таких строк не существует, добавьте их в блок http, как здесь:
$ sudo vi /etc/nginx/nginx.conf
http {
...
fastcgi_buffers 8 16k;
fastcgi_buffer_size 32k;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
...
}