我在文档和其他脚本中看到过一些关于这些内容的提及,但没有具体说明它们的具体用法。有人能给我举几个例子吗?
这仅仅是一个案例
myvar=7
.
.
.
[ssh]
bantime=%(myvar)s
如果是这样那有什么意义呢?
其次,如何使用 jail.conf 中的“操作快捷方式”?例如action_ = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)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_
该操作使用其他变量(例如%(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 变量。