iptables и предотвращение хакерских атак

iptables и предотвращение хакерских атак

Приветствую вас, дорогие любители Ubuntu!

Вот пример моего файла iptables.rules:

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:f2b-sshd - [0:0]
:f2b-sshd-ddos - [0:0]
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd-ddos
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd
-A INPUT -s 202.215.160.75/32 -j DROP
-A INPUT -s 66.210.251.136/32 -j DROP
-A INPUT -s 61.40.0.0/16 -j DROP
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd-ddos
-A INPUT -i tap0 -j ACCEPT
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd
-A INPUT -i br0 -j ACCEPT
-A FORWARD -i br0 -j ACCEPT
-A f2b-sshd -j RETURN
-A f2b-sshd-ddos -j RETURN
COMMIT

Обратите внимание, что это сжатая версия моего файла. У меня, вероятно, около 100 IP-адресов/доменов, которые я удаляю.

Моя проблема в том, что когда я ввожу новый IP-адрес, например xxxx, он добавляется следующим образом:

-A INPUT -i br0 -j ACCEPT
-A INPUT -s x.x.x.x/32 -j DROP
-A FORWARD -i br0 -j ACCEPT

Это каким-то образом на самом деле не сбрасывает IP-адрес, как я хочу. У меня есть скрипт оболочки, который я использую для сброса пользователей/доменов:

./drop-пользователь

sudo iptables -A INPUT -s $1 -j DROP
sudo sh -c "iptables-save > /etc/iptables.rules" 

./drop-домен

 sudo iptables -A INPUT -s $1/16 -j DROP
 sudo sh -c "iptables-save > /etc/iptables.rules"

Чтобы решить эту проблему, я вручную редактирую файлы /etc/iptables.rules, чтобы переместить xxxx ip выше этой строки:

 -A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd-ddos

и затем звонит:

sudo iptables-restore < /etc/iptables.rules

Что не так с моим процессом, если что-то не так? Есть ли способ получше? Каждый день я трачу около 10 минут на борьбу с хаками, и большую часть этого времени я пишу в файлы iptables.rules и восстанавливаю их через iptables-restore. Я бы хотел иметь возможность просто вызывать ./drop-user или ./drop-domain и покончить с этим, но я чувствую, что у меня недостаточно понимания iptables.

Следует ли мне выполнить следующие команды перед iptables-restore?

 sudo iptables -F
 sudo iptables -Z

Заранее спасибо!

решение1

Я настоятельно рекомендую вам автоматизировать процесс блокировки с помощью fail2ban, который отлично работает в конфигурации по умолчанию и может быть дополнительно настроен, если вы захотите контролировать больше служб.

В сочетании с iptables-persistentон будет сохранять правила при перезагрузках, что полезно.

Вот базовый обзор того, что я делаю с любым сервером Ubuntu:

Установить и настроить fail2ban

sudo aptitude install fail2ban && sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local && sudo nano /etc/fail2ban/jail.local

Это установит его и скопирует файл конфигурации в новый файл для ваших настроек. Это лучшая практика, поскольку она предотвращает перезапись ваших правок при обновлении пакета.

Мое личное предпочтение — продлитьвремя банаинайти времяиз значений по умолчанию. Ban time — это время, на которое забанен злоумышленник, а find time — это временной интервал, в течение которого учитываются его попытки, в случае, если он ограничивает частоту атак. Find and edit bantime = 21600(увеличено до шести часов, значение времени в секундах), а также findtime = 3600(максимум 3 попытки атак в час).

Очистить существующие правила Iptables и установить новые значения по умолчанию

Это однострочный код, который предназначен для использования на типичном веб-сервере с входящими портами, прослушивающими только порт 22 (SSH), порт 80 (HTTP) и порт 443 (HTTPS).Это руководство DigitalOceanявляется хорошим справочником по созданию собственного или индивидуального шахтного оборудования.Будьте осторожны с Iptables и настройкой правил DROP. Если вы ошибетесь в порядке, вы навсегда заблокируете себя!Тем не менее, я использую вот этот однострочный способ, и он безопасен, проверен и отлично работает:

sudo iptables -P INPUT ACCEPT && sudo iptables -F && sudo iptables -A INPUT -i lo -j ACCEPT && sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT && sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT && sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT && sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT && sudo iptables -A INPUT -j LOG && sudo iptables -A FORWARD -j LOG && sudo ip6tables -A INPUT -j LOG && sudo ip6tables -A FORWARD -j LOG && sudo iptables -A INPUT -j DROP

Сохранение изменений при перезагрузках

Последний шаг — установка и настройка iptables-persistentпакета, который автоматизирует сохранение и восстановление правил при перезагрузках.

sudo aptitude install iptables-persistent && sudo service iptables-persistent start

Он запросит у вас подтверждение для правил IPV4 и IPV6, и вы должны использовать клавишу Tab, чтобы выбрать «да» для каждого и сохранить. Он запустится автоматически при перезагрузке, поэтому вам не нужно беспокоиться о его дальнейшей настройке.

Стоит отметить, что при создании постоянных правил вам нужно вручную сообщать процессу о любых новых правилах, которые вы добавляете или редактируете (например, если вы добавили или удалили HTTPS на порту 443). Для этого запустите , sudo service iptables-persistent saveкоторый обновит текущий набор правил на месте. Я думаю, что команда была изменена на "netfilter-persistent" в версиях позже 14.04, поэтому используйте ее, sudo service netfilter-persistent saveесли первая не работает.

Краткое содержание

Теперь fail2ban будет отслеживать атаки на SSH и автоматически добавлять и вычитать IP-адреса в соответствии с заданными вами параметрами. Iptables будет игнорировать весь входящий трафик для портов, которые вы не открыли, и эти правила сохранятся при перезагрузках, так что вам больше ничего не нужно делать. Наслаждайтесь дополнительным свободным временем, я полагаю!

Повторите все вышеперечисленные шаги, если вы хотите отменить все изменения.

Если по какой-то причине вы не хотите продолжать использовать этот метод, вы можете быстро все отменить. Это не рекомендуется, но это ваша машина, поэтому вот как:

  1. Очистите все правила Iptables и примите весь трафик на всех портах sudo iptables -P INPUT ACCEPT && sudo iptables -F(это необходимо сделать, чтобы удалить правило DROP в конце, иначе вы будете заблокированы)
  2. Удалите ранее установленные пакеты и их настройки sudo aptitude purge fail2ban iptables-persistent(или, может быть netfilter-persistent, , в зависимости от вашей версии сервера Ubuntu). После перезапуска вы должны вернуться к тому, что было раньше — за исключением любых пользовательских настроек Iptables, которые вам нужно будет вручную добавить заново, как вы это делаете сейчас.

Связанный контент