# Блокировка источников динамическим листом IP с UFW

Устанавливаем необходимые пакеты:

```bash
apt-get -y install ipset
```

Создаем блок лист:

```bash
ipset create "IP_ipsum4_block" hash:ip
```

Добавляем туда значения от общедоступных фидов IPsum (агрегационный фид level 4 - very low false positives) и сохраняем в файл `/etc/ipset.rules`:

```bash
ipset flush "IP_ipsum4_block"; for IP in $(wget -O - https://raw.githubusercontent.com/stamparm/ipsum/master/levels/4.txt); do ipset add "IP_ipsum4_block" $IP; done; ipset save > /etc/ipset.rules
```

Добавляем ежедневное обновление фидов с crontab (для редактирования планировщика: `crontab -e`):

```bash
0 0 * * * ipset flush "IP_ipsum4_block"; for IP in $(wget -O - https://raw.githubusercontent.com/stamparm/ipsum/master/levels/4.txt); do ipset add "IP_ipsum4_block" $IP; done; ipset save > /etc/ipset.rules
```

Для восстановления ipset при перезагрузке зайдите в CRON:

```bash
crontab -e
```

Добавьте запись и выйдите с сохранением:

```bash
@reboot ipset restore < /etc/ipset.rules; ufw reload
```

<details id="bkmrk-%D0%9F%D0%B5%D1%80%D0%B5%D0%B9%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0-ufw-su"><summary>Переустановка UFW</summary>

```python
sudo apt-get purge --auto-remove ufw
sudo apt-get install ufw
sudo ufw allow 22/tcp
sudo ufw enable
sudo ufw reload
```

</details>Далее добавим правило в UFW:

```bash
sudo nano /etc/ufw/before.rules
```

Добавьте следующее значение до COMMIT:

```bash
# block by ipsum4 src IPs
-A ufw-before-input -m set --match-set IP_ipsum4_block src -j DROP
```

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2024-12/scaled-1680-/HUTimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2024-12/HUTimage.png)

Перезапустите UFW:

```
sudo ufw reload
```

Убедитесь, что правило применяется (добавленная запись должна появиться в списке вывода):

```
sudo iptables -S ufw-before-input
```

<details id="bkmrk-%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D0%B5-%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B-ufw"><summary>Полезные команды UFW</summary>

```bash
ufw status verbose
ufw allow in on eth0 from 203.0.113.102
ufw allow from 203.0.113.103 proto tcp to any port 22
ufw allow proto tcp from any to any port 80,443
ufw allow from 203.0.113.0/24 to any port 3306
sudo ufw allow 13647:13650/tcp
ufw deny out 25
ufw status numbered
ufw delete 13
ufw --force delete 13
ufw reset
```

</details>