Поиск по сайту:

Серия RHCSA: Установка, настройка и защита веб- и FTP-сервера. Часть 9


Веб-сервер (также известный как HTTP сервер) – это служба, которая передает контент (чаще всего веб-страницы, но также и другие типы документов) клиенту в сети.

FTP-сервер — один из старейших и наиболее часто используемых ресурсов (даже по сей день) для предоставления файлов клиентам в сети в тех случаях, когда аутентификация не требуется, поскольку FTP использует имя пользователя и . пароль без шифрования.

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

В этой статье мы объясним, как установить, настроить и защитить веб-сервер и 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, которые прослушивают демоны Web и ftp соответственно, чтобы разрешить доступ к этим службам извне:


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

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

Что касается 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. Прослушивать: предписывает Apache прослушивать определенный IP-адрес и/или порты.
  3. Включить: позволяет включать другие файлы конфигурации, которые должны существовать. В противном случае сервер выйдет из строя, в отличие от директивы IncludeOptional, которая молча игнорируется, если указанные файлы конфигурации не существуют.
  4. Пользователь и группа: имя пользователя/группы, от имени которого будет запускаться служба 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

и если все ОК, то перезапускаем веб-сервер.


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

Чтобы дополнительно защитить вашу установку Apache, выполните следующие действия:

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


usermod -s /sbin/nologin tecmint

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

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


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:

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

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

Краткое содержание

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