HEX
Server: Apache/2.4.65 (Debian)
System: Linux kubikelcreative 5.10.0-35-amd64 #1 SMP Debian 5.10.237-1 (2025-05-19) x86_64
User: www-data (33)
PHP: 8.4.13
Disabled: NONE
Upload Files
File: //usr/lib/python3/dist-packages/fail2ban/tests/__pycache__/servertestcase.cpython-39.pyc
a

���`�]�@s�dZdZdZddlZddlZddlZddlZddlZddlZddl	Z	ddl
mZmZm
Z
ddlmZddlmZdd	lmZdd
lmZddlmZddlmZdd
lmZddlmZddlm Z m!Z!m"Z"ddl#m$Z$m%Z%m&Z&ddl'm(Z(zddlm)Z)Wne*�ydZ)Yn0ej+�,ej+�-e.�d�Z/dZ0e$d�Z1Gdd�de�Z2Gdd�de �Z3Gdd�de3�Z4Gdd�de3�Z5Gdd �d ej6�Z7Gd!d"�d"ej6�Z8Gd#d$�d$e�Z9Gd%d&�d&e �Z:dd'l;m<Z<m=Z=m>Z>Gd(d)�d)e �Z?dS)*z
Cyril Jaquierz Copyright (c) 2004 Cyril JaquierZGPL�N�)�Regex�	FailRegex�RegexException)�actions)�Server)�IPAddr)�Jail)�
JailThread)�	BanTicket)�Utils�)�	DummyJail)�LogCaptureTestCase�
with_alt_time�MyTime)�	getLogger�extractOptions�
PREFER_ENC)�version)�
filtersystemd�files�polling�fail2banc@seZdZdd�Zdd�ZdS)�
TestServercOsdS�N���self�args�kwargsrr�?/usr/lib/python3/dist-packages/fail2ban/tests/servertestcase.py�setLogLevel<szTestServer.setLogLevelcOsdSrrrrrr!�setLogTarget?szTestServer.setLogTargetN)�__name__�
__module__�__qualname__r"r#rrrr!r;srcsLeZdZ�fdd�Z�fdd�Zdd	d
�Zddd�Zd
d�Zdd�Z�Z	S)�TransmitterBasecs2tt|���|jj|_d|_|j�|jt�dS)�Call before every test case.Z	TestJail1N)	�superr'�setUp�server�_Server__transm�transm�jailName�addJail�FAST_BACKEND�r��	__class__rr!r*Es
zTransmitterBase.setUpcs|j��tt|���dS�zCall after every test case.N)r+�quitr)r'�tearDownr1r2rr!r6Ns
zTransmitterBase.tearDownrrNFc
s�d||g}d|g}|dur2|�d|�|�d|�|dkr>|}�fdd�}	|�|	|j�|��|	||f��|s�|�|	|j�|��|	d|f��dS)	zoProcess set/get commands and compare both return values 
		with outValue if it was given otherwise with inValue�set�getNr
rcs�rt|�S|S)zPrepare value for comparison)�repr��x��repr_rr!�vasz%TransmitterBase.setGetTest.<locals>.vr)�insert�assertEqualr-�proceed)
r�cmd�inValue�outValue�outCode�jailr=�setCmd�getCmdr>rr<r!�
setGetTestTs
 zTransmitterBase.setGetTestcCsvd||g}d|g}|dur2|�d|�|�d|�|j�|�d}|�|j�|�dd�|�|j�|�d|f�dS)Nr7r8r
r)r?r-rAr@)rrBrCrFrGrHZ	initValuerrr!�
setGetTestNOKjs
zTransmitterBase.setGetTestNOKc	Cs�d|}d|}|�|j�d||g�dgf�t|�D]�\}}|j�d|||g�}|j|dttt|d��fdttt|d|d���fdd�|j�d||g�}|j|dttt|d��fdttt|d|d���fdd�q6t|�D]�\}}|j�d|||g�}|j|dttt|d��fdttt||dd���fdd�|j�d||g�}|j|dttt|d��fdttt||dd���fdd�q�dS)	N�add�delr8rr7r
r)�level)r@r-rA�	enumerate�assertSortedEqual�list�map�str)	rrB�valuesrF�cmdAdd�cmdDel�n�value�retrrr!�jailAddDelTestws�@B@zTransmitterBase.jailAddDelTestc		Csd|}d|}|�|j�d||g�dgf�t|�D]^\}}|�|j�d|||g�d|d|d�f�|�|j�d||g�d|d|d�f�q6t|�D]^\}}|�|j�d||dg�d||dd�f�|�|j�d||g�d||dd�f�q�dS)NrKrLr8rr7r
)r@r-rArN)	rrBZinValuesZ	outValuesrFrTrUrVrWrrr!�jailAddDelRegexTest�s.�����z#TransmitterBase.jailAddDelRegexTest)rrNF)N)
r$r%r&r*r6rIrJrYrZ�
__classcell__rrr2r!r'Cs	


r'cs�eZdZ�fdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zed%d&��Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Zd7d8�Zd9d:�Z d;d<�Z!d=d>�Z"d?d@�Z#dAdB�Z$dCdD�Z%dEdF�Z&dGdH�Z'dIdJ�Z(dKdL�Z)dMdN�Z*dOdP�Z+dQdR�Z,dSdT�Z-dUdV�Z.dWdX�Z/dYdZ�Z0�Z1S)[�Transmittercst�|_tt|���dSr)rr+r)r\r*r1r2rr!r*�szTransmitter.setUpcCs|�|j���dSr)�assertFalser+�	isStartedr1rrr!�testServerIsNotStarted�sz"Transmitter.testServerIsNotStartedcCs|�|j�dg�d�dS)N�stop�rN�r@r-rAr1rrr!�testStopServer�szTransmitter.testStopServercCs|�|j�dg�d�dS)NZping)rZpongrbr1rrr!�testPing�szTransmitter.testPingcCs |�|j�dg�dtjf�dS)Nrr)r@r-rArr1rrr!�testVersion�szTransmitter.testVersioncCs|tjjs`t��}|�|j�ddg�d�t��}||}|jd|koNdknd|d�n|�|j�ddg�d�dS)	N�sleepz0.1rag
ףp=
�?g�������?zSleep was %g sec)�msgz0.0001)�unittest�F2B�fast�timer@r-rA�
assertTrue)rZt0�t1Zdtrrr!�	testSleep�s(zTransmitter.testSleepcCs�tjjst�dd�\}}nd}|�d|�|j�|j�|�	d|�|�	d|�|�	ddd�|�dd�|�	d	d
d�|�d	d�|j�
|jt�|�	d|�|j�|j�|�|j
�gd��d
�|�|j
�ddg�d
�|�|j
�gd��d
�|�|j
�ddg�d
�|�|j
�gd��d
�|�|j
�dd	g�d
�|j�
|jt�|�|j
�gd��d
�tjj�s�t�|�t�|�dS)Nz.dbZ	fail2ban_z:memory:�dbfile�dbmaxmatches�100�dZLIZARD�
dbpurgeage�600�X)r7ro�Nonerar8)r7rprq)r7rs�500)rhriZ	memory_db�tempfile�mkstemprJr+ZdelJailr.rIr/r0r@r-rA�os�close�unlink)r�tmpZtmpFilenamerrr!�testDatabase�sj
��
��
��
��
��
��
��

zTransmitter.testDatabasecCs�d}d}d}|�|j�d|dg�d|f�|�|j�d|g�d|f�|�|j�d|dg�dd�|�|j�d|d	g�d|f�|�|j�d|jdg�dd�|�|j�gd
��dd�dS)N�	TestJail2�	TestJail3Z	TestJail4rKrrzinvalid backendr
�auto)rK�--allr�r@r-rAr.)rZjail2Zjail3Zjail4rrr!�testAddJail�s&�����zTransmitter.testAddJailcsp���j�d�jg�d�t�tj���t�	�fdd�d�����j�d�jg�d���
�j�jj�dS)N�startracs&�j�d�o$t�j�d�jg�t�S)Nr
�status�r+ZisAlive�
isinstancer-rAr.�RuntimeErrorrr1rr!�<lambda>�z/Transmitter.testStartStopJail.<locals>.<lambda>�r`)
r@r-rAr.rkrfr�DEFAULT_SLEEP_TIMErl�wait_for�assertNotInr+�_Server__jailsr1rr1r!�testStartStopJail�s�
��zTransmitter.testStartStopJailcs��j�dt����j�d�jg�d����j�ddg�d�t�t	j
���t	��fdd�d�����j�ddg�d���t	��fd	d�d����
�j�jj���
d�jj�dS)
Nrr�racs&�j�d�o$t�j�d�jg�t�S)Nrr�r�rr1rr!r�r�z2Transmitter.testStartStopAllJail.<locals>.<lambda>r�r`r�cst�jj�Sr)�lenr+r�rr1rr!r�r�)r+r/r0r@r-rAr.rkrfrr�rlr�r�r�r1rr1r!�testStartStopAllJails ��
�z Transmitter.testStartStopAllJailcCsb|�|j�d|jddg�d�|�|j�d|jddg�d�|�|j�d|jddg�dd	�dS)
Nr7ZidleZon�rTZoff�rFZCATrr
r�r1rrr!�testJailIdles���zTransmitter.testJailIdlecCsf|jddd|jd�|jddd|jd�|jddd|jd�|jdd	d
|jd�|jdd|jd�dS)NZfindtimeZ120�x�rFZ60�<Z30m�z-60i���ZDog�rIr.rJr1rrr!�testJailFindTime(s
zTransmitter.testJailFindTimecCsf|jddd|jd�|jddd|jd�|jddd|jd�|jdd	d
|jd�|jdd|jd�dS)NZbantimertrur�Z50�2z-50i���z
15d 5h 30mi�ZCatr�r1rrr!�testJailBanTime/s
zTransmitter.testJailBanTimecCsf|jddd|jd�|jddd|jd�|jddd|jd�|jdd	d
|jd�|jdd|jd�dS)NZdatepattern�%%%Y%m%d%H%M%S)r�z%YearMonthDay24hourMinuteSecondr��Epoch)Nr�z^Epoch)Nz{^LN-BEG}Epoch�TAI64N)Nr�z
%Cat%a%%%gr�r1rrr!�testDatePattern6s�
�
�
�zTransmitter.testDatePatterncCs*|jddd|jd�|jdd|jd�dS)NZlogtimezonezUTC+0400r�znot-a-time-zoner�r1rrr!�testLogTimeZoneBszTransmitter.testLogTimeZonecCs\|jdd|jd�|jdd|jd�|jdd|jd�d}|�|j�d|jd|g�d�dS)	NZusednsZyesr��warn�noZFishr7)rr�)rIr.r@r-rA�rrWrrr!�testJailUseDNSFs�zTransmitter.testJailUseDNScCs|j�|j�|�|j�d|jddddg�d�|jddddd	�|�|j�d|jdd
g�d�|jddd
�|�|j�d|jdddddg�d�|jddddd	�|jddddd	�|��|�|j�d|jdddg�dd�|�|j�d|jdddg�d�|jddddd	�dS)Nr7�banip�	192.0.2.1�	192.0.2.2)rr�
Ban 192.0.2.1�
Ban 192.0.2.2T��all�waitZBadger�rr
z
Ban Badger�r��unbanipz192.0.2.255z192.0.2.254zUnban 192.0.2.1zUnban 192.0.2.2z192.0.2.255 is not bannedz192.0.2.254 is not bannedz--report-absentrr
)rr)r+�	startJailr.r@r-rA�assertLogged�pruneLogr1rrr!�
testJailBanIPQsF���������zTransmitter.testJailBanIPcs��j��j��fdd�}�jddd�jd�dD]&}dD]}��||d	|g�d
�q:q2�jddd
d
d���||dd�dD��d
��jdd
d��jdd
d���d�dS)Ncs�j�d�jd|g|�S)Nr7�attempt)r-rAr.)�ipZmatchesr1rr!r�qsz.Transmitter.testJailAttemptIP.<locals>.attempt�maxretry�5�r�)r
r)r�r��test failure %dr�z192.0.2.1:2z192.0.2.2:2Tr�cSsg|]}d|�qS)r�r)�.0�irrr!�
<listcomp>{r�z1Transmitter.testJailAttemptIP.<locals>.<listcomp>)r��r�z192.0.2.2:5r�r�r�)r+r�r.rIr@r��assertNotLogged)rr�r�r�rr1r!�testJailAttemptIPnszTransmitter.testJailAttemptIPcs�d}�j�|t��j�|�dddgf�fdd�	}||gd�||dddgd	�||d
dddgd	�||dgd
�d�||dd
dgd�||dd
gd�||d
gd�dS)NZTestJailBanListrcs�|dur6���j�d|d|g�d��jd|dd�|durl���j�d|d|g�d��jd|dd��j�j�d	|dgt|��d
|fdd�t�t��d
�dS)Nr7r�r�zBan %sTr�r�zUnban %sr8rF)Z
nestedOnlyr
)	r@r-rAr�rOrPrZsetTimerk)rFr�r�r�outListr1rr!�_getBanListTest�s"���z4Transmitter.testJailBanList.<locals>._getBanListTest)r��	127.0.0.1)z--with-timez:127.0.0.1 	2005-08-14 12:00:01 + 600 = 2005-08-14 12:10:01)r�rr��192.168.0.1z<192.168.0.1 	2005-08-14 12:00:02 + 600 = 2005-08-14 12:10:02�192.168.1.10)r�r�r�)r�r�)r�r�)r+r/r0r�)rrFr�rr1r!�testJailBanList�s6��������zTransmitter.testJailBanListcCsR|jddd|jd�|jddd|jd�|jddd|jd�|jdd	|jd�dS)
NZ
maxmatchesr�r�r��2r�-2����Duckr�r1rrr!�testJailMaxMatches�szTransmitter.testJailMaxMatchescCsR|jddd|jd�|jddd|jd�|jddd|jd�|jdd	|jd�dS)
Nr�r�r�r�r�rr�r�r�r�r1rrr!�testJailMaxRetry�szTransmitter.testJailMaxRetrycCsP|jddd|jd�|jddd|jd�|jdd|jd�|jdd|jd�dS)	NZmaxlinesr�r�r�r�rr�r�r�r1rrr!�testJailMaxLines�szTransmitter.testJailMaxLinescCsN|jdd|jd�|jdd|jd�|jddt|jd�|jdd|jd�dS)NZlogencodingzUTF-8r��asciir�ZMonkey)rIr.rrJr1rrr!�testJailLogEncoding�s
�zTransmitter.testJailLogEncodingc
Csh|�dtj�td�tj�td�tj�td�g|j�tj�td�}|�|j�d|jd|g�d|gf�|�|j�d|jd|g�d|gf�|�|j�d	|jdg�d|gf�|�|j�d|jd
|g�dgf�|�|j�d|jd|dg�d|gf�|�|j�d|jd|dg�d|gf�|�|j�d|jd|d
g�dd�|�|j�d|jd|||g�dd�dS)NZlogpath�testcase01.logztestcase02.logztestcase03.logztestcase04.logr7�
addlogpathrr8Z
dellogpath�tail�headZbadgerr
)	rYrz�path�join�TEST_FILES_DIRr.r@r-rAr�rrr!�testJailLogPath�sj��
��������������zTransmitter.testJailLogPathcCs2d}|j�d|jd|g�}|�t|dt��dS)Nzthis_file_shouldn't_existr7r�r
)r-rAr.rlr��IOError)rrW�resultrrr!�testJailLogPathInvalidFile�s
�z&Transmitter.testJailLogPathInvalidFilecCsXtjdd�}|d}t�||�|j�d|jd|g�}|�t|dt	��t�
|�dS)NZtmp_fail2ban_broken_symlink)�prefixz.slinkr7r�r
)rxZmktemprz�symlinkr-rAr.rlr�r�r|)r�nameZsnamer�rrr!�testJailLogPathBrokenSymlink�s�z(Transmitter.testJailLogPathBrokenSymlinkcCs�|�dgd�|j�d}|�|j�d|jd|g�d|gf�|�|j�d|jd|g�d|gf�|�|j�d|jdg�d|gf�|�|j�d|jd|g�dgf�|�|j�d|jd	g�d
�|�|j�d|jd	dg�d�|�|j�d|jd	g�d�dS)
NZignoreip)r�z192.168.1.1z8.8.8.8r�r7Zaddignoreiprr8ZdelignoreipZ
ignoreselfr�Fr�)rYr.r@r-rAr�rrr!�testJailIgnoreIPsD��������zTransmitter.testJailIgnoreIPcCs|jdd|jd�dS)NZ
ignorecommandzbin/ignore-command <ip>r��rIr.r1rrr!�testJailIgnoreCommand&sz!Transmitter.testJailIgnoreCommandcCs0|jddgd�|jd�|jddd|jd�dS)NZignorecachez%key="<ip>",max-time=1d,max-count=9999)z<ip>i'i�Qr��r�r1rrr!�testJailIgnoreCache)s�zTransmitter.testJailIgnoreCachecCs|jdd|jd�dS)NZ	prefregexz^Testr�r�r1rrr!�testJailPrefRegex0szTransmitter.testJailPrefRegexc
Cs�|�dgd�dt�d�dt�d�dt�d�g|j�|�|j�d|jdd	g�d
d�|�|j�d|jddg�d
d�dS)
NZ	failregex)zuser john at <HOST>�Admin user login from <HOST>z failed attempt from <HOST> againzuser john at %s�<HOST>�Admin user login from %szfailed attempt from %s againr7�addfailregexz
No host regexrr
i��rZrZ_resolveHostTagr.r@r-rAr1rrr!�
testJailRegex3s0��������zTransmitter.testJailRegexc	Csn|�dgd�ddt�d�dg|j�|�|j�d|jdd	g�d
d�|�|j�d|jddg�d
d�dS)
NZignoreregex)�	user johnr��Dont match me!r�r�r�r�r7ZaddignoreregexzInvalid [regexrr
r�r�r1rrr!�testJailIgnoreRegexKs0��������zTransmitter.testJailIgnoreRegexc	Cs�|jg}|�|j�dg�ddt|�fdd�|�fgf�|j�dt�|�	d�|�|j�dg�ddt|�fdd�|�fgf�dS)Nr�rzNumber of jailz	Jail listz, r)
r.r@r-rAr�r�r+r/r0�append)r�jailsrrr!�
testStatuscs�
�zTransmitter.testStatusc
CsB|�|j�d|jg�dddddgfgfddd	d
gfgfgf�dS)Nr�r�Filter�zCurrently failedr�zTotal failedr�	File list�Actions�zCurrently bannedr�zTotal bannedr�Banned IP listr�r1rrr!�testJailStatusls�����zTransmitter.testJailStatusc
CsD|�|j�d|jdg�dddddgfgfdd	d
dgfgfgf�dS)Nr�Zbasicrr�r�r�r�r�r�r�r�r�r1rrr!�testJailStatusBasic~s�����zTransmitter.testJailStatusBasicc
CsD|�|j�d|jdg�dddddgfgfdd	d
dgfgfgf�dS)Nr��INVALIDrr�r�r�r�r�r�r�r�r�r1rrr!�testJailStatusBasicKwarg�s�����z$Transmitter.testJailStatusBasicKwargc
Cs�tj��zddl}ddl}Wnty6dg}Yn0g}|�|j�d|j	dg�dddddgfgfd	d
ddgfd
|fd|fd|fgfgf�dS)Nr�errorr�Zcymrur�r�r�r�r�r�r�r�zBanned ASN listzBanned Country listzBanned RIR list)
rhriZSkipIfNoNetworkZ
dns.exceptionZdns.resolver�ImportErrorr@r-rAr.)rZdnsrWrrr!�testJailStatusCymru�s2
�����zTransmitter.testJailStatusCymrucCs�d}gd�}gd�}|�|j�d|jd|g�d|f�|�|j�d|jdg�d	d|�t||�D].\}}|�|j�d|jd
|||g�d|f�qdt||�D],\}}|�|j�d|jd
||g�d|f�q�|�|j�d|jd
|ddg�d
�|�|j�d|jd
|dg�d
�|�|j�d|jd
|dg�dd	�|�|j�d|jd
|ddg�d�|�|j�d|jd
|dg�d�|�|j�d|jd|g�d�|�|j�d|jddg�dd	�dS)N�TestCaseAction)ZactionstartZ
actionstopZactioncheckZ	actionbanZactionunban)zAction StartzAction StopzAction Checkz
Action BanzAction Unbanr7�	addactionrr8rr
�actionZKEY�VALUE)rrZ
InvalidKey�timeoutZ10)r�
Z	delactionraz
Doesn't exist)r@r-rAr.�zip)rrZcmdListZcmdValueListrBrWrrr!�
testAction�s��
����������������������zTransmitter.testActioncCs�d}z:|j�d|jd|tj�tdd�dg�}|�|d|f�WnXty�dt	j
krbd	kr�nn*d
|dvr�ddl}|�dt	j
�YdS�Yn0|�|j�d
|jd|g�dddg�|�|j�d
|jd|dg�d�|�|j�d
|jd|dg�d�|�|j�d
|jd|g�dgd��|�|j�d|jd|ddg�d�|�|j�d|jd|ddg�d�|�|j�d|jd|ddg�d�dS)Nrr7r�action.dz	action.pyz{"opt1": "value"}r)r�)rrr�z#__init__() keywords must be stringsr
z�Your version of Python %s seems to experience a known issue forbidding correct operation of Fail2Ban: http://bugs.python.org/issue2646  Upgrade your Python and meanwhile other intestPythonActionMethodsAndProperties will be skippedr8ZactionpropertiesZopt1Zopt2r)rrWraZ
actionmethods)�banZrebanr�r`�
testmethod�unbanr
z{"text": "world!"})rzHello world! value�
another value)rr)rzHello world! another value)r-rAr.rzr�r�r�r@�AssertionError�sys�version_info�warningsr�rrO)rr�outrrrr!�$testPythonActionMethodsAndProperties�s�
��
�������������������z0Transmitter.testPythonActionMethodsAndPropertiescCs |�|j�ddg�dd�dS)Nr��COMMANDrr
rbr1rrr!�testNOK0szTransmitter.testNOKcCs |�|j�gd��dd�dS)N)r7r�rrr
rbr1rrr!�
testSetNOK3s�zTransmitter.testSetNOKcCs |�|j�gd��dd�dS)N)r8r�rrr
rbr1rrr!�
testGetNOK7s�zTransmitter.testGetNOKcCs |�|j�gd��dd�dS)N)r�r�rrr
rbr1rrr!�
testStatusNOK;s�zTransmitter.testStatusNOKc
Cs6tst�d��d}|j�|d�gd�}t|�D]>\}}|�|j�d|d|g�ddd	�|d|d
�D�f�q0t|�D]>\}}|�|j�d|d|g�ddd	�||d
d�D�f�qxd
}|�|j�d|d|g�d|ggf�|�|j�d|d|g�d|g|ggf�|�|j�d|d|g�d|ggf�|�|j�d|d|g�dgf�gd�}|�|j�d|dg|�dd
gddggf�|�|j�d|dg|dd
��dddggf�|�|j�d|dg|dd��dgf�d}|j�d|d|g�}|�	t
|d
t��d}|j�d|d|g�}|�	t
|d
t��dS)N�&systemd python interface not availablerZsystemd��_SYSTEMD_UNIT=sshd.servicezTEST_FIELD1=ABCz_HOSTNAME=example.comr7�addjournalmatchrcSsg|]
}|g�qSrr�r��valrrr!r�Mr�z0Transmitter.testJournalMatch.<locals>.<listcomp>r
�deljournalmatchcSsg|]
}|g�qSrrrrrr!r�Rr��
_COMM=sshd)r"�+r�_UID=0rr$rzThis isn't valid!zFIELD=NotPresent)rrh�SkipTestr+r/rNr@r-rArlr��
ValueError)rr.rSrVrWr�rrr!�testJournalMatch?s�

��
��
�
�
��
�
�
��������
�
�zTransmitter.testJournalMatchc
Cs�tst�d��|�d�d}|j�|d�gd�}t|�D]>\}}|�|j�	d|d|g�dd	d
�|d|d�D�f�q:t|�D]>\}}|�|j�	d|d|g�dd
d
�||dd�D�f�q�dS)NrTr�zsystemd[journalflags=2]rr7rrcSsg|]
}|g�qSrrrrrr!r��r�z5Transmitter.testJournalFlagsMatch.<locals>.<listcomp>r
r!cSsg|]
}|g�qSrrrrrr!r��r�)
rrhr%rlr+r/rNr@r-rA)rr.rSrVrWrrr!�testJournalFlagsMatch�s(


��
��z!Transmitter.testJournalFlagsMatch)2r$r%r&r*r_rcrdrernr~r�r�r�r�r�r�r�r�r�r�r�rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rr	rrrrrr'r(r[rrr2r!r\�s\0
+*
%	<4Gr\csTeZdZ�fdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
�ZS)�TransmitterLoggingcs>t�|_tt|���|j�d�|j�d�|j�d�dS)N�	/dev/null�CRITICALr�)rr+r)r)r*r#r"ZsetSyslogSocketr1r2rr!r*�s
zTransmitterLogging.setUpcCs�g}td�D],}t�dd�}|�|d�t�|d�q|D]}|�d|�q>d}|�d|�|j�	gd��|D]}t�
|�qt|�dd	d
�|�ddd�dS)
Nr�rZtransmitterr
r�	logtarget�/this/path/should/not/exist)r7r,r*zSTDOUT[format="%(message)s"]ZSTDOUTz!STDERR[datetime=off, padding=off]�STDERR)�rangerxryr�rzr{rIrJr-rA�remove)rZ
logTargets�_ZtmpFileZ	logTargetrWrrr!�
testLogTarget�sz TransmitterLogging.testLogTargetcCsJtj�d�st�d��|�|j��d�|�dd�|�|j��d�dS)N�/dev/logz'/dev/log' not presentr�r,�SYSLOG)	rzr��existsrhr%rlr+ZgetSyslogSocketrIr1rrr!�testLogTargetSYSLOG�s

z&TransmitterLogging.testLogTargetSYSLOGcCs|�dd�dS)N�syslogsocketz/dev/log/NEW/PATH)rIr1rrr!�testSyslogSocket�sz#TransmitterLogging.testSyslogSocketc	Csd|�dd�|�dd�|�dd�|jdiitdtd�dd	�d
�t��dvoXtj�d���dS)
Nr7r-r,r4r3r
zFailed to change log targetT)rErDr=)TF)ZLinux)r,r4)	rIrJ�dict�	Exception�platform�systemrzr�r5r1rrr!�testSyslogSocketNOK�s����z&TransmitterLogging.testSyslogSocketNOKcCs�|�dd�|�dd�|�dd�|�dd�|�dd�|�dd�|�dd�|�dd	�|�dd
�|�ddd
�|�dd�dS)
NZloglevelZ
HEAVYDEBUGZ
TRACEDEBUG�9�DEBUG�INFOZNOTICE�WARNINGZERRORr+ZcRiTiCaLZBird)rIrJr1rrr!�testLogLevel�szTransmitterLogging.testLogLevelc	Cs�|�|j�dg�d��zt�d�\}}t�|�|j�d�|�|j�dd|g�d|f�t	d�}|�
d	��z�t�d�\}}t�|�t�||�|�
d
�|�|j�dg�d�|�
d�t|d���}t
|�}|�d
�dkr�t
|�}|�|�d��t
|�}|�|�d��z:t
|�}|�d�dk�r<|�t|j�n|�d|�Wnt�y`Yn0Wd�n1�sx0Yt|d��V}t
|�}|�d�dk�r�t
|�}|�|�d��|�t|j�|��Wd�n1�s�0YWt�|�nt�|�0Wzt�|�Wnt�y2Yn0n&zt�|�Wnt�yXYn00|�|j�gd��d�|�|j�dg�d�dS)NZ	flushlogs)rzrolled overzfail2ban.logrAr7r,rrzBefore file movedzAfter file movedzAfter flushlogs�rzChanged logging target tozBefore file moved
zAfter file moved
zCommand: ['flushlogs']zCException StopIteration or Command: ['flushlogs'] expected. Got: %szrollover performed onzAfter flushlogs
)r7r,r.)rr.)rZflushed)r@r-rArxryrzr{r+r"rZwarning�rename�open�next�findrl�endswith�assertRaises�
StopIteration�__next__�failr0�OSError)	r�f�fn�l�f2Zfn2Zline1Zline2rVrrr!�
testFlushLogs�s^




