# Linux. Практическая работа №4
## Практическая работа №4.1
### Цель работы:
- Научиться настраивать сервер Samba
- Понимать как составляется конфигурационный файл Samba и его параметры
- Понять как работает Iptables
### Настройка samba
Для работы будем использовать машины Kali, Debian и Win7 из топологии на скрине

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

Изменим конфигурацию `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`

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

### 2. Добавление сервиса Samba в автозагрузку
Добавление в автозагрузку делается быстро. Одной командой
`sudo systemctl enable smbd`

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

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

и перегрузим сервис.
### 4. Настройка firewall iptables для SAMBA.
Необходимо открыть порты, которые использует samba, а также разрешить по ним подключения только из локального диапазона IP-адресов или виртуальной частной сети.
Вот таблица правил (вывод командой `iptables -L`):

Теперь проверяем.
Для Win7 сетевая папка доступна

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

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

### 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 виде.
Эти сохранения делаются на стадии установки пакета.

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

Настройки сохранились!
## Практическая работа №4.2
### Цель работы:
научиться конфигурировать Fail2Ban для отражения атак brute-force attack на SSH.
#### 4.2.1 Установка и настройка Fail2Ban
```
sudo apt-get update
sudo apt-get install fail2ban
service fail2ban start
```
Последняя команда выполняется потому, что сервис будет запущен только после перезагрузки.

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

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

Нам предлагают создать файл с расширением .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).

Сохраняем, выходим, делаем рестарт сервиса.
#### 4.2.2 Тестирование fail2ban
Проверим, что наш сервис запущен

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

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

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

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

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

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

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

Таким образом мы научились настраивать фильтр 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`

Для подключения 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.

#### 2.Настройка nginx от DDoS атак на наш сервер.
Суть защиты состоит в следующем. Мы настраиваем Nginx таким образом, чтобы он при привышении указанного количества запросов "сообщал" в лог об ошибке, а fail2ban уже на основе этих сообщений в логе инициализировал блокировку по ip-адресу.
Итак. Для начала на сервере должны быть установлены fail2ban и ipset. Они у меня уже есть.
далее переходим к редактированию параметров nginx:
`sudo nano /etc/nginx/sites-enable/default` - тут находится стартовая страничка nginx. Выставляем следующие параметры:
`limit_req zone=ltwo burst=5 nodelay;`

Переходим в конфигурационный файл
`nano /etc/nginx/nginx.conf`
и дописываем строку
`limit_req_zone $binary_remote_addr zone=ltwo:10m rate=3r/s;`

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

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

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

После этого необходимо изменить настройку, что iptables не отсылал reject а отсылал drop, так как для борьбы с ботами - это более эффективно.
Переходим в файл:
`nano /etc/fail2ban/action.d/iptables-common.conf`
НО! Эти настройки также могут быть перезаписаны при обновлении. Поэтому создадим новый файл
`touch iptables-blocktype.local`
и прописываем в нем следующую настройку

Перезапускаем сервис fail2ban
Проверяем, что iptables отрабатывает `iptables -L -v`
Убедимся, что настройки в fail2ban применились
`fail2ban-client status`
(Видим ноый фильтр)
Также проверим, что сейчас нет заблокированных ip-адресов
`fail2ban-client status nginx-limit-req`

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

А они показывают, что добавилось новое правило (1) и что заблокирован один компьютер (2).
Разблокировка ip-адреса делается командой `fail2ban-client unban 192.168.1.50`

#### 4. Итоги.
В этой практической работе выполять следующие действия:
1. Организовывать простую тестовую атаку DOS.
2. Защитили сервер от DoS/DDoS атак через встроенные возможности nginx.
3. Защитили сервер от DoS/DDoS атак с помощью fail2ban при помощи iptables в автоматическом режиме.