
Централизованное управление межсетевым экраном
Централизованное управление межсетевым экраном обеспечивает централизованный способ управления брандмауэром на нескольких серверах или балансировщиках нагрузки, работающих под управлением iptables. Таким образом, вы можете быстро разрешать/блокировать/удалять/искать диапазоны злоумышленников и т.д. с помощью одной команды на нескольких серверах. Он подключается к этим серверам через ssh.
Поддерживает как IPv4, так и IPv6.
Протестировано на Debian 6.x / 7.x / 8.x / 9.x, но должно работать на любом дистрибутиве.
Для использования функций 'precheck', 'protected' и 'findip' для IPv6 вам необходимо установить модуль python 'netaddr'. Для IPv4 это не требуется, поскольку используется сопоставление префиксов в двоичной форме IP-адреса.
Debian: apt-get install python3-netaddr
Более эффективно использовать 'ipset' в дополнение к iptables. Ipset можно использовать для управления списками, на которые может ссылаться и использовать iptables. Это работает быстрее, а манипуляции со списком также более гибкие, и это предпочтительный метод использования данного скрипта.
Debian: apt-get install ipset
Поскольку этот скрипт подключается к указанным серверам через ssh, такой доступ должен быть настроен до его использования.
Скопируйте пример конфигурации из cfc.cfg-example в cfc.cfg при первом запуске.
Следующие параметры можно настроить в конфигурационном файле:
action: задаёт действие при добавлении правила, по умолчанию: DROP
checkaggrbin: путь к скрипту checkaggr.py, по умолчанию: ./checkaggr.py
cleanupconfirmation: запрашивает подтверждение перед выполнением команды clean, установите false для использования в cron, по умолчанию: true
date: задаёт формат даты для комментариев брандмауэра, по умолчанию: $(date +%d%m%Y) -> 22062016
dateipset: задаёт формат даты для комментариев ipset брандмауэра, оставьте значение по умолчанию, чтобы не нарушить некоторые функции, по умолчанию: $(date +%Y%m%d) -> 20160622
ipsetname: задаёт имя списка IPSET, по умолчанию: blockedips
ipsetservers: задаёт серверы, использующие IPSET вместо iptables, по умолчанию: "lvs05.example.com lvs06.example.com"
fwchain: имя цепочки брандмауэра для добавления/удаления/поиска, по умолчанию: INPUT
masklimit: максимальный размер IP-диапазонов, которые можно добавить, по умолчанию: /21
precheck: проверяет, не находится ли добавляемый IP уже в брандмауэре или не является ли он частью большего добавленного диапазона, может быть немного медленным на больших брандмауэрах для IPv6 (~25 секунд для поиска 500 IP-диапазонов на сервер), по умолчанию: true
protected: включает добавленные защищённые диапазоны, по умолчанию: true
protectedranges: IP-диапазоны, исключённые из функции 'add', обычно диапазоны локальной сети, по умолчанию: "172.16.0.0/12 10.0.0.0/8 192.168.0.0/16"
pythonbin: расположение используемого бинарного файла Python, по умолчанию: /usr/bin/python3
servers: задаёт серверы, использующие только iptables, по умолчанию: "lvs01.example.com lvs02.example.com lvs03.example.com lvs04.example.com"
Функции IPv6 помечены суффиксом '6'
При вводе IP-адресов/диапазонов с помощью следующих команд используйте нотацию CIDR; это проверяется, и другие форматы не принимаются.
add:
cfc.sh add n.n.n.n/NN '<optional comment>'
cfc6.sh add <IPv6_address_range> '<optional comment>'
Добавляет указанный IP(диапазон) в брандмауэры с настроенным действием для всего трафика из этого источника. По умолчанию добавляет комментарий с текущей датой; вы можете добавить необязательный комментарий в одинарных кавычках, например, указав причину или владельца этого диапазона. Впоследствии по этому комментарию можно выполнять поиск.
addstring:
cfc.sh addstring <protocol>:<dport> <string>
cfc6.sh addstring <protocol>:<dport> <string>
Добавляет блокировку строки в iptables для определённого протокола и порта назначения. Практический пример: блокировка User-Agent для набора веб-серверов, то есть TCP-соединение, направленное на порт 80, со строкой: Firefox/28.0 — весь входящий трафик, соответствующий этой строке и направленный на TCP-порт 80, будет заблокирован:
cfc.sh addstring tcp:80 'Firefox/28.0'
Осторожно, это может иметь серьёзные последствия, если строка недостаточно конкретна!
clean:
cfc.sh clean <older_than_number_of_days>
Удаляет все правила брандмауэра CFC старше указанного количества дней. Имейте в виду, что это зависит от формата даты по умолчанию! Если вы изменили формат даты, потребуется скорректировать скрипт в разделе 'clean'.
del:
cfc.sh del n.n.n.n/NN
cfc6.sh del <IPv6_address_range>
Удаляет указанный IP(диапазон)/правило из брандмауэров
delstring:
cfc.sh delstring <protocol>:<dport> <string>
cfc6.sh delstring <protocol>:<dport> <string>
Удаляет блокировку строки в iptables для определённого протокола и порта назначения.
find:
cfc.sh find <string>
cfc6.sh find <string>
Ищет в брандмауэрах указанную строку (без учёта регистра); это может быть (частью) IP-адреса/диапазона/комментария
findip:
cfc.sh findip n.n.n.n/NN
cfc6.sh findip <IPv6_address_range>
Проверяет в брандмауэрах, является ли указанный IP(диапазон) уже частью добавленного правила; может быть немного медленным на больших брандмауэрах для IPv6 (~25 секунд для поиска 500 IP-диапазонов на сервер). Для IPv4 вместо этого используется сопоставление префиксов в двоичной форме IP, что примерно на 500% быстрее; этот способ также используется для функций precheck и protectedranges.
ipsethostinit:
cfc.sh ipsethostinit <server_name>
cfc6.sh ipsethostinit <server_name>
Добавляет список IPSET на указанный хост и правило iptables, ссылающееся на него, используя параметры, определённые в cfc.cfg. Это необходимо сделать только один раз перед добавлением правил брандмауэра.
last:
cfc.sh last <nr_of_most_recent_rules>
cfc6.sh last <nr_of_most_recent_rules>
Показывает последние записей, добавленных в брандмауэры