https://t.me/RX1948
Server : Apache
System : Linux iad1-shared-b8-43 6.6.49-grsec-jammy+ #10 SMP Thu Sep 12 23:23:08 UTC 2024 x86_64
User : dh_edsupp ( 6597262)
PHP Version : 8.2.26
Disable Function : NONE
Directory :  /lib/python3/dist-packages/fail2ban/tests/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //lib/python3/dist-packages/fail2ban/tests/__pycache__/servertestcase.cpython-310.pyc
o

;s*b�]�@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*y�dZ)Ynwej+�,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 Jaquier�GPL�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)�
TestServercO�dS�N���self�args�kwargsrr�?/usr/lib/python3/dist-packages/fail2ban/tests/servertestcase.py�setLogLevel<�zTestServer.setLogLevelcOrrrrrrr#�setLogTarget?r%zTestServer.setLogTargetN)�__name__�
__module__�__qualname__r$r&rrrr#r;srcsLeZdZ�fdd�Z�fdd�Zdd	d
�Zddd�Zd
d�Zdd�Z�Z	S)�TransmitterBasecs2tt|���|jj|_d|_|j�|jt�dS)�Call before every test case.�	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*�tearDownr5r6rr#r:Ns
zTransmitterBase.tearDownrrNFc
s�d||g}d|g}|dur|�d|�|�d|�|dkr|}�fdd�}	|�|	|j�|��|	||f��|sI|�|	|j�|��|	d|f��dSdS)	zoProcess set/get commands and compare both return values 
		with outValue if it was given otherwise with inValue�set�getNrrcs�rt|�S|S)zPrepare value for comparison)�repr��x��repr_rr#�vasz%TransmitterBase.setGetTest.<locals>.vr)�insert�assertEqualr1�proceed)
r �cmd�inValue�outValue�outCode�jailrA�setCmd�getCmdrBrr@r#�
setGetTestTs
 $�zTransmitterBase.setGetTestcCsvd||g}d|g}|dur|�d|�|�d|�|j�|�d}|�|j�|�dd�|�|j�|�d|f�dS)Nr;r<rr)rCr1rErD)r rFrGrJrKrL�	initValuerrr#�
setGetTestNOKjs
zTransmitterBase.setGetTestNOKc	Cs�d|}d|}|�|j�d||g�dgf�t|�D]W\}}|j�d|||g�}|j|dttt|d��fdttt|d|d���fdd�|j�d||g�}|j|dttt|d��fdttt|d|d���fdd�qt|�D]W\}}|j�d|||g�}|j|dttt|d��fdttt||dd���fdd�|j�d||g�}|j|dttt|d��fdttt||dd���fdd�qwdS)	N�add�delr<rr;rr)�level)rDr1rE�	enumerate�assertSortedEqual�list�map�str)	r rF�valuesrJ�cmdAdd�cmdDel�n�value�retrrr#�jailAddDelTestws �@B@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�qt|�D]/\}}|�|j�d||dg�d||dd�f�|�|j�d||g�d||dd�f�qOdS)NrPrQr<rr;r)rDr1rErS)	r rF�inValues�	outValuesrJrYrZr[r\rrr#�jailAddDelRegexTest�s0������z#TransmitterBase.jailAddDelRegexTest)rrNF)
r'r(r)r.r:rMrOr^ra�
__classcell__rrr6r#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-rcr.r5r6rr#r.�szTransmitter.setUpcCs|�|j���dSr)�assertFalser/�	isStartedr5rrr#�testServerIsNotStarted�sz"Transmitter.testServerIsNotStartedcC�|�|j�dg�d�dS)N�stop�rN�rDr1rEr5rrr#�testStopServer��zTransmitter.testStopServercCrg)N�ping)r�pongrjr5rrr#�testPing�rlzTransmitter.testPingcCs |�|j�dg�dtjf�dS)Nrr)rDr1rErr5rrr#�testVersion�� zTransmitter.testVersioncCs~tjjs1t��}|�|j�ddg�d�t��}||}|jd|ko'dknd|d�dS|�|j�ddg�d�dS)	N�sleepz0.1rig
ףp=
�?g�������?zSleep was %g sec)�msgz0.0001)�unittest�F2B�fast�timerDr1rE�
assertTrue)r �t0�t1�dtrrr#�	testSleep�s*zTransmitter.testSleepcCs�tjjs
t�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
�tjjs�t�|�t�|�dSdS)Nz.db�	fail2ban_z:memory:�dbfile�dbmaxmatches�100�d�LIZARD�
dbpurgeage�600�X)r;r~�Nonerir<)r;rr�)r;r��500)rtru�	memory_db�tempfile�mkstemprOr/�delJailr2rMr3r4rDr1rE�os�close�unlink)r �tmp�tmpFilenamerrr#�testDatabase�sl
��
��
��
��
��
��
��
�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�	TestJail3�	TestJail4rPrrzinvalid backendr�auto)rP�--allr�rDr1rEr2)r �jail2�jail3�jail4rrr#�testAddJail�s&�����zTransmitter.testAddJailcsp���j�d�jg�d�t�tj���t�	�fdd�d�����j�d�jg�d���
�j�jj�dS)N�startric�&�j�d�ot�j�d�jg�t�S)Nr�status�r/�isAlive�
isinstancer1rEr2�RuntimeErrorrr5rr#�<lambda>�&z/Transmitter.testStartStopJail.<locals>.<lambda>�rh)
rDr1rEr2rwrrr
�DEFAULT_SLEEP_TIMErx�wait_for�assertNotInr/�_Server__jailsr5rr5r#�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)
Nr�r�ricr�)Nrr�r�rr5rr#r�r�z2Transmitter.testStartStopAllJail.<locals>.<lambda>r�rhr�cst�jj�Sr)�lenr/r�rr5rr#r�s)r/r3r4rDr1rEr2rwrrr
r�rxr�r�r�r5rr5r#�testStartStopAllJails ��
�z Transmitter.testStartStopAllJailcCsb|�|j�d|jddg�d�|�|j�d|jddg�d�|�|j�d|jddg�dd	�dS)
Nr;�idle�on�rT�off�rF�CATrrr�r5rrr#�testJailIdles���zTransmitter.testJailIdlecC�f|jddd|jd�|jddd|jd�|jddd|jd�|jdd	d
|jd�|jdd|jd�dS)N�findtime�120�x�rJ�60�<�30m�z-60i����Dog�rMr2rOr5rrr#�testJailFindTime(�
zTransmitter.testJailFindTimecCr�)N�bantimer�r�r��50�2z-50i���z
15d 5h 30mi��Catr�r5rrr#�testJailBanTime/r�zTransmitter.testJailBanTimecCr�)N�datepattern�%%%Y%m%d%H%M%S)r�z%YearMonthDay24hourMinuteSecondr��Epoch)Nr�z^Epoch)Nz{^LN-BEG}Epoch�TAI64N)Nr�z
%Cat%a%%%gr�r5rrr#�testDatePattern6s�
�
�
�zTransmitter.testDatePatterncCs*|jddd|jd�|jdd|jd�dS)N�logtimezonezUTC+0400r�znot-a-time-zoner�r5rrr#�testLogTimeZoneBszTransmitter.testLogTimeZonecCs\|jdd|jd�|jdd|jd�|jdd|jd�d}|�|j�d|jd|g�d�dS)	N�usedns�yesr��warn�no�Fishr;)rr�)rMr2rDr1rE�r r\rrr#�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)Nr;�banip�	192.0.2.1�	192.0.2.2)rr�
Ban 192.0.2.1�
Ban 192.0.2.2T��all�wait�Badger�rrz
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/�	startJailr2rDr1rE�assertLogged�pruneLogr5rrr#�
testJailBanIPQsF���������zTransmitter.testJailBanIPcs��j��j��fdd�}�jddd�jd�dD]}dD]}��||d	|g�d
�qq�jddd
d
d���||dd�dD��d
��jdd
d��jdd
d���d�dS)Ncs�j�d�jd|g|�S)Nr;�attempt)r1rEr2)�ip�matchesr5rr#r�qrlz.Transmitter.testJailAttemptIP.<locals>.attempt�maxretry�5�r�)rr)r�r��test failure %dr�z192.0.2.1:2z192.0.2.2:2Tr�cSsg|]}d|�qS)r�r)�.0�irrr#�
<listcomp>{sz1Transmitter.testJailAttemptIP.<locals>.<listcomp>)r��r�z192.0.2.2:5r�r�r�)r/r�r2rMrDr��assertNotLogged)r r�r�r�rr5r#�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)N�TestJailBanListrcs�|dur���j�d|d|g�d��jd|dd�|dur6���j�d|d|g�d��jd|dd��j�j�d	|dgt|��d
|fdd�t�t��d
�dS)Nr;r�r�zBan %sTr�r�zUnban %sr<rF)�
nestedOnlyr)	rDr1rEr�rTrUr�setTimerw)rJr�r�r!�outListr5rr#�_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�r!r��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/r3r4r�)r rJr�rr5r#�testJailBanList�s6�������
�zTransmitter.testJailBanListcC�R|jddd|jd�|jddd|jd�|jddd|jd�|jdd	|jd�dS)
N�
maxmatchesr�r�r��2r�-2����Duckr�r5rrr#�testJailMaxMatches��zTransmitter.testJailMaxMatchescCr�)
Nr�r�r�r�r�rr�r�r�r�r5rrr#�testJailMaxRetry�rzTransmitter.testJailMaxRetrycCsP|jddd|jd�|jddd|jd�|jdd|jd�|jdd|jd�dS)	N�maxlinesr�r�r�r�rr�r�r�r5rrr#�testJailMaxLines�szTransmitter.testJailMaxLinescCsN|jdd|jd�|jdd|jd�|jddt|jd�|jdd|jd�dS)N�logencodingzUTF-8r��asciir��Monkey)rMr2rrOr5rrr#�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)N�logpath�testcase01.logztestcase02.logztestcase03.logztestcase04.logr;�
addlogpathrr<�
dellogpath�tail�head�badgerr)	r^r��path�join�TEST_FILES_DIRr2rDr1rEr�rrr#�testJailLogPath�sj��
��������������zTransmitter.testJailLogPathcCs2d}|j�d|jd|g�}|�t|dt��dS)Nzthis_file_shouldn't_existr;rr)r1rEr2rxr��IOError)r r\�resultrrr#�testJailLogPathInvalidFile�s
�z&Transmitter.testJailLogPathInvalidFilecCsXtjdd�}|d}t�||�|j�d|jd|g�}|�t|dt	��t�
|�dS)N�tmp_fail2ban_broken_symlink)�prefixz.slinkr;rr)r��mktempr��symlinkr1rEr2rxr�rr�)r �name�snamerrrr#�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)
N�ignoreip)r�z192.168.1.1z8.8.8.8r�r;�addignoreiprr<�delignoreip�
ignoreselfr�Fr�)r^r2rDr1rEr�rrr#�testJailIgnoreIPsD��������zTransmitter.testJailIgnoreIPcC�|jdd|jd�dS)N�
ignorecommandzbin/ignore-command <ip>r��rMr2r5rrr#�testJailIgnoreCommand&�z!Transmitter.testJailIgnoreCommandcCs0|jddgd�|jd�|jddd|jd�dS)N�ignorecachez%key="<ip>",max-time=1d,max-count=9999)z<ip>i'i�Qr��r%r5rrr#�testJailIgnoreCache)s�zTransmitter.testJailIgnoreCachecCr#)N�	prefregexz^Testr�r%r5rrr#�testJailPrefRegex0r'zTransmitter.testJailPrefRegexc
Cs�|�dgd�dt�d�dt�d�dt�d�g|j�|�|j�d|jdd	g�d
d�|�|j�d|jddg�d
d�dS)
N�	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 againr;�addfailregexz
No host regexrri��rar�_resolveHostTagr2rDr1rEr5rrr#�
testJailRegex3s0��������zTransmitter.testJailRegexc	Csn|�dgd�ddt�d�dg|j�|�|j�d|jdd	g�d
d�|�|j�d|jddg�d
d�dS)
N�ignoreregex)�	user johnr.�Dont match me!r6r0r/r7r;�addignoreregexzInvalid [regexrrr�r2r5rrr#�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�)
r2rDr1rEr�rr/r3r4�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�r5rrr#�testJailStatusls�����zTransmitter.testJailStatusc
C�D|�|j�d|jdg�dddddgfgfdd	d
dgfgfgf�dS)Nr��basicrr=r>r?r@rArBrCrDr�r5rrr#�testJailStatusBasic~������zTransmitter.testJailStatusBasicc
CrF)Nr��INVALIDrr=r>r?r@rArBrCrDr�r5rrr#�testJailStatusBasicKwarg�rIz$Transmitter.testJailStatusBasicKwargc
Cs�tj��z
ddl}ddl}Wntydg}Ynwg}|�|j�d|j	dg�dddddgfgfd	d
ddgfd
|fd|fd|fgfgf�dS)Nr�errorr��cymrur=r>r?r@rArBrCrDzBanned ASN listzBanned Country listzBanned RIR list)
rtru�SkipIfNoNetwork�
dns.exception�dns.resolver�ImportErrorrDr1rEr2)r �dnsr\rrr#�testJailStatusCymru�s4

