CasperSecurity

Current Path : /usr/lib/python3/dist-packages/fail2ban/tests/__pycache__/
Upload File :
Current File : //usr/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*
Hacker Blog, Shell İndir, Sql İnjection, XSS Attacks, LFI Attacks, Social Hacking, Exploit Bot, Proxy Tools, Web Shell, PHP Shell, Alfa Shell İndir, Hacking Training Set, DDoS Script, Denial Of Service, Botnet, RFI Attacks, Encryption
Telegram @BIBIL_0DAY