Fail2ban의 jam.conf 파일에 있는 %(...)s 문자열은 무엇입니까? 어떻게 작동하나요?

Fail2ban의 jam.conf 파일에 있는 %(...)s 문자열은 무엇입니까? 어떻게 작동하나요?

설정하는 동안 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

따라서 그들은 %(...)sPython 언어의 일부입니다. 검색하면 결국 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 객체가 문자열로 변환됨을 지정하는 플래그가 있습니다. 내가 인용한 링크에는 허용되는 모든 플래그가 포함된 테이블이 있습니다.

  SS#1

%지정자를 시작할 위치와 (...string...)확장하려는 Python 변수가 있는 위치를 지정합니다 .

관련 정보