������zTransmitter.testJailStatusCymrucCs�d}gd�}gd�}|�|j�d|jd|g�d|f�|�|j�d|jdg�d	d|�t||�D]\}}|�|j�d|jd
|||g�d|f�q2t||�D]\}}|�|j�d|jd
||g�d|f�qO|�|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)�actionstart�
actionstop�actioncheck�	actionban�actionunban)zAction StartzAction StopzAction Checkz
Action BanzAction Unbanr;�	addactionrr<rr�action�KEY�VALUE)rr]�
InvalidKey�timeout�10)r�
�	delactionriz
Doesn't exist)rDr1rEr2�zip)r r[�cmdList�cmdValueListrFr\rrr#�
testAction�s��
����������������������zTransmitter.testActioncCs�d}z|j�d|jd|tj�tdd�dg�}|�|d|f�Wn*tyIdt	j
kr1d	krHn�d
|dvrHddl}|�dt	j
�YdS�w|�|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)NrTr;rZ�action.dz	action.pyz{"opt1": "value"}r)r�)rrhr�z#__init__() keywords must be stringsrz�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 skippedr<�actionproperties�opt1�opt2r[)rr\ri�
actionmethods)�ban�rebanr�rh�
testmethod�unbanroz{"text": "world!"})rzHello world! value�
another value)rrq)rzHello world! another value)r1rEr2r�rrrrD�AssertionError�sys�version_info�warningsr�rrT)r r[�outrurrr#�$testPythonActionMethodsAndProperties�s�
��
��������������������z0Transmitter.testPythonActionMethodsAndPropertiescCs |�|j�ddg�dd�dS)NrJ�COMMANDrrrjr5rrr#�testNOK0rqzTransmitter.testNOKcC� |�|j�gd��dd�dS)N)r;rJrxrrrjr5rrr#�
testSetNOK3��zTransmitter.testSetNOKcCrz)N)r<rJrxrrrjr5rrr#�
testGetNOK7r|zTransmitter.testGetNOKcCrz)N)r�rJrxrrrjr5rrr#�
testStatusNOK;r|zTransmitter.testStatusNOKc
Cs6tst�d��d}|j�|d�gd�}t|�D]\}}|�|j�d|d|g�ddd	�|d|d
�D�f�qt|�D]\}}|�|j�d|d|g�ddd	�||d
d�D�f�q<d
}|�|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 availabler��systemd��_SYSTEMD_UNIT=sshd.servicezTEST_FIELD1=ABCz_HOSTNAME=example.comr;�addjournalmatchrcS�g|]}|g�qSrr�r��valrrr#r�M�z0Transmitter.testJournalMatch.<locals>.<listcomp>r�deljournalmatchcSr�rrr�rrr#r�Rr��
_COMM=sshd)r��+r��_UID=0r�r�rzThis isn't valid!zFIELD=NotPresent)rrt�SkipTestr/r3rSrDr1rErxr��
ValueError)r r2rXr[r\rrrr#�testJournalMatch?s�

��
��
�
�
��
�
�
��������
�
�zTransmitter.testJournalMatchc
Cs�tst�d��|�d�d}|j�|d�gd�}t|�D]\}}|�|j�	d|d|g�dd	d
�|d|d�D�f�qt|�D]\}}|�|j�	d|d|g�dd
d
�||dd�D�f�qAdS)NrTr�zsystemd[journalflags=2]r�r;r�rcSr�rrr�rrr#r��r�z5Transmitter.testJournalFlagsMatch.<locals>.<listcomp>rr�cSr�rrr�rrr#r��r�)
rrtr�rxr/r3rSrDr1rE)r r2rXr[r\rrr#�testJournalFlagsMatch�s*


��
���z!Transmitter.testJournalFlagsMatch)2r'r(r)r.rfrkrorpr|r�r�r�r�r�r�r�r�r�r�r�r�rr�rrrrrrrr"r&r*r,r4r9r<rErHrKrSrfrwryr{r}r~r�r�rbrrr6r#rc�s^0
+*
%	<4GrccsTeZdZ�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$�setSyslogSocketr5r6rr#r.�s
zTransmitterLogging.setUpcCs�g}td�D]}t�dd�}|�|d�t�|d�q|D]}|�d|�qd}|�d|�|j�	gd��|D]}t�
|�q:|�dd	d
�|�ddd�dS)
Nr�r�transmitterrr�	logtarget�/this/path/should/not/exist)r;r�r�zSTDOUT[format="%(message)s"]�STDOUTz!STDERR[datetime=off, padding=off]�STDERR)�ranger�r�r:r�r�rMrOr1rE�remove)r �
logTargets�_�tmpFile�	logTargetr\rrr#�
testLogTarget�sz TransmitterLogging.testLogTargetcCsJtj�d�st�d��|�|j��d�|�dd�|�|j��d�dS)N�/dev/logz'/dev/log' not presentr�r��SYSLOG)	r�r�existsrtr�rxr/�getSyslogSocketrMr5rrr#�testLogTargetSYSLOG�s

