# Практическая работа №5. Основы iptables
###### tags: `Организация сетевой безопасности`
---
## Топология сети

>  - windows
>  - ubuntu
>  - ssh-канал для проверки проброса портов (12 задание)
---
## Настройка SSH
Было настроено два ssh-сервера:
bubuntu-v1 - для проверки правила №12
smb-srv - для проверки правил №5,7,9
### 1. Настройка ssh-сервера bubuntu-v1

### 2. Настройка ssh-сервера smb-srv

---
## Базовая настройка iptables
### 1. Установка iptables

### 2. Создание базовых правил с дефолтной политикой DROP


### 3. Пример правила, разрешающего HTTP

### 4. Пример правила, разрешающего HTTPS

### 5. Пример правила, разрешающего SSH

---
## Создание профильных правил
Был написан bash-скрипт, который по заданному аргументу (номеру правила) применял следующие правила или выводил логи по данным правилам.
```
#!/bin/bash
# default policies
sudo iptables -P INPUT ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
case "$1" in
-4-1)
# Ping-block 1
sudo iptables -F
sudo iptables -A INPUT -p ICMP --icmp-type echo-request -j LOG --log-prefix="Iptables: Ping block: "
sudo iptables -A INPUT -p ICMP --icmp-type echo-request -j REJECT ;;
-4-2)
# Ping-block 2
sudo iptables -F
sudo iptables -A INPUT -p ICMP --icmp-type echo-request -j LOG --log-prefix="Iptables: Ping block: "
sudo iptables -A INPUT -p ICMP --icmp-type echo-request -j DROP ;;
-4-l)
# Ping logging
sudo tail /var/log/iptables_ping.log ;;
-5)
# SSH-block
sudo iptables -F
sudo iptables -A INPUT -p TCP --dport 10022 -j LOG --log-prefix="Iptables: SSH block: "
sudo iptables -A INPUT -p TCP --dport 10022 -j REJECT ;;
-5-l)
# SSH logging
sudo tail /var/log/iptables_ssh.log ;;
-6)
# All_connections-block
sudo iptables -F
sudo iptables -A INPUT -j LOG --log-prefix="Iptables: All connect block: "
sudo iptables -P INPUT DROP ;;
-6-l)
# All logging
sudo tail /var/log/iptables_all.log ;;
-7)
# SSH'nt-block
sudo iptables -F
sudo iptables -A INPUT -p TCP --dport 10022 -j ACCEPT
sudo iptables -A INPUT -j LOG --log-prefix="Iptables: SSH2 block: "
sudo iptables -P INPUT DROP ;;
-7-l)
# SSH'nt logging
sudo tail /var/log/iptables_ssh2.log ;;
-8)
# host-block
sudo iptables -F
sudo iptables -A INPUT -s 192.168.100.1 -j LOG --log-prefix="Iptables: Host block: "
sudo iptables -A INPUT -s 192.168.100.1 -j REJECT ;;
-8-l)
# Host logging
sudo tail /var/log/iptables_host.log ;;
-9)
# ssh'nt_host-block
sudo iptables -F
sudo iptables -A INPUT -s 192.168.100.1 -p TCP --dport 10022 -j ACCEPT
sudo iptables -A INPUT -s 192.168.100.1 -j LOG --log-prefix="Iptables: Host2 block: "
sudo iptables -A INPUT -s 192.168.100.1 -j DROP ;;
-9-l)
# Host2 logging
sudo tail /var/log/iptables_host2.log ;;
-10)
# net-block
sudo iptables -F
sudo iptables -A INPUT -s 192.168.100.0/24 -j LOG --log-prefix="Iptables: Net block: "
sudo iptables -A INPUT -s 192.168.100.0/24 -j REJECT ;;
-10-l)
# Net logging
sudo tail /var/log/iptables_net.log ;;
-11)
# net_port-block
sudo iptables -F
sudo iptables -A INPUT -s 192.168.0.0/16 -p TCP --dport 3000:4000 -j LOG --log-prefix="Iptables: Net-port block: "
sudo iptables -A INPUT -s 192.168.0.0/16 -p TCP --dport 3000:4000 -j REJECT ;;
-11-l)
# Port logging
sudo tail /var/log/iptables_port.log ;;
-12-1)
# forward-log 1
sudo iptables -F
sudo iptables -t nat -F
sudo iptables -A INPUT -i ens34 -p TCP --dport 1000:5000 -j LOG --log-prefix="Iptables: Port-forwarding: "
sudo iptables -A INPUT -i ens34 -p TCP --dport 1000:5000 -j ACCEPT
sudo iptables -t nat -A PREROUTING -i ens34 -p TCP --dport 1000:5000 -j DNAT --to-destination 192.168.1.1
sudo iptables -t nat -A POSTROUTING -o ens33 -p TCP --dport 1000:5000 -d 192.168.1.1 -j SNAT --to-source 192.168.1.3
sudo iptables -P INPUT DROP ;;
-12-2)
# forward-log 2
sudo iptables -F
sudo iptables -t nat -F
sudo iptables -A INPUT -i ens34 -p TCP --dport 1000:5000 -j LOG --log-prefix="Iptables: Port-forwarding: "
sudo iptables -A INPUT -i ens34 -p TCP --dport 1000:5000 -j ACCEPT
sudo iptables -A OUTPUT -o ens34 -p TCP --dport 1000:5000 -j ACCEPT
sudo iptables -A FORWARD -p TCP --dport 1000:5000 -j ACCEPT
sudo iptables -A FORWARD -i ens34 -p TCP --dport 1000:5000 -j ACCEPT
sudo iptables -A FORWARD -i ens33 -p TCP --dport 40000:65535 -j ACCEPT
sudo iptables -t nat -A PREROUTING -i ens34 -p TCP --dport 1000:5000 -j DNAT --to-destination 192.168.1.1
sudo iptables -t nat -A POSTROUTING -o ens33 -p TCP --dport 1000:5000 -d 192.168.1.1 -j SNAT --to-source 192.168.1.3
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT DROP ;;
-12-l)
# Forward logging
sudo tail /var/log/iptables_forw.log ;;
-smb)
# smb
sudo iptables -F
sudo iptables -A INPUT -s 192.168.0.0/16 -p TCP --dport 445 -j ACCEPT
sudo iptables -A INPUT -s 192.168.0.0/16 -p TCP --dport 137:139 -j ACCEPT
sudo iptables -P INPUT DROP ;;
*)
# clear rule
sudo iptables -F
sudo iptables -t nat -F
echo "Wrong rule, iptables was flushed." ;;
esac
```
### 1. Запрет ping (правило №4)
#### 1 способ
```
sudo iptables -F
sudo iptables -A INPUT -p ICMP --icmp-type echo-request -j LOG --log-prefix="Iptables: Ping block: "
sudo iptables -A INPUT -p ICMP --icmp-type echo-request -j REJECT
sudo iptables -P INPUT ACCEPT
```
#### 2 способ
```
sudo iptables -F
sudo iptables -A INPUT -p ICMP --icmp-type echo-request -j LOG --log-prefix="Iptables: Ping block: "
sudo iptables -A INPUT -p ICMP --icmp-type echo-request -j DROP
sudo iptables -P INPUT ACCEPT
```

