# Практическая работа №4 Linux Basic --- # Практическая работа №4.1 --- ## Практическая работа “Настройка файлового сервера в корпоративной инфраструктуре” ### **Цель работы:** - Научиться настраивать сервер Samba - Понимать как составляется конфигурационный файл Samba и его параметры - Понять как работает Iptables ### Задача: - Получить доступ к папкам и файлам находящимся на файловом сервере Linux, клиентом Linux - Получить доступ к папкам и файлам находящимся на файловом сервере Linux, клиентом Windows - Добавить сервис Samba в автозагрузку OS Linux - Настрить Samba ресурс с названием share и дать права на чтение группе пользователей users, но предоставить возможность записи для группы с именем admins, а также пользователю PT, для этого можете отредактировать файл `/etc/samba/smb.conf`. - Настройка корзины для общего ресурса (для тех кому показалось легко🙂) -- пояснить команду `smbstatus` (*продемонстрировать, пояснить результат*) -- записать вывод в файл .txt Прежде всего, необходимо определиться, на сервере с какой операционной системой будет находиться общий каталог. **Разворачиваем три виртуальные машины:** 1. **Unix - сервер** *(можно использовать стенд от **[--> 1](https://hackmd.io/@IgorLitvin/SychMvkMt)** или **[--> 2](https://hackmd.io/@IgorLitvin/rkvNJOyGY)** практической работы)* 2. **Unix - клиент** *(можно использовать стенд от **[--> 1](https://hackmd.io/@IgorLitvin/SychMvkMt)** или **[--> 2](https://hackmd.io/@IgorLitvin/rkvNJOyGY)** практической работы)* 3. **[Windows – клиент](https://cloud.mail.ru/public/4u3L/pTzbSD9kF)** 4. Делаем **snapshot** каждой из системы после базовых настроек. Для развертывания файлового сервера на системах Linux используется инструмент SAMBA. Ниже перечислены действия по его установке и настройке. - Прежде всего следует обновить локальную базу пакетов: `apt-get update` ![](https://i.imgur.com/IKuvObB.png) - Далее установите пакеты из главного репозитория: `apt-get install -y samba samba-client` ![](https://i.imgur.com/QScl7TZ.png) - Создайте резервную копию файла конфигурации Samba: `cp /etc/samba/smb.conf /etc/samba/smb.conf.bak` ![](https://i.imgur.com/EnsodEX.png) - Создайте или выберете директорию, к которой все пользователи будут иметь общий доступ: `mkdir -p /samba/public` ![](https://i.imgur.com/SILPZKx.png) - Перейдите к этому каталогу и измените режим доступа и владельца: `cd /samba chmod -R 0755 public` ![](https://i.imgur.com/v5WUgnE.png) - Создайте или выберете каталог, к которому иметь доступ будут ограниченное число пользователей: `mkdir /samba/private` ![](https://i.imgur.com/ARgcgWu.png) - Создайте группу пользователей, которые будут иметь доступ к приватным данным: `groupadd smbgr`p - Создайте нужных пользователей с помощью команды *useradd*: `useradd user1` - Добавьте созданных пользователей в группу: `usermod -aG smbgrp user1` - Измените группу, которой принадлежит приватная директория: `chgrp smbgrp /samba/private` ![](https://i.imgur.com/fgAqFsy.png) - Задайте пароль, с помощью которого пользователь будет подключаться к каталогу: `smbpasswd -a user1` ![](https://i.imgur.com/VsddxuL.png) - Откройте файл конфигурации на редактирование с помощью текстового редактора, например nano: `nano /etc/samba/smb.conf` - Замените содержимое файла на следующие строки: ![](https://i.imgur.com/bKA8Rp4.png) **Чтобы изменения вступили в силу, перезапустите сервис:** `service smbd restart` ![](https://i.imgur.com/YyMz8vQ.png) ### 2. Далее нужно настроить firewall iptables, открыв порты, которые использует SAMBA. Настоятельно рекомендую разрешить только подключения из локального диапазона IP-адресов или виртуальной частной сети. ``` iptables ______________________ 445 ______________________необходимо составить правило iptables ______________________ 139 ______________________ необходимо составить правило iptables ______________________ 137 ______________________ необходимо составить правило iptables ______________________ 138 ______________________ необходимо составить правило ``` ![](https://i.imgur.com/TkpfQ5G.png) *Теперь необходимо сделать так, чтобы указанные выше правила фаервола iptables были сохранены после перезагрузки машины. Необходимо установить дополнительный пакет для iptables, ни скрипт, ни запуск вручную не подходит. Есть пакет, который работает штатно.* `sudo apt-get install iptables-persistent` при установке выбираем yes, чтобы автоматически загружать эти правила после рестарта системы ![](https://i.imgur.com/zbkQHwb.png) ![](https://i.imgur.com/epR420S.png) **Проверить актуальные правила iptables можно командой:** `iptables -L` ![](https://i.imgur.com/S5WBPru.png) *В выводе команды вы должны увидеть ранее добавленные разрешающие политики (Accept).* **Настроим автозапуск samba при запуске сервера** ![](https://i.imgur.com/tnu3g1W.png) # Практическая работа №4.2 --- ## Практическая работа "Fail2Ban-SSH и Brute-force attack". ### **Цель работы:** - Научиться конфигурировать Fail2Ban для отражения атак brute-force attack на SSH. ### Задача: - Настроить сервер SSH - Установить и настроить Fail2Ban - Научиться пользоваться Hydra - Провести с помощью Hydra brute-force attack **Fail2ban** — простой в использовании локальный сервис, который отслеживает log–файлы запущенных программ, и на основании различных условий блокирует по IP найденных нарушителей. Программа умеет бороться с различными атаками на все популярные *NIX–сервисы, такие как Apache, Nginx, ProFTPD, vsftpd, Exim, Postfix, named, и т.д. Но в первую очередь Fail2ban известен благодаря готовности «из коробки» к защите SSH–сервера от атак типа «bruteforce», то есть к защите SSH от перебора паролей. С помощью Fail2Ban можно блокировать ip-адреса и также делать так, чтобы ip-адреса не блокировались (всегда имелся доступ до ssh, даже если введено большое количество неправильных паролей), самое удобное в Fail2Ban - это то, что он автоматизирует процесс защиты shh. **Для начала давайте обновим ОС:** `sudo apt-get update` ![](https://i.imgur.com/s1AgZX6.png) **Далее давайте установим Fail2Ban:** `sudo apt-get install fail2ban` ![](https://i.imgur.com/BiaCQUt.png) **Так как Fail2Ban запускается после перезагрузки или старте ОС сделаем следующее:** `service fail2ban start` ![](https://i.imgur.com/z4tiGLB.png) Теперь посмотрим файлы конфигурации **Ознакомимся со всеми файлами в директории Fail2Ban:** `ls -al /etc/Fail2Ban` ![](https://i.imgur.com/Mwuci5Z.png) самый важный файл - это **jail.conf** (данный файл содержит фильтры по умолчанию для определенных служб) **Теперь давайте перейдём в нужную директорию и откроем файл конфигурации:** ``` cd /etc/fail2ban nano jail.conf ``` ![](https://i.imgur.com/c4JjgiG.png) ![](https://i.imgur.com/p22hz8Z.png) И первое, что мы видим - это то, что нам рекомендуют создать дополнительный файл с .local расширением так как при обновлении Fail2Ban файл jail.conf может тоже обновиться и настройки будут возвращены поумолчанию. (если нужно настраивать фильтры для многих сервисов, то можно использовать jail.conf (но следить за обновлениями) или скопировать его с разрешением .local) Давайте приступим к этому `sudo nano jail.local` **В итоге мы получаем текст файла следующий:** ``` [sshd] enable = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 3 bantime = 3600 ignoreip = 127.0.0.1 ``` ![](https://i.imgur.com/y63H6RK.png) После сохраняем и выходим. **Вводим:** `service fail2ban restart` ![](https://i.imgur.com/8flZM5s.png) для того, что применились новый конфигурационный файл. **Проверим, что fail2ban работает:** `service fail2ban status` ![](https://i.imgur.com/9wYa2Kq.png) - Теперь давайте попробуем подключиться по ssh и ввести три раза неправильно пароль ![](https://i.imgur.com/5mYt7J0.png) - После того как попробуем, можно убедиться ещё одним способом Hydra `sudo hydra -l root -P /usr/share/hydra/dpl4hydra_local.csv ssh://ip-адресс -I -v` **где:** - R – восстановить ранее прерванную сессию Hydra; - S – использовать SSL для подключения; - s – указать порт; - l – использовать логин; - L – выбирать логины из файла со списком; - p – использовать пароль; - P – использовать пароль из файла со списком; - M – взять список целей из файла; - x – генератор паролей; - u – по умолчанию hydra проверяет все пароли для первого логина, эта опция позволяет проверить один пароль для всех логинов; - f – выйти, если правильный логин/пароль найден; - o – сохранить результат в файл; - t – количество потоков для программы; - w – время между запросами в секундах; - v – подробный вывод; - V – выводить тестируемые логины и пароли. - 4:4:1 - пароль размером четыре символа, состоящий только из цифр. А именно все пароли в диапазоне 0000-9999; - 4:8:1 - пароль от четырех до восьми символов, только из цифр; - 4:5:aA1. - пароль, размером от 4 до 5 символов, состоит из цифр, букв верхнего и нижнего регистра или точки. **если hydra не установленна, то вводим:** `sudo apt-get install hydra` **и вводим ещё раз** ![](https://i.imgur.com/3cpMI0n.png) **меняем конфигурационный файл** ![](https://i.imgur.com/ILuYrfR.png) **Чтобы посмотреть журналы банов в fail2ban вводим:** `fail2ban-client status sshd` ![](https://i.imgur.com/rogznfd.png) **Соответственно, если сбросить блокировку fail2ban, необходимо сделать следующее:** `service fail2ban restart` ![](https://i.imgur.com/l2q1M2a.png) далее запускаем hydra ещё раз и проверим ещё раз список блокированных ip-адресов `fail2ban-client status sshd` **увидим что fail2ban отработал корректно и заблокировал ip-адрес:** ![](https://i.imgur.com/nxiY0rm.png) **Проверим, что будет, если отключить fail2ban и запустить hydra:** `service fail2ban stop` ![](https://i.imgur.com/R8rAXhx.png) Происходит подбор паролей ![](https://i.imgur.com/hNfcA7a.png) # Практическая работа №4.3 --- ## Практическая работа "Fail2Ban и Dos/DDoS attack" на примере nginx. ### **Цель работы:** 1. Научиться конфигурировать Fail2Ban для отражения атак Dos/DDoS на nginx. ### Задача: - Организовать простую-тестовую атаку DoS. - Защитить сервер от DoS/DDoS атак через встроенные возможности nginx. - Защитить сервер от DoS/DDoS атак с помощью fail2ban при помощи iptables в автоматическом режиме. - Защитить сервер от DoS/DDoS атак с помощью fail2ban при помощи ipset в автоматическом режиме. ### 1. Разворачивание сервера nginx на базе дистрибутивов Debian. **Установите пакеты, необходимые для подключения apt-репозитория:** `sudo apt install curl gnupg2 ca-certificates lsb-release debian-archive-keyring` ![](https://i.imgur.com/Rf9S7TJ.png) **Теперь нужно импортировать официальный ключ, используемый apt для проверки подлинности пакетов. Скачайте ключ:** ``` curl <https://nginx.org/keys/nginx_signing.key> | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null ``` ![](https://i.imgur.com/Ru8ZrIC.png) **Проверьте, верный ли ключ был загружен:** `gpg --dry-run --quiet --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg` ![](https://i.imgur.com/et7d0qi.png) Вывод команды должен содержать полный отпечаток ключа **573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62:** **Для подключения apt-репозитория для стабильной версии nginx, выполните следующую команду:** ``` echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \\ <http://nginx.org/packages/debian> `lsb_release -cs` nginx" \\ | sudo tee /etc/apt/sources.list.d/nginx.list ``` ![](https://i.imgur.com/1N6KtaV.png) **Для использования пакетов из нашего репозитория вместо распространяемых в дистрибутиве, настройте закрепление:** ``` echo -e "Package: *\\nPin: origin nginx.org\\nPin: release o=nginx\\nPin-Priority: 900\\n" \\ | sudo tee /etc/apt/preferences.d/99nginx ``` ![](https://i.imgur.com/TCk6iES.png) **Чтобы установить nginx, выполните следующие команды:** `sudo apt update` ![](https://i.imgur.com/gdcf9GU.png) `sudo apt install nginx` ![](https://i.imgur.com/95LspzH.png) *Если всё сделали правильно, то появится стартовая страница.* **Стартовая страница nginx выглядит так:** ![](https://i.imgur.com/tbscncO.png) ### 2.Далее переходим к настройке nginx от DDoS атак на наш сервер. **Устанавливаем fail2ban и ipset:** ``` apt install fail2ban apt install ipset - дополнение, чтобы fail2ban мог эффективнее блокировать большое количество запросов ``` ![](https://i.imgur.com/ARg5fun.png) ![](https://i.imgur.com/49W8K3w.png) далее переходим: nano /etc/nginx/sites-enable/default - тут находится стартовая страничка nginx **выставляем следующие параметры:** `limit_req zone=ltwo burst=5 nodelay;` ![](https://i.imgur.com/NfBGpkw.png) **далее переходим в конфигурационный файл nginx.conf:** `nano /etc/nginx/nginx.conf` - **в данном файле нам надо внести следующие изменения:** ![](https://i.imgur.com/GfABJej.png) после зажатия ctrl+r - выйдет ошибка 503 ![](https://i.imgur.com/RafuBnP.png) **данные ошибки будут отображаться в log файле:** `cat /var/log/nginx/error.log` ![](https://i.imgur.com/FpRRkSN.png) данные log файл даст нам нужную информация для настройки фильтрации fail2ban. ### 2. Настройке fail2ban от DDoS атак на наш сервер. **Давайте найдём параметр бан в jail.conf или во вновь созданном файле jail.local внесём следующие параметры:** ``` [nginx-limit-req] port = http, https enabled = true filter = nginx-limit-req action = iptables-multiport[name=ReqLimit, port="http,https", protocol=tcp] logpath = /var/log/nginx/*error.log findtime = 600 bantime = 3600 maxretry = 4 ``` ![](https://i.imgur.com/3mE5GRn.png) после чего нам необходимо изменить настройку, что iptables не отсылал reject а отсылал drop, так как для борьбы с ботами - это более эффективно. **создаём новый файл:** `touch iptables-blocktype.local` ![](https://i.imgur.com/G5cVBXK.png) **где нам нужно внести следующую настройку:** ``` [Init] blocktype = DROP ``` ![](https://i.imgur.com/bZ4TETt.png) **Затем делаем рестар fail2ban:** `service fail2ban restart` ![](https://i.imgur.com/iSwRj1q.png) **Теперь нам нужно посмотреть, что iptables отрабатывает и наберём:**`iptables -L -v` ![](https://i.imgur.com/oyDXUpJ.png) **Убедимся. что настройки в fail2ban применились и введём:** `fail2ban-client status` ![](https://i.imgur.com/dYEzVIX.png) *видим, что фильтры работают по nginx-limit-req, sshd* **также проверим, что сейчас нет заблокированных ip-адресов:** `fail2ban-client status nginx-limit-req` ![](https://i.imgur.com/7ep477q.png) *теперь переходим на нашу страничку и вводим ip-адрес сервера в браузере, переходим в режим разработчика и далее делаем многочисленные запросы: в Chrome это - ctrl+r* `iptables -L -v` ![](https://i.imgur.com/DPPqng7.png) *Видим, что добавилось правило* **Далее переходим и смотрим, что показывает fail2ban:** ![](https://i.imgur.com/U0jXBJf.png) *Тут как раз показывает ip-адрес компьютера, который делал многочисленные запросы.* **Разблокировать нужный ip-адрес возможно с помощью слудующей команды:** `fail2ban-client unban [ip-адресс]` ![](https://i.imgur.com/G16JrXI.png)