z&TransmitterLogging.testLogTargetSYSLOGcCs|�dd�dS)N�syslogsocketz/dev/log/NEW/PATH)rMr5rrr#�testSyslogSocket�sz#TransmitterLogging.testSyslogSocketc	Csd|�dd�|�dd�|�dd�|jdiitdtd�dd	�d
�t��dvo,tj�d���dS)
Nr�r�r�r�r�rzFailed to change log targetT)rIrHrA)TF)�Linux)r�r�)	rMrO�dict�	Exception�platform�systemr�rr�r5rrr#�testSyslogSocketNOK�s���
�z&TransmitterLogging.testSyslogSocketNOKcCs�|�dd�|�dd�|�dd�|�dd�|�dd�|�dd�|�dd�|�dd	�|�dd
�|�ddd
�|�dd�dS)
N�loglevel�
HEAVYDEBUG�
TRACEDEBUG�9�DEBUG�INFO�NOTICE�WARNING�ERRORr��cRiTiCaL�Bird)rMrOr5rrr#�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��Q}t
|�}|�d
�dkrtt
|�}|�|�d��t
|�}|�|�d��zt
|�}|�d�dkr�|�t|j�n|�d|�Wn	ty�YnwWd�n1s�wYt|d��*}t
|�}|�d�dkr�t
|�}|�|�d��|�t|j�|��Wd�n1s�wYWt�|�nt�|�wWzt�|�Wnt�yYnwzt�|�Wwt�y%Yww|�|j�gd��d�|�|j�dg�d�dS)N�	flushlogs)rzrolled overzfail2ban.logr�r;r�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
)r;r�r�)rr�)r�flushed)rDr1rEr�r�r�r�r/r$r�warning�rename�open�next�findrx�endswith�assertRaises�
StopIteration�__next__�failr��OSError)	r �f�fn�l�f2�fn2�line1�line2r[rrr#�
testFlushLogs�sn




����
�����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.rndtime�30minr�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%r5rrr#�testBanTimeIncrsz"TransmitterLogging.testBanTimeIncr)r'r(r)r.r�r�r�r�r�r�r�rbrrr6r#r��s
0r�c@�eZdZdd�ZdS)�	JailTestscCsd}t|�}|�|j|�dS)N�veryveryverylongname)r
rDr)r �longnamerJrrr#�testLongNameszJailTests.testLongNameN)r'r(r)r�rrrr#r�sr�c@�$eZdZdd�Zdd�Zdd�ZdS)�
RegexTestscCs.|�ttd�|�ttd�|�ttd�dS)Nr)� �	)r�rrr5rrr#�testInit%szRegexTests.testInitcCs8|�ttd���dd�d�|�ttd���d��dS)N�a�"�'z
Regex('a')r/z
FailRegex()rDrWr�replacerxr�
startswithr5rrr#�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/24r�)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::/60r�z%%ip="<ADDR>", mask="<CIDR>?")z%%ip="192.0.2.2", mask=""r)r))r�r�)z%%ip="192.0.2.2", mask="24"r)r))z"%%ip="2001:DB8:2FF:FF::1", mask=""r)r))z2001:db8:2ff:ff::1r�)z$%%ip="2001:DB8:2FF:FF::1", mask="60"r)r))z2001:db8:2ff:f0::/60r�)r�rrrxrd�
hasMatched�search�getHostrD�	getFailID�getIP�	familyStr)r �frr�rrr#�testHost1szzRegexTests.testHostN)r'r(r)r�r�r�rrrr#r�#sr�c@r�)�
_BadThreadcCstd��)Nzrun bad thread exception)r�r5rrr#�runysz_BadThread.runN)r'r(r)r�rrrr#r�xsr�c@r�)�LoggingTestscCs*td�}|�|jjd�|�|jd�dS)Nzfail2ban.some.string.with.namerz
fail2ban.name)rrD�parentr)r �
testLogSysrrr#�testGetF2BLoggerszLoggingTests.testGetF2BLoggercs�tj}g��fdd�t_zt�}|��|����t���fdd�d��W|t_n|t_w��d���	t
��d���	�ddt�dS)Ncs
��|�Sr)r:)r!r>rr#r��s
z5LoggingTests.testFail2BanExceptHook.<locals>.<lambda>cst��o��d�S)N�Unhandled exception)r��
_is_loggedr�r r?rr#r��r�r�r�rr)rs�__excepthook__r�r�rrxr
r�r�rDr�r�)r �prev_exchook�	badThreadrr�r#�testFail2BanExceptHook�s
z#LoggingTests.testFail2BanExceptHookc
Cs�g}t�dd�\}}t�|�|�|�t�dd�\}}t�|�|�|�t�}z+|j||dd�|�|���|�	d�W|�
�|D]
}tj�|�rRt�
|�qEdS|�
�|D]
}tj�|�rht�
|�q[w)Nz
fail2ban.sockzf2b-testzfail2ban.pidF)�forcezServer already running)r�r�r�r�r:rr�rdrer�r9rr�r�)r �	tmp_files�sock_fd�	sock_name�
pidfile_fd�pidfile_namer/r�rrr#�testStartFailedSockExists�s0




