Se você der uma olhada nas regras incluídas em fail2ban
, perceberá que elas usam essas variáveis para tornar as coisas mais organizadas e mais parametrizadas. Por exemplo, no jail.conf
incluído, eles os usaram para fazer regras gerais de ação que eles podem usar ao definir as várias cadeias.
Exemplo
Aqui estão algumas variáveis básicas no topo.
# 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
Estas variáveis são então usadas em outras variáveis para construir algumas ações básicas.
# 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"]
Observe que eles estão construindo uma ação de propósito geral chamada action_
, que é feita usando outras variáveis, como %(banaction)s
, %(port)s
, '% (protocol), etc.
Na página man jail.conf
man:
Using Python "string interpolation" mechanisms, other definitions are allowed and can later be used within other definitions as %(name)s. For example.
baduseragents = IE|wget failregex = useragent=%(baduseragents)s
Portanto, o %(...)s
faz parte da linguagem Python. Se você procurá-los, você eventualmente encontrará esta página a partir da especificação da linguagem Python, especificamente nesta seção intitulada: 5.6.2 . Operações de formatação de string . Há um exemplo nesta página:
>>> print '%(language)s has %(number)03d quote types.' % \
... {"language": "Python", "number": 2}
Python has 002 quote types.
O %(...string...)s
é chamado de operador de formatação ou interpolação de string no Python. O s
no final do %(...string...)
é um sinalizador, especificando que quaisquer objetos do Python que possam ser passados para ele, sejam convertidos em seqüências de caracteres. A partir do link que eu referenciei, há uma tabela com todos os sinalizadores permitidos:
O %
especifica onde você deseja que o especificador comece, e o (...string...)
é a variável do Python que queremos expandir aqui.