Ë
    #fdÚå  ã                   ó®   — d Z ddlZddlZddlZddlZddlZddlZddlmZm	Z	 ddl
mZmZmZmZmZmZ ddlZ G d„ dej&                  j(                  «      Zy)z-backend_iptables.py: iptables backend for ufwé    N)ÚUFWErrorÚUFWRule)ÚwarnÚdebugÚmsgÚcmdÚcmd_pipeÚ	_findpathc                   óŒ   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zdd„Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd„ Zd„ Zdd„Zdd„Zd„ Zdd„Zd„ Zd„ Zd„ Zy)ÚUFWBackendIptableszInstance class for UFWBackendNc                 ó¾  — dt         j                  j                  z   dz   | _        || _        || _        i }t        t         j                  j                  |«      }t        j                  j                  |d«      |d<   t        j                  j                  |d«      |d<   t        j                  j                  |d«      |d<   t        j                  j                  |d	«      |d
<   t        j                  j                  |d«      |d<   t        j                  j                  |d«      |d<   t        j                  j                  t        t         j                  j                  |«      d«      |d<   t         j                  j                  j                  | d||||¬«       g g g g dœ| _        dD ]�  }d}|dk(  r| j!                  «       r||z  }n|dk(  rŒ&dD ]1  }dD ]*  }	|›d|›d|	›�}
| j                  |   j#                  |
«       Œ, Œ3 | j                  d   j#                  |dz   «       | j                  d   j#                  |dz   «       ŒŸ g d¢| _        d| _        y )!z!UFWBackendIptables initializationz# z
_comment #zufw/user.rulesÚruleszufw/before.rulesÚbefore_ruleszufw/after.rulesÚafter_ruleszufw/user6.rulesÚrules6zufw/before6.rulesÚbefore6_ruleszufw/after6.rulesÚafter6_ruleszufw-initÚinitÚiptables)ÚrootdirÚdatadir)ÚbeforeÚuserÚafterÚmisc)Ú4Ú6Úufwr   )r   r   r   ©ÚinputÚoutputÚforwardú-z	-logging-r   z-logging-denyz-logging-allow)ú-mÚlimitú--limitz3/minuteú-jÚLOGú--log-prefixz[UFW LIMIT BLOCK]N)r   ÚcommonÚprogramNameÚcomment_strr   r   r
   Ú
config_dirÚosÚpathÚjoinÚ	state_dirÚbackendÚ
UFWBackendÚ__init__ÚchainsÚuse_ipv6ÚappendÚufw_user_limit_logÚufw_user_limit_log_text)ÚselfÚdryrunr   r   Úfilesr-   ÚverÚchain_prefixÚlocÚtargetÚchains              ú6/usr/lib/python3/dist-packages/ufw/backend_iptables.pyr4   zUFWBackendIptables.__init__    s  € à¤#§*¡*×"8Ñ"8Ñ8¸<ÑGˆÔØˆŒØˆŒàˆÜœsŸz™z×4Ñ4°gÓ>ˆ
äŸ™Ÿ™ jÐ2BÓCˆˆg‰Ü "§¡§¡¨ZÐ9KÓ LˆˆnÑÜ!Ÿw™wŸ|™|¨JÐ8IÓJˆˆmÑÜŸ'™'Ÿ,™, zÐ3DÓEˆˆh‰Ü!#§¡§¡¨jÐ:MÓ!NˆˆoÑÜ "§¡§¡¨ZÐ9KÓ LˆˆnÑô
 Ÿ™Ÿ™¤Y¬s¯z©z×/CÑ/CÀWÓ%MØ%/ó1ˆˆf‰ô 	�‰×Ñ×'Ñ'¨¨j¸&À%Ø07Àð 	(ô 	Jð "$¨R¸"ÀbÑIˆŒØò 	HˆCØ ˆLØ�cŠzØ—=‘=”?Ø  CÑ'‘LØ˜C’ZØà2ò 3�Ø<ò 3�FÚ2>ÂÁVÐL�EØ—K‘K Ñ$×+Ñ+¨EÕ2ñ3ð3ð �K‰K˜Ñ×&Ñ& |°oÑ'EÔFØ�K‰K˜Ñ×&Ñ& |Ð6FÑ'FÕGð	Hò"#3ˆÔð (;ˆÕ$ó    c                 ó¼   — t        d«      }| j                  d   dk(  r|dz  }|S | j                  d   dk(  r|dz  }|S | j                  d   dk(  r|dz  }|S |d	z  }|S )
zGet current policyzNew profiles:Údefault_application_policyÚacceptz allowÚdropz denyÚrejectz rejectz skip)Ú_Údefaults)r:   Úrstrs     rB   Úget_default_application_policyz1UFWBackendIptables.get_default_application_policyP   sˆ   € ä�Ó!ˆØ�=‰=Ð5Ñ6¸(ÒBØ�HÑˆDð ˆð �]‰]Ð7Ñ8¸FÒBØ�G‰OˆDð ˆð �]‰]Ð7Ñ8¸HÒDØ�IÑˆDð ˆð �G‰OˆDàˆrC   c           	      ó”  — | j                   �sÕ|dk7  r#|dk7  r|dk7  rt        d«      |z  }t        |«      ‚|dk7  r#|dk7  r|dk7  rt        d«      |z  }t        |«      ‚d	}|dk(  rd
}n|dk(  rd}d}d}|dk(  r)	 | j                  | j                  d   d|z  d«       d}d}nV|dk(  r)	 | j                  | j                  d   d|z  d«       d}d}n(	 | j                  | j                  d   d|z  d«       d}d}t        j                  d|z   «      }| j                  d   | j                  d   fD ]³  }	 t        j                  j                  |«      }	|	d   }
|	d   D ]d  }|j                  |«      r1t        j                  j                  |
|j                  ||«      «       ŒEt        j                  j                  |
|«       Œf 	 t        j                  j                  |	«       Œµ t        d«      ||dœz  }|t        d«      z  }|S # t
        $ r ‚ w xY w# t
        $ r ‚ w xY w# t
        $ r ‚ w xY w# t
        $ r ‚ w xY w# t
        $ r ‚ w xY w)zSets default policy of firewallÚallowÚdenyrH   zUnsupported policy '%s'ÚincomingÚoutgoingÚroutedz%Unsupported policy for direction '%s'ÚINPUTÚOUTPUTÚFORWARDÚ rJ   zDEFAULT_%s_POLICYz"ACCEPT"z	UFW BLOCKz	UFW ALLOWz"REJECT"z"DROP"r   r   ÚtmpÚorigz5Default %(direction)s policy changed to '%(policy)s'
)Ú	directionÚpolicyz*(be sure to update your rules accordingly))r;   rI   r   Úset_defaultr<   Ú	ExceptionÚreÚcompiler   ÚutilÚ
open_filesÚsearchÚwrite_to_fileÚsubÚclose_files)r:   rZ   rY   Úerr_msgrA   Úold_log_strÚnew_log_strÚpatÚfÚfnsÚfdÚlinerK   s                rB   Úset_default_policyz%UFWBackendIptables.set_default_policy^   sŸ  € à�{‹{Ø˜Ò  V¨vÒ%5¸&ÀHÒ:LÜÐ5Ó6¸&ÑA�Ü˜wÓ'Ð'à˜JÒ&¨9¸
Ò+BØ˜HÒ$ÜÐCÓDØ&ñ(�ä˜wÓ'Ð'àˆEØ˜JÒ&Ø ‘Ø˜hÒ&Ø!�àˆKØˆKØ˜Ò ðØ×$Ñ$ T§Z¡Z°
Ñ%;Ø,?À5Ñ,IØ,8ô:ð
 *�Ø)‘Ø˜8Ò#ðØ×$Ñ$ T§Z¡Z°
Ñ%;Ø,?À5Ñ,IØ,8ô:ð
 *�Ø)‘ðØ×$Ñ$ T§Z¡Z°
Ñ%;Ø,?À5Ñ,IØ,6ô8ð
 *�Ø)�ô —*‘*˜S ;Ñ.Ó/ˆCØ—j‘j Ñ/°·±¸NÑ1KÐLò �ðÜŸ(™(×-Ñ-¨aÓ0�Cð ˜‘Z�à ™Kò 9�DØ—z‘z $Ô'ÜŸ™×.Ñ.¨r°3·7±7¸;ÈÓ3MÕNäŸ™×.Ñ.¨r°4Õ8ð	9ðÜ—H‘H×(Ñ(¨Õ-ðô$ ÐIÓJØ )°VÑ<ñ>ˆà”Ð>Ó?Ñ?ˆàˆøô_ !ò Øðûô !ò Øðûô !ò Øðûô !ò Øðûô !ò Øðús<   Á9#H Â'#H Ã#H  Ä1H.ÇH<ÈHÈHÈ H+È.H9È<Ic                 ó2  — | j                   r!dt        d«      z   }|dt        d«      z   z  }|S | j                  «        g d¢}g }g }|dk(  r|j                  d«       g d¢}g d¢}�n€|d	k(  rªd
D ]*  }|j                  d|z  «       |j                  d|z  «       Œ, dD ]*  }|j                  d|z  «       |j                  d|z  «       Œ, dD ]*  }|j                  d|z  «       |j                  d|z  «       Œ, dD ]  }|j                  d|z  «       Œ �nÑ|dk(  r1dD ]*  }|j                  d|z  «       |j                  d|z  «       Œ, �n›|dk(  r™dD ]*  }|j                  d|z  «       |j                  d|z  «       Œ, | j                  d   d   r"|j                  d«       |j                  d«       | j                  d   d   �r |j                  d«       |j                  d«       ný|d k(  r0dD ]*  }|j                  d!|z  «       |j                  d"|z  «       Œ, nÈ|d#k(  rÃdD ]z  }|j                  d$|z  «       |j                  d%|z  «       |j                  d&|z  «       |j                  d'|z  «       |j                  d(|z  «       |j                  d)|z  «       Œ| |j                  d*«       |j                  d+«       |j                  d,«       |j                  d-«       d.|z  }|D ]„  }d/|v r?|j                  d/«      \  }	}|d0|	z  z  }t        | j                  g|z   |d|	gz   «      \  }
}n t        | j                  g|z   |gz   «      \  }
}||z  }|dk7  r|d1z  }|
d2k7  sŒ{t        |«      ‚ |dk(  s| j                  «       rŽ|d3z  }|D ]„  }d/|v r?|j                  d/«      \  }	}|d0|	z  z  }t        | j                  g|z   |d|	gz   «      \  }
}n t        | j                  g|z   |gz   «      \  }
}||z  }|dk7  r|d1z  }|
d2k7  sŒ{t        |«      ‚ |S )4z'Show current running status of firewallú> zChecking raw iptables
zChecking raw ip6tables
)ú-nz-vz-xú-LÚrawz-t)ÚfilterÚnatÚmanglerr   )rs   ru   rr   Úbuiltins)rS   rU   rT   z	filter:%s)Ú
PREROUTINGrS   rU   rT   ÚPOSTROUTINGz	mangle:%s)rw   rT   zraw:%s)rw   rx   rT   znat:%sr   )r    r"   r!   zufw-before-%szufw6-before-%sr   úufw-user-%súufw6-user-%sr%   r   zufw-user-limit-acceptúufw-user-limitr   zufw6-user-limit-acceptúufw6-user-limitr   zufw-after-%szufw6-after-%sÚloggingzufw-before-logging-%szufw6-before-logging-%szufw-user-logging-%szufw6-user-logging-%szufw-after-logging-%szufw6-after-logging-%szufw-logging-allowzufw-logging-denyzufw6-logging-allowzufw6-logging-denyzIPV4 (%s):
ú:z(%s) ú
r   z

