# Занятие 4. Безопасность Linux серверов ## 1. Настройка файлового сервера в корпоративной инфраструктуре Для развертывания файлового сервера на системах Linux используется инструмент SAMBA. Ниже перечислены действия по его установке и настройке. Прежде всего следует обновить локальную базу пакетов: ![](https://i.imgur.com/H2SeE48.png) Далее установите пакеты из главного репозитория: ![](https://i.imgur.com/chOn1P0.png) Создайте резервную копию файла конфигурации Samba: ![](https://i.imgur.com/ElWAilr.png) Создайте или выберете директорию, к которой все пользователи будут иметь общий доступ: ![](https://i.imgur.com/TqdbyCS.png) Перейдите к этому каталогу и измените режим доступа и владельца: ![](https://i.imgur.com/HOOXovJ.png) Создайте или выберете каталог, к которому иметь доступ будут ограниченное число пользователей: ![](https://i.imgur.com/lvpxS0O.png) Создайте группу пользователей, которые будут иметь доступ к приватным данным: ![](https://i.imgur.com/MvZpkLN.png) Создайте нужных пользователей с помощью команды useradd: ![](https://i.imgur.com/lTlRBsw.png) Добавьте созданных пользователей в группу: ![](https://i.imgur.com/qKyEBIB.png) Измените группу, которой принадлежит приватная директория: ![](https://i.imgur.com/C4PBHgz.png) Задайте пароль, с помощью которого пользователь будет подключаться к каталогу: ![](https://i.imgur.com/hmez4Rj.png) Откройте файл конфигурации на редактирование с помощью текстового редактора: ![](https://i.imgur.com/A1UFBak.png) Чтобы изменения вступили в силу, перезапустите сервис: ![](https://i.imgur.com/qkMfcy5.png) Используется диапазон ip адресов от 172.20.10.2 до 172.20.10.4. Посчитаю маску: ![](https://i.imgur.com/OwN9lPk.png) ![](https://i.imgur.com/HKqkKvN.png) Проверить актуальные правила iptables можно командой: ![](https://i.imgur.com/iMWrAFq.png) Рабочую копию правил Netfilter хранит в пространстве ядра linux. Ядро по умолчанию разрешает все подключения, что мы видим при выполнении команды iptables с опцией -L При этом все изменения правил, сделанные нами во время работы операционной системы, автоматически обычно никуда не сохраняются при выключении компьютера. Поэтому после очередного включения вы обнаруживаете, что настроенных правил опять нет и везде установлены политики по умолчанию - ACCEPT. Конечно, заново настраивать каждый раз после перезагрузки компьютера набор правил межсетевого экрана не выгодно, поэтому нам необходимы средства сохранения и восстановления параметров брандмауэра после включения нашей машины. Наиболее распространенных вариантов решения этой проблемы два: С помощью утилиты iptables-save и загружать их с помощью iptables-restore; С помощью утилиты iptables-persistent (данный вариант возможен в операционных системах Debian и Ubuntu). Начну со второго решения: ![](https://i.imgur.com/EwZR0DV.png) ![](https://i.imgur.com/HnavQrv.png) Чтобы сохранить правила мы можем вызвать следующую команду: ![](https://i.imgur.com/rMlx2kA.png) Для загрузки же сохраненных правил мы можем использовать команду: ![](https://i.imgur.com/vv0h49b.png) После перезагрузки правила исчезли. Но после ввода команды загрузки все правила появились: ![](https://i.imgur.com/IAp9spH.png) Теперь попробую первое решение: Сначала создам директорию в etc, в которой будет конфигурационный файл. Далее туда вставлю правила iptables ![](https://i.imgur.com/QLpNtYL.png) Далее использую iptables-restore для восстановления правил Перезагрузил систему и пробую: ![](https://i.imgur.com/8TrxAfr.png) Получил доступ к папкам и файлам находящимся на файловом сервере Linux, клиентом Linux: ![](https://i.imgur.com/wJEkob5.png) Получил доступ к папкам и файлам находящимся на файловом сервере Linux, клиентом Windows: ![](https://i.imgur.com/rGEDtve.png) ![](https://i.imgur.com/8vsRpGb.png) ![](https://i.imgur.com/Fonl3KS.png) Добавить сервис Samba в автозагрузку OS Linux ![](https://i.imgur.com/kpiX4I0.png) Создам директорию share: ![](https://i.imgur.com/usaVZzY.png) Настрою необходимых пользователей: ![](https://i.imgur.com/1te3ob5.png) Проверяем: Linux Аккаунт user(группа users): ![](https://i.imgur.com/ZGQaj1y.png) Аккаунт admin1 (группа admins): ![](https://i.imgur.com/QloeRsN.png) Имеет как права чтения, так и записи Аккаунт PT: ![](https://i.imgur.com/T4MuSNJ.png) Сначала у всех был доступ к чтению, но у admins и PT не было доступа к записи. Исправил это редактированием прав: ![](https://i.imgur.com/8k5LDOP.png) Считай я выдал полные права владельцу, группе и остальным. Но samba не дает право записи, например $users, так как у нее свой конфиг. То есть некая абстрация. Windows: ![](https://i.imgur.com/vAXY98E.png) User: ![](https://i.imgur.com/GBciezb.png) ![](https://i.imgur.com/eDwNSPE.png) Доступа к записи нет Admin1: ![](https://i.imgur.com/NBy2w0N.png) Доступ к записи есть: ![](https://i.imgur.com/QqpmHks.png) По умолчанию при удалении файлов из общей папки samba, они удаляются безвозвратно. Администратор файлового сервера Linux может создать сетевую корзину. Сетевая корзина Samba Recycle Bin это скрытый каталог, в который перемещаются все объекты samba, удаленные пользователями. Создаем директорию: ![](https://i.imgur.com/EXO9Loa.png) Добавим следующие настройки секцию [global]: ![](https://i.imgur.com/WM9Xg6Z.png) ``` vfs objects = recycle — включить корзину samba; recycle:repository — скрытый каталог корзины samba, в котором будут хранится удаленные объекты. Если задать имя каталога в формате /mnt/smb/.recycle/%U, то удаленные файлы будут сохранены в каталог с именем пользователя, удалившего файл или папку; recycle:keeptree — удалять объекты с сохранением дерева каталогов; recycle:touch — поменять дату изменения файла при его перемещении в корзину; recycle:versions — при удалении файлов с совпадающими именами, добавлять к имени номер версии (Copy #N of.); recylce:excludedir – не помещать объекты из указанных каталогов в корзину; recycle:exclude — исключить определенные типы файлов; recycle:maxsize – можно указать максимальный размер файлов, которые нужно помещать в корзину ``` Применим настройки: ![](https://i.imgur.com/Ay2DayQ.png) Проверим корзину, удалив файл: ![](https://i.imgur.com/XXZdLgi.png) Как видим, файл появился в корзине ![](https://i.imgur.com/2iQ9P2B.png) smbstatus — отчет о текущих соединениях Samba. ![](https://i.imgur.com/ZaIpMYk.png) -b выводит краткую информацию: ![](https://i.imgur.com/8LWhQOz.png) -v выводит подробный отчет ![](https://i.imgur.com/nPR8Hfp.png) ## 2. Fail2Ban-SSH и Brute-force attack Установим Fail2Ban: ![](https://i.imgur.com/HgGAi5p.png) Запустим: ![](https://i.imgur.com/cKskJXt.png) Ознакомимся со всеми файлами в директории Fail2Ban: ![](https://i.imgur.com/z4movdY.png) самый важный файл - это jail.conf (данный файл содержит фильтры по умолчанию для определенных служб) Теперь давайте перейдём в нужную директорию и откроем файл конфигурации: ![](https://i.imgur.com/irZAX6R.png) И первое, что мы видим - это то, что нам рекомендуют создать дополнительный файл с .local расширением так как при обновлении Fail2Ban файл jail.conf может тоже обновиться и настройки будут возвращены поумолчанию. (если нужно настраивать фильтры для многих сервисов, то можно использовать jail.conf (но следить за обновлениями) или скопировать его с разрешением .local) Давайте приступим к этому ![](https://i.imgur.com/jExJTFL.png) Проверим, что fail2ban работает: ![](https://i.imgur.com/1KQDG6X.png) Теперь давайте попробуем подключиться по ssh и ввести три раза неправильно пароль ![](https://i.imgur.com/jevP8IL.png) ![](https://i.imgur.com/TEka7pp.png) Чтобы посмотреть журналы банов в fail2ban вводим: ![](https://i.imgur.com/tWnojrd.png) и получить более подробно статистику: ![](https://i.imgur.com/Pm3L5NB.png) Если в конфигурационном файле поменять на false, то ssh начнёт работать корректно и будет давать возможность подключаться. ![](https://i.imgur.com/0waQfQa.png) Соответственно, если сбросить блокировку fail2ban, необходимо сделать следующее: ![](https://i.imgur.com/fbWnUOc.png) и проверим, что никто в данный момент не блокируется: ![](https://i.imgur.com/cdsCxwC.png) далее запускаем hydra ещё раз: ![](https://i.imgur.com/Yr84wpc.png) и проверим ещё раз список блокированных ip-адресов ![](https://i.imgur.com/6emmC5h.png) увидим что fail2ban отработал корректно и заблокировал ip-адрес Проверим, что будет, если отключить fail2ban и запустить hydra: ![](https://i.imgur.com/kSlnPrk.png) Почистил файл логов и начну атаку: ![](https://i.imgur.com/21f33zp.png) Атаку начал: ![](https://i.imgur.com/P2fP3cU.png) ![](https://i.imgur.com/wBhUdov.png) видим что происходит подбор. ## 3. Fail2Ban и Dos/DDoS attack на примере nginx. ### 3.1. Разворачивание сервера nginx на базе дистрибутивов Debian. ![](https://i.imgur.com/XIivAKD.png) Теперь нужно импортировать официальный ключ, используемый apt для проверки подлинности пакетов. Скачайте ключ: ![](https://i.imgur.com/scHzZSM.png) Проверьте, верный ли ключ был загружен: ![](https://i.imgur.com/urHZ3pz.png) Для подключения apt-репозитория для стабильной версии nginx, выполните следующую команду: ![](https://i.imgur.com/I5JiHmK.png) Для использования пакетов из нашего репозитория вместо распространяемых в дистрибутиве, настройте закрепление: ![](https://i.imgur.com/b797bIC.png) Чтобы установить nginx, выполните следующие команды: ![](https://i.imgur.com/qd1o9Cq.png) Запустил nginx и открыл страницу в веб-браузере: ![](https://i.imgur.com/U7fzNL7.png) Появился apache, но не nginx. Решим эту проблему: ![](https://i.imgur.com/UYVnUe6.png) ![](https://i.imgur.com/gb5DQIt.png) ## 3.2.Далее переходим к настройке nginx от DDoS атак на наш сервер. далее переходим: ![](https://i.imgur.com/mPLzs3F.png) ![](https://i.imgur.com/YQ8Yjcx.png) тут находится стартовая страничка nginx выставляем следующие параметры: limit_req zone=ltwo burst=5 nodelay; ![](https://i.imgur.com/6NjiaXu.png) далее переходим в конфигурационный файл nginx.conf: ![](https://i.imgur.com/BATZPSe.png) В данном файле нужно внести следующие изменения: ![](https://i.imgur.com/jbommQi.png) после чего вбиваем ip-адрес сервера в браузере, переходим в режим разработчика и далее делаем многочисленные запросы: в Chrome это - ctrl+r ![](https://i.imgur.com/5RRIhdW.png) после зажатия ctrl+r - выйдет ошибка 503 ![](https://i.imgur.com/ifJpCkc.png) данные ошибки будут отображаться в log файле: ![](https://i.imgur.com/CvaucwD.png) ### 3.2. Настройке fail2ban от DDoS атак на наш сервер. Давайте найдём параметр бан в jail.conf или во вновь созданном файле jail.local внесём следующие параметры: ![](https://i.imgur.com/ifIblOx.png) Далее переходим в файл: nano /etc/fail2ban/action.d/iptables-common.conf но как мы уже знаем, настройки конфигурационных файлов поумолчанию могут быть перезаписаны при обновлении, поэтому создаём новый файл: ![](https://i.imgur.com/AgpK1Fp.png) Затем делаем рестар fail2ban: ![](https://i.imgur.com/x0x4Tag.png) Теперь нам нужно посмотреть, что iptables отрабатывает и наберём: ![](https://i.imgur.com/rUWmZfm.png) Уже видим айпишник с windows. Придется проверять на kali сlient Убедимся. что настройки в fail2ban применились и введём: ![](https://i.imgur.com/jUXhm95.png) также проверим, что сейчас нет заблокированных ip-адресов (кроме айпи windows): ![](https://i.imgur.com/lpyEUgw.png) теперь переходим на нашу страничку и вводим ip-адрес сервера в браузере, переходим в режим разработчика и далее делаем многочисленные запросы: в Chrome это - ctrl+r и видим вот такое сообщение после многочисленных запросов: ![](https://i.imgur.com/gH0RR4y.png) переходим на сервер и смотрим что у нас показывает iptables и fail2ban: ![](https://i.imgur.com/22jOk84.png) Видим, что добавилось правило Далее переходим и смотрим, что показывает fail2ban: ![](https://i.imgur.com/r9OCQMd.png) Тут как раз показывает ip-адреса компьютеров, которые делали многочисленные запросы. Разблокировать нужный ip-адрес возможно с помощью слудующей команды: ![](https://i.imgur.com/xO4pZbT.png)