Гайд по hardened web server
Веб-сервер, если так подумать стоит на «краю сети» и становится одной из наиболее уязвимых служб для атаки. Наличие конфигурации по умолчанию обеспечивает доступ к конфиденциальной информации, которая может помочь подготовиться к атаке. .
Большинство атак на веб-приложений - это атаки XSS, Info Leakage, Session Management и PHP Injection, которые вызваны слабым программным кодом и неспособностью дезинфицировать инфраструктуру веб-приложений.
В этом практическом руководстве вы найдете необходимый набор навыков для защиты веб-сервера Apache.Мы поговорим о том, как защищать веб-сервер Apache на платформе *nix.
Содержание:
- SSH
- Firewall
- SSL
- Trace HTTP
- Утечки
- Замена заголовков
- XSS
- И еще крайне много всего
Думаю любой согласится, что сервер и графический интерфейс на нем, это высшая степень идиотизма, ладно юникс системы, где иксы не привязаны к ядру, но и там они могу вызвать «кернел паник» и обвалить весь ваш проект.
Не пугайтесь консоли, клавиша Tab имеет функцию автокомплита, она сама довершит написание команды или к примеру пути к файлу, вам надо лишь знать первые символы.
И не забывайте, строчные и заглавные символы в юникс системах, это абсолютно разная интерпретация системой, главная ошибка начинающих!
Весь гайд будет основан на CentOS Linux ,фактически это RHEL, для мелкого бизнеса, а не корпораций, почти все работает в обе стороны, это не ubuntu - «все из коробки» Но и зато система хорошо защищена.
OpenSSH :
Изначально система не имеет возможности удаленного доступа
Установим клиент и сервер ssh:
yum -y install openssh-server openssh-clients
Запускаем сервис:
chkconfig sshd on
service sshd start
Не забываем проверить 22 порт!
netstat -tulpn | grep :22
Firewall:
Путь к конфигу - /etc/sysconfig/iptables (IPv4 firewall),
# vi /etc/sysconfig/iptables
Добавим строку:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
Логично запретить вход из внутренней сети, для избежания взлома через нее 192.168.1.0/24 :
-A RH-Firewall-1-INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 22 -j ACCEPT
Для IPv6 джедаев, и кто роется в ip6tables:
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 22 -j ACCEPT
Сохраняем. Рестарт iptables:
# service iptables restart
OpenSSH Server. Конфигурация
Редактируем /etc/ssh/sshd_config:
# vi /etc/ssh/sshd_config
Правильно будет убрать root логин:
PermitRootLogin no
Разрешим доступ нашему пользователю через ssh:
AllowUsers thanatologyst
Меняем порт, чтобы упорно стучались на 22, а там закрыто)) на 1235
Port 1235
Сохраняем.Рестарт sshd:
# service sshd restart
После этого, мы забываем про сервер, уходим в теплое помещение и выбираем ssh клиент, а юниксоиды просто открывают консоль.
Ssh хорош тем, что фактически является полным эквивалентом ВПН, но иной реализации, мы же не хотим, чтобы в середину влез сниффер и стянул все пароли?
# yum erase xinetd ypserv tftp-server telnet-server rsh-server
Я не знаю от чего, но иногда система имеет аккаунты с нулевыми паролями. Это просто невероятная дыра.
# awk -F: '($2 == "") {print}' /etc/shadow
Получим листинг таких аккаунтов, и просто блокируем их
# passwd -l accountName
Еще раз внимательно просмотрим аккаунты
# awk -F: '($3 == "0") {print}' /etc/passwd
Должны получить только такое
root:x:0:0:root:/root:/bin/bash
Если нет, то смотрим предыдущий шаг, иначе после, не войдете в систему вообще, но об этом написано в конфигурации SSH, самое начало статьи.
Логично, что стоит посмотреть открытые порты:
netstat -tulpn
Если вы ставили ОC с LiveDVD, то 100% у вас будет GUI, вычищаем подчистую!
#yum grouremove "X Window System"
По хорошему, надо прямо вот сразу ковырять iptables, те firefall, но я не знаю, что вы строите, потому это будет отдельным постом.
После этого ставите Apache и ждете следкующего поста. Где я расскажу о максимально возможной защите, и дезинформации взломщика.