IPV6:
)r;   rI   Úinitcapsr7   ÚcapsÚsplitr   r   r   r6   Ú	ip6tables)r:   Ú
rules_typeÚoutÚargsÚitemsÚitems6ÚcÚbÚiÚtÚrcrW   s               rB   Úget_running_rawz"UFWBackendIptables.get_running_raw©   s\  € à�;Š;ØœÐ4Ó5Ñ5ˆCØ�4œ!Ð6Ó7Ñ7Ñ7ˆCØˆJð 	�‰Œâ'ˆØˆØˆà˜ÒØ�K‰K˜ÔÚ6ˆEÚ0ŠFØ˜:Ò%Ø3ò /�Ø—‘˜[¨1™_Ô-Ø—‘˜k¨A™oÕ.ð/ð%ò /�à—‘˜[¨1™_Ô-Ø—‘˜k¨A™oÕ.ð/ð .ò ,�Ø—‘˜X¨™\Ô*Ø—‘˜h¨™lÕ+ð,ð =ò +�Ø—‘˜X¨™\Õ*ò+à˜8Ò#Ø3ò 4�Ø—‘˜_¨qÑ0Ô1Ø—‘Ð.°Ñ2Õ3ò4ð ˜6Ò!Ø3ò 2�Ø—‘˜]¨QÑ.Ô/Ø—‘˜n¨qÑ0Õ1ð2ð �y‰y˜Ñ! #Ò&Ø—‘Ð4Ô5Ø—‘Ð-Ô.Ø�y‰y˜Ñ! #Ó&Ø—‘Ð6Ô7Ø—‘Ð/Õ0Ø˜7Ò"Ø3ò 3�Ø—‘˜^¨aÑ/Ô0Ø—‘˜o°Ñ1Õ2ñ3ð ˜9Ò$Ø3ò ;�Ø—‘Ð4°qÑ8Ô9Ø—‘Ð6¸Ñ:Ô;Ø—‘Ð2°QÑ6Ô7Ø—‘Ð4°qÑ8Ô9Ø—‘Ð3°aÑ7Ô8Ø—‘Ð5¸Ñ9Õ:ð;ð �L‰LÐ,Ô-Ø�L‰LÐ+Ô,Ø�M‰MÐ.Ô/Ø�M‰MÐ-Ô.à 
Ñ+ˆØò 	$ˆAØ�a‰xØŸ™ ›‘��AØ�w !‘}Ñ$�Ü §¡ °$Ñ 6¸!¸TÀ1¸Ñ EÓF‘	�‘Sä §¡ °$Ñ 6¸!¸Ñ <Ó=‘	��SØ�3‰JˆCØ˜UÒ"Ø�t‘�Ø�Q‹wÜ˜s“mÐ#ð	$ð ˜Ò $§-¡-¤/Ø�=Ñ ˆCØò (�Ø˜!‘8ØŸW™W S›\‘F�Q˜Ø˜7 a™=Ñ(�CÜ # T§]¡] O°dÑ$:¸aÀÀq¸\Ñ$IÓ J‘I�R™ä # T§^¡^Ð$4°tÑ$;¸q¸cÑ$AÓ B‘I�R˜Ø�s‘
�Ø Ò&Ø˜4‘K�CØ˜“7Ü" 3›-Ð'ð(ð ˆ
rC   c           	      óÌ  — d}| j                   r1dt        d«      z   }| j                  «       r|dt        d«      z   z  }|S t        d«      }dD ]Œ  }t        | j                  dd|z  d	g«      \  }}|d
k(  rt        d«      c S |dk7  rt        |d|z  z   «      ‚| j                  «       sŒ[t        | j                  dd|z  d	g«      \  }}|dk7  sŒ€t        |dz   «      ‚ d}d}	d}
| j                  | j                  z   }d
}i }|D �]Ž  }d}i }d}d}|sH|j                  dk7  s|j                  dk7  r*d}|j                  «       }||v rt        d|z  «       ŒQd||<   dD �]�  }d||<   d}d}|dk(  rM|j                  }|s2|j                  dk7  r#|j                  }|j                  rd|dk(  r_|dz  }nY|j                  }nL|j                   }|s2|j                  dk7  r#|j                  }|j                  r|dk(  r|dz  }n|j"                  }|dk7  r
|dk7  r|||<   |dk7  rý||   dk(  r|||<   n||xx   d|z   z  cc<   |r)|j$                  dk7  r||xx   d|j$                  z   z  cc<   |r²|dk(  rT|j                  dk7  rE||xx   d|j                  z  z  cc<   |j                  r|dk(  r||xx   dz  cc<   ||xx   dz  cc<   |dk(  rT|j                  dk7  rE||xx   d|j                  z  z  cc<   |j                  r|dk(  r||xx   dz  cc<   ||xx   dz  cc<   |dk(  rÄ|dk(  s|dk(  rud||<   |r[|j$                  dk7  rL|j                  |j                   k(  r3|j                  |j"                  k(  r||xx   d|j$                  z   z  cc<   |dk(  r‘||xx   dz  cc<   nƒ|r�|j$                  dk7  rr|j                  |j"                  k(  rY||xx   d|j$                  z   z  cc<   n>|j                  r2|j                   dk(  r#|j                  dk(  rd||   vr||xx   dz  cc<   |j&                  rb|dk(  r)|j(                  dk7  r||xx   d|j(                  z  z  cc<   |dk(  s�Œ|j*                  dk7  s�Œ||xx   d|j*                  z  z  cc<   �Œ1|dk(  r)|j(                  dk7  r||xx   d|j(                  z  z  cc<   |dk(  s�Œf|j*                  dk7  s�Œw||xx   d|j*                  z  z  cc<   �Œ“ g }d}|j,                  s|j.                  j1                  «       d k(  rƒ|j,                  r)|j3                  |j,                  j1                  «       «       |r*|j.                  d k(  r|j3                  |j.                  «       t5        |«      dkD  rd!d"j7                  |«      z  }|r|d#|z  z  }|j.                  j9                  «       }|j&                  rd$}|j.                  d%k(  r|j&                  s|s|sd}d}|j:                  dk7  rd&|j=                  «       z  }||d   d'›ddj7                  |j>                  j9                  «       |g«      d(›|d   d'›|›|›d)�z  }|r||z  }n,|j&                  r|
|z  }
n|j.                  d k(  r|	|z  }	n||z  }|d
z  }�Œ‘ |dk7  s
|	dk7  s|
dk7  r¿d*}|r|d+z  }t        d,«      }t        d-«      }t        d.«      }d/}||||fz  }|r|d+z  }||d0t5        |«      z  d0t5        |«      z  d0t5        |«      z  fz  z  }||z  }|dk7  r||z  }|dk7  r|	dk7  r|t        d)«      z  }|	dk7  r||	z  }|dk7  r|
dk7  r|t        d)«      z  }|
dk7  r||
z  }|}|ru| jA                  «       \  } }!t        d1«      | jC                  «       | jC                  d2«      | jC                  d3d«      d4œz  }"| jE                  «       }#t        d5«      |!|"|#|d6œz  S t        d7«      |z  S )8zShow ufw managed rulesrV   ro   zChecking iptables
zChecking ip6tables
úproblem runningr   rq   ry   rp   é   zStatus: inactiver   z iptables: %s
rz   ú
 ip6tablesTFzSkipping found tuple '%s')ÚdstÚsrcr“   z::/0ú (v6)z	0.0.0.0/0Úanyú ú/z (%sú)r”   ÚAnywherez on %sr…   z (%s)z, z[%2d] ÚFWDÚinz # %sÚ26Ú12r   z

