Серия RHCSA: Установка, настройка и обеспечение безопасности веб- и FTP-сервера – часть 9

A web server (also known as a HTTP server) is a service that handles content (most commonly web pages, but other types of documents as well) over to a client in a network.

A FTP server is one of the oldest and most commonly used resources (even to this day) to make files available to clients on a network in cases where no authentication is necessary since FTP uses username and password without encryption.

Веб-сервер, доступный в RHEL 7, – это версия 2.4 сервера Apache HTTP. Что касается FTP-сервера, мы будем использовать Very Secure Ftp Daemon (также известный как vsftpd) для установки защищенных соединений с помощью TLS.

RHCSA: Installing, Configuring and Securing Apache and FTP – Part 9

В этой статье мы объясним, как установить, настроить и защитить веб-сервер и FTP-сервер в RHEL 7.

Установка Apache и FTP-сервера

В этом руководстве мы будем использовать сервер RHEL 7 со статическим IP-адресом 192.168.0.18/24. Чтобы установить Apache и VSFTPD, выполните следующую команду:

# yum update && yum install httpd vsftpd

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

# systemctl start httpd
# systemctl enable httpd
# systemctl start vsftpd
# systemctl enable vsftpd

Кроме того, нам необходимо открыть порты 80 и 21, на которых прослушивают веб- и FTP-демоны, соответственно, чтобы разрешить доступ к этим сервисам извне:

# firewall-cmd --zone=public --add-port=80/tcp --permanent
# firewall-cmd --zone=public --add-service=ftp --permanent
# firewall-cmd --reload

Чтобы убедиться, что веб-сервер работает должным образом, откройте браузер и введите IP-адрес сервера. Вы должны увидеть тестовую страницу:

Confirm Apache Web Server

Что касается FTP-сервера, нам придется настроить его дополнительно, что мы сделаем через минуту, перед тем как подтвердить, что он работает как ожидается.

Настройка и защита веб-сервера Apache

Основной файл конфигурации для Apache находится по пути /etc/httpd/conf/httpd.conf, но он может зависеть от других файлов, находящихся внутри /etc/httpd/conf.d.

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

Как всегда, перед редактированием основного файла конфигурации сделайте его резервную копию:

# cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.$(date +%Y%m%d)

Затем откройте его с помощью предпочитаемого текстового редактора и найдите следующие переменные:

  1. ServerRoot: каталог, в котором хранятся файлы конфигурации, ошибок и журналов сервера.
  2. Listen: указывает Apache слушать определенный IP-адрес и/или порты.
  3. Include: позволяет включать другие файлы конфигурации, которые должны существовать. В противном случае сервер не запустится, в отличие от директивы IncludeOptional, которая без ошибок игнорируется, если указанные файлы конфигурации не существуют.
  4. User and Group: имя пользователя/группы, от имени которого будет работать служба httpd.
  5. DocumentRoot: каталог, из которого Apache будет обслуживать ваши документы. По умолчанию все запросы обрабатываются из этого каталога, но можно использовать символические ссылки и псевдонимы для указания других местоположений.
  6. ServerName: эта директива задает имя хоста (или IP-адрес) и порт, которые сервер использует для идентификации.

Первая мера безопасности будет заключаться в создании отдельного пользователя и группы (например, tecmint/tecmint), от имени которых будет работать веб-сервер, а также изменении порта по умолчанию на более высокий (9000 в данном случае):

ServerRoot "/etc/httpd"
Listen 192.168.0.18:9000
User tecmint
Group tecmint
DocumentRoot "/var/www/html"
ServerName 192.168.0.18:9000

Вы можете проверить файл конфигурации с помощью.

# apachectl configtest

и если все OK, то перезапустите веб-сервер.

# systemctl restart httpd

и не забудьте включить новый порт (и отключить старый) в брандмауэре:

# firewall-cmd --zone=public --remove-port=80/tcp --permanent
# firewall-cmd --zone=public --add-port=9000/tcp --permanent
# firewall-cmd --reload

Обратите внимание, что из-за политик SELinux вы можете использовать только порты, возвращаемые

# semanage port -l | grep -w '^http_port_t'

для веб-сервера.

Если вы хотите использовать другой порт (например, порт TCP 8100), вам придется добавить его в контекст порта SELinux для службы httpd:

# semanage port -a -t http_port_t -p tcp 8100
Add Apache Port to SELinux Policies

Для дополнительного обеспечения безопасности установки Apache выполните следующие шаги:

1. Пользователь, от имени которого работает Apache, не должен иметь доступ к оболочке:

# usermod -s /sbin/nologin tecmint

2. Отключите отображение содержимого каталога в браузере, если в этом каталоге отсутствует файл index.html.

Отредактируйте файл /etc/httpd/conf/httpd.conf (а также файлы конфигурации для виртуальных хостов, если они есть) и убедитесь, что директива Options, как в начале файла, так и на уровне блока Directory, установлена в None:

Options None

3. Скройте информацию о веб-сервере и операционной системе в HTTP-ответах. Отредактируйте файл /etc/httpd/conf/httpd.conf следующим образом:

ServerTokens Prod 
ServerSignature Off

Теперь вы готовы начать предоставлять контент из вашего каталога /var/www/html.

Настройка и защита FTP-сервера

Как и в случае с Apache, основной файл конфигурации для Vsftpd (/etc/vsftpd/vsftpd.conf) содержит подробные комментарии, и хотя настройки по умолчанию должны быть достаточными для большинства приложений, вам следует ознакомиться с документацией и страницей справки (man vsftpd.conf), чтобы работать с ftp-сервером более эффективно (я не могу на это достаточно подчеркнуть).

В нашем случае используются следующие директивы:

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
allow_writeable_chroot=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

С помощью chroot_local_user=YES локальные пользователи по умолчанию будут помещены в chroot-тюрьму в своем домашнем каталоге сразу после входа в систему. Это означает, что локальные пользователи не смогут получить доступ к файлам за пределами своих домашних каталогов.

Наконец, чтобы разрешить ftp-серверу читать файлы в домашнем каталоге пользователя, установите следующую логическую переменную SELinux:

# setsebool -P ftp_home_dir on

Теперь вы можете подключиться к ftp-серверу с помощью клиента, такого как Filezilla:

Check FTP Connection

Обратите внимание, что журнал /var/log/xferlog записывает загрузки и выгрузки, которые соответствуют приведенному выше списку каталогов:

Monitor FTP Download and Upload

Читайте также: Ограничение пропускной способности FTP-сети, используемой приложениями в системе Linux с помощью Trickle

Резюме

В этом руководстве мы объяснили, как настроить веб- и FTP-серверы. Из-за обширности темы невозможно охватить все аспекты этих тем (например, виртуальные веб-хосты). Поэтому я рекомендую вам также прочитать другие отличные статьи на этом веб-сайте о Apache.

Source:
https://www.tecmint.com/rhcsa-series-install-and-secure-apache-web-server-and-ftp-in-rhel/