ogf1-dZdZdZddlZddlZddlZddlZddlmZddl m Z m Z m Z m Z dd lm Z e eZGd d eZy) z.Cyril Jaquier, Lee Clemens, Yaroslav HalchenkozPCopyright (c) 2004 Cyril Jaquier, 2011-2012 Lee Clemens, 2012 Yaroslav HalchenkoGPLN)Actions) getLogger_as_boolextractOptionsMyTime)r c0eZdZdZgdZddZdZdZdZdZ d Z d Z e d Z e d Zejd Ze dZe dZe dZejdZddZe dZdZdZdZddZdZd dZdZd!dZdZy)"JailagFail2Ban jail, which manages a filter and associated actions. The class handles the initialisation of a filter, and actions. It's role is then to act as an interface between the filter and actions, passing bans detected by the filter, for the actions to then act upon. Parameters ---------- name : str Name assigned to the jail. backend : str Backend to be used for filter. "auto" will attempt to pick the most preferred backend method. Default: "auto" db : Fail2BanDb Fail2Ban persistent database instance. Default: `None` Attributes ---------- name database filter actions idle status ) pyinotifygaminpollingsystemdNc2||_t|dk\rtjd|z||_t j |_d|_i|_ tjd|jz||j|||_ y)Nz]Jail name %r might be too long and some commands might not function correctly. Please shortenzCreating new jail '%s') _Jail__dblenlogSyswarning _Jail__namequeueQueue _Jail__queue _Jail__filter _banExtrainfoname _setBackendbackend)selfrr dbs 6/usr/lib/python3/dist-packages/fail2ban/server/jail.py__init__z Jail.__init__Gs$)Y"_ >>6 $+$,$-$.++&23 G$,cN|jjd|jdS)N()) __class____name__rr!s r#__repr__z Jail.__repr__Xs^^,,dii 88r%c t|\}}|j}|j}|dk7rP||jvr.tj d|d|dt d|d|d||j |d}|D]x}t|d|jz} |d i||dk7r"||k7rtjd|d|dntjd |zt||_ ytj d |j$zt'd |j$z#t$rJ}tj|dk(rtj ntj"d |d |Yd}~d}~wwxYw)NautozUnknown backend z. Must be among z or 'auto'z_init%szCould only initiated z backend whenever z was requestedzInitiated %r backendzBackend z failed to initialize due to z,Failed to initialize any backend for Jail %r)r lower _BACKENDSrerror ValueErrorindexgetattr capitalizerrr_Jail__actions ImportErrorlogloggingDEBUGERRORr RuntimeError)r!r beArgsbackendsb initmethodes r#rzJail._setBackend[sl"7+/'6 MMO' ^^(  dnn $ LL  x~~g./08 ;ai!,,.89: ;&Q'\ ^^!"G-. [['!+,T]DN ;$ ,,1DII=?1DII= ?? ; JJ'W]]W]]45q9;;;s#AD77 F ?FF c vddlm}tjd|jd|||fi||_y)Nr) FilterPollJail 'z' uses poller ) filterpollrDrrrr)r!kwargsrDs r# _initPollingzJail._initPollings+$++DIIv>?T,V,$-r%c vddlm}tjd|jd|||fi||_y)Nr) FilterGaminrEz ' uses Gamin ) filtergaminrJrrrr)r!rGrJs r# _initGaminzJail._initGamins+&++499f=>d-f-$-r%c vddlm}tjd|jd|||fi||_y)Nr)FilterPyinotifyrEz' uses pyinotify )filterpyinotifyrNrrrr)r!rGrNs r#_initPyinotifyzJail._initPyinotifys+.++tyy&AB!$1&1$-r%c vddlm}tjd|jd|||fi||_y)Nr) FilterSystemdrEz' uses systemd ) filtersystemdrRrrrr)r!rGrRs r# _initSystemdzJail._initSystemds+*++TYY?@//$-r%c|jS)zName of jail. )rr+s r#rz Jail.names r%c|jS)z;The database used to store persistent data for the jail. rr+s r#databasez Jail.databases r%c||_yNrWr!values r#rXz Jail.databases $)r%c|jS)z;The filter which the jail is using to monitor log files. )rr+s r#filterz Jail.filters r%c|jS)z2Actions object used to manage actions for jail. )r7r+s r#actionsz Jail.actionss r%c^|jjxs|jjS)z-A boolean indicating whether jail is idle. r^idler`r+s r#rcz Jail.idles#    .T\\...r%cH||j_||j_yrZrbr[s r#rcz Jail.idles$++$,,r%czd|jj|fd|jj|fgS)zThe status of the jail. Filter)flavorr)r^statusr`)r!rgs r#rhz Jail.statussB dkk   /0 t||""&"12 r%c8|jj S)z-Retrieve whether queue has tickets to ban. )remptyr+s r#hasFailTicketszJail.hasFailTicketss\\   ! !!r%c:|jj|y)zQAdd a fail ticket to the jail. Used by filter to add a failure for banning. N)rputr!tickets r# putFailTicketzJail.putFailTickets ,,6r%cp |jjd}|S#tj$rYywxYw)zTGet a fail ticket from the jail. Used by actions to get a failure for banning. F)rgetrEmptyrns r# getFailTicketzJail.getFailTickets6  LL  U #6 =  s 55c8 |j}|dk(rd}||||<n||vr||=tjd|||dk(r@t|||<|j |r!|j tj d|dvr|tj|||<|dvs|j dd|dk(r4||dk7r|jd ngDcgc] }t|c}|d <|j d g t|j d d }t r|f fd }n%|j dd}t|dd}||fd}|j dd |d|ffd }|j dd |d |f fd }||d<yycc}w)NzSet banTime.%s = %s incrementzDban time increment is not available as long jail database is not set)maxtimerndtime)formulafactorrxry multipliers evformular| evmultipliersr{1c~|j|z|jtkr|jzSdzS)N)TimeCountr)ban banFactorr|s r#z&Jail.setBanTimeExtra..s@XX KSYY[AQ5Q ZZWYZZr%rzz?ban.Time * (1<<(ban.Count if ban.Count<20 else 20)) * banFactorz~inline-conf-expr~evalc@t|jt|SrZ)maxrr)rrrzs r#rz&Jail.setBanTimeExtra..s#chhPTU\P]B^r%rxc(t||SrZ)min)rr}rxs r#rz&Jail.setBanTimeExtra..sYs^W1Mr%rycD||tjzzSrZ)random)rr}rys r#rz&Jail.setBanTimeExtra.. s)C.6==?U\C\2\r%)rrrrrrrXrr str2secondssplitintrrcompile) r!optr\beirr}rzrxr|rys @@@r#setBanTimeExtrazJail.setBanTimeExtras ~~" b[ 5  2c7 by #w++#S%0K e_2c7ffSkdmm+ NNYZ "" -  'BsG FF"&&Q\^bJcJk ]@E@QV[_aVaEKK,rsH,> b   AA 8 x96x9r%