z     ÚToÚFromÚActionz%-26s %-12s%s
r#   zCDefault: %(in)s (incoming), %(out)s (outgoing), %(routed)s (routed)r!   r"   )rœ   r…   rR   z0Status: active
%(log)s
%(pol)s
%(app)s%(status)s)ÚlogÚpolÚappÚstatuszStatus: active%s)#r;   rI   r6   r   r   r   rƒ   r   r   ÚdappÚsappÚget_app_tupler   r“   Úv6Údportr”   ÚsportÚprotocolr"   Úinterface_inÚinterface_outÚlogtyperY   Úlowerr7   Úlenr0   ÚupperÚcommentÚget_commentÚactionÚget_loglevelÚ_get_default_policyrL   )$r:   ÚverboseÚ
show_countr…   re   rY   r�   Úout6ÚsÚstr_outÚstr_rter   ÚcountÚ	app_rulesÚrÚtmp_strÚlocationÚtuplÚ
show_protor?   ÚportrW   ÚattribsÚ
attrib_strÚdir_strr,   Úfull_strÚstr_toÚstr_fromÚ
str_actionÚrules_header_fmtÚrules_headerÚlevelÚlogging_strÚ
policy_strÚapp_policy_strs$                                       rB   Ú
get_statuszUFWBackendIptables.get_status  s  € àˆØ�;Š;ØœÐ0Ó1Ñ1ˆCØ�}‰}ŒØ�tœaÐ 6Ó7Ñ7Ñ7�ØˆJäÐ%Ó&ˆØ7ò 	;ˆIä˜TŸ]™]¨DØ)¨YÑ7¸ð?ó @‰IˆR�à�QŠwÜÐ+Ó,Ò,Ø�q’Ü˜wÐ):¸cÑ)BÑBÓCÐCà�}‰}�Ü  $§.¡.°$Ø!/°9Ñ!=¸tð"Eó F‘
��Tà˜“7Ü" 7¨\Ñ#9Ó:Ð:ð	;ð ˆØˆØˆØ—
‘
˜TŸ[™[Ñ(ˆØˆØˆ	Øó T	ˆAØˆGØˆHØˆDØˆJÙ §¡¨"¢°·±¸"²Ø"�
Ø—‘Ó(�à˜9Ñ$ÜÐ5¸Ñ>Ô?Øà&*�I˜d‘Oà'ó XF�Ø "�˜‘à�Ø�Ø˜%’<ØŸ%™%�CÙ" q§v¡v°¢|Ø Ÿv™v˜ØŸ4š4 C¨6¢MØ  G™O™Dà Ÿw™w™àŸ%™%�CÙ" q§v¡v°¢|Ø Ÿv™v˜ØŸ4š4 C¨6¢MØ  G™O™Dà Ÿw™w˜à˜+Ò%¨#°ª-Ø$'�H˜S‘Mà˜5’=Ø ‘}¨Ò*Ø(,˜ šà  ›¨¨t©Ñ3›á! a§j¡j°EÒ&9Ø  ›¨¨q¯z©zÑ)9Ñ9›áØ %š<¨A¯F©F°bªLØ$ S›M¨V°q·v±vÑ->Ñ>›MØ Ÿtšt¨¨vªØ (¨£°Ñ 8£Ø$ S›M¨SÑ0›MØ %š<¨A¯F©F°bªLØ$ S›M¨V°q·v±vÑ->Ñ>›MØ Ÿtšt¨¨vªØ (¨£°Ñ 8£Ø$ S›M¨SÑ0›Mà˜5’=Ø˜kÒ)¨S°Fª]Ø(2˜ ™ñ &¨!¯*©*¸Ò*=ØŸ5™5 A§E¡Eš>¨a¯g©g¸¿¹Ò.@Ø$ S›M¨S°1·:±:Ñ-=Ñ=›Mà &š=Ø$ S›M¨WÑ4œMñ &¨!¯*©*¸Ò*=ØŸ7™7 a§g¡gÒ-Ø$ S›M¨S°1·:±:Ñ-=Ñ=œMØ—T’T˜aŸe™e všo°!·%±%¸6²/Ø h¨s¡mÑ3ð ˜S“M WÑ,“Mð —9’9Ø˜e’|¨¯©¸"Ò(<Ø  ›¨°Q·^±^Ñ)DÑD›Ø˜e”|¨¯©¸2Ô(=Ø  ›¨°Q·_±_Ñ)EÑE�à˜e’|¨¯©¸"Ò(<Ø  ›¨°Q·^±^Ñ)DÑD›Ø˜e”|¨¯©¸2Ô(=Ø  ›¨°Q·_±_Ñ)EÑE�ðqXFðt ˆGØˆJØ�yŠy˜AŸK™K×-Ñ-Ó/°5Ò8Ø—9’9Ø—N‘N 1§9¡9§?¡?Ó#4Ô5á !§+¡+°Ò"6Ø—N‘N 1§;¡;Ô/Ü�w“< !Ò#Ø!(¨D¯I©I°gÓ,>Ñ!?�Jñ Ø˜8 uÑ-Ñ-�à—k‘k×'Ñ'Ó)ˆGØ�yŠyØ�à�{‰{˜dÒ"¨1¯9ª9Ù¡:Ø�àˆKØ�y‰y˜BŠØ%¨¯©«Ñ7�Ø°8¸E´?Ø03·±¸!¿(¹(¿.¹.Ó:JØ:Að:Cõ 1Dà08¸³ÁÚ0;ð	=ñ =ˆGñ Ø�W‘‘à—9’9Ø˜wÑ&‘GØ—[‘[ EÒ)Ø˜wÑ&‘Gà˜‘L�AØ�Q‰JŠEðiT	ðl �Š7�g ’m w°"¢}ØˆHÙØ˜GÑ#�Ü�t“WˆFÜ˜“yˆHÜ˜8›ˆJØ0Ðà+¨v°zÀ8Ð.LÑLˆLÙØ Ñ'�ØÐ,Ø ¤3 v£;Ñ.Ø ¤3 z£?Ñ2Ø ¤3 x£=Ñ0ð2ñ2ñ 2ˆLð
 ˜Ñ$ˆHà�BŠwØ˜A‘�Ø�BŠw˜7 bš=ØœA˜d›GÑ#�Ø˜"Š}Ø˜GÑ#�Ø�BŠw˜7 bš=ØœA˜d›GÑ#�Ø˜"Š}Ø˜GÑ#�àˆAáØ#'×#4Ñ#4Ó#6Ñ ˆU�KÜð 1ó 2ð &*×%=Ñ%=Ó%?Ø&*×&>Ñ&>¸xÓ&HØ)-×)AÑ)AÀ)ØBFó*HñIñJˆJð "×@Ñ@ÓBˆNÜÐJÓKØ)°*Ø,¸ñ;ñ<ð <ô Ð'Ó(¨AÑ.Ð.rC   c                 óæ  — | j                   rt        dt        d«      z   «       yg }|j                  | j                  d   «       | j
                  �d| j                  �X|j                  d«       |j                  | j
                  «       |j                  d«       |j                  | j                  «       |j                  d«       t        |«      \  }}|dk7  rt        d	|z  «      }t        |«      ‚y)
zStop the firewallro   úrunning ufw-initr   Nú	--rootdirú	--datadirz
force-stopr   úproblem running ufw-init
%s)	r;   r   rI   r7   r<   r   r   r   r   ©r:   r†   r�   r…   re   s        rB   Ústop_firewallz UFWBackendIptables.stop_firewallë  sÁ   € à�;Š;Ü�”qÐ+Ó,Ñ,Õ-àˆDØ�K‰K˜Ÿ
™
 6Ñ*Ô+Ø�|‰|Ð'¨D¯L©LÐ,DØ—‘˜KÔ(Ø—‘˜DŸL™LÔ)Ø—‘˜KÔ(Ø—‘˜DŸL™LÔ)Ø�K‰K˜Ô%Ü˜D›	‰IˆR�Ø�QŠwÜÐ:¸SÑ@ÓA�Ü˜wÓ'Ð'ð rC   c                 óV  — | j                   rt        dt        d«      z   «       yg }|j                  | j                  d   «       | j
                  �d| j                  �X|j                  d«       |j                  | j
                  «       |j                  d«       |j                  | j                  «       |j                  d«       t        |«      \  }}|dk7  rt        d	|z  «      }t        |«      ‚d
| j                  vs2| j                  d
   t        | j                  j                  «       «      vr	 | j                  d«       y	 | j                  | j                  d
   «       y# t        $ r t        d«      }t        |«      ‚w xY w# t        $ r t        d«      }t        |«      ‚w xY w)zStart the firewallro   rÕ   r   NrÖ   r×   Ústartr   rØ   ÚloglevelÚlowzCould not set LOGLEVELzCould not load logging rules)r;   r   rI   r7   r<   r   r   r   r   rJ   ÚlistÚ	loglevelsÚkeysÚset_loglevelr\   Úupdate_loggingrÙ   s        rB   Ústart_firewallz!UFWBackendIptables.start_firewallý  sg  € à�;Š;Ü�”qÐ+Ó,Ñ,Õ-àˆDØ�K‰K˜Ÿ
™
 6Ñ*Ô+Ø�|‰|Ð'¨D¯L©LÐ,DØ—‘˜KÔ(Ø—‘˜DŸL™LÔ)Ø—‘˜KÔ(Ø—‘˜DŸL™LÔ)Ø�K‰K˜Ô Ü˜D›	‰IˆR�Ø�QŠwÜÐ:¸SÑ@ÓA�Ü˜wÓ'Ð'à §¡Ñ.Ø�}‰}˜ZÑ(´°T·^±^×5HÑ5HÓ5JÓ0KÑKð,Ø×%Ñ% eÕ,ð
