Установка и настройка сервера Apache
Apache — это популярнейший свободный веб-сервер. Состоянием на 2020 год он используется на 33% всех сайтов интернета, а это приблизительно 304 миллиарда сайтов. Этот веб-сервер был разработан в далеком 1995, как замена для популярного того сервера NCSA и исправил множество его проблем. Ходят слухи что его имя походит от a patchy, заплатка, так как он исправлял ошибки NCSA. Сейчас же, это кроссплатформенная программа, поддерживающая Windows, Linux и MacOS и обеспечивающая достаточную гибкость, настраиваемость и функциональность. Программа имеет модульную структуру, что позволяет расширять ее функциональность почти до бесконечности с помощью модулей.
Установить Apache в Linux можно с помощью нескольких команд, но программа предоставляет очень большое количество настроек, которые можно изменить, а также модулей, после включения которых она будет работать лучше. В этой статье будет рассмотрена установка и настройка Apache, в качестве основной системы мы будем использовать Ubuntu, но вы можете повторить эти действия в любом другом дистрибутиве.
Содержание статьи:
Установка Apache
На данный момент, самая новая версия программы 2.4 поэтому и будет рассмотрена настройка apache 2.4. Как я уже говорил, в Linux программа устанавливается буквально в пару команд. Для установки в Ubuntu сначала обновим систему до самой новой версии:
sudo apt update
sudo apt upgrade
Затем установка apache2:
sudo apt install apache2
В других дистрибутивах пакет программы называется либо так, либо httpd и его установка у вас не вызовет трудностей.
После завершения установки нужно добавить веб-сервер в автозагрузку, чтобы не запускать его вручную после включения компьютера:
sudo systemctl enable apache2
Настройка Apache
Уже прошло то время, когда конфигурация Apache хранилась в одном файле. Но оно и правильно, когда все распределено по своим директориям, в конфигурационных файлах легче ориентироваться.
Все настройки содержатся в папке /etc/apache/:
- Файл /etc/apache2/apache2.conf отвечает за основные настройки
- /etc/apache2/conf-available/* — дополнительные настройки веб-сервера
- /etc/apache2/mods-available/* — настройки модулей
- /etc/apache2/sites-available/* — настойки виртуальных хостов
- /etc/apache2/ports.conf — порты, на которых работает apache
- /etc/apache2/envvars
Как вы заметили есть две папки для conf, mods и site. Это available и enabled. При включении модуля или хоста создается символическая ссылка из папки available (доступно) в папку enable (включено). Поэтому настройки лучше выполнять именно в папках available. Вообще говоря, можно было бы обойтись без этих папок, взять все и по старинке свалить в один файл, и все бы работало, но сейчас так никто не делает.
Сначала давайте рассмотрим главный файл конфигурации:
vi /etc/apache2/apache2.conf
Timeout — указывает как долго сервер будет пытаться продолжить прерванную передачу или прием данных. 160 секунд будет вполне достаточно.
KeepAlive On — очень полезный параметр, позволяет передавать несколько файлов, за одно соединение, например, не только саму html страницу, но и картинки и css файлы.
MaxKeepAliveRequests 100 — максимальное количество запросов за одно соединение, чем больше, тем лучше.
KeepAliveTimeout 5 — таймаут соединения, обычно для загрузки страницы достаточно 5-10 секунд, так что больше ставить не нужно, но и рвать соединение раньше чем загрузились все данные тоже не нужно.
User, Group — пользователь и группа, от имени которых будет работать программа.
HostnameLookups — записывать в логи вместо ip адресов доменные имена, лучше отключить, чтобы ускорить работу.
LogLevel — уровень логирования ошибок. По умолчанию используется warn, но чтобы логи заполнялись медленнее достаточно включить error
Include — все директивы include отвечают за подключение рассмотренных выше конфигурационных файлов.
Директивы Directory отвечают за настройку прав доступа к той или иной директории в файловой системе. Синтаксис здесь такой:
<Directory /адрес/в/файловой/системе/>
Параметр значение
</Directory>
Здесь доступны такие основные опции:
AllowOverride — указывает нужно ли читать .htaccess файлы из этой директории, это такие же файлы настроек и таким же синтаксисом. All — разрешать все, None — не читать эти файлы.
DocumentRoot — устанавливает из какой папки нужно брать документы для отображенияа пользователю
Options — указывает какие особенности веб-сервера нужно разрешить в этой папке. Например, All — разрешить все, FollowSymLinks — переходить по символическим ссылкам, Indexes — отображать содержимое каталога если нет файла индекса.
Require — устанавливает, какие пользователи имеют доступ к этому каталогу. Require all denied — всем запретить, Require all granted — всем разрешить. можно использовать вместо all директиву user или group чтобы явно указать пользователя.
Order — позволяет управлять доступом к директории. Принимает два значения Allow,Deny — разрешить для всех, кроме указанных или Deny,Allow — запретить для всех, кроме указанных. Теперь мы можем запретить доступ к директории для всех: Deny from all, а затем разрешить только для приложения от losst.pro: Allow from losst.pro.
Здесь все эти директивы не используются, поскольку нас устраивают значения по умолчанию, но вот в файлах .htaccess они могут быть очень полезны.
У нас остался файл /etc/apache2/ports.conf:
В нем только одна директива, Listen, которая указывает программе на каком порту нужно работать.
Последний файл /etc/apache2/envvars, его вы вряд ли будете использовать, в нем указанны переменные, которые можно использовать в других конфигурационных файлах.
Настройка сервера Apache через htaccess
Файлы .htaccess позволяют настраивать веб-сервер на Ubuntu для поведения в определенной директории. Все инструкции, указанные в этом файле выполняются как бы они были обвернуты в тег <directory адрес_папки> если бы находились в основном файле.
Важно заметить, что для того, чтобы сервер читал инструкции из .htaccess настройки для этой папки в основном файле или файле виртуального хоста не должны содержать AllowOverride None, чтобы могли работать все настройки нужно AllowOverride All.
А в остальном, здесь может выполняться любая настройка сервера apache, от включения модулей, до обычного изменения доступа к папке. Поскольку все параметры мы уже рассмотрели просто приведем пару примеров:
Order Deny,Allow
Deny from all
Запрещает всем доступ к этой папке, важно применить, для папок с конфигурацией.
/\.]+)/?$ product.php?id=$1 [L]Но это очень обширная тема и выходит за рамки этой статьи.
Настройка модулей Apache
Как я уже говорил, Apache — модульная программа, ее функциональность можно расширять с помощью модулей. Все доступные модули загрузчики и конфигурационные файлы модулей находятся в папке /etc/apache/mods-available. А активированные в /etc/apache/mods-enable.
Но вам необязательно анализировать содержимое этих папок. Настройка Apache 2.4 с помощью добавления модулей выполняется с помощью специальных команд. Посмотреть все запущенные модули можно командой:
apache2ctl -M
Включить модуль можно командой:
sudo a2enmod имя_модуля
А отключить:
sudo a2dismod имя_модуля
После включения или отключения модулей нужно перезагрузить apache:
sudo systemctl restart apache2
Во время выполнения одной из этих команд создается или удаляется символическая ссылка на файл модуля с расширением load в директории mods-available.
vi /etc/apache2/mods-available/deflate.load
Это к тому, что активировать модуль можно было просто добавив эту строчку в файл apache2.conf. Но принято делать именно так, чтобы избежать путаницы.
Настройки модулей находятся в той же папке, только в файле с расширением .conf вместо load. Например, посмотрим настройки того же модуля для сжатия deflate:
vi /etc/apache2/mods-available/deflate.conf
Файлы в папке conf-available, это такие же модули, только они установлены отдельно от apache, это может быть конфигурационные файлы для включения модуля php или любого другого языка программирования. Здесь работает все точно так же, только команды для включения и отключения этих модулей немного другие:
a2enconf имя_модуля
a2disconf имя модуля
Как вы убедились, включать модули очень просто. Давайте включим несколько необходимых, но не включенных по умолчанию модулей:
sudo a2enmod expires
sudo a2enmod headers
sudo a2enmod rewrite
sudo a2enmod ssl
Модули expires и headers уменьшают нагрузку на сервер. Они возвращают заголовок Not Modified, если документ не изменился с последнего запроса. Модуль expiries позволяет устанавливать время, на которое браузер должен кэшировать полученный документ. Rewrite позволяет изменять запрашиваемые адреса на лету, очень полезно при создании ЧПУ ссылок и т д. А последний для включения поддержки шифрования по SSL. Не забудьте перезагрузить apache2 после завершения настроек.
Настройка виртуальных хостов Apache
Было бы не совсем удобно, если на одной физической машине можно было размещать только один сайт. Apache может поддерживать сотни сайтов на одном компьютере и выдавать для каждого из них правильное содержимое. Для этого используются виртуальные хосты. Сервер определяет к какому домену приходит запрос и отдает нужное содержимое из папки этого домена.
Настройки хостов Apache расположены в папке /etc/apache2/sites-available/. Для создания нового хоста достаточно создать файл с любым именем (лучше кончено с именем хоста) и заполнить его нужными данными. Обернуть все эти параметры нужно в директиву VirtualHost. Кроме рассмотренных параметров здесь будут использоваться такие:
- ServerName — основное имя домена
- ServerAlias — дополнительное имя, по которому будет доступен сайт
- ServerAdmin — электронная почта администратора
- DocumentRoot — папка с документами для этого домена
Например:
vi /etc/apache2/sites-available/test.site.conf
<VirtualHost *:80>
ServerName test.site
ServerAlias www.test.site
ServerAdmin webmaster@localhost
DocumentRoot /var/www/test.site/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Виртуальные хосты, как и модули нужно активировать. Для этого есть специальные утилиты. Чтобы активировать наберите:
sudo a2ensite test.site
Здесь test.site — имя файла виртуального хоста. Для отключения тоже есть команда:
sudo a2dissite test.site
Настройка виртуальных хостов Apache завершена и на публичном сервере это все бы уже работало, но если вам нужна настройка Apache на домашней машине, то вы ваш новый сайт не откроется в браузере. Браузер не знает такого сайта. И откуда ему знать? DNS службы не могут ничего сообщить об этом доменном имени. Но в системе Linux мы можем сами указать ip адреса для доменных имен в файле /etc/hosts. Поэтому добавляем в конец файла такие строки:
vi /etc/hosts
127.0.0.1 test.site
127.0.0.1 www.test.site
Вот, ну теперь будет работать, открывайте браузер, проверяйте.
Выводы
Вот и все. Установка и настройка Apache linux завершена, вы можете использовать программу для размещения ваших сайтов. Более того, вы не просто настроили ее, вы разобрались со всеми подробностями и теперь знаете чуточку больше. Если у вас остались еще вопросы, пишите в комментариях!
установка, настройка и способы защиты от атак
Веб-сервер Apache не нуждается в представлении. Это программное обеспечение с открытым исходным кодом, выпущенное фондом Apache, один из самых используемых веб-серверов в мире. Рассмотрим, как его установить и как настроить конфигурацию брандмауэра для разрешения HTTP- и HTTPS-трафика и виртуальные хосты в Ubuntu 18.04.
Этапы установки Apache
Установить веб-сервер Apache в Ubuntu 18.04 Bionic Beaver очень просто:
$ sudo apt-get update && apt-get install apache2
Сценарии установки Ubuntu позаботятся о запуске и включении apache2-сервиса при загрузке.
Настройка брандмауэра
Чтобы получить доступ к содержимому сервера на той же машине, где он работает, нужно запустить веб-браузер и ввести в адресную строку localhost
. Если всё настроено правильно, страница поприветствует словами: «It works!».
http://local.server.ip
Если в системе включён брандмауэр (как и должно быть), то чтобы сделать контент доступным извне нашей машины, нужно разрешить входящий трафик через порт 80. Команда для запуска зависит от используемого менеджера брандмауэра. Например, при использовании ufw
(используется в Ubuntu по умолчанию) мы должны запустить:
$ sudo ufw allow http
Если вы используете firewalld
, можно запустить:
$ sudo firewall-cmd --permanent --add-service=http && firewall-cmd --reload
Обратите внимание, что приведённая выше команда будет по умолчанию действовать в зоне firewalld
. Если вы хотите работать с другой зоной, нужно указать её с помощью опции --zone
.
Настройка виртуального хоста
Веб-сервер Apache может запускать несколько веб-сайтов на одном компьютере. Каждый запущенный сайт («виртуальный хост» в терминологии Apache) должен иметь свою собственную конфигурацию. Виртуальный хост может быть IP или именем.
В этом руководстве мы сосредоточимся на втором типе, так как он проще в настройке и не требует нескольких IP-адресов (виртуальные хосты на основе имён позволяют нескольким веб-сайтам использовать один и тот же IP-адрес).
Виртуальный хост по умолчанию
В Ubuntu виртуальный хост по умолчанию определён в каталоге /etc/apache2/sites-available
внутри файла 000-default.conf
. Рассмотрим его:
<VirtualHost *:443> [...] ServerAdmin webmaster@localhost DocumentRoot /var/www/html [...] ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined [...] </VirtualHost>
Директива <VirtualHost>
на первой строке применяется для группы параметров, используемых Apache для конкретного виртуального хоста. Первое, что вы увидите в ней, — инструкцию *:80
. Она указывает IP-адрес и порт, используемый виртуальным хостом.
Несколько сайтов могут быть определены в одном и том же файле или по отдельности. В обоих случаях первое определение считается значением по умолчанию, если ни один другой виртуальный хост не соответствует запросу клиента.
Директива на строке 3 не является обязательной, она используется, чтобы указать контактный адрес. Обычно в качестве аргумента директивы предоставляют действительный адрес электронной почты, чтобы было проще связаться с администратором.
DocumentRoot
в строке 4 является обязательным, это важно для конфигурации виртуального хоста. Аргумент этой инструкции должен иметь доступ к файловой системе. Указанный каталог будет считаться корневым каталогом виртуального хоста и не должен содержать завершающий символ «/». В этом случае корневая директория документа — /var/www/html
. Если мы посмотрим на её содержимое, то увидим, что она содержит страницу index.html
, которую вы до этого видели в качестве страницы приветствия сервера.
Последние две команды на строках 8–9, представленные в этом VirtualHost
, — ErrorLog
и CustomLog
. Используя первый, вы указываете файл, в который сервер будет записывать возникающие ошибки. Второй используется для регистрации запросов, отправленных на сервер в указанном формате.
Новый виртуальный хост
Вы видели, как определяется виртуальный хост по умолчанию. Теперь предположим, что вы хотите разместить другой веб-сайт с помощью вашего веб-сервера. Для этого вам нужно определить новый виртуальный хост.
Как сказано выше, файлы виртуальных хостов должны быть определены внутри каталога /etc/apache2/sites-available
(по крайней мере в дистрибутивах на основе Debian). Поэтому создадим этот файл там. Прежде чем сделать это, следует создать каталог, который будет использоваться как document root, а также создать базовую страницу, которая будет отображаться при открытии сайта:
$ sudo mkdir /var/www/example && echo "Welcome to example!" > /var/www/example/index.html
Теперь можно приступить к настройке виртуального хоста:
<VirtualHost *:80> DocumentRoot /var/www/example ServerName www.example.local </VirtualHost>
Это минимальная конфигурация, необходимая для его запуска. Здесь вы можете увидеть новую директиву ServerName
. Это то, что определяет ваш виртуальный хост. Сохраним этот файл как example.conf
. Чтобы активировать ваш виртуальный хост, используйте команду a2ensite
. Эта команда создаёт символическую ссылку файла в каталоге /etc/apache2/sites-enabled
:
$ sudo a2ensite example.conf
После этого следует перезагрузить конфигурацию сервера:
$ sudo systemctl reload apache2.service
Чтобы убедиться, что конфигурация работает, вы должны добавить запись в файл /etc/hosts
той машины, с которой вы пытаетесь связаться с сайтом.
$ sudo echo "192.168.122.241 www.example.local" >> /etc/hosts
Без этой строки (и без записи DNS) было бы невозможно связать адрес сервера с именем вашего виртуального хоста, а использование IP-сервера напрямую вместо этого «инициировало» бы виртуальный хост по умолчанию.
С клиентского компьютера, если вы теперь перейдёте к www. example.local
, вы должны увидеть минимальную страницу, которую настроили выше.
Настройка SSL
SSL (Secure Sockets Layer) — это технология, которая позволяет нам шифровать данные, связанные с соединением между клиентом и сервером. При использовании SSL-сертификатов HTTPS (Hyper Text Transfer Protocol Secure) заменяет HTTP в URL-адресе.
SSL-сертификаты выдаются центром сертификации и могут быть очень дорогими, однако есть два других способа получить сертификат: создать самозаверяющий сертификат или воспользоваться сервисом Let’s encrypt.
Создаём самоподписанный SSL-сертификат
Создание самозаверенного сертификата — несложная задача. Это может быть удобно, если вы просто хотите получить шифрование. Мы можем создать самозаверяющий сертификат с помощью утилиты OpenSSL:
$ sudo openssl req -x509 \ -days 365 \ -sha256 \ -newkey rsa:2048 \ -nodes \ -keyout example.key \ -out example-cert.pem
Посмотрим, что делает эта команда. Первая опция, -x509
определяет, что формируется сертификат стандарта X509.
С помощью -days
мы устанавливаем срок действия сертификата в днях. Следующая опция — -newkey
. С её помощью мы создаём новый ключ, в данном случае RSA-ключ размером 2048 бит. В тестовом примере нам не нужно шифровать файл закрытого ключа, поэтому используем -nodes
. Если эта опция не указана, файл, в котором хранится ключ, будет защищён паролем, который нужно будет предъявлять каждый раз при перезапуске веб-сервера.
С помощью -keyout
и -out
мы указываем файл для записи сгенерированного ключа и сертификата соответственно. При запуске команды нам будет предложено ответить на несколько вопросов, после чего будет сгенерирован ключ и сертификат.
Скопируйте сгенерированный ключ и сертификат в каталоги /etc/ssl/private
и /etc/ssl/ssl-certs
соответственно:
$ sudo cp example-cert.pem /etc/ssl/certs
Сертификат является общедоступным, поэтому не требует специального разрешения.
Теперь ключ:
$ sudo cp example.key /etc/ssl/private
Важно настроить права доступа к файлу ключа. Папка /etc/ssl/private
принадлежит root-пользователю и группе ssl-cert
, и у неё есть права доступа 710. Это означает, что владелец имеет на неё полные права, а владелец группы может только получить к ней доступ и перечислить её содержимое, но не может дать разрешение другим:
$ ls -ld /etc/ssl/private drwx--x--- 2 root ssl-cert 4096 Mar 16 11:57 /etc/ssl/private
Изменим права доступа к файлу ключа, предоставив владельцу права на чтение и запись, а группе — только для чтения:
$ sudo chown root:ssl-cert /etc/ssl/private/example.key $ sudo chmod 640 /etc/ssl/private/example.key
Теперь, чтобы использовать сертификат, нужно включить модуль SSL с помощью команды a2enmod
:
$ sudo a2enmod ssl
Почти всё готово. Теперь пришло время изменить наш виртуальный хост и настроить его следующим образом:
<VirtualHost *:443> DocumentRoot /var/www/example ServerName www. example.local # Enable ssl engine SSLEngine on SSLCertificate /etc/ssl/certs/example-cert.pem SSLCertificateKeyFile /etc/ssl/private/example.key </VirtualHost>
Порт 443 в строке 1 — это порт, используемый для HTTPS (вместо порта 80, используемого для HTTP).
Мы также добавили инструкцию SSLEngine
on в строке 6.
Наконец, в строках 8–9 мы определили пути для сертификата и файла ключей, используя инструкции SSLCertificateFile
и SSLCertificateKeyFile
.
Теперь следуйте инструкциям по открытию порты брандмауэра из начале статьи, но на этот раз чтобы разрешить HTTPS-службу:
$ sudo ufw allow https
Наконец, перезагрузите конфигурацию Apache:
$ sudo systemctl reload apache2
Готово. Теперь, если мы перейдём по адресу https://www.example.local, мы должны увидеть веб-сервер, предупреждающий нас о том, что используемый сертификат небезопасен. Это, однако, признак того, что наш сертификат работает, и трафик между клиентом и сервером будет зашифрован (вам необходимо добавить исключение для сертификата, чтобы использовать его).
Настройка Let’s encrypt
Альтернатива коммерческим и самозаверенным сертификатам — «Let’s encrypt». Это бесплатный, автоматизированный и открытый центр сертификации. Его цель — дать возможность автоматически получить сертификат, которому доверяет браузер, без какого-либо вмешательства человека.
Для этого используется протокол ACME (certificate management agent), который запускается на сервере.
Чтобы получить сертификат, вы должны подтвердить, что у вас есть контроль над доменом, для которого вы хотите его использовать. Если у вас нет доступа к shell на сервере, нужно связаться с вашим поставщиком услуг, чтобы активировать сертификат от вашего имени, но, возможно, на панели конфигурации сервиса есть специальный раздел.
Если же у вас есть доступ к shell, необходимо установить клиент certbotACME
.
Для установки Certbot на Ubuntu 18.04 достаточно запустить:
$ sudo apt-get update && apt-get install certbot python-certbot-apache
Пакет Certbot поставляется с модулем systemd timer
, который будет запускать Certbot два раза в день, чтобы поддерживать сертификат в актуальном состоянии. Получить сертификат довольно просто:
$ sudo certbot --apache -m -d
Очевидно, чтобы это работало, домен должен правильно указывать на ваш общедоступный IP-адрес. Certbot предложит вам несколько вопросов для настройки конфигурации, и, если всё пойдёт хорошо, сертификат и ключ будут сохранены в каталоге /etc/letsencrypt/live/
. Просто настройте файл виртуального хоста, чтобы указать на них, и всё готово.
Как обезопасить сервер Apache
Основные средства защиты
Установка Fail2ban на Ubuntu Server 18.04
Если вы хотите обезопасить свой сервер Ubuntu, первое, что вы должны сделать, — это установить систему обнаружения вторжений Fail2ban.
Fail2ban отслеживает определённые файлы журналов (в /var/log
) на предмет неудачных попыток входа или автоматических атак на сервер. Когда обнаруживается попытка компрометации с IP-адреса, Fail2ban блокирует его, добавляя новую цепочку в iptables
и предотвращая доступ или дальнейшую атаку на сервер.
Fail2ban настолько легко установить и использовать, что его можно рассматривать как простое и универсальное решение для всех серверов Linux.
Установить его просто. Войдите в свой сервер Ubuntu и обновите его при необходимости. Обратите внимание, что если в этом процессе обновлено ядро, сервер нужно перезагрузить, поэтому выберите время, когда перезагрузка возможна. Чтобы обновить сервер, введите следующие команды:
sudo apt-get update sudo apt-get upgrade
После выполнения команд при необходимости перезагрузите сервер.
Установить Fail2ban можно с помощью одной команды:
sudo apt-get install -y fail2ban
Проверьте установленную версию:
fail2ban-server --version
После этого Fail2ban готов к работе. Запустить и включить сервис можно так:
sudo systemctl start fail2ban sudo systemctl enable fail2ban
Настройка jail
Настроим его для попыток входа по SSH. В каталоге /etc/fail2ban
вы найдёте файл jail. conf
. Не редактируйте его. Вместо этого создайте новый файл jail.local
, который переопределит любые подобные настройки в jail.conf
. Новая конфигурация будет отслеживать /var/log/auth.log
, использовать фильтр sshd fail2ban
, устанавливать для порта SSH значение 22 и устанавливать максимальное количество попыток — 3. Для этого выполните команду:
sudo nano /etc/fail2ban/jail.local
В новый файл вставьте следующее содержимое:
[sshd] enabled = true port = 22 filter = sshd logpath = /var/log/auth.log maxretry = 3
Сохраните и закройте его. Перезапустите Fail2ban с помощью команды:
sudo systemctl restart fail2ban
На этом этапе, если кто-либо попытается войти на ваш сервер Ubuntu через SSH и эта попытка 3 раза завершится ошибкой, он не сможет больше войти, поскольку iptables заблокирует IP-адрес.
Тестирование и разблокирование
Вы можете проверить, работает ли jail, намеренно провалив три попытки входа на сервер через SSH. После третьей неудачной попытки соединение будет зависать. Нажмите Ctrl+C, чтобы выйти, а затем попытайтесь вернуться по SSH на сервер. Вы больше не сможете использовать SSH на этом сервере с того IP-адреса, который вы использовали.
Затем вы можете разблокировать свой тестовый IP-адрес с помощью следующей команды:
sudo fail2ban-client set sshd unbanip ip_address
Где ip_address
— запрещённый IP-адрес.
Теперь вы снова можете войти.
Модуль mod_evasive
Ещё одна отличная утилита для обнаружения и блокировки IP-адресов, которые используются при атаке типа «отказ в обслуживании». Модуль помещает подозрительные IP-адреса во временный чёрный список и сохраняет их там, если они продолжают подозрительно себя вести.
Благодаря простоте настройки и эффективность он стал одним из любимых инструментов защиты систем Apache. Если вы хотите защитить свой сайт без затрат, можете также использовать его.
Установка mod_evasive в Ubuntu
Введите команду:
# apt-get update
Затем установите вспомогательную утилиту:
sudo apt-get install apache2-utils
Чтобы установить модуль mod_evasive в Ubuntu, введите следующее:
# apt-get install libapache2-mod-evasive
Настройка mod_evasive
Как и большинство программных пакетов Linux, mod_evasive
управляется файлом конфигурации.
Откройте его в текстовом редакторе с помощью следующей команды:
sudo nano /etc/apache2/mods-enabled/evasive.conf
Найдите запись:
#DOSEmailNotify [email protected]
Знак #
помечает это как комментарий. Удалите его, затем замените [email protected]
своим адресом электронной почты. Используйте ту, которой вы постоянно пользуетесь — именно сюда будут отправляться оповещения.
Отредактируйте файл журнала, чтобы он выглядел следующим образом:
Сохраните и выйдите, затем перезагрузите Apache:
sudo systemctl reload apache2
Тестирование mod_evasive
Пришло время проверить, правильно ли работает модуль.
Используйте скрипт test.pl
. Его сценарий расположен по этому адресу:
/usr/share/doc/libapache2-mod-evasive/examples/test.pl
.
Для его запуска примените эту команду:
perl /usr/share/doc/libapache2-mod-evasive/examples/test.pl
Вывод должен выглядеть таким образом:
Параметры и настройки
DOSSystemCommand
Вы, возможно, заметили, что эта опция была помечена как комментарий и отключена. Она позволяет указать системную команду, которая будет выполняться при добавлении IP-адреса в чёрный список. Вы можете использовать её, чтобы запустить команду для добавления IP-адреса в брандмауэр или IP-фильтр.
DOSHashTableSize
Увеличьте значение для более загруженных веб-серверов. Опция выделяет пространство для выполнения операций поиска. Увеличение размера улучшает скорость за счёт памяти.
DOSPageCount
Количество запросов для отдельной страницы, после которого адрес помещается в чёрный список. В примере стоит 2, но это достаточно маленькое (и агрессивное) значение. Увеличьте его, чтобы уменьшить количество ложных срабатываний.
DOSSiteCount
Общее количество запросов на один и тот же сайт по одному и тому же IP-адресу. По умолчанию установлено значение 50. Вы можете увеличить его до 100, чтобы уменьшить количество ложных срабатываний.
DOSPageInterval
Количество секунд для DOSPageCount. По умолчанию значение равно 1 секунде. Это означает, что если вы не измените его, запрос 2 страниц за 1 секунду временно поместит IP-адрес в чёрный список.
DOSSiteInterval
Как и DOSPageInterval, он определяет количество секунд, которые отслеживает DOSSiteCount. По умолчанию это значение равно 1 секунде, то есть если один IP-адрес запрашивает 50 ресурсов на одном и том же веб-сайте за одну секунду, он будет временно помещён в чёрный список.
DOSBlockingPeriod
Время, в течение которого IP-адрес остаётся в чёрном списке. По умолчанию установлено 10 секунд, но вы можете изменить его на любое значение, которое вам нравится.
DOSLogDir
По умолчанию он настроен на запись журналов в /var/log/mod_evasive
. Эти журналы можно просмотреть позже, чтобы оценить поведение клиента.
Белые IP-адреса
Эта опция по умолчанию не включена в файл evasive.conf
.
Откройте файл для редактирования и добавьте следующую строку:
DOSWhitelist ваш_IP_адрес
Подставьте IP-адрес, который хотите добавить в белый список. Нужно указывать только одну запись в строке. Обычно список используется для доверенных клиентов, которые обмениваются с вашим сайтом большим количеством данных. Этот инструмент хорош для обнаружения ботов и скриптов. Если есть боты или сценарии, которые вы хотите разрешить, можете внести их.
Обязательно сохраните файл и выйдите из него, а затем перезагрузите службу Apache перед тестированием любого из этих параметров.
DNS Injection
Спам из веб-форм не только распространён, но и является быстрым способом внести домен в чёрный список подобный Spamhaus. Чтобы предотвратить подобное, вам нужно добавить ещё один модуль в Apache.
В терминале введите:
sudo apt-get -y install libapache2-mod-spamhaus
После завершения установки введите команду:
sudo touch /etc/spamhaus.wl
Далее откройте файл /etc/apache2/apache2.conf
(используя sudo
и ваш любимый текстовый редактор) и добавьте в конец вашего файла конфигурации блок:
<IfModule mod_spamhaus.c> MS_METHODS POST, PUT, OPTIONS, CONNECT MS_WhiteList /etc/spamhaus.wl MS_CacheSize 256 </IfModule>
Сохраните файл apache2. conf
и перезапустите Apache, чтобы новый модуль вступил в силу.
Slowloris
В Apache есть модуль для предотвращения подобных DOS-атак. Вот как это работает. Откройте окно терминала. Введите команду:
sudo apt-get -y install libapache2-mod-qos
После завершения установки проверьте конфигурацию в /etc/apache2/mods-available/qos.conf
, чтобы убедиться, что она идеально соответствует вашим потребностям. После настройки модуля (при необходимости) перезапустите Apache.
Дополнительные средства защиты
Скрыть версию сервера
Это одно из первых соображений, поскольку вы не хотите показывать, какую версию веб-сервера вы используете. Её разоблачение означает, что вы помогаете хакеру ускорить процесс разведки.
Перейдите в папку:
$ Web_Server/conf
Измените httpd.conf
с помощью редактора. Добавьте следующую директиву и сохраните httpd.conf
:
ServerTokens Prod ServerSignature Off
Перезапустите Apache. ServerSignature
удалит информацию о версии со страницы.ServerTokens
изменит заголовок только на рабочий, т. е. Apache.
Защита от атаки Clickjacking
Атака данного типа позволяет злоумышленнику выполнить клик на сайте-жертве от имени легитимного посетителя.
Чтобы обезопасить свой веб-сервер, вам нужно использовать заголовок «X-FRAME-OPTIONS»
Вы можете сделать это, отредактировав файл apache2.conf
.
sudo nano /etc/apache2/apache2.conf
Добавьте следующую строку внутри Directory /var/www/html/
:
Header always append X-Frame-Options SAMEORIGIN
Сохраните файл и перезапустите Apache.
sudo /etc/init.d/apache2 restart
Теперь попробуйте открыть веб-браузер для доступа к веб-серверу. Проверьте заголовки ответа HTTP в firebug. Вы должны увидеть X-Frame-Options.
Защита от атаки XSS
XSS (англ. Cross-Site Scripting — «межсайтовый скриптинг») является одной из наиболее распространённых атак на уровне приложений.
Вы можете защититься от неё, отредактировав файл конфигурации Apache.
sudo nano /etc/apache2/apache2.conf
Добавьте следующую строку внутри Directory /var/www/html/
:
Header set X-XSS-Protection "1; mode=block"
Заключение
Мы рассмотрели установку и настройку, а также все наиболее важные способы защиты сервера Apache, и теперь вы можете полноценно приступить к изучению его работы на практике.
Вадим Сычёв
Как быстро развернуть веб-сервер Apache
Изображение
Изображениес сайта Pixabay
Иногда вам нужно быстро развернуть веб-сервер. Веб-сервер позволяет легко выполнять такие задачи, как тестирование веб-приложений, реализация проекта проверки концепции или просто знакомство с веб-разработкой.
Ниже описано, как это сделать с помощью почтенного HTTP-сервера Apache. Я начну с установки, затем продолжу редактирование базового файла конфигурации, создание нескольких документов, настройку брандмауэра и, наконец, тестирование службы.
Обратите внимание, что это очень простое тестовое развертывание. Он не подходит для веб-серверов с выходом в Интернет. Чтобы быть готовым к работе, вы должны настроить брандмауэры и проверить параметры вашего сервера.
Установить Apache
Если ваш дистрибутив Linux еще не включает Apache, выполните следующую команду для установки пакета:
$ sudo dnf install httpd
Если вы используете другой менеджер пакетов, измените команду соответствующим образом.
Редактировать файл конфигурации
Используя выбранный вами текстовый редактор (у меня Vim, но Nano или другие тоже подойдут), откройте /etc/httpd/conf/httpd.conf
.
Эти два значения уже могут быть установлены в этом файле, но подтвердите их, чтобы убедиться:
DocumentRoot /var/www/html Listen 80
Используйте функцию поиска в вашем редакторе, чтобы найти подходящие строфы. Вам может потребоваться раскомментировать раздел DocumentRoot
. В этой статье используется стандартное расположение по адресу /var/www/html 9.0026 .
Директива Listen
просто указывает, какой порт прослушивает служба. В этом случае используйте стандартный порт 80 для HTTP.
[ Лучше интегрируйте безопасность в жизненный цикл вашего программного обеспечения. Загрузите руководство по внедрению DevSecOps. ]
Управление службой
Вы установили веб-сервер, но еще не запускали его. Используйте команду systemctl
для запуска и включения службы httpd
:
$ sudo systemctl запустить httpd $ sudo systemctl status httpd
Запуск службы не означает, что с этого момента она будет запускаться автоматически. Чтобы ваш веб-сервер запускался автоматически после перезагрузки, используйте подкоманду enable
:
$ sudo systemctl enable --now httpd
Open port 80
Теперь, когда сайт настроен (и в реальной ситуации, безопасно), пришло время открыть брандмауэр. Я предполагаю, что вы используете firewalld
, поэтому введите следующие команды, чтобы разрешить HTTP-трафик на сервер:
$ sudo firewall-cmd --permanent --zone=public --add-service=http $ sudo firewall-cmd --reload $ sudo firewall-cmd --list-all --zone=public
Возможно, вам потребуется изменить значение зоны в зависимости от вашего дистрибутива.
Протестируйте сервер
Сначала проверьте сервер с помощью браузера. Запустите Firefox и перейдите по адресу localhost:80
, чтобы увидеть страницу подтверждения веб-сервера Apache по умолчанию.
Создание контента
Вероятно, вы установили веб-сервер не только для того, чтобы увидеть "Это работает!" в вашем браузере. Чтобы сделать ваш сервер немного интереснее, запустите свой любимый текстовый редактор с помощью sudo
и создайте несколько страниц для имитации веб-сайта. Не стесняйтесь делать это простым или сложным, как вам хочется. Вы также можете создать текстовый файл для проверки загрузок с сайта.
Домашняя страница вашего сайта по умолчанию имеет адрес index.html
и находится по адресу /var/www/html
. Сделайте резервную копию существующего файла index.html
и создайте новый, содержащий следующий код:
<голова>Добро пожаловать на мой тестовый сайт! голова> <тело> Этот сайт предназначен только для тестирования тело>
Кроме того, создайте новый текстовый файл с именем download-this.txt
со следующим содержимым, чтобы вы могли протестировать команды curl
и wget
позже:
Если вы можете это прочитать, загрузка прошла успешно!
Сохраните эти два файла по адресу /var/www/html
.
Просмотрите файлы
Предполагая, что это работает, выполните тестовую загрузку файла download-this.txt
.
Используйте другую систему в том же сегменте для тестирования веб-службы. В новой системе запустите веб-браузер. В адресной строке введите IP-адрес веб-сервера.
Не забывайте, вы можете запустить браузер и указать его на сайте с терминала:
$ firefox http://IP
Вы видите страницу приветствия?
Системные администраторы часто используют curl
или wget
для загрузки файлов по HTTP. Эта возможность особенно удобна для автоматической загрузки в сценариях или других сценариях автоматизации.
Запустите эти две команды, чтобы подтвердить возможность загрузки файла:
$ sudo dnf -y install curl $ curl -O http://IP/download-this.txt
$ sudo dnf -y установить wget $ wget http://IP/download-this.txt
Вы получили файл download-this.txt
? Используйте ls
для отображения файла и cat
для чтения его содержимого. У вас может быть две копии файла, если вы протестировали загрузку с помощью команд curl
и wget
.
[ Загрузить электронную книгу Управляйте своей средой Linux для достижения успеха. ]
Проверить журналы
Проверьте файлы журнала Apache на наличие информации о доступе. Например, введите следующее, чтобы просмотреть записи журнала, указывающие на транзакции загрузки файлов:
$ sudo cat /var/log/httpd/access_log | grep -I download-this.txt
Завершить
Вот и все! Вы установили, настроили и протестировали очень простое развертывание веб-сервера всего за несколько шагов. Не забудьте изучить настройки безопасности, прежде чем размещать такое развертывание в своей производственной среде или открывать его для внешнего мира.
Ознакомьтесь со статьями по теме Включить системного администратора
Изображение
Как начать работу с редактором Vi
После того, как вы зафиксировали сочетания клавиш Vi для мышечной памяти, посмотрите, как быстро вы работаете.
Изображение
Введение в правила и сценарии firewalld
Брандмауэр является важным компонентом безопасности вашей системы Linux. Посмотрите, как фильтровать трафик с помощью зон и правил.
Изображение
Руководство для начинающих по созданию редиректов в файле .htaccess
Используйте файл .htaccess для управления веб-сайтами на общих платформах веб-хостинга.
Темы: Веб-серверы Программное обеспечение
Шаг за шагом – DNSstuff
Автор: solarwindssoftware, 7 мая 2020 г.HTTP-сервер Apache, известный как веб-сервер Apache или просто Apache, считается стандартом для действий и служб HTTP общего назначения. Он предлагает широкий спектр модулей для обеспечения оптимальной гибкости в поддержке перезаписи URL-адресов, прокси-серверов и детального управления и контроля доступа. Apache — популярный выбор среди веб-разработчиков, поскольку он использует CGI, встроенные интерпретаторы и FastCGI для поддержки сценариев на стороне сервера. Это позволяет быстро и эффективно выполнять высокодинамичное кодирование.
Существует множество хорошо известных альтернатив Apache — nginx, XAMPP, Caddy и Microsoft IIS, среди многих других, — но ни одна из них не предлагает такой же широты использования, как Apache. Apache настолько широко используется, что его доля на рынке коммерческих веб-серверов составляет более 50%. Он особенно популярен для использования с Unix-подобными операционными системами, хотя поддерживает большинство платформ. Сюда входят Windows, OS X, OS/2 и другие.
Простое определение Apache
Как настроить сервер Apache
Как настроить сервер Apache в Linux
Как настроить виртуальные серверы Apache
Лучший инструмент мониторинга сервера Apache
Тем не менее, гибкость и широта использования Apache прийти за счет простоты во многих случаях. Структура конфигурации сложна, и многие расширенные функции сложны в использовании. В этом учебном пособии по серверу Apache объясняются основы Apache, а также пошаговые инструкции по настройке веб-сервера Apache в Linux. Цель состоит в том, чтобы помочь вам не только настроить сервер Apache, но и контролировать его. Мой рекомендуемый инструмент для этой цели — SolarWinds 9. 0005 ® Сервер и монитор приложений для Apache.
Простое определение Apache
Apache — это основанное на процессах модульное приложение веб-сервера с открытым исходным кодом, предназначенное для создания нового потока для каждого соединения, происходящего одновременно. Apache поддерживает ряд функций, охватывающих все, от механизмов аутентификации до серверных языков программирования. Он также поддерживает виртуальный хостинг, что позволяет использовать один веб-сервер Apache для обслуживания нескольких веб-сайтов. Большинство возможностей Apache предоставляются в виде отдельных модулей, что позволяет расширять и улучшать основные утилиты Apache.
Как настроить сервер Apache
Вы можете оказаться перегруженными, когда начнете настраивать сервер Apache. Как расширенное приложение с открытым исходным кодом, способное выполнять широкий спектр функций, конфигурация и настройка веб-сервера Apache довольно сложны.
Вы можете установить и настроить сервер Apache двумя способами.
- Установка поставщика. Поскольку это веб-приложение с открытым исходным кодом, любой может создать программу установки, соответствующую его индивидуальной среде. Такие поставщики, как Red Hat, SUSE и Debian, использовали эту возможность для настройки конфигурации сервера Apache и расположения файлов с учетом базовой операционной системы и других установленных программ. 902:30
- Установка исходного кода. Альтернативой использованию установщика от поставщика является настройка сервера Apache путем сборки и установки непосредственно из исходного кода. Этот подход позволяет настроить сервер Apache независимо от платформы и доступен для всех операционных систем.
При обоих вариантах установки модули могут быть скомпилированы в виде динамического общего объекта или DSO. DSO — это объектный файл, который может совместно использоваться и использоваться многочисленными приложениями. Модули DSO отделены от основного файла Apache. Подход DSO к компиляции модулей популярен, поскольку упрощает добавление, обновление и удаление модулей.
Как настроить сервер Apache в Linux
В этом учебном пособии по серверу Apache будут приведены пошаговые инструкции по настройке веб-сервера Apache в Linux.
- Обновите системные репозитории. Это включает в себя загрузку самой последней версии программного обеспечения путем обновления локального индекса пакетов репозиториев Ubuntu. Для этого заходим в терминал и вводим в него команду «$ sudo apt update».
- Установите Apache с помощью команды «apt». В этом примере давайте используем Apache2. Просто введите следующую команду — «$ sudo apt install apache2» — как sudo, которая установит Apache2 и все необходимые зависимости. На этом этапе вас могут спросить, хотите ли вы продолжить процесс установки. Введите «Y», чтобы указать, что вы хотели бы, и установка начнется. 902:30
- Убедитесь, что Apache успешно установлен. Когда процедура установки завершится, проверьте номер версии, чтобы убедиться, что Apache2 теперь установлен в вашей системе. Введите «$ apache2 -version», чтобы сделать это. Появится версия сервера, которая, надеюсь, подтверждает, что Apache2 установлен.
Как настроить виртуальные серверы Apache
При использовании виртуальных хостов важно выполнить настройку виртуального сервера Apache. Изменение параметров конфигурации гарантирует, что они отражают специфику домена, что позволит Apache правильно и успешно отвечать на запросы домена. Процесс завершения настройки виртуального сервера Apache прост:
- Сначала введите «$ sudo nano /etc/apache2/sites-available/example.com.conf», чтобы открыть файл конфигурации виртуального хоста.
- Замените «example.com» соответствующим образом. Далее вы сможете изменить следующее:
ServerName example.com
ServerAdmin [email protected]
ServerAlias www.example.com
DocumentRoot /var/www/example.com/public_htmlОпять же, обязательно замените все примеры компоненты с соответствующей информацией. После изменения конечный результат должен выглядеть следующим образом:
ServerName example. com
ServerAdmin [email protected]
ServerAlias www.example.com
DocumentRoot /var/www/example.com/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log вместе взятые
- В случае возникновения ошибки обратитесь к этим инструкциям, чтобы убедиться, что ничего не было опечатано или введено неправильно.
Лучший инструмент мониторинга сервера Apache
После настройки веб-сервера Apache я настоятельно рекомендую использовать инструмент мониторинга, который поможет вам протестировать сервер Apache и эффективно его контролировать. На рынке есть несколько таких инструментов, но SolarWinds Server & Application Monitor (SAM) возглавляет мой список. Этот инструмент позволяет легко определить определенные показатели производительности для облегчения упреждающего мониторинга Apache Cassandra, Apache Geronimo и Apache Tomcat. Одно приложение способно отслеживать и управлять всей вашей средой Apache и базовой инфраструктурой сервера.
С помощью SAM легко контролировать время безотказной работы и производительность, а также диагностировать причину проблем с производительностью. Приложение облегчает упреждающий мониторинг всех компонентов поддержки веб-сервера, входящих в состав веб-сервера Apache, включая Linux и MySQL. Мониторинг приложений охватывает виртуальный уровень, серверы и приложения, такие как Microsoft SQL Server, Exchange и Active Directory. Система обладает преимуществами настраиваемых предупреждений, отчетов и удобных в навигации информационных панелей, готовых к использованию сразу после установки. Это означает, что вы можете приступить к работе, когда SAM установлен, без необходимости создавать или изменять информационные панели.
Сами информационные панели были продуманно спроектированы с данными, представленными в виде графиков и диаграмм, когда это уместно, чтобы вы могли сразу получить представление о ключевых показателях и информации, не перегружая и не загромождая интерфейс.
SAM — это масштабируемое и многофункциональное приложение, не требующее обучения или опыта для начала использования и подходящее для широкого круга требований корпоративного уровня. Удобный интерфейс — одна из лучших особенностей SAM, поскольку он делает интерпретацию данных динамичной и точной. Эта программа упрощает процесс мониторинга Apache, позволяя вам тестировать и опрашивать его несколькими простыми щелчками мыши. Процесс внедрения прост, а специалисты службы поддержки SolarWinds доступны круглосуточно и без выходных.
Благодаря унифицированной централизованной информационной панели и обширной поддержке, предлагаемой SolarWinds, использование этого приложения не может быть проще. SolarWinds SAM также служит более широким решением для мониторинга приложений и серверов, его возможности мониторинга распространяются на Active Directory, безагентные серверы, зависимость приложений, AWS, Azure IaaS и многое другое. Что замечательно, так это то, что вы можете загрузить 30-дневную бесплатную пробную версию без риска, чтобы опробовать полнофункциональное программное обеспечение, прежде чем брать на себя обязательства.