> логирование
### 2. Запрет ssh-соединений (правило №5)
```
sudo iptables -F
sudo iptables -A INPUT -p TCP --dport 10022 -j LOG --log-prefix="Iptables: SSH block: "
sudo iptables -A INPUT -p TCP --dport 10022 -j REJECT
sudo iptables -P INPUT ACCEPT
```

> логирование
### 3. Запрет всех соединений (правило №6)
```
sudo iptables -F
sudo iptables -A INPUT -j LOG --log-prefix="Iptables: All connect block: "
sudo iptables -P INPUT DROP
```

> логирование
### 4. Запрет всех соединений, кроме ssh (правило №7)
```
sudo iptables -F
sudo iptables -A INPUT -p TCP --dport 10022 -j ACCEPT
sudo iptables -A INPUT -j LOG --log-prefix="Iptables: SSH'nt block: "
sudo iptables -P INPUT DROP
```

> логирование
### 5. Запрет всех соединений по одному ip-addr (правило №8)
```
sudo iptables -F
sudo iptables -A INPUT -s 192.168.100.1 -j LOG --log-prefix="Iptables: Host block: "
sudo iptables -A INPUT -s 192.168.100.1 -j REJECT
sudo iptables -P INPUT ACCEPT
```

> логирование
### 6. Запрет всех соединений по одному ip-addr, кроме ssh (правило №9)
```
sudo iptables -F
sudo iptables -A INPUT -s 192.168.100.1 -p TCP --dport 10022 -j ACCEPT
sudo iptables -A INPUT -s 192.168.100.1 -j LOG --log-prefix="Iptables: SSH'nt host block: "
sudo iptables -A INPUT -s 192.168.100.1 -j DROP
sudo iptables -P INPUT ACCEPT
```