,Ø×'Ñ'¨¯©°jÑ(AÕBøô !ò ,ÜÐ 8Ó9�GÜ" 7Ó+Ð+ð,ûô !ò ,ÜÐ >Ó?�GÜ" 7Ó+Ð+ð,ús   Ä3E% ÅF Å% FÆ F(c                 óD  — | j                   ry| j                  «        d}| j                  }|rd}| j                  }dD ]`  }|dk(  s|dk(  r*|r| j                  d   d   sŒ"|s| j                  d   d   sŒ7t        |d	d
|dz   |z   g«      \  }}|dk7  sŒUt        d«        y y)zCheck if all chains existFr   Úufw6)r    r!   r"   r%   úlimit-acceptr%   rç   r   r   rp   rq   ú-user-r   z_need_reload: forcing reloadT)r;   r€   r   rƒ   r�   r   r   )r:   r©   ÚprefixÚexerA   r�   r…   s          rB   Ú_need_reloadzUFWBackendIptables._need_reload  s¹   € à�;Š;Øð 	�‰ŒàˆØ�m‰mˆÙØˆFØ—.‘.ˆCàNò 
	ˆEØ˜Ò 5¨NÒ#:Ù˜dŸi™i¨Ñ0°Ò5ØÙ D§I¡I¨gÑ$6°sÒ$;Øä˜S $¨¨f°xÑ.?À%Ñ.GÐHÓI‰IˆR�Ø�Q‹wÜÐ4Ô5Ùð
	ð rC   c                 óf  — t        d«      }| j                  r(t        d«       | j                  «       rt        d«       yy| j	                  «       rÊ	 | j
                  d   D ]*  }| j                  |d|g«       | j                  |d|g«       Œ, 	 t        d| j                  d   g| j                  d	g«      \  }}|d
k7  rt        |dz   «      ‚| j                  «       r>t        d| j                  d   g| j                  d	g«      \  }}|d
k7  rt        |dz   «      ‚yyy# t        $ r t        |«      ‚w xY w)zReload firewall rules filer�   z> | iptables-restorez> | ip6tables-restorer   ú-Fú-ZÚcatr   rp   r   z	 iptablesr   r’   N)rI   r;   r   r6   Ú
is_enabledr5   Ú
_chain_cmdr\   r   r	   r<   Úiptables_restoreÚip6tables_restore)r:   re   r‰   r�   r…   s        rB   Ú_reload_user_rulesz%UFWBackendIptables._reload_user_rules:  s=  € äÐ%Ó&ˆØ�;Š;ÜÐ&Ô'Ø�}‰}ŒÜÐ+Õ,ð à�_‰_Ôð(ØŸ™ VÑ,ò 2�AØ—O‘O A¨¨a yÔ1Ø—O‘O A¨¨a yÕ1ñ2ô ! %¨¯©°GÑ)<Ð!=Ø"&×"7Ñ"7¸Ð!>ó@‰IˆR�à�QŠwÜ˜w¨Ñ4Ó5Ð5à�}‰}ŒÜ$ e¨T¯Z©Z¸Ñ-AÐ%BØ&*×&<Ñ&<¸dÐ%CóE‘	��Sà˜’7Ü" 7¨\Ñ#9Ó:Ð:ð ð ð øô ò (Ü˜wÓ'Ð'ð(ús   Á<D ÄD0c                 ó¢  — g }t        j                  d«      }t        j                  d«      }t        j                  d«      }|j                  |«      r¹|j                  |«      r†|j                  |«      r2|j                  |j	                  d|j	                  d|«      «      «       n!|j                  |j	                  d|«      «       |j                  |j	                  d|«      «       n3|j                  |j	                  d|«      «       n|j                  |«       t        j                  d«      }t        j                  d	«      }	t        j                  d
«      }
d}t        |«      D �]=  \  }}|j                  |«      sŒ|j	                  d|«      j                  «       }|j                  «       dk(  rd}n|j                  «       dk(  rd}nd}|›d|›d�}|	j                  |«      sd|z   }|j	                  d|«      ||<   |j                  ||j	                  d|z   dz   |z   |«      «       |j                  ||
j	                  d|z   dz   |z   |j	                  d|«      «      «       |j                  ||
j	                  d|z   dz   |z   |j	                  d|z   |«      «      «       �Œ@ t        j                  d«      }t        |«      D ]‚  \  }}|j                  |«      sŒ|j	                  d|«      }|j	                  d|z   dz   |«      }|j	                  d|z   d z   |«      }|||<   |j                  ||«       |j                  ||«       Œ„ |S )!z5Return list of iptables rules appropriate for sendingz-p all zport z-j (REJECT(_log(-all)?)?)z-p tcp z-j \1 --reject-with tcp-resetz-p udp rV   z(.*)-j ([A-Z]+)_log(-all)?(.*)z-j [A-Z]+_log-allz(-A|-D) ([a-zA-Z0-9\-]+)z'-m limit --limit 3/min --limit-burst 10ú\2rF   ÚALLOWr%   ÚLIMITÚBLOCKz -j LOG --log-prefix "[UFW ú] "z-m conntrack --ctstate NEW z	\1-j \2\4z\1-j z-user-logging-z\1 z\1-j RETURNú\1z	 -j LIMITz+ -m conntrack --ctstate NEW -m recent --setzL -m conntrack --ctstate NEW -m recent --update --seconds 30 --hitcount 6 -j z-user-limitz -j z-user-limit-accept)	r]   r^   ra   r7   rc   Ú	enumerateÚstripr°   Úinsert)r:   Úfruleré   ÚsuffixÚsnippetsÚ	pat_protoÚpat_portÚ
pat_rejectÚpat_logÚ
pat_logallÚ	pat_chainÚ
limit_argsr‹   r»   rZ   ÚlstrÚ	pat_limitÚtmp1Útmp2Útmp3s                       rB   Ú_get_rules_from_formattedz,UFWBackendIptables._get_rules_from_formattedV  s+  € àˆô —J‘J˜zÓ*ˆ	Ü—:‘:˜hÓ'ˆÜ—Z‘ZÐ <Ó=ˆ
Ø×Ñ˜EÔ"Ø�‰˜uÔ%Ø×$Ñ$ UÔ+Ø—O‘O I§M¡M°)Ø"Ÿ™Ð'GØóó% õ !ð —O‘O I§M¡M°)¸UÓ$CÔDØ—‘ 	§¡¨i¸Ó ?Õ@à—‘ 	§¡¨b°%Ó 8Õ9à�O‰O˜EÔ"ô —*‘*Ð>Ó?ˆÜ—Z‘ZÐ 4Ó5ˆ
Ü—J‘JÐ:Ó;ˆ	Ø>ˆ
Ü˜hÓ'ó 	P‰DˆAˆqØ�~‰~˜aÕ Ø Ÿ™ U¨AÓ.×4Ñ4Ó6�Ø—<‘<“> XÒ-Ø$‘FØ—\‘\“^ wÒ.Ø$‘Fà$�Fâ?IÚð�à!×(Ñ(¨Ô+Ø8¸4Ñ?�DØ%Ÿk™k¨,¸Ó:�˜‘Ø—‘  7§;¡;¨x¸&Ñ/@Ø/?ñ0@ØBHñ0IØJKó$Mô Nà—‘  9§=¡=°¸&±Ø1Añ2BØDJñ2Kà18·±¸^Ø12ó24ó$5ô 6ð —‘  9§=¡=°¸&±Ø1Añ2BØDJñ2Kà18·±¸UÀT¹\È1Ó1Mó$Oö Pð+	Pô4 —J‘J˜|Ó,ˆ	Ü˜hÓ'ò 
	)‰DˆAˆqØ×Ñ Õ"Ø —}‘}Ð%RØ%&ó(�à —}‘}ð &,à.4ñ&5à7Dñ&EàFGóI�ð !—}‘} V¨f¡_Ð7KÑ%KÈQÓO�Ø"�˜‘Ø—‘  4Ô(Ø—‘  4Õ(ð
	)ð ˆrC   c                 óè  — g }| j                  |||«      }t        j                  d«      }t        |«      D ]¹  \  }}|j	                  |j                  d|«      j                  «       «       |j                  |«      sŒG||   j	                  d«       ||   j	                  |j                  d|«      j                  dd«      «       ||xx   |j                  d|«      j                  «       z  cc<   Œ» |S )z_Return list of iptables rules appropriate for sending as arguments
           to cmd()
        z(.*) --log-prefix (".* ")(.*)rû   r)   rö   ú"rV   z\3)	r  r]   r^   rü   r7   rc   r‚   ÚmatchÚreplace)	r:   rÿ   ré   r   r  Ústr_snippetsrh   r‹   r»   s	            rB   Ú_get_lists_from_formattedz,UFWBackendIptables._get_lists_from_formattedš  sÖ   € ð ˆØ×5Ñ5°e¸VÀVÓLˆô �j‰jÐ9Ó:ˆÜ˜lÓ+ò 	9‰DˆAˆqØ�O‰O˜CŸG™G E¨1Ó-×3Ñ3Ó5Ô6Ø�y‰y˜�|Ø˜‘×"Ñ" >Ô2Ø˜‘×"Ñ" 3§7¡7¨5°!Ó#4×#<Ñ#<¸SÀ"Ó#EÔFØ˜“˜sŸw™w u¨aÓ0×6Ñ6Ó8Ñ8”ð	9ð ˆrC   c                 ó°  — | j                   d   g}| j                  «       r|j                  | j                   d   «       |D �]Ã  }	 t        j                  j                  |«      }t        j                  d«      }t        j                  d«      }t        j                  d«      }|D �]K  }|}	d}
d|v r$|j                  d«      \  }	}|j                  «       }
|j                  |	«      sŒB|j                  d|	«      }t        j                  d	|j                  «       «      }t        |«      d
k  st        |«      dkD  rt        d«      |z  }t!        |«       Œ®d}d}d}t        |«      dk(  st        |«      dk(  �rt        d«      |z  }|d   j                  d«      d   }d|d   v rçd|d   v r{|j#                  |d   «      rg|j#                  |d   «      rS|d   j                  d«      d   j%                  d«      d   }|d   j                  d«      d   j%                  d«      d   }ne|d   j'                  d«      r|d   j%                  d«      d   }n9|d   j'                  d«      r|d   j%                  d«      d   }nt!        |«       �Œä	 |d   }d}d|v rd}|j                  d«      d   }t        |«      dk  r#t)        ||d   |d   |d   |d   |d   |||
«	      }n{t)        ||d   |d   |d   |d   |d   |||
«	      }t        j                  d«      }|d
   d k7  r|j                  d!|d
   «      |_        |d   d k7  r|j                  d!|d   «      |_        |dk7  r|j/                  d|«       |dk7  r|j/                  d"|«       || j                   d   k(  r.|j1                  d«       | j2                  j                  |«       �Œ |j1                  d«       | j4                  j                  |«       �ŒN |j7                  «        �ŒÆ y$# t        $ r t        d«      |z  }t        |«      ‚w xY w# t        $ r t        d#«      |z  }t!        |«       Y �Œ®w xY w)%z$Read in rules that were added by ufwr   r   zCouldn't open '%s' for readingz^### tuple ###\s*zin_\w+zout_\w+rV   z	 comment=z\s+é   é	   z)Skipping malformed tuple (bad length): %srœ   é   z$Skipping malformed tuple (iface): %séÿÿÿÿrI   r   ú!é   r‘   Úin_Úout_Fr~   Té   é   é   é   ú%20r#   r—   r…   zSkipping malformed tuple: %sN)r<   r6   r7   r   r_   Úopen_file_readr\   rI   r   r]   r^   r‚   rý   r  rc   r±   r   ra   Ú	partitionÚ
startswithr   r¦   r§   Úset_interfaceÚset_v6r   r   Úclose)r:   Úrfnsri   rX   re   Ú	pat_tupleÚpat_iface_inÚpat_iface_outÚ	orig_linerl   r³   ÚhexrÃ   rW   ÚwmsgÚdtyper­   r®   rµ   r"   ÚruleÚ	pat_spaceÚwarn_msgs                          rB   Ú_read_ruleszUFWBackendIptables._read_rules¬  sJ  € à—
‘
˜7Ñ#Ð$ˆØ�=‰=Œ?Ø�K‰K˜Ÿ
™
 8Ñ,Ô-àó ]	ˆAð(Ü—x‘x×.Ñ.¨qÓ1�ô
 Ÿ
™
Ð#7Ó8ˆIÜŸ:™: iÓ0ˆLÜŸJ™J zÓ2ˆMØ!ó Q4�	Ø �à�à )Ñ+Ø )§¡°Ó =‘I�D˜#Ø!Ÿi™i›k�Gà—?‘? 4Õ(Ø$Ÿ=™=¨¨TÓ2�DÜŸ(™( 6¨4¯:©:«<Ó8�CÜ˜3“x !’|¤s¨3£x°!¢|Ü Ð!LÓMØ$(ñ *˜ä˜Tœ
Ø ð !%˜Ø')˜Ø(*˜Ü˜s›8 qš=¬C°«H¸«MÜ#$Ð%KÓ#LØ(,ñ$.˜Dà$'¨¡G§M¡M°#Ó$6°qÑ$9˜EØ" c¨"¡g™~Ø#&¨#¨b©'¡>Ø#/×#6Ñ#6°s¸2±wÔ#?Ø#0×#7Ñ#7¸¸B¹Ô#@ð ),¨B©¯©°cÓ(:¸1Ñ(=×(GÑ(GÈÓ(LÈQÑ(Oð %1ð ),¨B©¯©°cÓ(:¸1Ñ(=×(GÑ(GÈÓ(LÈQÑ(Oñ %2à%(¨¡W×%7Ñ%7¸Ô%>à36°r±7×3DÑ3DÀSÓ3IÈ!Ñ3L¡LØ%(¨¡W×%7Ñ%7¸Ô%?à47¸±G×4EÑ4EÀcÓ4JÈ1Ñ4M¡Mä$(¨¤JÙ$,ð%Ø%(¨¡V˜FØ&+˜Gà" f™}Ø*. Ø)/¯©°cÓ):¸1Ñ)= Ü" 3›x¨!š|Ü'.¨v°s¸1±v¸sÀ1¹vÀsÈ1ÁvØ/2°1©v°s¸1±v¸uÀgØ/6ó(8¡ô (/¨v°s¸1±v¸sÀ1¹vÀsÈ1ÁvØ/2°1©v°s¸1±v¸uÀgØ/6ó(8 ô -/¯J©J°uÓ,= 	Ø#& q¡6¨S¢=Ø09·±¸cÀ3ÀqÁ6Ó0J D¤IØ#& q¡6¨S¢=Ø09·±¸cÀ3ÀqÁ6Ó0J D¤IØ+¨rÒ1Ø $× 2Ñ 2°4¸Ô FØ,°Ò2Ø $× 2Ñ 2°5¸-Ô Hð  §
¡
¨8Ñ 4Ò4Ø ŸK™K¨Ô-Ø ŸK™K×.Ñ.¨tÖ4à ŸK™K¨Ô.Ø ŸJ™J×-Ñ-¨dÖ3ðcQ4ðf �J‰JŽLñ{]	øô ò (ÜÐ<Ó=ÀÑC�Ü˜wÓ'Ð'ð(ûô\  (ò %Ü'(Ð)GÓ'HØ)-ñ(/˜Hä  œNÚ$ð	%ús   ÁP	ÊC;P/Ð	#P,Ð/"QÑQc                 ó"  — | j                   d   }|r| j                   d   }t        j                  |t        j                  «      st	        d|z  «      }t        |«      ‚	 t        j                  j                  |«      }| j                  «        d}| j                  }|rd}| j                  }| j                  rt        j                  j!                  «       }n|d   }t        j                  j#                  |d«       t        j                  j#                  |d|z   d	z   «       t        j                  j#                  |d|z   d
z   «       t        j                  j#                  |d|z   dz   «       t        j                  j#                  |d|z   dz   «       t        j                  j#                  |d|z   dz   «       t        j                  j#                  |d|z   dz   «       t        j                  j#                  |d|z   dz   «       t        j                  j#                  |d|z   dz   «       t        j                  j#                  |d|z   dz   «       t        j                  j#                  |d|z   dz   «       t        j                  j#                  |d|z   dz   «       t        j                  j#                  |d|z   dz   «       t        j                  j#                  |d|z   dz   «       t        j                  j#                  |d|z   dz   «       |dk(  r| j$                  d   d   s|dk(  r^| j$                  d   d   rLt        j                  j#                  |d|z   dz   «       t        j                  j#                  |d|z   dz   «       t        j                  j#                  |d«       |D �]  }|j&                  }	|j(                  rd|j&                  z   }	|j*                  dk7  r|	d|j*                  z   z  }	d}
|j,                  dk(  r|j.                  dk(  r|j0                  }
n‡|j,                  dk7  r,|j.                  dk7  rd |j,                  ›d!|j.                  ›�}
nL|j,                  dk7  r|
|j0                  ›d|j,                  ›�z  }
n|
|j0                  ›d|j.                  ›�z  }
|j2                  dk(  r�|j4                  dk(  rŽd"|	›d#|j6                  ›d#|j8                  ›d#|j:                  ›d#|j<                  ›d#|j>                  ›d#|
›�}|j@                  dk7  r|d$|j@                  z  z  }t        j                  j#                  ||d%z   «       nütC        jD                  d#«      }d&}|j2                  r|jG                  d'|j2                  «      }d&}|j4                  r|jG                  d'|j4                  «      }d"|	›d#|j6                  ›d#|j8                  ›d#|j:                  ›d#|j<                  ›d#|j>                  ›d#|›d#|›d#|
›�}|j@                  dk7  r|d$|j@                  z  z  }t        j                  j#                  ||d%z   «       d(}|j(                  rd)}n|j0                  d*k(  rd+}|›d,|›�}d-|›d#|jI                  «       ›d%�}| jK                  |||«      D ]"  }t        j                  j#                  ||«       Œ$ �Œ" t        j                  j#                  |d.«       t        j                  j#                  |d/«       	 | jM                  | jN                  d0   «      }|D ]„  \  }}}tQ        |«      d1kD  r	|d1   d2k(  rŒ|jS                  |d&z   «      sŒ3t        j                  j#                  |d#jU                  |«      jW                  d3d4«      jW                  d5d6«      d%z   «       Œ† t        j                  j#                  |d7«       |dk(  r| j$                  d   d   s|dk(  �r| j$                  d   d   rót        j                  j#                  |d8«       | jN                  d0   d9k7  rUt        j                  j#                  |d-|z   d:z   d#jU                  | jX                  «      z   d;z   | jZ                  z   d<z   «       t        j                  j#                  |d-|z   d=z   «       t        j                  j#                  |d-|z   d>z   «       t        j                  j#                  |d?«       t        j                  j#                  |d@«       	 | j                  r!t        j                  j]                  |dA«       yBt        j                  j]                  |«       yB# t        $ r ‚ w xY w# t        $ r ‚ w xY w# t        $ r ‚ w xY w)Cz.Write out new rules to file to user chain filer   r   z'%s' is not writabler   ræ   rW   z*filter
r~   z-user-input - [0:0]
z-user-output - [0:0]
z-user-forward - [0:0]
z-before-logging-input - [0:0]
z-before-logging-output - [0:0]
z -before-logging-forward - [0:0]
z-user-logging-input - [0:0]
z-user-logging-output - [0:0]
z-user-logging-forward - [0:0]
z-after-logging-input - [0:0]
z-after-logging-output - [0:0]
z-after-logging-forward - [0:0]
z-logging-deny - [0:0]
z-logging-allow - [0:0]
r%   r   r   z-user-limit - [0:0]
z-user-limit-accept - [0:0]
z### RULES ###
zroute:rV   rI   r  z!out_z
### tuple ### r—   z comment=%sr   r#   r"  r    r"   r…   r!   rè   z-A z
### END RULES ###
z
### LOGGING ###
rÝ   r   ú-Dú[z"[z] rú   z### END LOGGING ###
z
### RATE LIMITING ###
Úoffz-user-limit z "z "
z-user-limit -j REJECT
z-user-limit-accept -j ACCEPT
z### END RATE LIMITING ###
zCOMMIT
FN)/r<   r.   ÚaccessÚW_OKrI   r   r   r_   r`   r\   r€   r   r   r;   ÚsysÚstdoutÚfilenorb   r�   rµ   r"   r¯   r­   r®   rY   r¦   r§   r¬   rª   r“   r«   r”   r³   r]   r^   rc   Úformat_ruler  Ú_get_logging_rulesrJ   r±   r%  r0   r  r8   r9   rd   )r:   r©   Ú
rules_filere   rj   r>   r   rk   rÀ   rµ   ÚifacesÚtstrr2  r¦   r§   Úchain_suffixrA   Úrule_strr»   Úlrules_tr‰   Úqs                         rB   Ú_write_ruleszUFWBackendIptables._write_rules  sV  € à—Z‘Z Ñ(ˆ
ÙØŸ™ HÑ-ˆJô �y‰y˜¤R§W¡WÔ-ÜÐ.°*Ñ=Ó>ˆGÜ˜7Ó#Ð#ð	Ü—(‘(×%Ñ% jÓ1ˆCð
 	�‰ŒàˆØ—
‘
ˆÙØ!ˆLØ—K‘KˆEà�;Š;Ü—‘×"Ñ"Ó$‰Bà�U‘ˆBô 	�‰×Ñ˜r ;Ô/Ü�‰×Ñ˜r 3¨Ñ#5Ð8OÑ#OÔPÜ�‰×Ñ˜r 3¨Ñ#5Ø)Añ$Bô 	Cä�‰×Ñ˜r 3¨Ñ#5Ø)Bñ$Cô 	Dô 	�‰×Ñ˜r 3¨Ñ#5Ø)Jñ$Kô 	Lä�‰×Ñ˜r 3¨Ñ#5Ø)Kñ$Lô 	Mä�‰×Ñ˜r 3¨Ñ#5Ø)Lñ$Mô 	Nä�‰×Ñ˜r 3¨Ñ#5Ø)Hñ$Iô 	Jä�‰×Ñ˜r 3¨Ñ#5Ø)Iñ$Jô 	Kä�‰×Ñ˜r 3¨Ñ#5Ø)Jñ$Kô 	Lä�‰×Ñ˜r 3¨Ñ#5Ø)Iñ$Jô 	Kä�‰×Ñ˜r 3¨Ñ#5Ø)Jñ$Kô 	Lä�‰×Ñ˜r 3¨Ñ#5Ø)Kñ$Lô 	Mä�‰×Ñ˜r 3¨Ñ#5Ø)Bñ$Cô 	Dä�‰×Ñ˜r 3¨Ñ#5Ø)Cñ$Dô 	Eð ˜EÒ! d§i¡i°Ñ&8¸Ò&=Ø˜FÒ" t§y¡y°Ñ'9¸#Ò'>Ü�H‰H×"Ñ" 2 s¨\Ñ'9Ø-Dñ(Eô Fä�H‰H×"Ñ" 2 s¨\Ñ'9Ø-Kñ(Lô Mô 	�‰×Ñ˜rÐ#4Ô5ð ó 3	.ˆAØ—X‘XˆFà�yŠyØ! A§H¡HÑ,�Ø�y‰y˜BŠØ˜# §	¡	™/Ñ)�àˆFØ�~‰~ Ò#¨¯©¸2Ò(=ØŸ™‘Ø—‘ 2Ò%¨!¯/©/¸RÓ*?Ø+,¯>«>¸1¿?º?ÐK‘à—>‘> RÒ'Ø¨¯«°a·n²nÐEÑE‘Fà¨¯«°a·o²oÐFÑF�Fà�v‰v˜Š| §¡¨"£â˜aŸj›j¨!¯'«'°1·5³5¸!¿'»'À1Ç5Ã5Ùð�ð —9‘9 ’?Ø˜M¨A¯I©IÑ5Ñ5�DÜ—‘×&Ñ& r¨4°$©;Õ7äŸJ™J s›O�	Ø�Ø—6’6Ø$Ÿ=™=¨°·±Ó7�DØ�Ø—6’6Ø$Ÿ=™=¨°·±Ó7�Døâ §
£
¨A¯G«G°Q·U³U¸A¿G»GÀQÇUÃUÚšd¡Fð,�ð —9‘9 ’?Ø˜M¨A¯I©IÑ5Ñ5�DÜ—‘×&Ñ& r¨4°$©;Ô7à"ˆLØ�yŠyØ(‘Ø—‘ Ò%Ø'�Ú$0±,Ð?‰EÚ',¨a¯m©m­oÐ>ˆHà×3Ñ3°H¸lØ4@óBò .�ä—‘×&Ñ& r¨1Õ-ò.ðc3	.ôl 	�‰×Ñ˜rÐ#:Ô;ô 	�‰×Ñ˜rÐ#8Ô9ð	Ø×.Ñ.¨t¯}©}¸ZÑ/HÓIˆHð  ò 	‰GˆAˆq�!Ü�1‹v˜Šz˜a ™d dšlØØ�|‰|˜L¨3Ñ.Õ/Ü—‘×&Ñ& rØ—H‘H˜Q“K×'Ñ'¨¨TÓ2×:Ñ:¸4ÀÓGØñõð		ô 	�‰×Ñ˜rÐ#:Ô;ð ˜EÒ! d§i¡i°Ñ&8¸Ò&=Ø˜FÓ" t§y¡y°Ñ'9¸#Ò'>Ü�H‰H×"Ñ" 2Ð'BÔCØ�}‰}˜ZÑ(¨EÒ1Ü—‘×&Ñ& r¨5Ø%ñ,&Ø(6ñ,7àŸ™ $×"9Ñ"9Ó:ñ,;ð ñ,ð "&×!=Ñ!=ñ,>ð AHñ,Hô Iô �H‰H×"Ñ" 2 u¨|Ñ';Ø2ñ(3ô 4ä�H‰H×"Ñ" 2 u¨|Ñ';Ø9ñ(:ô ;ä�H‰H×"Ñ" 2Ð'DÔEä�‰×Ñ˜r :Ô.ð	Ø�{Š{Ü—‘×$Ñ$ S¨%Õ0ä—‘×$Ñ$ SÕ)øôo ò 	Øð	ûôn ò 	Øð	ûôB ò 	Øð	ús*   Áe' Üe5 ä,f åf å'e2å5f æfc                 ód  — | j                  «        d}|j                  r_| j                  «       st        d«      }t	        |«      ‚|j
                  dk(  rc| j                  d   d   sQt        d«      |j
                  z  S |j
                  dk(  r*| j                  d   d   st        d«      |j
                  z  S |j                  r4|j                  dk7  r%|j                  d	k7  rt        d
«      }t	        |«      ‚g }d}d}| j                  }|j                  }	|j                  rD| j                  dk  r)|j                  dk7  s|j                  dk7  rt        d«      S | j                  }|	dk  s|	t        |«      kD  rt        d«      |	z  }t	        |«      ‚|	dkD  r"|j                   rt        d«      }t	        |«      ‚	 |j#                  «        d}
d}d}d}|D �]f  }	 |j#                  «        |j&                  |j(                  |j                  |j                  f}|
|	k(  rS|d   dk(  r|d   dk(  r|
dkD  s|d   dk(  r|d   dk(  s||k7  r$d}|j+                  |j-                  «       «       d}n|	dz  }	|}|
dz  }
t/        j0                  ||«      }|dk  r|dz  }|dk(  r3|s1|s/d}|j                   rŒÚ|j+                  |j-                  «       «       Œú|dk(  r|j                   r|j2                  dk(  rd}�Œ|dk  r3|j                   s'|s%d}d}|j+                  |j-                  «       «       �ŒV|j+                  |«       �Œi |r#|dkD  r±t        d«      }|j                  r|dz  }|S |s+|j                   s|j+                  |j-                  «       «       |s6|j                   r*| j4                  st        d«      }|j                  r|dz  }|S |r,|j                   s |st        d«      }|j                  r|dz  }|S |j                  r|| _        n|| _	        	 | j7                  |j                  «       t        d«      }|j                  rt        d«      }| j9                  «       �rj| j4                  �s]d}|s| j;                  |j                  «      s|rUd}|r|t        d«      z  }n|t        d«      z  }|j                  r|dz  }|r	 | j=                  «        n}|t        d «      z  }nn|rO|j                   rCd!}t        d"«      }|j                  r|dz  }|r	 | j=                  «        d}n,|t        d «      z  }n|s|s|j                   sd#}t        d$«      }|dk7  �rs| j>                  }d%}|j                  r| j@                  }d&}|dz  }d'}|jB                  rd(}n|jD                  d)k(  rd*}|›d+|›�}t        d,«      }tG        |d-|d.g«      \  }}|dk7  rt	        |«      ‚|›d/|›d/|jI                  «       ›�}tK        jL                  d0«      }| jO                  |||«      D ]­  }tG        |g|z   «      \  }}|dk7  r%tQ        |tR        jT                  «       t	        |«       |d#k(  sŒE|jW                  d/jY                  |«      «      sŒf|j[                  d1d/jY                  |«      «      }tG        |d!|d2d3g«      \  }}|dk7  sŒ t]        d4|z  «       Œ¯ |S # t$        $ r ‚ w xY w# t$        $ r ‚ w xY w# t        $ r ‚ t$        $ r t        d«      }t	        |«       Y �Œæw xY w# t$        $ r ‚ w xY w# t$        $ r ‚ w xY w)5aX  Updates firewall with rule by:
        * appending the rule to the chain if new rule and firewall enabled
        * deleting the rule from the chain if found and firewall enabled
        * inserting the rule if possible and firewall enabled
        * updating user rules file
        * reloading the user rules file if rule is modified
        rV   z)Adding IPv6 rule failed: IPv6 not enabledr%   r   z#Skipping unsupported IPv6 '%s' ruler   z#Skipping unsupported IPv4 '%s' ruleÚudpÚtcpz/Must specify 'tcp' or 'udp' with multiple portsFz1.4z:Skipping IPv6 application rule. Need at least iptables 1.4r   zInvalid position '%d'z Cannot specify insert and deleter‘   )rV   rV   rV   rV   r  r  Téþÿÿÿz Skipping inserting existing ruler•   z"Could not delete non-existent rulezSkipping adding existing rulezCouldn't update rules filezRules updatedzRules updated (v6)zRule insertedzRule updatedz (skipped reloading firewall)r6  zRule deletedú-Az
