---
# System prepended metadata

title: Linux. Практическая работа № 4

---

# 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)



На этом данная работа завершена