> логирование
### 7. Запрет всех соединений по диапазону ip-addr/24 (правило №10)
```
sudo iptables -F
sudo iptables -A INPUT -s 192.168.100.0/24 -j LOG --log-prefix="Iptables: Net block: "
sudo iptables -A INPUT -s 192.168.100.0/24 -j REJECT
sudo iptables -P INPUT ACCEPT
```

> логирование
### 8. Запрет диапазона портов 3000:4000 в сети с маской /16 (правило №11)
```
sudo iptables -F
sudo iptables -A INPUT -s 192.168.0.0/16 -p TCP --dport 3000:4000 -j LOG --log-prefix="Iptables: Net-port block: "
sudo iptables -A INPUT -s 192.168.0.0/16 -p TCP --dport 3000:4000 -j REJECT
sudo iptables -P INPUT ACCEPT
```

> логирование
### 9. Проброс диапазона портов 1000:5000 на другой хост (правило №12)
#### 1 вариант - с отслеживанием соединения
```
sudo iptables -F
sudo iptables -t nat -F
sudo iptables -A INPUT -i ens34 -p TCP --dport 1000:5000 -j LOG --log-prefix="Iptables: Port-forwarding: "
sudo iptables -A FORWARD -i ens34 -p TCP --syn --dport 1000:5000 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -i ens34 -p TCP --syn --dport 1000:5000 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A FORWARD -i ens33 -p TCP --syn --dport 1000:5000 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -t nat -A PREROUTING -i ens34 -p TCP --dport 1000:5000 -j DNAT --to-destination 192.168.1.1
sudo iptables -t nat -A POSTROUTING -o ens33 -p TCP --dport 1000:5000 -d 192.168.1.1 -j SNAT --to-source 192.168.1.3
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
```
#### 2 вариант - без отслеживания соединения
```
sudo iptables -F
sudo iptables -t nat -F
sudo iptables -A INPUT -i ens34 -p TCP --dport 1000:5000 -j LOG --log-prefix="Iptables: Port-forwarding: "
sudo iptables -t nat -A PREROUTING -i ens34 -p TCP --dport 1000:5000 -j DNAT --to-destination 192.168.1.1
sudo iptables -t nat -A POSTROUTING -o ens33 -p TCP --dport 1000:5000 -d 192.168.1.1 -j SNAT --to-source 192.168.1.3
sudo iptables -P INPUT DROP
```


> логирование
### 10. Создание правила для smb-сервера (правило №13)
```
sudo iptables -F
sudo iptables -A INPUT -s 192.168.0.0/16 -p TCP --dport 445 -j ACCEPT
sudo iptables -A INPUT -s 192.168.0.0/16 -p TCP --dport 137:139 -j ACCEPT
sudo iptables -P INPUT DROP
```
### 11. Создание правила для очистки таблиц iptables (правило №*)
```
sudo iptables -F
sudo iptables -t nat -F
```
## Базовая настройка samba-сервера
### 1. Установка сервиса

### 2. Активация автозагрузки samba-сервиса

### 3. Создание публичной и приватной директории, изменение прав

### 4. Создание пользователя, группы, добавление пользователя в группу, изменение группы владельца приватной директории, установка пароля

### 5. Изменение конфигурационного файла samba-сервера

### 6. Создание правил iptables

### 7. Сохранение правил через netfilter-persistent

### 8. Успешный вход с linux


### 9. Успешный вход с windows




## Профильная настройка samba
### 1. Создание директории, пользователей, групп
```
sudo chmod -R 0777 /samba/share
sudo groupadd admins
sudo groupadd users
sudo adduser gaga
sudo adduser maga
sudo usermod -aG admins gaga
sudo usermod -aG users maga
sudo adduser mirea
sudo smbpasswd -a gaga
```
/etc/samba/smb.conf
```
[global]
workgroup = WORKGROUP
admin users = admins
security = user
map to guest = bad user
wins support = no
dns proxy = no
invalid users = anon
include = /etc/samba/share.conf
recycle:versions = yes
recycle:touch = yes
recycle:keeptree = yes
recycle:repository = /samba/share/.trash
vfs object = recycle
#[public]
#path = /samba/public
#guest ok = yes
#force user = nobody
#browsable = yes
#writable = yes
#[private]
#path = /samba/private
#valid users = @smbgr
#guest ok = no
#browsable = yes
#writable = yes
```
/etc/samba/share.conf
```
[share]
path = /samba/share
valid users = @users, @admins, mirea
guest ok = no
write list = @admins, mirea
read list = @users
browseable = yes
```
## Sar