Rule addedr   ræ   r    r"   r…   r!   rè   ú!Could not update running firewallrq   rp   r—   z(-A +)(ufw6?-user-[a-z\-]+)(.*)rö   r'   ÚRETURNzFAILOK: -D %s -j RETURN)/r€   r©   r6   rI   r   rµ   r�   Úmultir¬   r   ÚpositionÚiptables_versionr¦   r§   r   r±   ÚremoveÚ	normalizer\   r“   r”   r7   Údup_ruler   r  r³   r;   rG  rð   rë   rô   r   rƒ   r"   rY   r   r>  r]   r^   r  r   r;  Ústderrra   r0   rc   r   )r:   r1  Úallow_reloadrK   re   ÚnewrulesÚfoundÚmodifiedr   rP  r¾   ÚinsertedÚmatchesÚlastrÀ   ÚcurrentÚretÚflagrê   r>   rC  rA   r�   r…   rD  r  r»   r‰   s                               rB   Úset_rulezUFWBackendIptables.set_ruleº  sÖ  € ð 	�‰Œàˆà�7Š7Ø—=‘=”?ÜÐGÓH�Ü˜wÓ'Ð'Ø�{‰{˜gÒ%¨d¯i©i¸Ñ.@ÀÒ.EäÐ>Ó?À4Ç;Á;ÑOÐOà�{‰{˜gÒ%¨d¯i©i¸Ñ.@ÀÒ.EäÐ>Ó?À4Ç;Á;ÑOÐOà�:Š:˜$Ÿ-™-¨5Ò0°T·]±]ÀeÒ5KÜÐIÓJˆGÜ˜7Ó#Ð#àˆØˆØˆà—
‘
ˆØ—=‘=ˆØ�7Š7Ø×$Ñ$ uÒ,°$·)±)¸r²/Ø26·)±)¸r²/ÜÐUÓVÐVØ—K‘KˆEð �aŠ<˜8¤c¨%£jÒ0ÜÐ/Ó0°HÑ=ˆGÜ˜7Ó#Ð#à�aŠ<˜DŸKšKÜÐ:Ó;ˆGÜ˜7Ó#Ð#ð	Ø�N‰NÔð ˆØˆØˆØˆØó ,	#ˆAðØ—‘”ð —u‘u˜aŸe™e Q§V¡V¨Q¯V©VÐ4ˆGØ˜Ò ð ˜‘G˜r’M d¨1¡g°¢m¸Àº	Ø˜A‘J "Ò$¨°©°rÒ)9Ø˜7’?Ø#�HØ—O‘O D§M¡M£OÔ4Ø+‘Dà ‘M�HØˆDØ�Q‰JˆEä—-‘-  4Ó(ˆCØ�QŠwØ˜1‘�à�aŠx¡©hð �Ø—{“{Ø—O‘O D§M¡M£OÕ4Ø˜’˜tŸ{š{¨t¯|©|¸rÒ/Aà’Ø�q’ §¢±Xð �Ø�Ø—‘ §¡£Ö0à—‘ Ö"ðY,	#ñ\ Ø˜Š{ÜÐ;Ó<�Ø—7’7Ø˜G‘O�DØ�ñ  §¢Ø—‘ §¡£Ô0ñ ˜TŸ[š[°·²ÜÐ=Ó>�Ø—7’7Ø˜G‘O�DØ�Ù˜tŸ{š{±8ÜÐ8Ó9�Ø—7’7Ø˜G‘O�DØ�à�7Š7Ø"ˆD�Kà!ˆDŒJð	Ø×Ñ˜dŸg™gÔ&ô �Ó!ˆØ�7Š7ÜÐ)Ó*ˆDð �?‰?Õ T§[£[ØˆDÙ˜4×,Ñ,¨T¯W©WÔ5¹Ø�ÙØœA˜oÓ.Ñ.‘DàœA˜nÓ-Ñ-�DØ—7’7Ø˜G‘O�DÙðØ×/Ñ/Õ1ð œAÐ=Ó>Ñ>‘DÙ˜4Ÿ;š;Ø�Ü˜Ó(�ð —7’7Ø˜G‘O�DÙðØ×/Ñ/Ô1ð ‘DàœAÐ=Ó>Ñ>‘DÙ¡8°D·K²KØ�Ü˜“�à�r‹zØ—m‘m�Ø$�Ø—7’7ØŸ.™.�CØ#)�LØ˜G‘O�DØ&�Ø—<’<Ø#,‘LØ—^‘^ uÒ,Ø#+�LÚ(4±lÐC�ô Ð?Ó@�Ü  d¨E°4Ð 8Ó9‘	��SØ˜’7Ü" 7Ó+Ð+â)-ªu°d×6FÑ6FÔ6HÐI�ÜŸ*™*Ð%GÓH�Ø×7Ñ7¸Ø8DØ8DóFò C�Aô !$ S E¨A¡I£‘I�R˜Ø˜Q’wÜ˜C¤§¡Ô,Ü  Ô)ð ˜t“|¨¯©°s·x±xÀ³{Õ(CØ#ŸK™K¨¨s¯x©x¸«{Ó;˜Ü$'¨¨d°A°t¸XÐ(FÓ$G™	˜˜SØ ›7Ü!Ð";¸qÑ"AÕBðCð ˆøô[ ò 	Øð	ûô ò ØðûôT ò 	ØÜò 	ÜÐ4Ó5ˆGÜ�W×ð	ûô2 %ò Øðûô  %ò ØðúsB   Æ9[ Ç[Ð[' Ó\ Ô\$ Û[Û[$Û'(\Ü\Ü\!Ü$\/c                 ób  — g }g }|r| j                   }n| j                  }|j                  «       }|j                  |«       |j	                  «        |j                  «       }|D ]I  }|j                  «       }|j	                  «        |j                  «       }	|	|k(  sŒ9|j                  |«       ŒK |S )z@Return a list of UFWRules from the system based on template rule)r   r   rT  r'  rS  r¨   r7   )
r:   Útemplater©   r   r¿   ÚnormrÃ   rÀ   rW   Ú	tmp_tuples
             rB   Úget_app_rules_from_systemz,UFWBackendIptables.get_app_rules_from_systemŸ  s¡   € àˆØˆ	áØ—K‘K‰Eà—J‘JˆEà× Ñ Ó"ˆØ�‰�BŒØ�‰ÔØ×!Ñ!Ó#ˆàò 	&ˆAØ—*‘*“,ˆCØ�M‰MŒOØ×)Ñ)Ó+ˆIØ˜DÓ Ø× Ñ  Õ%ð	&ð ÐrC   c                 óØ   — | j                   }|j                  d«      r| j                  }t        |g|z   «      \  }}|dk7  r*t	        d|z  «      }|rt        d|z   «       yt        |«      ‚y)zPerform command on chainræ   r   zCould not perform '%s'zFAILOK: N)r   r%  rƒ   r   rI   r   r   )r:   rA   r†   Úfail_okrê   r�   r…   re   s           rB   rñ   zUFWBackendIptables._chain_cmd·  sm   € à�m‰mˆØ×Ñ˜FÔ#Ø—.‘.ˆCÜ˜˜ ™Ó%‰	ˆˆSØ�Š7ÜÐ0°DÑ9Ó:ˆGÙÜ�j 7Ñ*Õ+ä˜wÓ'Ð'ð rC   c                 ó”  — | j                   ry| j                  «        g }	 | j                  |«      }	 | j	                  d¬«       | j	                  d¬«       | j                  «       syt        d«      }| j                  d   | j                  d   z   | j                  d	   z   | j                  d
   z   D ]  }	 | j                  |d|dg«       Œ 	 | j                  d   | j                  d	   z   | j                  d
   z   D ]*  }| j                  |d|g«       | j                  |d|g«       Œ, 	 |D ]b  \  }}}d}t        |«      dkD  r
