Quais são estas strings de% (…) no arquivo jail.conf do fail2ban, e como elas funcionam?

2

Ao configurar fail2ban , há o que parecem ser variáveis na parte superior do jail.conf que se parece com isso:

mytime=300
.
.
.
[ssh]
bantime=%(mytime)s

Ou nesta forma mais complicada como esta:

action_ = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"].

Perguntas

  • Como esses trabalhos e o que está acontecendo com eles?
  • Especificamente, qual é o problema com o %(...string...)s ?
por slm 18.09.2014 / 17:18

1 resposta

3

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.

    
por 18.09.2014 / 17:18