&*�z TransmitterLogging.testFlushLogscCs�|jddd|jd�|jddd|jd�|jdd	d
|jd�|jddd|jd�|jd
d|jd�|jddd|jd�|jddd|jd�dS)Nzbantime.increment�trueTr�zbantime.rndtimeZ30minr�zbantime.maxtimez	1000 daysi\&zbantime.factorr�zbantime.formulazGban.Time * math.exp(float(ban.Count+1)*banFactor)/math.exp(1*banFactor)zbantime.multipliersz1 5 30 60 300 720 1440 2880zbantime.overalljailsr�r1rrr!�testBanTimeIncrsz"TransmitterLogging.testBanTimeIncr)r$r%r&r*r2r6r8r=rBrRrTr[rrr2r!r)�s
0r)c@seZdZdd�ZdS)�	JailTestscCsd}t|�}|�|j|�dS)NZveryveryverylongname)r	r@r�)rZlongnamerFrrr!�testLongNameszJailTests.testLongNameN)r$r%r&rVrrrr!rUsrUc@s$eZdZdd�Zdd�Zdd�ZdS)�
RegexTestscCs.|�ttd�|�ttd�|�ttd�dS)Nr�� �	)rIrrr1rrr!�testInit%szRegexTests.testInitcCs8|�ttd���dd�d�|�ttd���d��dS)N�a�"�'z
Regex('a')r�z
FailRegex()r@rRr�replacerlr�
startswithr1rrr!�testStr+szRegexTests.testStrcCs|�ttd�|�ttd�|�td��|�td��|�td��|�td��|�td��|�td��|�td	��td
�}|�|���|�dg�|�|���|�t|j�td�}|�|���|�d
g�|�|���|�t|j�td�}|�|���|�dg�|�|���|�|��d�|�dg�|�|���|�|��d�|�dg�|�|���|�|��d�td�}|�|���|�dg�|�|���|�|�	�d�td�}|�dg�|�
�}|�||jfd�|�dg�|�
�}|�||jfd�|�dg�|�
�}|�||jfd�|�dg�|�
�}|�||jfd�td �}|�d!g�|�
�}|�||jfd"�|�d#g�|�
�}|�||jfd�|�d$g�|�
�}|�||jfd%�|�d&g�|�
�}|�||jfd'�dS)(Nr�z^test no group$z^test <HOST> group$z^test <IP4> group$z^test <IP6> group$z^test <DNS> group$z<^test id group: ip:port = <F-ID><IP4>(?::<F-PORT/>)?</F-ID>$z-^test id group: user:\(<F-ID>[^\)]+</F-ID>\)$z#^test id group: anything = <F-ID/>$z	%%<HOST>?)z%%r�r�z#%%inet(?:=<F-IP4/>|inet6=<F-IP6/>)?)z%%inet=testr�r�z(%%(?:inet(?:=<IP4>|6=<IP6>)?|dns=<DNS>?))z%%inet=192.0.2.1r�r�r�)z%%inet6=2001:DB8::r�r��
2001:DB8::)z%%dns=example.comr�r�zexample.com)z%test id group: user:(test login name)r�r�ztest login namez%%net=<SUBNET>)z%%net=192.0.2.1r�r�)r��inet4)z%%net=192.0.2.1/24r�r�)z192.0.2.0/24rb)z%%net=2001:DB8:FF:FF::1r�r�)z2001:db8:ff:ff::1�inet6)z%%net=2001:DB8:FF:FF::1/60r�r�)z2001:db8:ff:f0::/60rcz%%ip="<ADDR>", mask="<CIDR>?")z%%ip="192.0.2.2", mask=""r�r�)r�rb)z%%ip="192.0.2.2", mask="24"r�r�)z"%%ip="2001:DB8:2FF:FF::1", mask=""r�r�)z2001:db8:2ff:ff::1rc)z$%%ip="2001:DB8:2FF:FF::1", mask="60"r�r�)z2001:db8:2ff:f0::/60rc)rIrrrlr]Z
hasMatched�searchZgetHostr@Z	getFailIDZgetIPZ	familyStr)r�frr�rrr!�testHost1szzRegexTests.testHostN)r$r%r&rZr`rfrrrr!rW#srWc@seZdZdd�ZdS)�
_BadThreadcCstd��dS)Nzrun bad thread exception)r�r1rrr!�runysz_BadThread.runN)r$r%r&rhrrrr!rgxsrgc@s$eZdZdd�Zdd�Zdd�ZdS)�LoggingTestscCs*td�}|�|jjd�|�|jd�dS)Nzfail2ban.some.string.with.namerz
fail2ban.name)rr@�parentr�)rZ
testLogSysrrr!�testGetF2BLoggerszLoggingTests.testGetF2BLoggercs�tj}g��fdd�t_z<t�}|��|����t���fdd�d��W|t_n|t_0��d���	t
��d���	�ddt�dS)Ncs
��|�Sr)r�)rr:rr!r��r�z5LoggingTests.testFail2BanExceptHook.<locals>.<lambda>cst��o��d�S)N�Unhandled exception)r�Z
_is_loggedr�rr;rr!r��r�r�rlr
r)r�__excepthook__rgr�r�rlrr�r�r@r�r�)rZprev_exchookZ	badThreadrrmr!�testFail2BanExceptHook�s
z#LoggingTests.testFail2BanExceptHookc
Cs�g}t�dd�\}}t�|�|�|�t�dd�\}}t�|�|�|�t�}zT|j||dd�|�|���|�	d�W|�
�|D]}tj�|�r�t�
|�q�n*|�
�|D]}tj�|�r�t�
|�q�0dS)Nz
fail2ban.sockzf2b-testzfail2ban.pidF)ZforcezServer already running)rxryrzr{r�rr�r]r^r�r5r�r5r0)rZ	tmp_filesZsock_fdZ	sock_nameZ
pidfile_fdZpidfile_namer+rNrrr!�testStartFailedSockExists�s(



�z&LoggingTests.testStartFailedSockExistsN)r$r%r&rkrorprrrr!ri}sri)�ActionReader�JailsReader�
CONFIG_DIRcs�eZdZ�fdd�Z�fdd�Z�fdd�Zddd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dd�Zdd�Zddd�Z
dd�Z�ZS)�ServerConfigReaderTestscs tt|�j|i|��i|_dSr)r)rt�__init__�#_ServerConfigReaderTests__share_cfgrr2rr!ru�sz ServerConfigReaderTests.__init__cstt|���g|_dS)r(N)r)rtr*Z_execCmdLstr1r2rr!r*�szServerConfigReaderTests.setUpcstt|���dSr4)r)rtr6r1r2rr!r6�sz ServerConfigReaderTests.tearDownr�cCs6|�d�D]&}|�d�s&t�d|�q
t�|�q
dS)N�
�#zexec-cmd: `%s`T)�splitr_�logSys�debug)r�realCmdrrPrrr!�_executeCmd�s

z#ServerConfigReaderTests._executeCmdcCsPt|d�sJt�}i|_dD].\}}t|�}|�d�tj�||�|j|<q|jS)NZ__aInfos))�ipv4r�)�ipv6raru)�hasattrrZ _ServerConfigReaderTests__aInfosrZ
setBanTime�_actionsr��
ActionInfo)r�dmyjail�tr��ticketrrr!�_testActionInfos�s

z(ServerConfigReaderTests._testActionInfoscCs2|j}|��}|D�]}||jD�]}||j|}t�d�t�d|d|j�t�d�t|tj�snq"|j	|_
t�d�|��|��t�d�|��|�
|d�t�d�|��|�|d�t�d�|��|�
|d	�t�d
�|��|�|d	�t�d�|��|��q"qdS)N�4# ==================================================�
# == %-44s ==� - �# === start ===�# === ban-ipv4 ===r~�# === unban ipv4 ===�# === ban ipv6 ===r�# === unban ipv6 ===�# === stop ===)r�r�rrzr{�_namer�r��
CommandActionr}�
executeCmdr�r�rrr`)rr+r��aInfosrFr[rrrr!�_testExecActions�s,


z(ServerConfigReaderTests._testExecActionsc	Cs�tjjdd�ttd|jd�}|�|���|�|���|j	dd�}t
�}|j}|j}|D�]}|ddkr\|ddkr�d|d	<n�t
|�d
kr�|ddkr�|d	dkr�tj�td
|d�}tj�|�s�tj�td�}||d
<nDtjj�r$t
|�d
k�r$|ddv�r$|d	dk�r$d|d<d|d
<z||�Wq\t�yh}z|�d||f�WYd}~q\d}~00q\tjj�s�|�|�dS)NT�Zstock)�basedirZforce_enable�share_config)Zallow_no_filesrr�rKrrr�r7r�Zlogsr
r�)r7z	multi-setr�zDUMMY-REGEX <HOST>z"Command %r has failed. Received %r)rhri�SkipIfCfgMissingrrrsrvrl�read�
getOptions�convertrr,�_Transmitter__commandHandlerr�rzr�r�r�r5rjr:rLr�)	rr��streamr+r-�
cmdHandlerrBrO�errr!�testCheckStockJailActions�s@