|d   dk(  rd}	 |dk(  r)t        |«      dkD  r| j                  |dg|dd z   d¬«       | j                  |||«       Œd dD ]­  }| j                  d   d   r|dk(  s| j                  d   d   sŒ-|dk(  sŒ3| j                  |d|g| j                  z   | j                  dz   gz   d¬«       | j                  d   dk7  sŒz| j                  |d|g| j                  z   | j                  dz   gz   d¬«       Œ¯ y# t        $ r ‚ w xY w# t
        $ r ‚ t        $ r t        d«      }t        |«       Y �Œ'w xY w# t        $ r t        |«      ‚w xY w# t        $ r t        |«      ‚w xY w# t        $ r t        |«      ‚w xY w)z#Update loglevel of running firewallNF)r©   Tz&Couldn't update rules file for loggingrM  r   r   r   r   rq   rp   rí   rî   r   r6  Údelete_firstr‘   )rg  )r{   r|   r%   r   r{   r   r|   r—   rÝ   r8  ú-I)r;   r€   r?  r\   rG  r   rI   rð   r5   rñ   r±   r�   r8   r9   rJ   )	r:   rÏ   Úrules_tre   r‰   rÀ   rF  rg  rA   s	            rB   rã   z!UFWBackendIptables.update_loggingÄ  s   € à�;Š;Øð 	�‰Œàˆð	Ø×-Ñ-¨eÓ4ˆGð
	Ø×Ñ ÐÔ'Ø×Ñ ÐÔ&ð �‰Ô Øô Ð7Ó8ˆØ—‘˜XÑ&¨¯©°VÑ)<Ñ<Ø�;‰;�wÑñ Ø"&§+¡+¨fÑ"5ñ6ò 	(ˆAð(Ø—‘  D¨!¨T ?Õ3ð	(ð	$Ø—[‘[ Ñ*¨T¯[©[¸Ñ-AÑAØ�{‰{˜6Ñ"ñ#ò .�à—‘  D¨! 9Ô-Ø—‘  D¨! 9Õ-ñ.ð ò 		(‰GˆAˆq�!ØˆGÜ�1‹v˜Šz˜a ™d dšlØ�ð(Ø˜Ò&¬3¨q«6°Aª:Ø—O‘O A¨ v°°!°"°¡~¸t�OÔDØ—‘  1 gÕ.ð		(ð ;ò 	2ˆEØ—	‘	˜'Ñ" 3Ò'¨EÐ5EÒ,EØ—	‘	˜'Ñ" 3Ó'¨EÐ5FÓ,FØ—‘ ¨¨e }Ø $× 7Ñ 7ñ(8à!%×!=Ñ!=ÀÑ!CÐ Dñ(Eð )-ð  ô .ð —=‘= Ñ,°Ó5Ø—O‘O E¨D°%¨=Ø$(×$;Ñ$;ñ,<à%)×%AÑ%AÀCÑ%GÐ$Hñ,Ið -1ð $õ 2ñ	2øôe ò 	Øð	ûô ò 	ØÜò 	ÜÐ@ÓAˆGÜ�W×ð	ûô ò (Ü˜wÓ'Ð'ð(ûô ò 	$Ü˜7Ó#Ð#ð	$ûô ò (Ü˜wÓ'Ð'ð(úsB   ¡I ³$I Â6JÃAJ ÅAJ2ÉIÉ(I?É>I?ÊJÊJ/Ê2Kc                 ó&  — g }|t        | j                  j                  «       «      vrt        d«      |z  }t	        |«      ‚|dk(  r.| j
                  d   D ]  }|j                  |d|ddgdg«       Œ |S | j
                  d   D ]  }|j                  |d|ddgd	g«       Œ g d