���
��z&LoggingTests.testStartFailedSockExistsN)r'r(r)r�r�rrrrr#r�}sr�)�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-r�__init__�#_ServerConfigReaderTests__share_cfgrr6rr#r�s
z ServerConfigReaderTests.__init__cstt|���g|_dS)r+N)r-rr.�_execCmdLstr5r6rr#r.�s
zServerConfigReaderTests.setUpcstt|���dSr8)r-rr:r5r6rr#r:�sz ServerConfigReaderTests.tearDownr�cCs6|�d�D]}|�d�st�d|�qt�|�qdS)N�
�#zexec-cmd: `%s`T)�splitr��logSys�debug)r �realCmdr_r�rrr#�_executeCmd�s

z#ServerConfigReaderTests._executeCmdcCsPt|d�s%t�}i|_dD]\}}t|�}|�d�tj�||�|j|<q
|jS)N�__aInfos))�ipv4r�)�ipv6r�r�)�hasattrr� _ServerConfigReaderTests__aInfosr�
setBanTime�_actionsrA�
ActionInfo)r �dmyjail�tr��ticketrrr#�_testActionInfos�s

z(ServerConfigReaderTests._testActionInfoscCs.|j}|��}|D]�}||jD]�}||j|}t�d�t�d|d|j�t�d�t|tj�s5q|j	|_
t�d�|��|��t�d�|��|�
|d�t�d�|��|�|d�t�d�|��|�
|d	�t�d
�|��|�|d	�t�d�|��|��qq	dS)N�4# ==================================================�
# == %-44s ==� - �# === start ===�# === ban-ipv4 ===r�# === unban ipv4 ===�# === ban ipv6 ===r�# === unban ipv6 ===�# === stop ===)r�rrrr�_namer�r�
CommandActionr�
executeCmdr�r�rmrprh)r r/r;�aInfosrJr�r[rrr#�_testExecActions�s0


��z(ServerConfigReaderTests._testExecActionsc	Csztjjdd�ttd|jd�}|�|���|�|���|j	dd�}t
�}|j}|j}|D]�}|ddkr�|ddkrAd|d	<nLt
|�d
kro|ddkro|d	dkrotj�td
|d�}tj�|�sjtj�td�}||d
<ntjjr�t
|�d
kr�|ddvr�|d	dkr�d|d<d|d
<z||�Wq.ty�}z|�d||f�WYd}~q.d}~wwq.tjjs�|�|�dSdS)NT��stock)�basedir�force_enable�share_config)�allow_no_filesrr�rPrrr�r;r�logsrr
)r;z	multi-setr1zDUMMY-REGEX <HOST>z"Command %r has failed. Received %r)rtru�SkipIfCfgMissingrrrrx�read�
getOptions�convertrr0�_Transmitter__commandHandlerr�r�rrrr�rvr�r�r()	r r;�streamr/r1�
cmdHandlerrFr��errr#�testCheckStockJailActions�s>
$
$����z1ServerConfigReaderTests.testCheckStockJailActionscCsb|�d|�}t|�\}}d|dgg}t||||jtd�}|�|���|�i�|�|�	��|S)Nz%(__name__)srPr)r-r+)
r�rrrrrxr1r2�extendr3)r rJ�act�actName�actOptr5r[rrr#�getDefaultJailStreams��
z,ServerConfigReaderTests.getDefaultJailStreamc
Cs�tjjdd�tj��ddl}t�}|j}|�tj�	t
dd��D]+}tj�|��dd�}|�
d||�}|D]}|�|�\}}	|�|d�q7|�|�q!dS)	NTr)rrgz*.confz.confr)zj-)rtrur0�
SkipIfFast�globrr0r�rrr�basenamer�r=rErDr()
r r?r/r1�actCfgr:r5rFr]�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��qU�qH|j	}|�
�}
|D�]�\}}}||jD�]�}||j|}t�
d�t�
d�|d�|j�t�
d�|�t|tj��|j|_|�d�|��|�d��r�|j|d�d�di�n|�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��rp|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|�qqdS(NTr)z
j-w-nft-mpzQnftables-multiport[name=%(__name__)s, port="http,https", protocol="tcp,udp,sctp"])zip �	ipv4_addrzaddr-)zip6 �	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`rHz4`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�flushrh�	ip4-check�	ip6-check�ip4-ban�	ip4-unban�ip6-ban�	ip6-unbanz
j-w-nft-apz8nftables-allports[name=%(__name__)s, protocol="tcp,udp"])rFrG)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`rHz3`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`rHz4`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)"`)	rIrJr�rNrhrQrRrSrTzj-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`)rIrJrQrRrSrTzj-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`rYz$`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`rZz%`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`)rIrJrLrMrNrhrOrPrQrRrSrTzj-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`)
rIrJrLrMrNrhrQrRrSrTzj-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`raz!`iptables -w -X f2b-j-w-iptables`z?`ip6tables -w -D INPUT -p tcp --dport http -j f2b-j-w-iptables`rbz"`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`rcz%`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`rdz&`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>"])rUz/f2b-j-w-iptables-xtre`)rWz/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`)rIrJrLrMrhrOrPrQrRrSrTzj-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-`rez+`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::`)rIrJr�rNrhrOrPrQrRrSrTz	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-`rfz1`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-`rgz1`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 rV)z ipv6 rX)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`rhz#`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`riz$`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`rjz&`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`rkz'`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'rV)z
family='ipv6'rX)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`rrrrrr�r�rLrMrrrKrOrQrJr rRr!rrPrSrIr"rTrNz# === flush ===r#rh)rtrur0rr0r4r=rErDr�rrrrr$rxr�rr%rr&r�r�r<r�r�rmrprNrh)r �testJailsActionsr/r1r6rJr:�testsr5rFr]rBr;r'r�r[rrr#�testCheckStockCommandActionsBsN	�1�.���,�,�$�$�,�,�"����(�(�$�$��������'�



,  
 
,  "$���z4ServerConfigReaderTests.testCheckStockCommandActionscCs`|}t|t�r|d}t�dd|�}t�ddd�|d�}t|t�r&||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�;sz9ServerConfigReaderTests._executeMailCmd.<locals>.<lambda>r)r_)r�rU�re�subrr%r&)r r
r_rFrrr#�_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�qwqj|j
}td�}
td�}t�}|D]m\}}}||jD]b}||j|}t�d�t�d|d|j�t�d�|j|_d
|
fd|ffD]7\}}|�|�s�q�|�d |�t|�}|�d!�|�d"d#g�tj�||�}|�|�|j||d$di�q�q�q�dS)%NTr)zj-mail-whois-linesz\mail-whois-lines[name=%(__name__)s, grepopts="-m 1", grepmax=2, mailcmd="mail -s", logpath="r
rz	         ztestcase01a.logz8", _whois_command="echo '-- information about <ip> --'"]rQ)�;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=")rsz,100 attempts against j-sendmail-whois-lines.rtrurvrwrxzj-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.orgrvrwrxzymail -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)rQrSzj-xarf-abusezIxarf-login-attack[name=%(__name__)s, mailcmd="mail", mailargs="",debug=1])ryz8We 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)rzz6We have detected abuse from the IP address 2001:db8::1r}rz
87.142.124.10z2001:db8::1rrrrSz# === %s ===r�r{r|r�) rtrur0r�rrrrr0r4r=rErDr�r	rrrrr$rrr&r<r�r�
setAttempt�
setMatchesrrArrmr�)r rlr/r1r6rJr:rmr5rFr]rBr;rrrr�r[�testr�rrrr#�testComplexMailActionMultiLogDs��������������������		��	���_�


�
���z5ServerConfigReaderTests.testComplexMailActionMultiLog)r�)r'r(r)rr.r:rrr(r8r=rCrnrrr�rbrrr6r#r�s$

"3
ur)@�
__author__�
__copyright__�__license__rtrwr�r�rprsr��server.failregexrrrr/rr�
server.serverr�server.ipdnsr	�server.jailr
�server.jailthreadr�
server.ticketr�server.utilsr
�	dummyjailr�utilsrrr�helpersrrrr)rrrQrr�dirname�__file__rr4rrr*rcr��TestCaser�r�r�r��clientreadertestcaserrrrrrrr#�<module>s\�[}	U*

https://t.me/RX1948 - 2025