Назад | Перейти на главную страницу

Как использовать так называемые переменные действия в fail2ban?

Я видел несколько упоминаний об этом в документации и разных сценариях, но ничего конкретного о том, как именно они используются. Может ли кто-нибудь привести мне несколько примеров?

Это просто случай

myvar=7
.
.
.
[ssh]
bantime=%(myvar)s

Если да, то в чем смысл?

Во-вторых, как использовать «Ярлыки действий» в jail.conf? например action_ = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"], есть какие-нибудь документы по этому поводу?

Если вы посмотрите на правила, которые включены в fail2ban вы заметите, что они используют эти переменные, чтобы сделать вещи более аккуратными и параметризованными. Например во включенном jail.conf они использовали их для создания общих правил действий, которые затем можно было использовать при определении различных тюрем.

пример

Вот несколько основных переменных вверху.

# Destination email address used solely for the interpolations in
# jail.{conf,local,d/*} configuration files.
destemail = root@localhost

# Sender email address used solely for some actions
sender = root@localhost

# Default protocol
protocol = tcp

# Ports to be banned
# Usually should be overridden in a particular jail
port = 0:65535

Эти переменные затем используются в других переменных для построения некоторых основных действий.

# Default banning action (e.g. iptables, iptables-new,
# iptables-multiport, shorewall, etc) It is used to define
# action_* variables. Can be overridden globally or per
# section within jail.local file
banaction = iptables-multiport

# The simplest action to take: ban only
action_ = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]

# ban & send an e-mail with whois report to the destemail.
action_mw = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
            %(mta)s-whois[name=%(__name__)s, dest="%(destemail)s", protocol="%(protocol)s", chain="%(chain)s"]

Обратите внимание, что они создают действие общего назначения, называемое, action_ который создается с использованием других переменных, таких как, %(banaction)s, %(port)s, `% (протокол) s и т. д.

Из man jail.conf страница руководства:

Используя механизмы «интерполяции строк» ​​Python, разрешены и другие определения, которые позже могут использоваться в других определениях как% (name) s. Например.

         baduseragents = IE|wget
         failregex = useragent=%(baduseragents)s

Так что %(...)s являются частью языка Python. Если вы будете искать их, то в конечном итоге найдете эту страницу в спецификации языка Python, в частности в этом разделе под названием: 5.6.2. Операции форматирования строк. На этой странице есть пример:

>>> print '%(language)s has %(number)03d quote types.' % \
...       {"language": "Python", "number": 2}
Python has 002 quote types.

В %(...string...)s в Python называется оператором форматирования строки или интерполяции. В s в конце %(...string...) - это флаг, указывающий, что любые объекты Python, которые могут быть переданы ему, преобразуются в строки. Из ссылки, на которую я ссылался, есть таблица со всеми разрешенными флагами:

  

В % указывает, где вы хотите, чтобы спецификатор начинался, а (...string...) это переменная Python, которую мы хотим здесь расширить.