¢}| j                  |   | j                  d   k\  �r²g }| j                  |   | j                  d   k  r|}| j
                  d   D ]¢  }dD ]›  }|j                  |«      sŒ| j                  |«      dk(  s| j                  |«      dk(  r d}|j                  |d|ddd|g|z   d	g«       Œ]| j                  |   | j                  d   k\  sŒ}d}|j                  |d|ddd|g|z   d	g«       Œ� Œ¤ g }| j                  |   | j                  d   k  r|}| j
                  d   D ]¦  }|j                  d«      rd}ns|j                  d«      rbd}| j                  |   | j                  d   k  r |j                  |d|ddddddg|z   d	g«       n!|j                  |d|ddddddddg
|z   d	g«       |j                  |d|dddg|z   d	g«       Œ¨ | j                  |   | j                  d   k\  r|g }| j                  |   | j                  d   k  r|}| j                  |   | j                  d   k  rg d¢|z   }d }| j
                  d!   D ]  }|j                  |d|ddd|g|z   d	g«       Œ! |S )"z%Get rules for specified logging levelzInvalid log level '%s'r8  r   rj  r'   rN  ri  r6  rV   )r$   r%   r&   z3/minz--limit-burstÚ10rÞ   Úhighr   r   rH   rO   z[UFW BLOCK] rL  r(   r)   Úmediumz[UFW ALLOW] r   rN   r$   Ú	conntrackú	--ctstateÚINVALIDz[UFW AUDIT INVALID] Úfull)r$   rp  rq  ÚNEWz[UFW AUDIT] r   )	rß   rà   rá   rI   r   r5   r7   Úendswithr·   )	r:   rÏ   rk  re   r‰   r  ÚlargsrŒ   ré   s	            rB   r?  z%UFWBackendIptables._get_logging_rules  sÌ  € àˆàœ˜TŸ^™^×0Ñ0Ó2Ó3Ñ3ÜÐ0Ó1°UÑ;ˆGÜ˜7Ó#Ð#à�EŠ>ð —[‘[ Ñ(ò O�Ø—‘  D¨!¨T°8Ð#<¸nÐMÕNðOàˆNð —[‘[ Ñ(ò C�Ø—‘  D¨!¨T°8Ð#<¸bÐAÕBðCò Pˆ
