Your IP : 216.73.216.182


Current Path : /usr/lib/python3/dist-packages/fail2ban/server/__pycache__/
Upload File :
Current File : //usr/lib/python3/dist-packages/fail2ban/server/__pycache__/server.cpython-38.pyc

U

��a�l�@s.dZdZdZddlZddlmZmZddlZddlZddlZddl	Z	ddl
Z
ddlmZm
Z
ddlmZdd	lmZmZdd
lmZddlmZmZdd
lmZddlmZmZmZmZmZm Z m!Z!ee"�Z#dZ$dZ%dZ&zddl'm(Z(Wne)k
�rdZ(YnXdd�Z*Gdd�d�Z+Gdd�de,�Z-dS)z
Cyril Jaquierz Copyright (c) 2004 Cyril JaquierZGPL�N)�Lock�RLock�)�	Observers�ObserverThread)�Jails)�
FileFilter�
JournalFilter)�Transmitter)�AsyncServer�AsyncServerException�)�version)�	getLogger�_as_bool�extractOptions�str2LogLevel�getVerbosityFormat�
excepthook�prctl_set_th_name�auto�INFO�STDOUT)�
Fail2BanDbcCst��jjS�N)�	threadingZcurrent_thread�	__class__�__name__�rr�8/usr/lib/python3/dist-packages/fail2ban/server/server.py�_thread_name:sr c@s�eZdZd�dd�Zdd�Zdd�Zdd	�Zdd
ifdd�Zd
d�Zdd�Z	d�dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd�d)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Zd7d8�Zd9d:�Zd;d<�Zd=d>�Z d?d@�Z!dAdB�Z"dCdD�Z#dEdF�Z$dGdH�Z%dIdJ�Z&dKdL�Z'dMdN�Z(dOdP�Z)d�dQdR�Z*d�dTdU�Z+dVdW�Z,d�dXdY�Z-dZd[�Z.d\d]�Z/d^d_�Z0d`da�Z1dbdc�Z2ddde�Z3dfdg�Z4dhdi�Z5djdk�Z6dldm�Z7dndo�Z8dpdq�Z9drds�Z:dtdu�Z;dvdw�Z<dxdy�Z=dzd{�Z>d�d|d}�Z?d~d�Z@d�d�d��ZAd�d��ZBd�d��ZCd�d��ZDd�d�d��ZEd�d��ZFd�d�d��ZGd�d��ZHd�d��ZId�d��ZJd�d��ZKd�d��ZLd�d��ZMd�d��ZNd�d��ZOd�d��ZPd�d��ZQd�d��ZRd�d��ZSdSS)��ServerFcCsrt�|_t�|_t�|_d|_||_t|�|_	i|_
d|_d|_d|_
d|_d|_dddd�|_i|_td�dS)Nz/var/run/syslogz/var/run/logz/dev/log)ZDarwinZFreeBSDZLinuxz
f2b/server)r�_Server__loggingLockr�
_Server__lockr�_Server__jails�_Server__db�_Server__daemonr
�_Server__transm�_Server__reload_state�_Server__asyncServer�_Server__logLevel�_Server__logTarget�_Server__verbose�_Server__syslogSocket�_Server__autoSyslogSocketPaths�_Server__prev_signalsr)�selfZdaemonrrr�__init__@s$
�zServer.__init__cCst�d|�|��dS)NzCaught signal %d. Exiting)�logSys�debug�quit)r0�signum�framerrrZ__sigTERMhandlerWszServer.__sigTERMhandlercCst�d|�|��dS)NzCaught signal %d. Flushing logs)r2r3�	flushLogs)r0r5�fnamerrrZ__sigUSR1handler[szServer.__sigUSR1handlercCs t�|�|j|<t�||�dS)z>Bind new signal handler while storing old one in _prev_signalsN)�signal�	getsignalr/)r0�s�newrrr�
_rebindSignal_szServer._rebindSignalTc
Cs�t�d�|jrXt�d�|��}|dkr.dS|dsXd|dd�f}t�|�t|��|�dd�|_	|�
|�d|jdk	r�|jnt��|�
|�d	|jdk	r�|jnt��|�|�d
|jdk	r�|jnt��t�d�t�dtj�|jr�t�d
�t�dk�r2tjtjfD]}|�||j��q|�tj|j�tt_z4t�d|�t|d�}	|	� dt�!��|	�"�Wn4t#t$fk
�r�}
zt�d|
�W5d}
~
XYnX|�r�t%j&dk�r�t'�t%_&t%j&�(�t�d�z,t)|j*�|_+|�d�|j+_,|j+�(||�Wn0t-k
�r,}
zt�d|
�W5d}
~
XYnX|�.�zt�d|�t�/|�Wn4t#t$fk
�r�}
zt�d|
�W5d}
~
XYnXdS)N�?zStarting in daemon modeFrzCould not create daemon %sr�verbose�syslogsocketZloglevelZ	logtargetz2--------------------------------------------------zStarting Fail2ban v%szDaemon started�_MainThreadzCreating PID file %s�wz%s
zUnable to create PID file: %szStarting communication�onstartzCould not start server: %szRemove PID file %szUnable to remove PID file: %s)0�os�umaskr&r2�info�_Server__createDaemon�error�ServerInitializationError�getr,�setSyslogSocketr-�DEF_SYSLOGSOCKET�setLogLevelr*�DEF_LOGLEVEL�setLogTargetr+�
DEF_LOGTARGETrr r9�SIGTERM�SIGINTr=�_Server__sigTERMhandler�SIGUSR1�_Server__sigUSR1handlerr�sysr3�open�write�getpid�close�OSError�IOErrorr�Mainr�startrr'r)rCrr4�remove)r0ZsockZpidfileZforce�observer�conf�ret�errr;ZpidFile�errrr^dsj



