---
# System prepended metadata

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

---

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

## Практическая работа №4.1


### Цель работы:

- Научиться настраивать сервер Samba
- Понимать как составляется конфигурационный файл Samba и его параметры
- Понять как работает Iptables

### Настройка samba
Для работы будем использовать машины Kali, Debian и Win7 из топологии на скрине

![](https://i.imgur.com/Vh2EEnL.jpg)

Порядок действий установки samba на сервер:

`apt-get update` - обновить локальную базу пакетов

`apt-get install -y samba samba-client` - установить пакеты из главного репозитория

`cp /etc/samba/smb.conf /etc/samba/smb.conf.bak` - cоздать резервную копию файла конфигурации

`mkdir -p /samba/public` - создать или выбрать директорию, к которой все пользователи будут иметь общий доступ

```
cd /samba
chmod -R 0755 public
``` 
Перейти в этот каталог и изменить режим доступа и владельца

`mkdir /samba/private` - создать каталог, к которому иметь доступ будут ограниченное число пользователей

`groupadd smbgr` - создать группу пользователей, которые будут иметь доступ к приватным данным

`useradd user1` - cоздать пользователей

`usermod -aG smbgr user1` - добавить созданных пользователей в группу

`chgrp smbgr /samba/private` - изменить группу, которой принадлежит приватная директория

`smbpasswd -a user1` - задайте пароль, с помощью которого пользователь будет подключаться к каталогу




![](https://i.imgur.com/yGFVWx6.jpg)

Изменим конфигурацию `nano /etc/samba/smb.conf`
Пропишем следующие значения:

```
[global]
workgroup = WORKGROUP
security = user
map to guest = bad user
wins support = no
dns proxy = no

[public]
path = /samba/public
guest ok = yes
force user = nobody
browsable = yes
writable = yes

[private]
path = /samba/private
valid users = @smbgrp
guest ok = no
browsable = yes
writable = yes
```
в которых мы задали значения для самбы
-общие: 
рабочая группа по умолчанию (WORKGROUP), аутентификация по логину-паролю и как поступить если пароль введен не верно, выключить поддержку wins и запросы к DNS

-для общего каталога:
путь, авторизация без пароля, кто пользователь по умолчанию, видимость папки, права на запись в папку.

-для приватной папки:
также - путь, проверка пользователя на принадлежность к разрешенной группе (@ указывается unix-группа пользователей), вход с паролем, видимость папки и права на запись.

Не забываем перезапустить сервис
`service smbd restart`

![](https://i.imgur.com/mG6RMVj.jpg)

Также проверим, работает ли доступ к сетевой папке

![](https://i.imgur.com/ychbCQ7.jpg)

### 2. Добавление сервиса Samba в автозагрузку 

Добавление в автозагрузку делается быстро. Одной командой

`sudo systemctl enable smbd`

![](https://i.imgur.com/eHxYnrV.jpg)

### 3. Настроить Samba ресурс с названием share.
Дать права на чтение группе пользователей users2, но предоставить возможность записи для группы с именем admins.

Аналогично, как было описано выше, создаем новый ресурс share.

`cp /etc/samba/smb.conf /etc/samba/smb.conf.bak` - сохраним текущие настройки

`mkdir -p /samba/share`- создадим каталог

`groupadd users2`
`groupadd admins`- создадим требуемые группы пользователей

Сами пользователи у нас уже есть (user, user1).
Поэтому просто добавим их в разные группы

`usermod -aG users2 user1`
`usermod -aG admins user`

добавим только пользователя РТ. и сделаем его владельцем папки
`useradd PT`
`chown PT /samba/share`

`chgrp admins /samba/share` - группа которой принадлежит папка

Чтобы реализовать права на папку share в соответствии с заданием, необходимо дать группе admins права на запись, а остальным - только чтение.

`sudo chmod 775 /samba/share`

![](https://i.imgur.com/JXXb0qG.jpg)



Далее, отредактируем файл `nano /etc/samba/smb.conf` 

![](https://i.imgur.com/t8Iszvq.jpg)

и перегрузим сервис.





### 4. Настройка firewall iptables для SAMBA. 

Необходимо открыть порты, которые использует samba, а также разрешить по ним подключения только из локального диапазона IP-адресов или виртуальной частной сети.

Вот таблица правил (вывод командой `iptables -L`):
![](https://i.imgur.com/d2jY64h.jpg)


Теперь проверяем.
Для Win7 сетевая папка доступна
![](https://i.imgur.com/L5xuGRI.jpg)

Для Кали сетевая папка доступна

![](https://i.imgur.com/VqDWp8W.jpg)

А для win16 - нет. Его ip-адрес находится вне диапазона разрешенных адресов.

![](https://i.imgur.com/Yw8V8yF.jpg)


### 3. Сохранение и автозагрузка iptables

Теперь необходимо сделать так, чтобы указанные выше правила фаервола iptables были сохранены после перезагрузки машины.

Для этих целей мы будем использвать пакет iptables-persistent. Данный вариант реализации автозапуска конфигурации возможен в операционных системах Debian, Ubuntu. Для установки пакета требуется выполнить команду:

`sudo apt-get install iptables-persistent`

Используемые этим пакетом правила iptables хранятся в следующих директориях:

/etc/iptables/rules.v4 для набора правил протокола IPv4;
/etc/iptables/rules.v6 для набора правил протокола IPv6.
Но они должны быть сохранены в понятном утилите iptables-persistent виде.
Эти сохранения делаются на стадии установки пакета.

![](https://i.imgur.com/zdsZyvs.jpg)

Перезагрузим машину и проверим, сохранились ли настройки

![](https://i.imgur.com/3dvGqRP.jpg)

Настройки сохранились!


## Практическая работа №4.2

### Цель работы:
научиться конфигурировать Fail2Ban для отражения атак brute-force attack на SSH.

#### 4.2.1 Установка и настройка Fail2Ban

```
sudo apt-get update
sudo apt-get install fail2ban
service fail2ban start
```
Последняя команда выполняется потому, что сервис будет запущен только после перезагрузки.

![](https://i.imgur.com/MDA5zKp.jpg)

Теперь посмотрим файлы конфигурации
`ls -al /etc/fail2ban`

![](https://i.imgur.com/DFE6GkI.jpg)

Нам нужен файл jail.conf. Он содержит фильтры по умолчанию для определенных служб. Откроем его

![](https://i.imgur.com/kgNvArI.jpg)

Нам предлагают создать файл с расширением .local, чтобы при обновлении программы не потерять настройки, которые также обновляются в файле jail.conf
Делаем

`sudo nano jail.local`

Создаем фильтр для ssh

```
[sshd]
enable = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxtery = 3
bantime = 3600
ignoreip = 127.0.0.1
```
В нем разрешаем ssh, указываем порт. В фильтре указываем путь до лога,  максимальное число попыток ввода пароля (3), время блокировки ip-адреса (3600 сек) и белый список ip-адресов (127.0.0.1).

![](https://i.imgur.com/hw1YZkK.jpg)

Сохраняем, выходим, делаем рестарт сервиса.

#### 4.2.2 Тестирование fail2ban

Проверим, что наш сервис запущен

![](https://i.imgur.com/Vuus9AG.jpg)

Делаем три неправильных ввода пароля

![](https://i.imgur.com/T6Rri8X.jpg)

И видим, что наш ip попал в бан

![](https://i.imgur.com/aJ9Gzx4.jpg)


Разблокируем наш ip адрес и попробуем теперь атаковать сервер Гидрой.

![](https://i.imgur.com/QkV950i.jpg)


На атакующей машине вводим команду:
`sudo hydra -l root -P /usr/share/hydra/dpl4hydra_local.csv ssh://192.168.1.10 -I -v`
Это значит, что мы будем проводить атаку, подбирая пароль из списка (указан) с логином root. И делаем подробный вывод в консоль.

Но увы, мы были забанены.

![](https://i.imgur.com/ZU9Rfsb.jpg)

Проверим наш бан-лист. Нас снова забанили.

![](https://i.imgur.com/AE9Hdfy.jpg)

А если выключить fail2ban и снова запустить Гидру? Пробуем.

`service fail2ban stop`

Тогда мы увидим, что атака идет бесконечно

![](https://i.imgur.com/1JkQgRo.jpg)


Факт атаки подтверждает лог /var/log/auth.log

![](https://i.imgur.com/WPmEw9b.jpg)

Таким образом мы научились настраивать фильтр fail2ban для ssh от Bruteforce атак.

## Практическая работа №4.3

### Цель работы:
Научиться конфигурировать Fail2Ban для отражения атак Dos/DDoS на nginx.

#### 1. Разворачивание сервера nginx на базе дистрибутивов Debian.

Установим пакеты, необходимые для подключения apt-репозитория:

`sudo apt install curl gnupg2 ca-certificates lsb-release debian-archive-keyring`

Импортируем официальный ключ, используемый apt для проверки подлинности пакетов
`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`

![](https://i.imgur.com/GFSVCFA.jpg)


Для подключения 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`
    
Для использования пакетов из нашего репозитория вместо распространяемых в дистрибутиве, настройте закрепление:

```
echo -e "Package: *\\nPin: origin nginx.org\\nPin: release o=nginx\\nPin-Priority: 900\\n" \\
    | sudo tee /etc/apt/preferences.d/99nginx

```

После чего идет обычная установка:

```
sudo apt update
sudo apt install nginx
```
В итоге на клиентской машине мы получили стартовую страницу nginx.

![](https://i.imgur.com/n9kRArG.jpg)

#### 2.Настройка nginx от DDoS атак на наш сервер.

Суть защиты состоит в следующем. Мы настраиваем Nginx таким образом, чтобы он при привышении указанного количества запросов "сообщал" в лог об ошибке, а fail2ban уже на основе этих сообщений в логе инициализировал блокировку по ip-адресу.

Итак. Для начала на сервере должны быть установлены fail2ban  и ipset. Они у меня уже есть.

далее переходим к редактированию параметров nginx:

`sudo nano /etc/nginx/sites-enable/default` - тут находится стартовая страничка nginx. Выставляем следующие параметры:

`limit_req zone=ltwo burst=5 nodelay;`

![](https://i.imgur.com/l67nSju.jpg)


Переходим в конфигурационный файл

`nano /etc/nginx/nginx.conf` 

и дописываем строку

`limit_req_zone $binary_remote_addr zone=ltwo:10m rate=3r/s;`

![](https://i.imgur.com/WNoUyOZ.jpg)


Тестируем конфиг и перезапускаем nginx

```
nginx -t
service nginx restart
```

после этого в браузере клиентской машины, переходим в режим разработчика и далее делаем многочисленные запросы: в Chrome это - ctrl+r

![](https://i.imgur.com/F54Cged.jpg)

Видим что сервис некоторое время заблокировался.
Эти ошибки будут отражаться в логе 
`cat /var/log/nginx/error.log`

![](https://i.imgur.com/pixNM4K.jpg)

#### 3. Настройка fail2ban от DDoS атак на наш сервер.

Добавим новые параметры в файл 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/Eod3bRi.jpg)

После этого необходимо изменить настройку, что iptables не отсылал reject а отсылал drop, так как для борьбы с ботами - это более эффективно.
Переходим в файл:

`nano /etc/fail2ban/action.d/iptables-common.conf`

НО! Эти настройки также могут быть перезаписаны при обновлении. Поэтому создадим новый файл 

`touch iptables-blocktype.local`

и прописываем в нем следующую настройку

![](https://i.imgur.com/naoCxR4.jpg)

Перезапускаем сервис fail2ban

Проверяем, что iptables отрабатывает `iptables -L -v`

Убедимся, что настройки в fail2ban применились
`fail2ban-client status`
(Видим ноый фильтр)

Также проверим, что сейчас нет заблокированных ip-адресов
`fail2ban-client status nginx-limit-req`

![](https://i.imgur.com/Z5nbLVi.jpg)

Теперь повторим нашу DoS-атаку и посмотрим на сервере  что у нас показывает iptables и fail2ban:

![](https://i.imgur.com/fn2sHhI.jpg)

А они показывают, что добавилось новое правило (1) и что заблокирован один компьютер (2).

Разблокировка ip-адреса делается командой `fail2ban-client unban 192.168.1.50`

![](https://i.imgur.com/PfhcHyq.jpg)


#### 4. Итоги.
В этой практической работе выполять следующие действия:

1. Организовывать простую тестовую атаку DOS.
2. Защитили сервер от DoS/DDoS атак через встроенные возможности nginx.
3. Защитили сервер от DoS/DDoS атак с помощью fail2ban при помощи iptables в автоматическом режиме.