ð �>‰>˜%Ñ  D§N¡N°5Ñ$9Ó9àˆEà�~‰~˜eÑ$ t§~¡~°fÑ'=Ò=Ø"�Ø—[‘[ Ñ)ò <�Ø7ò <�AØ—z‘z !•}Ø×3Ñ3°AÓ6¸(ÒBØ×3Ñ3°AÓ6¸&Ò@Ø%3˜FØ#ŸN™N¨A°°a¸¸uØ0>Àð0Hà05ñ06à79ð,;õ <ð "Ÿ^™^¨EÑ2°d·n±nÀXÑ6NÓNØ%3˜FØ#ŸN™N¨A°°a¸¸uØ0>Àð0Hà05ñ06à79ð,;õ <ñ<ð<ð  ˆEà�~‰~˜eÑ$ t§~¡~°fÑ'=Ò=Ø"�à—[‘[ Ñ(ò J�Ø—:‘:˜gÔ&Ø+‘FØ—Z‘Z Ô'Ø+�FØ—~‘~ eÑ,¨t¯~©~¸hÑ/GÒGàŸ™¨¨D°!°T¸;Ø,7¸Ø,0°(ð,<à>Cñ,DàEGð(Iõ Jð  Ÿ™¨¨D°!°T¸;Ø,7¸Ø,0°%Ø,:Ø,Bð	,Dð
 ).ñ,.ð
 02ð(3ô 4ð —‘  D¨!¨T°5Ø$2°Fð$<Ø>Cñ$DØEGð Iõ Jð#Jð* �>‰>˜%Ñ  D§N¡N°8Ñ$<Ò<àˆEð �~‰~˜eÑ$ t§~¡~°fÑ'=Ò=Ø"�ð �~‰~˜eÑ$ t§~¡~°fÑ'=Ò=Ú?À*ÑL�à#ˆFØ—[‘[ Ñ*ò J�Ø—‘  D¨!¨T°5Ø$2°Fð$<Ø>Cñ$DØEGð Iõ JðJð ˆrC   c           
      óÎ  — d}t        t        j                  j                  | j                  «      }g }| j
                  D ]Â  }| j
                  |   j                  d«      sŒ"|j                  | j
                  |   «       t        j                  j                  |dt        j                  j                  | j
                  |   «      «      }t        j                  j                  |«      rŒ«t        d«      |z  }t        |«      ‚ t        j                   d«      }|D ]A  }|›d|›�}t        j                  j#                  |«      sŒ*t        d«      |z  }t        |«      ‚ |D ]P  }|›d|›�}|t        d«      t        j                  j                  |«      |d	œz  z  }t        j$                  ||«       ŒR |D �]  }|›d|›�}t'        j(                  t        j                  j                  |dt        j                  j                  |«      «      t        j                  j+                  |«      «       t'        j,                  ||«       	 t        j.                  |«      }	|	t.        j0                     }
|
t.        j6                  z  r|t        d«      |z  z  }ŒÞ|
t.        j8                  z  sŒò|t        d«      |z  z  }�Œ |S # t2        $ r t        d
«      |z  }t5        |«       Y �Œ-w xY w)zReset the firewallrV   z.rulesr   zCould not find '%s'. Abortingz%Y%m%d_%H%M%Sú.z'%s' already exists. Abortingz"Backing up '%(old)s' to '%(new)s'
)ÚoldÚnewzCouldn't stat '%s'zWARN: '%s' is world writablezWARN: '%s' is world readable)r
   r   r*   Ú	share_dirr   r<   ru  r7   r.   r/   r0   ÚbasenameÚisfilerI   r   ÚtimeÚstrftimeÚexistsÚrenameÚshutilÚcopyÚdirnameÚcopymodeÚstatÚST_MODEr\   r   ÚS_IWOTHÚS_IROTH)r:   Úresr{  Úallfilesr‹   Úfnre   Úextry  ÚstatinfoÚmoder3  s               rB   ÚresetzUFWBackendIptables.reseth  sp  € àˆÜœcŸj™j×2Ñ2°D·L±LÓAˆ	àˆØ—‘ò 	(ˆAØ—:‘:˜a‘=×)Ñ)¨(Ô3ØØ�O‰O˜DŸJ™J q™MÔ*Ü—‘—‘˜i¨Ü Ÿg™g×.Ñ.¨t¯z©z¸!©}Ó=ó?ˆBä—7‘7—>‘> "Õ%ÜÐ;Ó<ÀÑC�Ü˜wÓ'Ð'ð	(ô �m‰m˜OÓ,ˆð ò 	(ˆAÚ™sÐ#ˆBÜ�w‰w�~‰~˜bÕ!ÜÐ;Ó<ÀÑC�Ü˜wÓ'Ð'ð		(ð ò 	ˆAÚ™sÐ#ˆBØ”1Ð:Ó;ÜŸW™W×-Ñ-¨aÓ0¸Ñ<ñ>ñ >ˆCä�I‰I�a˜Õð		ð ó 	?ˆAÚ¡Ð$ˆCÜ�K‰KœŸ™Ÿ™ Y°
Ü%'§W¡W×%5Ñ%5°aÓ%8ó:äŸ™Ÿ™¨Ó*ô,ô �O‰O˜C Ô#ðÜŸ7™7 1›:�Ø¤§¡Ñ-�ð ”d—l‘lÒ"Ø”qÐ7Ó8¸AÑ>Ñ>‘ØœŸ™Ó$Ø”qÐ7Ó8¸AÑ>Ñ>’ð%	?ð( ˆ
øô ò ÜÐ1Ó2°aÑ8�Ü�X”Úðús   É(J>Ê>"K$Ë#K$)NN)FF)F)T)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r4   rL   rm   rŽ   rÓ   rÚ   rä   rë   rô   r  r  r4  rG  r`  re  rñ   rã   r?  r�  © rC   rB   r   r      sx   „ Ù'ó.;ò`òIòV[ózc/òJ(ò$,òBò8;ò8BòHò$cóJgóRcòJó0(òH2òTXót8rC   r   )r”  r.   r]   r‚  r†  r;  r~  Ú
ufw.commonr   r   Úufw.utilr   r   r   r   r	   r
   Úufw.backendr   r2   r3   r   r•  rC   rB   ú<module>r™     s@   ðÙ 3ó" 
Û 	Û Û Û 
Û ç (ß ?× ?Û ôB˜Ÿ™×/Ñ/õ BrC   