�
�
�




zServer.startcCs�dd�|_t�d�|jdk	r(|j��t�dkrR|j��D]\}}t�||�q<t	j
dk	rft	j
��|��|j
r�|j
��d|_
t	j
dk	r�t	j
��dt	_
|jdk	r�|j��d|_t�d�dS)NcSsdS)NFrrrrr�<lambda>��zServer.quit.<locals>.<lambda>zShutdown in progress...rAzExiting Fail2ban)r4r2rFr)Zstop_communicationr r/�itemsr9rr]�stop�stopAllJailr%rZ)r0r;Zshrrrr4�s(











zServer.quitcCs�d}|j�|�rt|j�|�rt|j|}|j|krLd}t�d|�d|j|<n(t�d||j|�|j|dd�|j|=|r�|j�|||j	�|j	dk	r�|j	�
|j|�dS)NTFzReload jail %rz"Restart jail %r (reason: %r != %r)�rh)r(rJr$�exists�backendr2rF�delJail�addr%�addJail)r0�namerlZaddflg�jailrrrro�s


zServer.addJailcCsJ|j|}|s|��r$|j||d�|rF|jdk	r>|j�|�|j|=dS)N�rh�join)r$�isAliverhr%rm)r0rprhrsrqrrrrm�s

zServer.delJailc	Cs\|j�L|j|}|��s$|��n||jkrBt�d|�|j|=|jrNd|_W5QRXdS)NzJail %r reloadedF)r#r$rtr^r(r2rF�idle)r0rprqrrr�	startJail�s


zServer.startJailc	Cs$|j�|j|dd�W5QRXdS)NTrj)r#rm�r0rprrr�stopJailszServer.stopJailc	Csht�d�|j�Nt|j���D]}|j|ddd�q t|j���D]}|j|ddd�qDW5QRXdS)NzStopping all jailsTFrr)r2rFr#�listr$�keysrmrwrrrris
zServer.stopAllJailc	Cs�|�r|jr(|dks |j�|�r(td��t�d|dkr>d|nd�|j��|dkr�d}d|ksn|j�|�rx|j|}|r�d|kr�|�|�d|kr�|�	|�n d|kr�|��d|kr�|�
�|j��D]D\}}|dks�||kr�d	|_||j|<|j
jd	d
�|jjd	d
�q�W5QRXn�|j�jg}|j��D]>\}}||jk�rT|�|�n|j
jdd
�|jjdd
��q4|D]}|�|��qxW5QRXi|_t�d�dS)
Nz--allzReload already in progresszReload zjail %sz	all jailsz--if-existsz--unbanz	--restartT)�beginFzReload finished.)r(rJ�
ValueErrorr2rFr#r$rk�
setUnbanIPrxrirgru�filter�reload�actions�appendrm)r0rpZoptsr{rqZjnZdeljailsrrr�reloadJailssH


zServer.reloadJailscCs||j|_dS)NT�r$ru�r0rp�valuerrr�setIdleJailFszServer.setIdleJailcCs|j|jSrr�rwrrr�getIdleJailJszServer.getIdleJailcCst|�|j|j_dSr)rr$r~�
ignoreSelfr�rrr�
setIgnoreSelfNszServer.setIgnoreSelfcCs|j|jjSr)r$r~r�rwrrr�
getIgnoreSelfQszServer.getIgnoreSelfcCs|j|j�|�dSr)r$r~�addIgnoreIP�r0rpZiprrrr�TszServer.addIgnoreIPcCs|j|j�|�dSr)r$r~�delIgnoreIPr�rrrr�WszServer.delIgnoreIPcCs|j|j��Sr)r$r~�getIgnoreIPrwrrrr�ZszServer.getIgnoreIPcCs&|j|j}t|t�r"|�||�dSr)r$r~�
isinstancer�
addLogPath)r0rp�fileName�tail�filter_rrrr�]s
zServer.addLogPathcCs$|j|j}t|t�r |�|�dSr)r$r~r�r�
delLogPath)r0rpr�r�rrrr�bs
zServer.delLogPathcCs4|j|j}t|t�r|��St�d|�gSdS)Nz$Jail %s is not a FileFilter instance)r$r~r�rZgetLogPathsr2rF�r0rpr�rrr�
getLogPathgs

