在设置过程中,fail2ban
顶部的变量看起来jail.conf
像这样:
mytime=300
.
.
.
[ssh]
bantime=%(mytime)s
或者采用更复杂的形式,如下所示:
action_ = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"].
问题
- 这些是如何工作的以及它们发生了什么?
- 具体是怎么回事
%(...string...)s
?
答案1
如果您查看其中包含的规则,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_
该操作是使用其他变量(例如 、 、 `%(protocol)s 等)创建%(banaction)s
的%(port)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.
在 Python 中称为%(...string...)s
字符串格式化或插值运算符。末尾s
的%(...string...)
是一个标志,指定可能传递给它的任何 Python 对象都将转换为字符串。从我引用的链接中,有一个包含允许的所有标志的表:
指定%
您希望说明符开始的位置,并且 是(...string...)
我们想要在此处扩展的 Python 变量。