$


�
�
�*
z1ServerConfigReaderTests.testCheckStockJailActionscCsb|�d|�}t|�\}}d|dgg}t||||jtd�}|�|���|�i�|�|�	��|S)Nz%(__name__)srKr)r�r�)
r^rrqrvrsrlr�r��extendr�)rrF�actZactNameZactOptr�rrrr!�getDefaultJailStreams��
z,ServerConfigReaderTests.getDefaultJailStreamc
Cs�tjjdd�tj��ddl}t�}|j}|�tj�	t
dd��D]V}tj�|��dd�}|�
d||�}|D]}|�|�\}}	|�|d�qn|�|�qBdS)	NTr�rr
z*.confz.confr�zj-)rhrir�Z
SkipIfFast�globrr,rzr�r�rs�basenamer^r�rAr@r�)
rr�r+r-ZactCfgr�r�rBrX�resrrr!�testCheckStockAllActions.s
z0ServerConfigReaderTests.testCheckStockAllActionscCstjjdd�ddddddd	d
ddd
ddddd�
fdddddddddddddddd�
fd d!d"d#d$d%d&d'd(d)d*d+�	fd,d-d"d#d.d/d0d1d2�fd3d4d5d6d7d8d9d:d;d<d=d>d?d@dA�fdBdCd5d6dDdEdFdGdHdIdJdKdLdMdA�fdNdOdPdQdRdSdTdUdVdWdXdYdZ�
fd[d\d]d^d_d`dadbdcdddedfdZ�
fdgdhd5d6didjdkdldmdndodpdqdrdA�fdsdtd5d6dudvdwdxdydzd{d|d}d~dA�fdd�d�d�d�d�d�d�d�d�d�d�d�d��fd�d�d�d�d�d�d�d�d�d�d�d�d�d��fd�d�d�d�d�d�d�d�d�d�d�d�d�d��fd�d�d�d�d�d�d�d�d�d�d�d�d�d�dA�fd�d�d�d�d�d�d�d�d�d�d�d�d�d��fd�d�d�d�d�d�d�d�d�d�d�d�d�d��fd�d�d�d�d�d�d�d�d�d�d�d�dZ�
fd�d�d�d�d�d�d�d�d�d�d�d�dZ�
fd�d�d�d�d�d�d�d�d2�fd�d�d�d�d�d�d�d�d2�ff}t�}|j}|j}|D]>\}}}|�||�}|D] }	|�|	�\}
}|�|
d��q��q�|j	}|�
�}
|D�]\}}}||jD�]}||j|}t�
d�t�
d�|d�|j�t�
d�|�t|tj��|j|_|�d�|��|�d��r�|j|d�d�di�n4|�d��r�|�d��r�|j|d�|d�d�di�|�d�|�|
d��|�d��r�|j|�d�d��|d�d�di�|�d��r|j|d�d�di�|j|�d�d��|d�d�di�|j|d�d�di�|�d��|�|
d��|j|�d�d��|d�d�di�|j|d�d�di�|�d��|�|
d��|�d��r�|j|�d�d��|d�d�di�|�d��r|j|d�d�di�|j|�d�d��|d�d�di�|j|�dd�di�|��d�|�|
d��|j|�d�d��|�dd�di�|j|�dd�di�|��d��r�|��d�|��|j|�dd�di�|��d�|��|��d��r�|j|�dd�di��q��q�dS(NTr�z
j-w-nft-mpzQnftables-multiport[name=%(__name__)s, port="http,https", protocol="tcp,udp,sctp"])zip Z	ipv4_addrzaddr-)zip6 Z	ipv6_addrzaddr6-)�`nft add table inet f2b-table`�W`nft -- add chain inet f2b-table f2b-chain \{ type filter hook input priority -1 \; \}`z9`for proto in $(echo 'tcp,udp,sctp' | sed 's/,/ /g'); do`z`done`)zG`nft add set inet f2b-table addr-set-j-w-nft-mp \{ type ipv4_addr\; \}`z�`nft add rule inet f2b-table f2b-chain $proto dport \{ $(echo 'http,https' | sed s/:/-/g) \} ip saddr @addr-set-j-w-nft-mp reject`)zH`nft add set inet f2b-table addr6-set-j-w-nft-mp \{ type ipv6_addr\; \}`z�`nft add rule inet f2b-table f2b-chain $proto dport \{ $(echo 'http,https' | sed s/:/-/g) \} ip6 saddr @addr6-set-j-w-nft-mp reject`)zG`{ nft flush set inet f2b-table addr-set-j-w-nft-mp 2> /dev/null; } || zH`{ nft flush set inet f2b-table addr6-set-j-w-nft-mp 2> /dev/null; } || )z�`{ nft -a list chain inet f2b-table f2b-chain | grep -oP '@addr-set-j-w-nft-mp\s+.*\s+\Khandle\s+(\d+)$'; } | while read -r hdl; do`�5`nft delete rule inet f2b-table f2b-chain $hdl; done`z3`nft delete set inet f2b-table addr-set-j-w-nft-mp`z�`{ nft -a list chain inet f2b-table f2b-chain | grep -oP '@addr6-set-j-w-nft-mp\s+.*\s+\Khandle\s+(\d+)$'; } | while read -r hdl; do`r�z4`nft delete set inet f2b-table addr6-set-j-w-nft-mp`)zO`nft list chain inet f2b-table f2b-chain | grep -q '@addr-set-j-w-nft-mp[ \t]'`)zP`nft list chain inet f2b-table f2b-chain | grep -q '@addr6-set-j-w-nft-mp[ \t]'`)zD`nft add element inet f2b-table addr-set-j-w-nft-mp \{ 192.0.2.1 \}`)zG`nft delete element inet f2b-table addr-set-j-w-nft-mp \{ 192.0.2.1 \}`)zF`nft add element inet f2b-table addr6-set-j-w-nft-mp \{ 2001:db8:: \}`)zI`nft delete element inet f2b-table addr6-set-j-w-nft-mp \{ 2001:db8:: \}`)
�ip4�ip6�*-start�	ip4-start�	ip6-start�flushr`�	ip4-check�	ip6-check�ip4-ban�	ip4-unban�ip6-ban�	ip6-unbanz
j-w-nft-apz8nftables-allports[name=%(__name__)s, protocol="tcp,udp"])r�r�)zG`nft add set inet f2b-table addr-set-j-w-nft-ap \{ type ipv4_addr\; \}`zg`nft add rule inet f2b-table f2b-chain meta l4proto \{ tcp,udp \} ip saddr @addr-set-j-w-nft-ap reject`)zH`nft add set inet f2b-table addr6-set-j-w-nft-ap \{ type ipv6_addr\; \}`zi`nft add rule inet f2b-table f2b-chain meta l4proto \{ tcp,udp \} ip6 saddr @addr6-set-j-w-nft-ap reject`)zG`{ nft flush set inet f2b-table addr-set-j-w-nft-ap 2> /dev/null; } || zH`{ nft flush set inet f2b-table addr6-set-j-w-nft-ap 2> /dev/null; } || )z�`{ nft -a list chain inet f2b-table f2b-chain | grep -oP '@addr-set-j-w-nft-ap\s+.*\s+\Khandle\s+(\d+)$'; } | while read -r hdl; do`r�z3`nft delete set inet f2b-table addr-set-j-w-nft-ap`z�`{ nft -a list chain inet f2b-table f2b-chain | grep -oP '@addr6-set-j-w-nft-ap\s+.*\s+\Khandle\s+(\d+)$'; } | while read -r hdl; do`r�z4`nft delete set inet f2b-table addr6-set-j-w-nft-ap`)zO`nft list chain inet f2b-table f2b-chain | grep -q '@addr-set-j-w-nft-ap[ \t]'`)zP`nft list chain inet f2b-table f2b-chain | grep -q '@addr6-set-j-w-nft-ap[ \t]'`)zD`nft add element inet f2b-table addr-set-j-w-nft-ap \{ 192.0.2.1 \}`)zG`nft delete element inet f2b-table addr-set-j-w-nft-ap \{ 192.0.2.1 \}`)zF`nft add element inet f2b-table addr6-set-j-w-nft-ap \{ 2001:db8:: \}`)zI`nft delete element inet f2b-table addr6-set-j-w-nft-ap \{ 2001:db8:: \}`zj-dummyzodummy[name=%(__name__)s, init="=='<family>/<ip>'==bt:<bantime>==bc:<bancount>==", target="/tmp/fail2ban.dummy"])z
family: inet4)z
family: inet6)z$`printf %b "=='/'==bt:600==bc:0==\n"z7`echo "[j-dummy] dummy /tmp/fail2ban.dummy -- started"`)z9`echo "[j-dummy] dummy /tmp/fail2ban.dummy -- clear all"`)z7`echo "[j-dummy] dummy /tmp/fail2ban.dummy -- stopped"`)zP`echo "[j-dummy] dummy /tmp/fail2ban.dummy -- banned 192.0.2.1 (family: inet4)"`)zR`echo "[j-dummy] dummy /tmp/fail2ban.dummy -- unbanned 192.0.2.1 (family: inet4)"`)zQ`echo "[j-dummy] dummy /tmp/fail2ban.dummy -- banned 2001:db8:: (family: inet6)"`)zS`echo "[j-dummy] dummy /tmp/fail2ban.dummy -- unbanned 2001:db8:: (family: inet6)"`)	r�r�r�r�r`r�r�r�r�zj-hostsdenyzPhostsdeny[name=%(__name__)s, actionstop="rm <file>", file="/tmp/fail2ban.dummy"])z5`printf %b "ALL: 192.0.2.1\n" >> /tmp/fail2ban.dummy`)z^`IP=$(echo "192.0.2.1" | sed 's/[][\.]/\\\0/g') && sed -i "/^ALL: $IP$/d" /tmp/fail2ban.dummy`)z8`printf %b "ALL: [2001:db8::]\n" >> /tmp/fail2ban.dummy`)za`IP=$(echo "[2001:db8::]" | sed 's/[][\.]/\\\0/g') && sed -i "/^ALL: $IP$/d" /tmp/fail2ban.dummy`)r�r�r�r�r�r�zj-w-iptables-mpzniptables-multiport[name=%(__name__)s, bantime="10m", port="http,https", protocol="tcp", chain="<known/chain>"])�
`iptables �icmp-port-unreachable)�`ip6tables �icmp6-port-unreachable)z$`iptables -w -N f2b-j-w-iptables-mp`z.`iptables -w -A f2b-j-w-iptables-mp -j RETURN`zU`iptables -w -I INPUT -p tcp -m multiport --dports http,https -j f2b-j-w-iptables-mp`)z%`ip6tables -w -N f2b-j-w-iptables-mp`z/`ip6tables -w -A f2b-j-w-iptables-mp -j RETURN`zV`ip6tables -w -I INPUT -p tcp -m multiport --dports http,https -j f2b-j-w-iptables-mp`)�$`iptables -w -F f2b-j-w-iptables-mp`�%`ip6tables -w -F f2b-j-w-iptables-mp`)zU`iptables -w -D INPUT -p tcp -m multiport --dports http,https -j f2b-j-w-iptables-mp`r�z$`iptables -w -X f2b-j-w-iptables-mp`zV`ip6tables -w -D INPUT -p tcp -m multiport --dports http,https -j f2b-j-w-iptables-mp`r�z%`ip6tables -w -X f2b-j-w-iptables-mp`)z>`iptables -w -n -L INPUT | grep -q 'f2b-j-w-iptables-mp[ \t]'`)z?`ip6tables -w -n -L INPUT | grep -q 'f2b-j-w-iptables-mp[ \t]'`)za`iptables -w -I f2b-j-w-iptables-mp 1 -s 192.0.2.1 -j REJECT --reject-with icmp-port-unreachable`)z_`iptables -w -D f2b-j-w-iptables-mp -s 192.0.2.1 -j REJECT --reject-with icmp-port-unreachable`)zd`ip6tables -w -I f2b-j-w-iptables-mp 1 -s 2001:db8:: -j REJECT --reject-with icmp6-port-unreachable`)zb`ip6tables -w -D f2b-j-w-iptables-mp -s 2001:db8:: -j REJECT --reject-with icmp6-port-unreachable`)r�r�r�r�r�r`r�r�r�r�r�r�zj-w-iptables-apzZiptables-allports[name=%(__name__)s, bantime="10m", protocol="tcp", chain="<known/chain>"])z$`iptables -w -N f2b-j-w-iptables-ap`z.`iptables -w -A f2b-j-w-iptables-ap -j RETURN`z4`iptables -w -I INPUT -p tcp -j f2b-j-w-iptables-ap`)z%`ip6tables -w -N f2b-j-w-iptables-ap`z/`ip6tables -w -A f2b-j-w-iptables-ap -j RETURN`z5`ip6tables -w -I INPUT -p tcp -j f2b-j-w-iptables-ap`)�$`iptables -w -F f2b-j-w-iptables-ap`�%`ip6tables -w -F f2b-j-w-iptables-ap`)z4`iptables -w -D INPUT -p tcp -j f2b-j-w-iptables-ap`r�z$`iptables -w -X f2b-j-w-iptables-ap`z5`ip6tables -w -D INPUT -p tcp -j f2b-j-w-iptables-ap`r�z%`ip6tables -w -X f2b-j-w-iptables-ap`)z>`iptables -w -n -L INPUT | grep -q 'f2b-j-w-iptables-ap[ \t]'`)z?`ip6tables -w -n -L INPUT | grep -q 'f2b-j-w-iptables-ap[ \t]'`)za`iptables -w -I f2b-j-w-iptables-ap 1 -s 192.0.2.1 -j REJECT --reject-with icmp-port-unreachable`)z_`iptables -w -D f2b-j-w-iptables-ap -s 192.0.2.1 -j REJECT --reject-with icmp-port-unreachable`)zd`ip6tables -w -I f2b-j-w-iptables-ap 1 -s 2001:db8:: -j REJECT --reject-with icmp6-port-unreachable`)zb`ip6tables -w -D f2b-j-w-iptables-ap -s 2001:db8:: -j REJECT --reject-with icmp6-port-unreachable`zj-w-iptables-ipsetz\iptables-ipset-proto6[name=%(__name__)s, port="http", protocol="tcp", chain="<known/chain>"])z f2b-j-w-iptables-ipset )z f2b-j-w-iptables-ipset6 )z8`ipset create f2b-j-w-iptables-ipset hash:ip timeout 0 `z�`iptables -w -I INPUT -p tcp -m multiport --dports http -m set --match-set f2b-j-w-iptables-ipset src -j REJECT --reject-with icmp-port-unreachable`)zE`ipset create f2b-j-w-iptables-ipset6 hash:ip timeout 0 family inet6`z�`ip6tables -w -I INPUT -p tcp -m multiport --dports http -m set --match-set f2b-j-w-iptables-ipset6 src -j REJECT --reject-with icmp6-port-unreachable`)�$`ipset flush f2b-j-w-iptables-ipset`�%`ipset flush f2b-j-w-iptables-ipset6`)z�`iptables -w -D INPUT -p tcp -m multiport --dports http -m set --match-set f2b-j-w-iptables-ipset src -j REJECT --reject-with icmp-port-unreachable`r�z&`ipset destroy f2b-j-w-iptables-ipset`z�`ip6tables -w -D INPUT -p tcp -m multiport --dports http -m set --match-set f2b-j-w-iptables-ipset6 src -j REJECT --reject-with icmp6-port-unreachable`r�z'`ipset destroy f2b-j-w-iptables-ipset6`)z=`ipset add f2b-j-w-iptables-ipset 192.0.2.1 timeout 0 -exist`)z3`ipset del f2b-j-w-iptables-ipset 192.0.2.1 -exist`)z?`ipset add f2b-j-w-iptables-ipset6 2001:db8:: timeout 0 -exist`)z5`ipset del f2b-j-w-iptables-ipset6 2001:db8:: -exist`)
r�r�r�r�r�r`r�r�r�r�zj-w-iptables-ipset-apzHiptables-ipset-proto6-allports[name=%(__name__)s, chain="<known/chain>"])z f2b-j-w-iptables-ipset-ap )z f2b-j-w-iptables-ipset-ap6 )z;`ipset create f2b-j-w-iptables-ipset-ap hash:ip timeout 0 `zu`iptables -w -I INPUT -m set --match-set f2b-j-w-iptables-ipset-ap src -j REJECT --reject-with icmp-port-unreachable`)zH`ipset create f2b-j-w-iptables-ipset-ap6 hash:ip timeout 0 family inet6`zx`ip6tables -w -I INPUT -m set --match-set f2b-j-w-iptables-ipset-ap6 src -j REJECT --reject-with icmp6-port-unreachable`)�'`ipset flush f2b-j-w-iptables-ipset-ap`�(`ipset flush f2b-j-w-iptables-ipset-ap6`)zu`iptables -w -D INPUT -m set --match-set f2b-j-w-iptables-ipset-ap src -j REJECT --reject-with icmp-port-unreachable`r�z)`ipset destroy f2b-j-w-iptables-ipset-ap`zx`ip6tables -w -D INPUT -m set --match-set f2b-j-w-iptables-ipset-ap6 src -j REJECT --reject-with icmp6-port-unreachable`r�z*`ipset destroy f2b-j-w-iptables-ipset-ap6`)z@`ipset add f2b-j-w-iptables-ipset-ap 192.0.2.1 timeout 0 -exist`)z6`ipset del f2b-j-w-iptables-ipset-ap 192.0.2.1 -exist`)zB`ipset add f2b-j-w-iptables-ipset-ap6 2001:db8:: timeout 0 -exist`)z8`ipset del f2b-j-w-iptables-ipset-ap6 2001:db8:: -exist`zj-w-iptablesz^iptables[name=%(__name__)s, bantime="10m", port="http", protocol="tcp", chain="<known/chain>"])z!`iptables -w -N f2b-j-w-iptables`z+`iptables -w -A f2b-j-w-iptables -j RETURN`z>`iptables -w -I INPUT -p tcp --dport http -j f2b-j-w-iptables`)z"`ip6tables -w -N f2b-j-w-iptables`z,`ip6tables -w -A f2b-j-w-iptables -j RETURN`z?`ip6tables -w -I INPUT -p tcp --dport http -j f2b-j-w-iptables`)�!`iptables -w -F f2b-j-w-iptables`�"`ip6tables -w -F f2b-j-w-iptables`)z>`iptables -w -D INPUT -p tcp --dport http -j f2b-j-w-iptables`r�z!`iptables -w -X f2b-j-w-iptables`z?`ip6tables -w -D INPUT -p tcp --dport http -j f2b-j-w-iptables`r�z"`ip6tables -w -X f2b-j-w-iptables`)z;`iptables -w -n -L INPUT | grep -q 'f2b-j-w-iptables[ \t]'`)z<`ip6tables -w -n -L INPUT | grep -q 'f2b-j-w-iptables[ \t]'`)z^`iptables -w -I f2b-j-w-iptables 1 -s 192.0.2.1 -j REJECT --reject-with icmp-port-unreachable`)z\`iptables -w -D f2b-j-w-iptables -s 192.0.2.1 -j REJECT --reject-with icmp-port-unreachable`)za`ip6tables -w -I f2b-j-w-iptables 1 -s 2001:db8:: -j REJECT --reject-with icmp6-port-unreachable`)z_`ip6tables -w -D f2b-j-w-iptables -s 2001:db8:: -j REJECT --reject-with icmp6-port-unreachable`zj-w-iptables-newzbiptables-new[name=%(__name__)s, bantime="10m", port="http", protocol="tcp", chain="<known/chain>"])z%`iptables -w -N f2b-j-w-iptables-new`z/`iptables -w -A f2b-j-w-iptables-new -j RETURN`zW`iptables -w -I INPUT -m state --state NEW -p tcp --dport http -j f2b-j-w-iptables-new`)z&`ip6tables -w -N f2b-j-w-iptables-new`z0`ip6tables -w -A f2b-j-w-iptables-new -j RETURN`zX`ip6tables -w -I INPUT -m state --state NEW -p tcp --dport http -j f2b-j-w-iptables-new`)�%`iptables -w -F f2b-j-w-iptables-new`�&`ip6tables -w -F f2b-j-w-iptables-new`)zW`iptables -w -D INPUT -m state --state NEW -p tcp --dport http -j f2b-j-w-iptables-new`r�z%`iptables -w -X f2b-j-w-iptables-new`zX`ip6tables -w -D INPUT -m state --state NEW -p tcp --dport http -j f2b-j-w-iptables-new`r�z&`ip6tables -w -X f2b-j-w-iptables-new`)z?`iptables -w -n -L INPUT | grep -q 'f2b-j-w-iptables-new[ \t]'`)z@`ip6tables -w -n -L INPUT | grep -q 'f2b-j-w-iptables-new[ \t]'`)zb`iptables -w -I f2b-j-w-iptables-new 1 -s 192.0.2.1 -j REJECT --reject-with icmp-port-unreachable`)z``iptables -w -D f2b-j-w-iptables-new -s 192.0.2.1 -j REJECT --reject-with icmp-port-unreachable`)ze`ip6tables -w -I f2b-j-w-iptables-new 1 -s 2001:db8:: -j REJECT --reject-with icmp6-port-unreachable`)zc`ip6tables -w -D f2b-j-w-iptables-new -s 2001:db8:: -j REJECT --reject-with icmp6-port-unreachable`zj-w-iptables-xtrezPiptables-xt_recent-echo[name=%(__name__)s, bantime="10m", chain="<known/chain>"])r�z/f2b-j-w-iptables-xtre`)r�z/f2b-j-w-iptables-xtre6`)z�`if [ `id -u` -eq 0 ];then iptables -w -I INPUT -m recent --update --seconds 3600 --name f2b-j-w-iptables-xtre -j REJECT --reject-with icmp-port-unreachable;fi`)z�`if [ `id -u` -eq 0 ];then ip6tables -w -I INPUT -m recent --update --seconds 3600 --name f2b-j-w-iptables-xtre6 -j REJECT --reject-with icmp6-port-unreachable;fi`)z4`echo / > /proc/net/xt_recent/f2b-j-w-iptables-xtre`z�`if [ `id -u` -eq 0 ];then iptables -w -D INPUT -m recent --update --seconds 3600 --name f2b-j-w-iptables-xtre -j REJECT --reject-with icmp-port-unreachable;fi`z5`echo / > /proc/net/xt_recent/f2b-j-w-iptables-xtre6`z�`if [ `id -u` -eq 0 ];then ip6tables -w -D INPUT -m recent --update --seconds 3600 --name f2b-j-w-iptables-xtre6 -j REJECT --reject-with icmp6-port-unreachable;fi`)z3`test -e /proc/net/xt_recent/f2b-j-w-iptables-xtre`)z4`test -e /proc/net/xt_recent/f2b-j-w-iptables-xtre6`)z=`echo +192.0.2.1 > /proc/net/xt_recent/f2b-j-w-iptables-xtre`)z=`echo -192.0.2.1 > /proc/net/xt_recent/f2b-j-w-iptables-xtre`)z?`echo +2001:db8:: > /proc/net/xt_recent/f2b-j-w-iptables-xtre6`)z?`echo -2001:db8:: > /proc/net/xt_recent/f2b-j-w-iptables-xtre6`)r�r�r�r�r`r�r�r�r�r�r�zj-w-pfz2pf[name=%(__name__)s, actionstart_on_demand=false]r)zF`echo "table <f2b-j-w-pf> persist counters" | pfctl -a f2b/j-w-pf -f-`z
port="<port>"z\`echo "block quick proto tcp from <f2b-j-w-pf> to any port $port" | pfctl -a f2b/j-w-pf -f-`)�,`pfctl -a f2b/j-w-pf -t f2b-j-w-pf -T flush`)zT`pfctl -a f2b/j-w-pf -sr 2>/dev/null | grep -v f2b-j-w-pf | pfctl -a f2b/j-w-pf -f-`r�z+`pfctl -a f2b/j-w-pf -t f2b-j-w-pf -T kill`)z.`pfctl -a f2b/j-w-pf -sr | grep -q f2b-j-w-pf`)z4`pfctl -a f2b/j-w-pf -t f2b-j-w-pf -T add 192.0.2.1`)z7`pfctl -a f2b/j-w-pf -t f2b-j-w-pf -T delete 192.0.2.1`)z5`pfctl -a f2b/j-w-pf -t f2b-j-w-pf -T add 2001:db8::`)z8`pfctl -a f2b/j-w-pf -t f2b-j-w-pf -T delete 2001:db8::`)r�r�r�r�r`r�r�r�r�r�r�z	j-w-pf-mpz@pf[actiontype=<multiport>][name=%(__name__)s, port="http,https"])zL`echo "table <f2b-j-w-pf-mp> persist counters" | pfctl -a f2b/j-w-pf-mp -f-`zport="http,https"zb`echo "block quick proto tcp from <f2b-j-w-pf-mp> to any port $port" | pfctl -a f2b/j-w-pf-mp -f-`)�2`pfctl -a f2b/j-w-pf-mp -t f2b-j-w-pf-mp -T flush`)z]`pfctl -a f2b/j-w-pf-mp -sr 2>/dev/null | grep -v f2b-j-w-pf-mp | pfctl -a f2b/j-w-pf-mp -f-`r�z1`pfctl -a f2b/j-w-pf-mp -t f2b-j-w-pf-mp -T kill`)z4`pfctl -a f2b/j-w-pf-mp -sr | grep -q f2b-j-w-pf-mp`)z:`pfctl -a f2b/j-w-pf-mp -t f2b-j-w-pf-mp -T add 192.0.2.1`)z=`pfctl -a f2b/j-w-pf-mp -t f2b-j-w-pf-mp -T delete 192.0.2.1`)z;`pfctl -a f2b/j-w-pf-mp -t f2b-j-w-pf-mp -T add 2001:db8::`)z>`pfctl -a f2b/j-w-pf-mp -t f2b-j-w-pf-mp -T delete 2001:db8::`z	j-w-pf-apzHpf[actiontype=<allports>, actionstart_on_demand=true][name=%(__name__)s])zL`echo "table <f2b-j-w-pf-ap> persist counters" | pfctl -a f2b/j-w-pf-ap -f-`zW`echo "block quick proto tcp from <f2b-j-w-pf-ap> to any" | pfctl -a f2b/j-w-pf-ap -f-`)�2`pfctl -a f2b/j-w-pf-ap -t f2b-j-w-pf-ap -T flush`)z]`pfctl -a f2b/j-w-pf-ap -sr 2>/dev/null | grep -v f2b-j-w-pf-ap | pfctl -a f2b/j-w-pf-ap -f-`r�z1`pfctl -a f2b/j-w-pf-ap -t f2b-j-w-pf-ap -T kill`)z4`pfctl -a f2b/j-w-pf-ap -sr | grep -q f2b-j-w-pf-ap`)z:`pfctl -a f2b/j-w-pf-ap -t f2b-j-w-pf-ap -T add 192.0.2.1`)z=`pfctl -a f2b/j-w-pf-ap -t f2b-j-w-pf-ap -T delete 192.0.2.1`)z;`pfctl -a f2b/j-w-pf-ap -t f2b-j-w-pf-ap -T add 2001:db8::`)z>`pfctl -a f2b/j-w-pf-ap -t f2b-j-w-pf-ap -T delete 2001:db8::`zj-w-fwcmd-mpzqfirewallcmd-multiport[name=%(__name__)s, bantime="10m", port="http,https", protocol="tcp", chain="<known/chain>"])z ipv4 r�)z ipv6 r�)z@`firewall-cmd --direct --add-chain ipv4 filter f2b-j-w-fwcmd-mp`zN`firewall-cmd --direct --add-rule ipv4 filter f2b-j-w-fwcmd-mp 1000 -j RETURN`z�`firewall-cmd --direct --add-rule ipv4 filter INPUT_direct 0 -m conntrack --ctstate NEW -p tcp -m multiport --dports "$(echo 'http,https' | sed s/:/-/g)" -j f2b-j-w-fwcmd-mp`)z@`firewall-cmd --direct --add-chain ipv6 filter f2b-j-w-fwcmd-mp`zN`firewall-cmd --direct --add-rule ipv6 filter f2b-j-w-fwcmd-mp 1000 -j RETURN`z�`firewall-cmd --direct --add-rule ipv6 filter INPUT_direct 0 -m conntrack --ctstate NEW -p tcp -m multiport --dports "$(echo 'http,https' | sed s/:/-/g)" -j f2b-j-w-fwcmd-mp`)z�`firewall-cmd --direct --remove-rule ipv4 filter INPUT_direct 0 -m conntrack --ctstate NEW -p tcp -m multiport --dports "$(echo 'http,https' | sed s/:/-/g)" -j f2b-j-w-fwcmd-mp`zC`firewall-cmd --direct --remove-rules ipv4 filter f2b-j-w-fwcmd-mp`zC`firewall-cmd --direct --remove-chain ipv4 filter f2b-j-w-fwcmd-mp`z�`firewall-cmd --direct --remove-rule ipv6 filter INPUT_direct 0 -m conntrack --ctstate NEW -p tcp -m multiport --dports "$(echo 'http,https' | sed s/:/-/g)" -j f2b-j-w-fwcmd-mp`zC`firewall-cmd --direct --remove-rules ipv6 filter f2b-j-w-fwcmd-mp`zC`firewall-cmd --direct --remove-chain ipv6 filter f2b-j-w-fwcmd-mp`)zc`firewall-cmd --direct --get-chains ipv4 filter | sed -e 's, ,\n,g' | grep -q '^f2b-j-w-fwcmd-mp$'`)zc`firewall-cmd --direct --get-chains ipv6 filter | sed -e 's, ,\n,g' | grep -q '^f2b-j-w-fwcmd-mp$'`)z|`firewall-cmd --direct --add-rule ipv4 filter f2b-j-w-fwcmd-mp 0 -s 192.0.2.1 -j REJECT --reject-with icmp-port-unreachable`)z`firewall-cmd --direct --remove-rule ipv4 filter f2b-j-w-fwcmd-mp 0 -s 192.0.2.1 -j REJECT --reject-with icmp-port-unreachable`)z~`firewall-cmd --direct --add-rule ipv6 filter f2b-j-w-fwcmd-mp 0 -s 2001:db8:: -j REJECT --reject-with icmp6-port-unreachable`)z�`firewall-cmd --direct --remove-rule ipv6 filter f2b-j-w-fwcmd-mp 0 -s 2001:db8:: -j REJECT --reject-with icmp6-port-unreachable`zj-w-fwcmd-apz]firewallcmd-allports[name=%(__name__)s, bantime="10m", protocol="tcp", chain="<known/chain>"])z@`firewall-cmd --direct --add-chain ipv4 filter f2b-j-w-fwcmd-ap`zN`firewall-cmd --direct --add-rule ipv4 filter f2b-j-w-fwcmd-ap 1000 -j RETURN`zQ`firewall-cmd --direct --add-rule ipv4 filter INPUT_direct 0 -j f2b-j-w-fwcmd-ap`)z@`firewall-cmd --direct --add-chain ipv6 filter f2b-j-w-fwcmd-ap`zN`firewall-cmd --direct --add-rule ipv6 filter f2b-j-w-fwcmd-ap 1000 -j RETURN`zQ`firewall-cmd --direct --add-rule ipv6 filter INPUT_direct 0 -j f2b-j-w-fwcmd-ap`)zT`firewall-cmd --direct --remove-rule ipv4 filter INPUT_direct 0 -j f2b-j-w-fwcmd-ap`zC`firewall-cmd --direct --remove-rules ipv4 filter f2b-j-w-fwcmd-ap`zC`firewall-cmd --direct --remove-chain ipv4 filter f2b-j-w-fwcmd-ap`zT`firewall-cmd --direct --remove-rule ipv6 filter INPUT_direct 0 -j f2b-j-w-fwcmd-ap`zC`firewall-cmd --direct --remove-rules ipv6 filter f2b-j-w-fwcmd-ap`zC`firewall-cmd --direct --remove-chain ipv6 filter f2b-j-w-fwcmd-ap`)zc`firewall-cmd --direct --get-chains ipv4 filter | sed -e 's, ,\n,g' | grep -q '^f2b-j-w-fwcmd-ap$'`)zc`firewall-cmd --direct --get-chains ipv6 filter | sed -e 's, ,\n,g' | grep -q '^f2b-j-w-fwcmd-ap$'`)z|`firewall-cmd --direct --add-rule ipv4 filter f2b-j-w-fwcmd-ap 0 -s 192.0.2.1 -j REJECT --reject-with icmp-port-unreachable`)z`firewall-cmd --direct --remove-rule ipv4 filter f2b-j-w-fwcmd-ap 0 -s 192.0.2.1 -j REJECT --reject-with icmp-port-unreachable`)z~`firewall-cmd --direct --add-rule ipv6 filter f2b-j-w-fwcmd-ap 0 -s 2001:db8:: -j REJECT --reject-with icmp6-port-unreachable`)z�`firewall-cmd --direct --remove-rule ipv6 filter f2b-j-w-fwcmd-ap 0 -s 2001:db8:: -j REJECT --reject-with icmp6-port-unreachable`zj-w-fwcmd-ipsetzXfirewallcmd-ipset[name=%(__name__)s, port="http", protocol="tcp", chain="<known/chain>"])z f2b-j-w-fwcmd-ipset )z f2b-j-w-fwcmd-ipset6 )z5`ipset create f2b-j-w-fwcmd-ipset hash:ip timeout 0 `z�`firewall-cmd --direct --add-rule ipv4 filter INPUT_direct 0 -p tcp -m multiport --dports "$(echo 'http' | sed s/:/-/g)" -m set --match-set f2b-j-w-fwcmd-ipset src -j REJECT --reject-with icmp-port-unreachable`)zB`ipset create f2b-j-w-fwcmd-ipset6 hash:ip timeout 0 family inet6`z�`firewall-cmd --direct --add-rule ipv6 filter INPUT_direct 0 -p tcp -m multiport --dports "$(echo 'http' | sed s/:/-/g)" -m set --match-set f2b-j-w-fwcmd-ipset6 src -j REJECT --reject-with icmp6-port-unreachable`)�!`ipset flush f2b-j-w-fwcmd-ipset`�"`ipset flush f2b-j-w-fwcmd-ipset6`)z�`firewall-cmd --direct --remove-rule ipv4 filter INPUT_direct 0 -p tcp -m multiport --dports "$(echo 'http' | sed s/:/-/g)" -m set --match-set f2b-j-w-fwcmd-ipset src -j REJECT --reject-with icmp-port-unreachable`r�z#`ipset destroy f2b-j-w-fwcmd-ipset`z�`firewall-cmd --direct --remove-rule ipv6 filter INPUT_direct 0 -p tcp -m multiport --dports "$(echo 'http' | sed s/:/-/g)" -m set --match-set f2b-j-w-fwcmd-ipset6 src -j REJECT --reject-with icmp6-port-unreachable`r�z$`ipset destroy f2b-j-w-fwcmd-ipset6`)z:`ipset add f2b-j-w-fwcmd-ipset 192.0.2.1 timeout 0 -exist`)z0`ipset del f2b-j-w-fwcmd-ipset 192.0.2.1 -exist`)z<`ipset add f2b-j-w-fwcmd-ipset6 2001:db8:: timeout 0 -exist`)z2`ipset del f2b-j-w-fwcmd-ipset6 2001:db8:: -exist`zj-w-fwcmd-ipset-apzbfirewallcmd-ipset[name=%(__name__)s, actiontype=<allports>, protocol="tcp", chain="<known/chain>"])z f2b-j-w-fwcmd-ipset-ap )z f2b-j-w-fwcmd-ipset-ap6 )z8`ipset create f2b-j-w-fwcmd-ipset-ap hash:ip timeout 0 `z�`firewall-cmd --direct --add-rule ipv4 filter INPUT_direct 0 -p tcp -m set --match-set f2b-j-w-fwcmd-ipset-ap src -j REJECT --reject-with icmp-port-unreachable`)zE`ipset create f2b-j-w-fwcmd-ipset-ap6 hash:ip timeout 0 family inet6`z�`firewall-cmd --direct --add-rule ipv6 filter INPUT_direct 0 -p tcp -m set --match-set f2b-j-w-fwcmd-ipset-ap6 src -j REJECT --reject-with icmp6-port-unreachable`)�$`ipset flush f2b-j-w-fwcmd-ipset-ap`�%`ipset flush f2b-j-w-fwcmd-ipset-ap6`)z�`firewall-cmd --direct --remove-rule ipv4 filter INPUT_direct 0 -p tcp -m set --match-set f2b-j-w-fwcmd-ipset-ap src -j REJECT --reject-with icmp-port-unreachable`r�z&`ipset destroy f2b-j-w-fwcmd-ipset-ap`z�`firewall-cmd --direct --remove-rule ipv6 filter INPUT_direct 0 -p tcp -m set --match-set f2b-j-w-fwcmd-ipset-ap6 src -j REJECT --reject-with icmp6-port-unreachable`r�z'`ipset destroy f2b-j-w-fwcmd-ipset-ap6`)z=`ipset add f2b-j-w-fwcmd-ipset-ap 192.0.2.1 timeout 0 -exist`)z3`ipset del f2b-j-w-fwcmd-ipset-ap 192.0.2.1 -exist`)z?`ipset add f2b-j-w-fwcmd-ipset-ap6 2001:db8:: timeout 0 -exist`)z5`ipset del f2b-j-w-fwcmd-ipset-ap6 2001:db8:: -exist`z
j-fwcmd-rrz4firewallcmd-rich-rules[port="22:24", protocol="tcp"])z
family='ipv4'r�)z
family='ipv6'r�)z�`ports="$(echo '22:24' | sed s/:/-/g)"; for p in $(echo $ports | tr ", " " "); do firewall-cmd --add-rich-rule="rule family='ipv4' source address='192.0.2.1' port port='$p' protocol='tcp' reject type='icmp-port-unreachable'"; done`)z�`ports="$(echo '22:24' | sed s/:/-/g)"; for p in $(echo $ports | tr ", " " "); do firewall-cmd --remove-rich-rule="rule family='ipv4' source address='192.0.2.1' port port='$p' protocol='tcp' reject type='icmp-port-unreachable'"; done`)z� `ports="$(echo '22:24' | sed s/:/-/g)"; for p in $(echo $ports | tr ", " " "); do firewall-cmd --add-rich-rule="rule family='ipv6' source address='2001:db8::' port port='$p' protocol='tcp' reject type='icmp6-port-unreachable'"; done`)z�`ports="$(echo '22:24' | sed s/:/-/g)"; for p in $(echo $ports | tr ", " " "); do firewall-cmd --remove-rich-rule="rule family='ipv6' source address='2001:db8::' port port='$p' protocol='tcp' reject type='icmp6-port-unreachable'"; done`z
j-fwcmd-rlz6firewallcmd-rich-logging[port="22:24", protocol="tcp"])a"`ports="$(echo '22:24' | sed s/:/-/g)"; for p in $(echo $ports | tr ", " " "); do firewall-cmd --add-rich-rule="rule family='ipv4' source address='192.0.2.1' port port='$p' protocol='tcp' log prefix='f2b-j-fwcmd-rl' level='info' limit value='1/m' reject type='icmp-port-unreachable'"; done`)a%`ports="$(echo '22:24' | sed s/:/-/g)"; for p in $(echo $ports | tr ", " " "); do firewall-cmd --remove-rich-rule="rule family='ipv4' source address='192.0.2.1' port port='$p' protocol='tcp' log prefix='f2b-j-fwcmd-rl' level='info' limit value='1/m' reject type='icmp-port-unreachable'"; done`)a% `ports="$(echo '22:24' | sed s/:/-/g)"; for p in $(echo $ports | tr ", " " "); do firewall-cmd --add-rich-rule="rule family='ipv6' source address='2001:db8::' port port='$p' protocol='tcp' log prefix='f2b-j-fwcmd-rl' level='info' limit value='1/m' reject type='icmp6-port-unreachable'"; done`)a'`ports="$(echo '22:24' | sed s/:/-/g)"; for p in $(echo $ports | tr ", " " "); do firewall-cmd --remove-rich-rule="rule family='ipv6' source address='2001:db8::' port port='$p' protocol='tcp' log prefix='f2b-j-fwcmd-rl' level='info' limit value='1/m' reject type='icmp6-port-unreachable'"; done`rr�r�r�r�r�r�r�r�r�r~r�r�r�r�r�r�r�rr�r�r�r�r�r�z# === flush ===r�r`)rhrir�rr,r�r�rAr@r�r�rrzr{r�rlr�r�r�r}r�r�r�r8r�r�rrr�r`)r�testJailsActionsr+r-r�rFr��testsr�rBrXr�r�r�r[rrrr!�testCheckStockCommandActionsBsF	�1�.���,�,�$�$�,�,�"����(�(�$�$��������'



,  
 
,  "z4ServerConfigReaderTests.testCheckStockCommandActionscCs`|}t|t�r|d}t�dd|�}t�ddd�|d�}t|t�rL||d<n|}tjj||d�S)	Nrz\)\s*\|\s*(\S*mail\b[^\n]*)z$) | cat; printf "\\n... | "; echo \1z\bADDRESSES=\$\(dig\s[^\n]+cSsdS)Nz@ADDRESSES="abuse-1@abuse-test-server, abuse-2@abuse-test-server"r)�mrrr!r�;r�z9ServerConfigReaderTests._executeMailCmd.<locals>.<lambda>r
)r)r�rP�re�subr�r�r�)rr|rrBrrr!�_executeMailCmd2s
��

z'ServerConfigReaderTests._executeMailCmdcCstjjdd�ddtj�td�ddtj�td�d	d
difdd
tj�td�ddtj�td�d	d
difddtj�td�ddtj�td�dddd�fddddd�ff}t�}|j}|j	}|D]:\}}}|�
||�}|D]}	|�|	�\}
}|�|
d�q�q�|j
}td�}
td�}t�}|D]�\}}}||jD]�}||j|}t�d�t�d|d|j�t�d�|j|_d
|
fd|ffD]t\}}|�|��s��q�|�d |�t|�}|�d!�|�d"d#g�tj�||�}|�|�|j||d$di��q��qD�q0dS)%NTr�zj-mail-whois-linesz\mail-whois-lines[name=%(__name__)s, grepopts="-m 1", grepmax=2, mailcmd="mail -s", logpath="r�rwz	         ztestcase01a.logz8", _whois_command="echo '-- information about <ip> --'"]r�)�;The IP 87.142.124.10 has just been banned by Fail2Ban afterz(100 attempts against j-mail-whois-lines.�.Here is more information about 87.142.124.10 :�%-- information about 87.142.124.10 --�2Lines containing failures of 87.142.124.10 (max 2)�etestcase01.log:Dec 31 11:59:59 [sshd] error: PAM: Authentication failure for kevin from 87.142.124.10�etestcase01a.log:Dec 31 11:55:01 [sshd] error: PAM: Authentication failure for test from 87.142.124.10zj-sendmail-whois-lineszxsendmail-whois-lines[name=%(__name__)s, grepopts="-m 1", grepmax=2, mailcmd='testmail -f "<sender>" "<dest>"', logpath=")r�z,100 attempts against j-sendmail-whois-lines.r�r�r�r�r�zj-complain-abusez�complain[name=%(__name__)s, grepopts="-m 1", grepmax=2, mailcmd="mail -s 'Hostname: <ip-host>, family: <family>' - ",debug=1,logpath="z", ])�6try to resolve 10.124.142.87.abuse-contacts.abusix.orgr�r�r�zymail -s Hostname: test-host, family: inet4 - Abuse from 87.142.124.10 abuse-1@abuse-test-server abuse-2@abuse-test-server)�htry to resolve 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.abuse-contacts.abusix.orgz0Lines containing failures of 2001:db8::1 (max 2)zwmail -s Hostname: test-host, family: inet6 - Abuse from 2001:db8::1 abuse-1@abuse-test-server abuse-2@abuse-test-server)r�r�zj-xarf-abusezIxarf-login-attack[name=%(__name__)s, mailcmd="mail", mailargs="",debug=1])r�z8We have detected abuse from the IP address 87.142.124.10�VDec 31 11:59:59 [sshd] error: PAM: Authentication failure for kevin from 87.142.124.10�UDec 31 11:55:01 [sshd] error: PAM: Authentication failure for test from 87.142.124.10�8mail abuse-1@abuse-test-server abuse-2@abuse-test-server)r�z6We have detected abuse from the IP address 2001:db8::1r�rz
87.142.124.10z2001:db8::1r�r�r�r�z# === %s ===rrr�r�r�) rhrir�rzr�r�r�rr,r�r�rAr@r�rrrrzr{r�r�r�r8r�rZ
setAttemptZ
setMatchesr�r�r�rr�)rr�r+r-r�rFr�r�r�rBrXr�r�r~rr�r[r�testr�r�rrr!�testComplexMailActionMultiLogDs��������������������		��	���_


�
z5ServerConfigReaderTests.testComplexMailActionMultiLog)r�)r�)r$r%r&rur*r6r}r�r�r�r�r�r�r�r�r[rrr2r!rt�s"

"3u
rt)@�
__author__Z
__copyright__Z__license__rhrkrxrzr�rr;Zserver.failregexrrrr+rr�Z
server.serverrZserver.ipdnsrZserver.jailr	Zserver.jailthreadr
Z
server.ticketrZserver.utilsrZ	dummyjailrZutilsrrrZhelpersrrrr�rrrr�r��dirname�__file__r�r0rzrr'r\r)ZTestCaserUrWrgriZclientreadertestcaserqrrrsrtrrrr!�<module>sX
[}	U*