zServer.getLogPathcCs$|j|j}t|t�r |�|�dSr)r$r~r�r	�addJournalMatch�r0rp�matchr�rrrr�os
zServer.addJournalMatchcCs$|j|j}t|t�r |�|�dSr)r$r~r�r	�delJournalMatchr�rrrr�ts
zServer.delJournalMatchcCs4|j|j}t|t�r|��St�d|�gSdS)Nz'Jail %s is not a JournalFilter instance)r$r~r�r	�getJournalMatchr2rFr�rrrr�ys

zServer.getJournalMatchcCs|j|j}|�|�dSr)r$r~�setLogEncoding)r0rp�encodingr�rrrr��szServer.setLogEncodingcCs|j|j}|��Sr)r$r~�getLogEncodingr�rrrr��szServer.getLogEncodingcCs|j|j�|�dSr)r$r~�setFindTimer�rrrr��szServer.setFindTimecCs|j|j��Sr)r$r~�getFindTimerwrrrr��szServer.getFindTimecCs|j|j�|�dSr)r$r~�setDatePattern)r0rp�patternrrrr��szServer.setDatePatterncCs|j|j��Sr)r$r~�getDatePatternrwrrrr��szServer.getDatePatterncCs|j|j�|�dSr)r$r~�setLogTimeZone)r0rpZtzrrrr��szServer.setLogTimeZonecCs|j|j��Sr)r$r~�getLogTimeZonerwrrrr��szServer.getLogTimeZonecCs||j|j_dSr�r$r~Z
ignoreCommandr�rrr�setIgnoreCommand�szServer.setIgnoreCommandcCs|j|jjSrr�rwrrr�getIgnoreCommand�szServer.getIgnoreCommandcCs&td|d�\}}||j|j_dS)Nzcache[�])rr$r~�ignoreCache)r0rpr�Zoptionsrrr�setIgnoreCache�szServer.setIgnoreCachecCs|j|jjSr)r$r~r�rwrrr�getIgnoreCache�szServer.getIgnoreCachecCs"|j|j}t�d|�||_dS)Nz  prefregex: %r)r$r~r2r3�	prefRegex)r0rpr��fltrrr�setPrefRegex�szServer.setPrefRegexcCs|j|jjSr)r$r~r�rwrrr�getPrefRegex�szServer.getPrefRegexcCs:|j|j}|s|f}|D]}t�d|�|�|�qdS)Nz  failregex: %r)r$r~r2r3�addFailRegex�r0rpr�Zmultipler�rrrr��szServer.addFailRegexNcCs|j|j�|�dSr)r$r~�delFailRegex�r0rp�indexrrrr��szServer.delFailRegexcCs|j|j��Sr)r$r~�getFailRegexrwrrrr��szServer.getFailRegexcCs:|j|j}|s|f}|D]}t�d|�|�|�qdS)Nz  ignoreregex: %r)r$r~r2r3�addIgnoreRegexr�rrrr��szServer.addIgnoreRegexcCs|j|j�|�dSr)r$r~�delIgnoreRegexr�rrrr��szServer.delIgnoreRegexcCs|j|j��Sr)r$r~�getIgnoreRegexrwrrrr��szServer.getIgnoreRegexcCs|j|j�|�dSr)r$r~�	setUseDnsr�rrrr��szServer.setUseDnscCs|j|j��Sr)r$r~�	getUseDnsrwrrrr��szServer.getUseDnscCs||j|jj_dSr�r$r~ZfailManagerZ
maxMatchesr�rrr�
setMaxMatches�szServer.setMaxMatchescCs|j|jjjSrr�rwrrr�
getMaxMatches�szServer.getMaxMatchescCs|j|j�|�dSr)r$r~�setMaxRetryr�rrrr��szServer.setMaxRetrycCs|j|j��Sr)r$r~�getMaxRetryrwrrrr��szServer.getMaxRetrycCs|j|j�|�dSr)r$r~�setMaxLinesr�rrrr��szServer.setMaxLinescCs|j|j��Sr)r$r~�getMaxLinesrwrrrr��szServer.getMaxLinescGs(|j|jj|f|�d||jki�dS)Nr)r$r�rnr()r0rpr��argsrrr�	addAction�s�zServer.addActioncCs|j|jSr�r$r�rwrrr�
getActions�szServer.getActionscCs|j|j|=dSrr�r�rrr�	delAction�szServer.delActioncCs|j|j|Srr�r�rrr�	getAction�szServer.getActioncCs|j|j�|�dSr)r$r��
setBanTimer�rrrr��szServer.setBanTimecGs|j|jj|�Sr)r$r~Z
addAttempt)r0rpr�rrr�addAttemptIP�szServer.addAttemptIPcCs|j|j�|�Sr)r$r�ZaddBannedIPr�rrr�setBanIP�szServer.setBanIPcCsV|dk	r|j|g}nt|j���}d}||dkO}|D]}||jj||d�7}q8|S)Nr)�ifexists)r$ry�valuesr�ZremoveBannedIP)r0rpr�r��jailsZcntrqrrrr}�szServer.setUnbanIPcCs|j|j��Sr)r$r��
getBanTimerwrrrr�szServer.getBanTimecCs|j|j�|�S)z�Returns the list of banned IP addresses for a jail.

		Parameters
		----------
		name : str
			The name of a jail.

		Returns
		-------
		list
			The list of banned IP addresses.
		)r$r��
getBanList)r0rpZwithTimerrrr�s
zServer.getBanListcCs|j|�||�dSr)r$�setBanTimeExtra)r0rp�optr�rrrr�szServer.setBanTimeExtracCs|j|�|�Sr)r$�getBanTimeExtra)r0rpr�rrrr�szServer.getBanTimeExtracCs|jdk	o|j��Sr)r)ZisActive�r0rrr�	isStarted szServer.isStartedcCs@|dk	rt|j�|krdSt|j���D]}|��s(dSq(dS)Nrr)�lenr$ryr�rt)r0Zjailnumrqrrrrt#szServer.isAlivecCsVzD|j��t|j�}|��d�|�}dt|j�fd|fg}|W�S|j��XdS)Nz, zNumber of jailz	Jail list)r#�release�acquireryr$�sortrsr�)r0r�ZjailListrbrrr�status,s


�z
Server.status�basiccCs|j|j|d�S)N)�flavor)r$r�)r0rpr�rrr�
statusJail8szServer.statusJailc	Csh|��}|j�P|j|kr(W5QR�dSt|�}td��tdksJ|tjkrN|nt	�||_W5QRXdS)N�fail2ban�	INHERITED)
�upperr"r*rrZsetLevelrP�logging�DEBUGrN)r0r�ZllrrrrMHs
�zServer.setLogLevelc
Cs$|j�|jW5QR�SQRXdSr)r"r*r�rrr�getLogLevelYszServer.getLogLevelc
Cs�t|�\}}|��}|j��||j|kr6W5QR�dS|dkrR||_W5QR�dS|�d�}|dk�rT|�dd���}|dkr�d}zttjjd|�}Wn0t	k
r�t
�d	|�d��tjjj}YnX|j
d
kr�ddl}|j�|���|_
|j
dk	�r4tj�|j
��r4t�t�|j
�j��r4tjj|j
|d�}nt
�d
|j
�W5QR�dSn�|dk�rlt�tj�}nt|dk�r�t�tj�}n\zt|d���tj�|�}Wn<tk
�r�t
�d|�t
�d|j�YW5QR�dSXt d�}|jddd�D]j}	|�!|	�z|	�"�|	��WnDt#t$fk
�r^dtj%k�rJdk�sXndtj%k�rZ�YnX�q�|�&�tj'k�r�|j(dk�r�tj'|�&�d|_(|�d�}
|
dk	�r�t)|
�}
n|dk}
|dk	�r�t)|�}nd}|�dd�dk�r�|�d�}n4d}|j(dk	�r|j(dk�r|j(d}t*||
|d�}|�+t�,|��|�-|�|jdk	�r�t
�d t.j.�t
�d!|dk�rl|nd"||j
ft.j.f�||_W5QR�dSQRXdS)#NTr��padding�SYSLOG�facilityZDAEMON�0ZLOG_z)Unable to set facility %r, using 'DAEMON'rr)r�z9Syslog socket file: %s does not exists or is not a socketF)r�SYSOUT�STDERR�azUnable to log to %rzLogging to previous target %rr����)r
��)r�)r�r
rZdatetime)r�r��format�r
)�addtimer�zStart Fail2ban v%sz-Changed logging target to %s for Fail2ban v%sz%s (%s))/rr�r"r+rJ�getattrr��handlersZ
SysLogHandler�AttributeErrorr2rHZ
LOG_DAEMONr-�platformr.�systemrD�pathrk�stat�S_ISSOCK�st_modeZ
StreamHandlerrV�stdout�stderrrWrZZRotatingFileHandlerr\rFrZ
removeHandler�flushr|�KeyError�version_infoZgetEffectiveLevelr�r,rrZsetFormatterZ	FormatterZ
addHandlerr)
r0�targetZ
logOptionsZ	systargetr�r�r�ZhdlrZlogger�handlerr�Zfmtr?rrrrOcs�




�������


�






�����zServer.setLogTargetc	CsF|j�$|j|kr W5QR�dS||_W5QRX|jdkpD|�|j�S)NTr�)r"r-r+rO)r0r@rrrrK�s


�zServer.setSyslogSocketc
Cs$|j�|jW5QR�SQRXdSr)r"r+r�rrr�getLogTarget�szServer.getLogTargetc
Cs$|j�|jW5QR�SQRXdSr)r"r-r�rrr�getSyslogSocket�szServer.getSyslogSocketc	Cs�|jdkrhtd�jD]N}z|��t�d|j�Wqtk
r`|��t�d|j�YqXqdStd�jD]}|��t�d|j�qrdSdS)N)r�rr�r�zrollover performed on %szflush performed on %szrolled overZflushed)r+rr�Z
doRolloverr2rFr�r�)r0rrrrr7�s
zServer.flushLogscCs>|��D]0\}}|dkr,t�t|�d�qtd|��qdS)N�	stacksize�zunknown option %r)rgr�
stack_size�intr�)r0r��o�vrrr�setThreadOptions�szServer.setThreadOptionscCsdt��diS)Nrr)rrr�rrr�getThreadOptions�szServer.getThreadOptionscCs�|jr|jj|krdS|js,|��dkr,dSt|j�dkrBtd��|��dkrVd|_n(tdk	rtt|�|_|j��n
t�	d�t
jdk	r�t
j�|j�dS)NZnonerz3Cannot change database when there are jails presentzEUnable to import fail2ban database module as sqlite is not available.)
r%�filename�lowerr�r$�RuntimeErrorrZdelAllJailsr2rHrr]Zdb_set)r0rrrr�setDatabase�s$�
�
zServer.setDatabasecCs|jSr)r%r�rrr�getDatabaseszServer.getDatabasec
Cs�|�tjtj�zt��}Wn6tk
rR}zd|j|jffWY�Sd}~XYnX|dkr�t�	�zt��}Wn6tk
r�}zd|j|jffWY�Sd}~XYnX|dkr�t�
d�q�t�d�ndSzt�d�}Wnt
tfk
r�d}YnXtjdd�dk�rnt�d	tj�}td|�D]<}ztj�||��sDt�|�Wntk
�r\YnX�q$t�|�nt�d|�t�d
tj�t�d
tj�t�d
tj�dS)z� Detach a process from the controlling terminal and run it in the
			background as a daemon.
		
			http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/278731
		FNr�/�SC_OPEN_MAX�r�)r��rz/dev/urandomz	/dev/null)T)r=r9�SIGHUP�SIG_IGNrD�forkr[�errno�strerror�setsid�chdir�_exit�sysconfr�r|rVr�rW�O_RDONLY�ranger��sameopenfilerZ�
closerange�O_RDWR)r0�pidrdZmaxfdZ
urandom_fd�fdrrrZ__createDaemonsB
&	&

zServer.__createDaemon)F)TT)F)F)N)F)NNT)F)N)r�)Tr�
__module__�__qualname__r1rSrUr=r^r4rormrvrxrir�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r}r�r�r�r�r�rtr�r�rMr�rOrKrrr7r	r
rrrGrrrrr!>s�
K,
	
5






	

q	r!c@seZdZdS)rIN)rr$r%rrrrrInsrI).�
__author__Z
__copyright__Z__license__rrrr�rDr9r�rVr`rrr�rr~rr	Ztransmitterr
Zasyncserverrrr�rZhelpersrrrrrrrrr2rLrNrPZdatabaser�ImportErrorr r!�	ExceptionrIrrrr�<module>sB$
6