# Linux. Практическая работа № 4 ## 4.1 Настройка файлового сервера в корпоративной инфраструктуре Создадим три машины Linux server Linux client Windows client Установим операционные системы, процесс установки тривиален, и описываться в данной работе не будет. --- Создадим снапшот для сервера ![](https://i.imgur.com/xJvaWuN.png) --- Создадим снапшот для Win7 ![](https://i.imgur.com/8SXCCZw.png) --- Создадим снапшот для Linux клиента ![](https://i.imgur.com/jrOkWaX.png) Файловый сервер развернем на Linux server на базе samba. Последовательность развертывания ```bash= # обновим базу пакетов sudo apt update # установим клиент и сервер sudo apt install samba samba-client # сделаем резервную копию конфигурации sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.back # создадим публичный каталог sudo mkdir -p /samba/public # настроим права cd /samba sudo chmod -R 0755 public # создадим приватный каталог mkdir /samba/private # создадим группу, которая будет иметь доступ к приватному каталогу sudo groupadd smbgroup -p 123qweASD # создадим пользователя sudo useradd usersmb -p 123qweASD # добавим пользователя в группу sudo usermod -aG smbgroup usersmb # изменим группу, которой принадлежит приватный каталог sudo chgrp smbgroup /samba/private # зададим пароль smbpasswd -a usersmb # далее опишем конфигурацию sudo nano /etc/samba/smb.conf ``` Результат ![](https://i.imgur.com/dXjOa9k.png) ![](https://i.imgur.com/C2PfiOP.png) ![](https://i.imgur.com/0vi1KqO.png) ![](https://i.imgur.com/vPQ4Y7U.png) ![](https://i.imgur.com/uxNm77B.png) ![](https://i.imgur.com/uWISvnZ.png) ![](https://i.imgur.com/BzKv5ut.png) --- Файл конфигурации ```bash= общие насройки [global] рабочая группа workgroup = WORKGROUP аутентификация по логину паролю security = user неудачные аутентификационные запросы будут отклонены map to guest = bad user поддержка wins выключена wins support = no dns proxy выключено dns proxy = no [public] путь до каталога path = /samba/public авторизация без пароля guest ok = yes пользователь по умолчанию force user = nobody каталог отображается в сетевом окружении browsable = yes включаем возможность записи writable = yes [private] путь до каталога path = /samba/private пользователи у который есть доступ к каталогу valid users = @smbgroup требуем пароль guest ok = no отображаем в сетевом окружении browsable = yes включаем запись writable = yes ``` Результат ![](https://i.imgur.com/4slhQVe.png) --- Перезапустим сервис samba ```bash= sudo service smbd restart ``` Результат ![](https://i.imgur.com/QlInmxQ.png) --- Добавим сервис в автозагрузку ```bash= sudo systemctl smbd enable ``` Рузультат ![](https://i.imgur.com/sKOvvXM.png) --- Настроим firewall iptables. Проверим версию iptables ```bash= sudo sudo iptables -V ``` ![](https://i.imgur.com/g0dxYlx.png) --- Схема работы iptables ![](https://i.imgur.com/go5LCtX.png) Взаимосвязь таблиц, цепочек и правил ![](https://i.imgur.com/a5fM7jL.png) Установим пакет обеспечивающий сохранение настроек ```bash= sudo apt install iptables-persistent sudo service netfilter-persistent save ``` Результат ![](https://i.imgur.com/nkOwSAl.png) ![](https://i.imgur.com/7rld4r8.png) --- Необходимо добавить доступ по следующим порта: - 445 tcp, udp - SMB(Microsoft DS) - 137 tcp, udp - NetBIOS NS - 138 tcp, udp - NetBIOS DS - 139 tcp, udp - NetBIOS SS Проверим правила ```bash= iptables -L ``` Результат ![](https://i.imgur.com/x3b9uKC.png) --- Установим правила ```bash= # очищаем sudo iptables -F # создаем специальную цепочку sudo iptables -N smb_access # добавляем правила sudo iptables -A smb_access -p tcp -m multiport --dports 137,138,139,445 -j ACCEPT sudo iptables -A smb_access -p udp -m multiport --dports 137,138,139,445 -j ACCEPT # разрешаем уже установленные соединения sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # трафик из нашей сети посылаем на нашу цепочку # если будем испоьзовать сеть 192.168.10.0/24 то 192.168.0.0/24 sudo iptables -A INPUT -s 10.0.0.0/16 -j smb_access # действия по умолчанию блокировать sudo iptables -P INPUT DROP sudo iptables -P FORWARD DROP # разрешить исходящий трафик sudo iptables -P OUTPUT ACCEPT ``` Результат ![](https://i.imgur.com/0yJjJ7Z.png) --- Получим доступ с Linux клиента ![](https://i.imgur.com/vbOMehP.png) --- Аналогично получим доступ с Win клиента ![](https://i.imgur.com/wEWkqzO.png) --- Сервис smb работает --- ## 4.2 Fail2Ban-SSH и Brute-force attack Fail2ban — сервис, который отслеживает log–файлы запущенных программ, и на основании различных условий блокирует по IP найденных нарушителей. Борется с различными атаками на популярные NIX–сервисы, такие как Apache, Nginx, ProFTPD, vsftpd, Exim, Postfix, named, и т.д. Также защищает SSH–серверы от атак типа «bruteforce», то есть от перебора паролей. Установим и настроим Fail2Ban на Linux машине ```bash= # sudo apt update # sudo apt install fail2ban # sudo service fail2ban start ``` Результат ![](https://i.imgur.com/lUzyV2w.png) ![](https://i.imgur.com/XSEik3Z.png) ![](https://i.imgur.com/iAiiOuu.png) --- Откроем файл конфигурации ```bash= # ls -al /etc/fail2ban # cd /etc/fail2ban # nano fail2ban.conf ``` Результат ![](https://i.imgur.com/WBTCEmn.png) ![](https://i.imgur.com/zUJB89S.png) --- Посмотрим на лог аутентификации ```bash= cat /var/log/auth.log ``` Видим что для того чтобы отфильтровать события по ssh надо использовать фильтр sshd ![](https://i.imgur.com/x0R5oic.png) --- Создадим отдельный файл jail.local ```bash= cd /etc/fail2ban sudo nano jail.local ``` Результат ![](https://i.imgur.com/0nze4DN.png) --- Наполним следующим ```bash= # сервис ssh [sshd] # данный фильтр включен enable = true # порт port = ssh # фильтр filter = sshd # путь до лога logpath = /var/log/auth.log # количество неверных попыток логина maxretry = 3 # время бана в секундах bantime = 3600 # белые ip адреса, тут петля ignoreip = 127.0.0.1 ``` Результат ![](https://i.imgur.com/NMwrY9R.png) --- Перезапускаем и проверяем статус ```bash= sudo service fail2ban restart sudo service fail2ban status ``` Результат ![](https://i.imgur.com/aKiqcFp.png) --- Проведем атаку брутфорсом с помошью hydra ```bash= sudo apt install hydra sudo hydra -l root -P /usr/share/hydra/dpl4hydra_local.csv ssh://10.0.20.225 -I -v ``` Результат ![](https://i.imgur.com/8MHxob7.png) ![](https://i.imgur.com/7vBZf3H.png) ![](https://i.imgur.com/bgUjMZM.png) --- Посмотрим баны ```bash= sudo fail2ban-client status sudo fail2ban-client status sshd ``` Результат ![](https://i.imgur.com/eK3xu8B.png) --- Отключим fail2ban для ssh установив в файле jail.local ```bash= enable = false ``` Результат ![](https://i.imgur.com/Z9yjAtc.png) --- Проверим еще раз баны ```bash= sudo service fail2ban restart sudo fail2ban-client status sshd sudo hydra -l root -P /usr/share/hydra/dpl4hydra_local.csv ssh://10.0.20.225 -I -v sudo fail2ban-client status sshd ``` Результат ![](https://i.imgur.com/oxiQe2d.png) --- Отключим fail2ban и проверим что идет подбор ```bash= sudo service fail2ban stop cat /var/log/auth.log ``` Результат ![](https://i.imgur.com/Cdb1cc4.png) ![](https://i.imgur.com/18DJ0Q0.png) --- ## 4.3 Fail2Ban и DoS/DDoS на примере nginx Следующими командами установим nginx ```bash= # проверим обновления sudo apt update # установим необходимые пакеты sudo apt install curl gnupg2 ca-certificates lsb-release debian-archive-keyring # добавим ключи репозиторич curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg > /dev/null # проверим их gpg --dry-run --quiet --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg # 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62 # подключим стабильную версию 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 # снова проверим обновленич sudo apt update # установим nginx sudo install nginx ``` Результат ![](https://i.imgur.com/pDDZP4y.png) ![](https://i.imgur.com/Fdi98bb.png) ![](https://i.imgur.com/ZDThryC.png) ![](https://i.imgur.com/TDcA7T1.png) ![](https://i.imgur.com/DTDRrX7.png) ![](https://i.imgur.com/wb1B0CQ.png) --- Посмотрим на страничку nginx ![](https://i.imgur.com/EWeJZ5u.png) --- Установим и настроим fail2ban ```bash= # установим fail2ban sudo apt install fail2ban # дополнение для более эффективной блокировки sudo apt install ipset ``` Результат ![](https://i.imgur.com/iKVoFcC.png) ![](https://i.imgur.com/LvELGFz.png) --- Установим limit_req zone=ltwo burst=5 nodelay в файле /etc/nginx/sites-enable/default ![](https://i.imgur.com/EBLfgGq.png) ![](https://i.imgur.com/pLHjIZj.png) --- Установим limit_req_zone $binary_remote_addr zone=ltwo:10m rate=3r/s в файле /etc/nginx/nginx.conf. Перезапустим nginx. ![](https://i.imgur.com/XvJnPTC.png) ![](https://i.imgur.com/GcOZbgY.png) ![](https://i.imgur.com/lou8MxE.png) --- Далее через браузер делаем многочисленные запросы Результат ![](https://i.imgur.com/NsFISNf.png) --- Ошибки в лог файле ```bash= sudo cat /var/log/nginx/error.log ``` Результат ![](https://i.imgur.com/BG3OMFw.png) --- Настроим fail2ban. jail.local ```bash= [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/5exZhYv.png) ![](https://i.imgur.com/Vfq1ppS.png) --- Изменим reject на drop. nano /etc/fail2ban/action.d/iptables-common.conf Создадим файл iptables-blocktype.local. nano /etc/fail2ban/action.d/iptables-blocktype.local ```bash= [Init] blocktype = DROP ``` Результат ![](https://i.imgur.com/UtV7OpG.png) ![](https://i.imgur.com/vzBeS7J.png) ![](https://i.imgur.com/Yrf5w8O.png) --- Перезапустим fail2ban ```bash= sudo service fail2ban restart ``` Результат ![](https://i.imgur.com/FJpitgH.png) --- Проверим iptables ```bash= sudo iptables -L -v ``` ![](https://i.imgur.com/scT7GM7.png) --- Проверим fail2ban ```bash= sudo fail2ban-client status sudo fail2ban-client status nginx-limit-req ``` Результат ![](https://i.imgur.com/BAHZfHH.png) --- Создадим множественные запросы ![](https://i.imgur.com/cEEFRpf.png) ![](https://i.imgur.com/nveY3ER.png) --- Проверим ```bash= sudo iptables -L -v sudo fail2ban-client status nginx-limit-req ``` ![](https://i.imgur.com/ybVQzDa.png) --- ```bash= sudo fail2ban-client unban 10.0.1.225 ``` ![](https://i.imgur.com/XkEn9Vb.png) ![](https://i.imgur.com/qSU3nGH.png) На этом данная работа завершена