Viewing File: /usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyo


c`c@s$ddlZddlmZmZmZddlmZddlmZm	Z	m
Z
mZmZm
Z
mZmZmZddlmZmZmZmZmZmZmZmZmZmZmZddlmZmZddl m!Z!ddl"m#Z#dd	l$m%Z%d
e&fdYZ'dS(iN(t	SHORTCUTStDEFAULT_ZONE_TARGETtZONE_SOURCE_IPSET_TYPES(tlog(	tportStrtcheckIPnMaskt
checkIP6nMaskt
checkProtocoltenable_ip_forwardingtcheck_single_addresst	check_mactportInPortRangetget_nf_conntrack_short_name(t	Rich_RuletRich_Acceptt	Rich_MarktRich_Servicet	Rich_Portt
Rich_ProtocoltRich_MasqueradetRich_ForwardPorttRich_SourcePorttRich_IcmpBlockt
Rich_IcmpType(tFirewallTransactiontFirewallZoneTransaction(terrors(t
FirewallError(tLastUpdatedOrderedDicttFirewallZonecBsxeZdZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
ddZd
ZdZddZdZddZdZdZddZddZddZdZdZdZdZdZdddZdZ ddZ!ddZ"dd Z#d!Z$d"Z%d#Z&d$Z'd%Z(ddd&Z)d'Z*dd(Z+dd)Z,d*Z-d+Z.d,Z/d-Z0d.Z1d/Z2d0Z3d1ddd2Z4d3Z5dd4Z6dd5Z7d6Z8d7Z9d8Z:d9Z;d1ddd:Z<d;Z=dd<Z>d=Z?d>Z@d?ZAd@ZBdAZCdBZDd1dddCZEdDZFddEZGdFZHdGZIdHZJdIZKdJZLd1dddKZMdLZNddMZOdNZPdOZQdPZRdQZSd1dddRZTdSZUddTZVdUZWdVZXdWZYdXZZd1dddYZ[dZZ\dd[Z]d\Z^d]Z_ddd^Z`ddd_Zaddd1ddd`ZbdaZcddddbZddcZeddddZfdeZgdfZhdgZid1dddhZjdiZkddjZldkZmdlZndmZodnZpdddoZqdpZrdqZsddrZtdsZudtZvduZwexdvZydwZzdxZ{dyZ|dzZ}d{Z~d|Zd}Zd~ZdZdZdZdZddddZdZdZRS(cCs||_i|_i|_dS(N(t_fwt_chainst_zones(tselftfw((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt__init__(s		cCsd|j|j|jfS(Ns
%s(%r, %r)(t	__class__RR (R!((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt__repr__-scCs|jj|jjdS(N(RtclearR (R!((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pytcleanup0s
cCs
t|jS(N(RR(R!((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pytnew_transaction6scCst|j|S(N(RR(R!tzone((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pytnew_zone_transaction9scCst|jjS(N(tsortedR tkeys(R!((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt	get_zones>scCsE|j|}x/|jD]$}||j|jdkr|SqWdS(Nt
interfaces(t_FirewallZone__interface_idR tsettingstNone(R!t	interfacetinterface_idR)((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pytget_zone_of_interfaceAs
cCsE|j|}x/|jD]$}||j|jdkr|SqWdS(Ntsources(t_FirewallZone__source_idR R0R1(R!tsourcet	source_idR)((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pytget_zone_of_sourceIs
cCs|jj|}|j|S(N(Rt
check_zoneR (R!R)tz((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pytget_zoneQscOsQy||||Wn6tk
rL}t|}tjd||fnXdS(Ns%s: %s(RtstrRtwarning(R!tftnametargstkwargsterrortmsg((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt_error2warningUs
cCsHddddddddd	d
ddgD|_||j|j<dS(
NcSsi|]}t|qS((R(t.0tx((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pys
<dictcomp>^s	R.R5tservicestportst
masqueradet
forward_portstsource_portsticmp_blockstrulest	protocolsticmp_block_inversion(R0R R@(R!tobj((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pytadd_zone]scCsA|j|}|jr&|j|n|jj|j|=dS(N(R tappliedtunapply_zone_settingsR0R&(R!R)RQ((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pytremove_zonehs

	
c	Cs|dkr|j}n|}x|jD]}|j|}|j|}|jrx|j|j|jd|nt	|j
dkst	|jdkrt|_
ntjd|jx0|jD]%}|j|j|j|d|qWx0|jD]%}|j|j|jd||qWx0|jD]%}|j|j|j|d|q1Wx0|jD]%}|j|j|jd||qdWx0|jD]%}|j|j|j|d|qWx0|jD]%}|j|j|jd||qW|jr|j|j|jd|nx0|jD]%}|j|j|j|d|q%Wx0|j
D]%}|j|j |j|d|qXWx0|jD]%}|j|j!|j|d|qW|j
r.|j|j"t|j|q.q.W|dkr|j#tndS(Ntuse_zone_transactionisApplying zone '%s'($R1R(R-R tzone_transactionRPREtadd_icmp_block_inversionR@tlenR.R5tTrueRSRtdebug1RMtadd_icmp_blockRKtadd_forward_portRHtadd_serviceRItadd_portROtadd_protocolRLtadd_source_portRJtadd_masqueradeRNtadd_rulet
add_interfacet
add_sourcet_icmp_block_inversiontexecute(R!tuse_transactionttransactionR)RQRWRA((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pytapply_zonesos^
	
*	
	cCs|j|}||_dS(N(R RS(R!R)RSRQ((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pytset_zone_applieds
cCsd|krdS|jd}t|dkr5dSd}x+tD]#}|dt|krB|}qBqBW|dk	r|d|jkrdSt|dkst|dkr|dd	kr|d|fSndS(
Nt_iiiiRtdenytallow(slogRmRn(R1tsplitRYRR-(R!tchaintsplitst_chainRG((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pytzone_from_chains 

"c	Cs|dkr|j|}|dk	r|\}}|dkrN|j}n|}|j|t||fg||dkr|jtqqndS(Ntipv4tipv6(RtRu(RsR1R(tgen_chain_rulesRZRg(	R!tipvttableRpRhRGt_zoneRrRi((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pytcreate_zone_base_by_chainscCsx|D]\}}|rD|jj|ij|gj|q|j||j|t|j||dkr|j||=nt|j|dkr|j|=qqWdS(Ni(Rt
setdefaulttappendtremoveRY(R!R)tcreatetchainsRxRp((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt_register_chainss+cCs8itjd6|d6|d6}|r4||d<n|S(Ntdatetsenderttimeouttmark(ttime(R!RRRtret((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt__gen_settingss


cCs|j|jS(N(R<R0(R!R)((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pytget_settingsscCs|j|}yx|D]}x||D]}||j|krIq*n|dkrh|j||n3|dkr|j||n|dkr|j||n|dkr|j||n|dkr|j||n|dkr|j||n|dkr|j|n||dkrG|j	|t
d	|nT|d
krf|j||n5|dkr|j||nt
jd|||||j|kr*||||j||<q*q*WqWWn&tk
r}t
jt|nXdS(
NRMRKRHRIRORLRJRNtrule_strR.R5s6Zone '%s': Unknown setting '%s:%s', unable to restore.(R<R0R\R]R^R_R`RaRbRcR
tchange_zone_of_interfacetchange_zone_of_sourceRR>RR=(R!R)R0t_objtkeyRARD((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pytset_settingss@
	
(cCs.|jj|}|j|}|r.|js?|rC|jrCdS|rUt|_n|dkrs|j|}n|}|j|}xd|D]\}xS||D]G}	y|dkr|j|||	|n|dkrwn|dkr |j	d|	d}
|j
|||d|
|	n|dkrE|j|||	|nx|dkru|j|||	d|	d	|nH|d
kr|j
|||	|n#|dkr|j|||	d|	d	|n|dkr|j|||n|d
krRd|j	d
|	kr'|j	d
|	d}
nd}
|j||td|	|
|nk|dkrw|j|||	|nF|dkr|j|||	d|	d	|ntjd|||	Wqtk
r}tjt|qXqWqW|r|jt|j|n|dkr*|j|ndS(NRMRPRKRtmark_idRHRIiiRORLRJRNRR.R5s3Zone '%s': Unknown setting '%s:%s', unable to apply(RR:R RSRZR1R*Rt_icmp_blockR0t
_forward_portt_servicet_portt	_protocolt_source_portt_masqueradet_FirewallZone__ruleR
t
_interfacet_sourceRR>RR=RfR@Rg(R!tenableR)RVRyRQRWR0RRARRD((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt__zone_settings sj
 





	cCs|jt||dS(N(t_FirewallZone__zone_settingsRZ(R!R)RV((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pytapply_zone_settings_scCs|jt||dS(N(RtFalse(R!R)RV((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyRTbscCsK|j|}t|jdkrGt|jdkrG|j|ndS(Ni(R RYR.R5RT(R!R)RQ((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pytunapply_zone_settings_if_unusedes
*cCst|j|j}|dtkr8d|d<n|j||d<|j||d<|j||d<|j||d<|j||d<|j	||d<|j
||d	<|j||d
<|j||d<|j
||d<|j||d
<t|S(sH
        :return: exported config updated with runtime settings
        itdefaultiiiii	i
iii
ii(tlistR<t
export_configRt
list_servicest
list_portstlist_icmp_blockstquery_masqueradetlist_forward_portstlist_interfacestlist_sourcest
list_rulestlist_protocolstlist_source_portstquery_icmp_block_inversionttuple(R!R)tconf((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pytget_config_with_settingsjs
cCs|jj|dS(N(Rtcheck_interface(R!R2((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyRscCs}|jj|}|j|}|j|}||jdkry|jd|}d|kry|ddk	ry|dSndS(NR.R(RR:R R/R0R1(R!R)R2RyRR3R0((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pytinterface_get_senders
cCs|j||S(N(R(R!R2((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt__interface_ids
c	Csm|jj|jj|}|j|}|j|}||jdkrmttjd||fn|j	|dk	rttjd|ntj
d||f|dkr|j|}n|}|js|j|d||j|j|tn|jt||||j|||||j|j|||dkri|jtn|S(NR.s'%s' already bound to '%s's'%s' already bound to a zones&Setting zone of interface '%s' to '%s'RV(Rtcheck_panicR:R R/R0RRtZONE_ALREADY_SETR4R1t
ZONE_CONFLICTRR[R*RSRtadd_failRkRRRZt!_FirewallZone__register_interfacet#_FirewallZone__unregister_interfaceRg(	R!R)R2RRVRyRR3RW((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyRds6

			cCsC|jd||jd|<|p-|dk|jd|d<dS(NiR.tt__default__(t_FirewallZone__gen_settingsR0(R!RR3R)R((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt__register_interfacescCsv|jj|j|}|jj|}||kr>|S|dk	r]|j||n|j|||}|S(N(RRR4R:R1tremove_interfaceRd(R!R)R2Rt	_old_zonet	_new_zoneRy((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyRs
cCs|jj|dkr(|j}n|}|j|}|j|||jt|d|dt|dk	r|dkr|j|}|jt|d|dtn|dkr|j	tndS(Nt+R|R(
RRR1R(RWRRRZRRg(R!told_zonetnew_zoneRhRiRW((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pytchange_default_zones
c	Cs|jj|j|}|dkrAttjd|n|dkrS|n|jj|}||krttjd|||fn|dkr|j	|}n|}|j
|}|j|}|jt
||||j|j|||dkr|jtn|S(Ns'%s' is not in any zoneRs"remove_interface(%s, %s): zoi='%s'(RRR4R1RRtUNKNOWN_INTERFACER:RR*R R/RRtadd_postRRgRZ(	R!R)R2RVtzoiRyRWRR3((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyRs*
	$	
cCs(||jdkr$|jd|=ndS(NR.(R0(R!RR3((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt__unregister_interfacescCs |j||j|dkS(NR.(R/R(R!R)R2((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pytquery_interfacescCs|j|djS(NR.(RR,(R!R)((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyR	scCst|rdSt|r dSt|r0dS|jdrr|j|d|j|d|j|dSttj	|dS(NRtRuRsipset:i(
RRR
t
startswitht_check_ipset_type_for_sourcet_check_ipset_appliedt
_ipset_familyRRtINVALID_ADDR(R!R7((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pytcheck_sourcescCs|j|}||fS(N(R(R!R7Rw((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt__source_idsc	Cs||jj|jj|}|j|}t|rG|j}n|j|}||jdkrtt	j
d||fn|j|dk	rtt	j
d|n|dkr|j|}n|}|js|j|d||j|j|tn|jt||d|d||j|||||j|j|||dkrx|jtn|S(NR5s'%s' already bound to '%s's'%s' already bound to a zoneRVii(RRR:R R
tupperR6R0RRRR9R1RR*RSRRRkRRRZt_FirewallZone__register_sourcet _FirewallZone__unregister_sourceRg(	R!R)R7RRVRyRR8RW((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyRe s4

			!cCsC|jd||jd|<|p-|dk|jd|d<dS(NiR5RR(RR0(R!RR8R)R((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt__register_sourceFscCs|jj|j|}|jj|}||kr>|St|rY|j}n|dk	rx|j||n|j|||}|S(N(	RRR9R:R
RR1t
remove_sourceRe(R!R)R7RRRRy((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyRLs
c	CsE|jjt|r(|j}n|j|}|dkr\ttjd|n|dkrn|n|jj	|}||krttj
d|||fn|dkr|j|}n|}|j|}|j
|}|jt||d|d||j|j|||dkrA|jtn|S(Ns'%s' is not in any zoneRsremove_source(%s, %s): zos='%s'ii(RRR
RR9R1RRtUNKNOWN_SOURCER:RR*R R6RRRRRgRZ(	R!R)R7RVtzosRyRWRR8((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyR^s.
	$	
!cCs(||jdkr$|jd|=ndS(NR5(R0(R!RR8((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt__unregister_sourcescCs;t|r|j}n|j||j|dkS(NR5(R
RR6R(R!R)R7((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pytquery_sourcescCs.g|j|djD]}|d^qS(NR5i(RR,(R!R)tk((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyRscCs|jdS(N(tcheck(R!trule((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt
check_rulescCs|j|t|S(N(RR=(R!R((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt	__rule_ids
cCs|s
dS|jr<t|jr&dSt|jrdSndt|drX|jrXdSt|dr|jr|j|j|j|j|j	|jSdS(NRtRutmacRtipset(
R1taddrRRthasattrRRRRR(R!R7((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt_rule_source_ipvs	cCs|j|||||dS(N(t
_rule_prepare(R!RR)RRRW((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt__rulesicCsE|jj|}|jj||jj|j|}|j|}||jdkr}ttj	d||fn|dkr|j|}	n|}	t|j
tkr|jj}
nd}
|jr|jt|||
|	n|j|||
|||	j|j|||
|dkrA|	jtn|S(NRNs'%s' already in '%s'(RR:t
check_timeoutRR t_FirewallZone__rule_idR0RRtALREADY_ENABLEDR1R*ttypetelementRtnew_markRSRRZt_FirewallZone__register_ruleRt_FirewallZone__unregister_ruleRg(R!R)RRRRVRyRtrule_idRWR((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyRcs*

		cCs'|j||d||jd|<dS(NRRN(RR0(R!RRRRR((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt__register_rulesc	Cs$|jj|}|jj|j|}|j|}||jdkrmttjd||fnd|jd|kr|jd|d}nd}|dkr|j
|}n|}|jr|jt
||||n|j|j||||dkr |jtn|S(NRNs'%s' not in '%s'R(RR:RR RR0RRtNOT_ENABLEDR1R*RSRRRRRgRZ(	R!R)RRVRyRRRRW((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pytremove_rules&

		cCsA||jdkr$|jd|=n|r=|jj|ndS(NRN(R0Rtdel_mark(R!RRR((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt__unregister_rulescCs |j||j|dkS(NRN(RR(R!R)R((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt
query_rulescCst|j|djS(NRN(RRR,(R!R)((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyRscCs|jj|dS(N(Rt
check_service(R!tservice((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyRscCs|j||S(N(R(R!R((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt__service_ids
c
Cs|jj|}|jj||jj|j|}|j|}||jdkr}ttj	d||fn|dkr|j|}	n|}	|jr|j
t|||	n|j|||||	j|j|||dkr|	jtn|S(NRHs'%s' already in '%s'(RR:RRR t_FirewallZone__service_idR0RRRR1R*RSRRZt_FirewallZone__register_serviceRt!_FirewallZone__unregister_serviceRg(
R!R)RRRRVRyRt
service_idRW((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyR^s$

		cCs!|j|||jd|<dS(NRH(RR0(R!RRRR((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt__register_servicescCs|jj|}|jj|j|}|j|}||jdkrmttjd||fn|dkr|j
|}n|}|jr|jt
|||n|j|j|||dkr|jtn|S(NRHs'%s' not in '%s'(RR:RR RR0RRRR1R*RSRRRRRgRZ(R!R)RRVRyRRRW((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pytremove_service"s"

		cCs(||jdkr$|jd|=ndS(NRH(R0(R!RR((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt__unregister_service=scCs |j||j|dkS(NRH(RR(R!R)R((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt
query_serviceAscCs|j|djS(NRH(RR,(R!R)((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyRDscCsg}x|D]}y|jjj|}Wn#tk
rQttj|nX|jjdkrt|jdkrt	|j
}y&|jjj|}|j|Wqtk
r|r
tj
d|q
q
qXq
|j|q
W|S(NiisHelper '%s' is not available(Rthelpert
get_helperRRtINVALID_HELPERtnf_conntrack_helper_settingRYRIRtmoduleR|RR>(R!tmodulesRt_helpersRRt_module_short_namet_helper((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pytget_helpers_for_service_modulesGs$



cCs$|jj||jj|dS(N(Rt
check_porttcheck_tcpudp(R!tporttprotocol((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyR
ascCs#|j||t|d|fS(Nt-(R
R(R!RR
((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt	__port_idescCs|jj|}|jj||jj|j|}|j||}	|	|jdkrttj	d|||fn|dkr|j|}
n|}
|jr|j
t||||
n|j||	|||
j|j||	|dkr|
jtn|S(NRIs'%s:%s' already in '%s'(RR:RRR t_FirewallZone__port_idR0RRRR1R*RSRRZt_FirewallZone__register_portRt_FirewallZone__unregister_portRg(R!R)RR
RRRVRyRtport_idRW((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyR_is&

			cCs!|j|||jd|<dS(NRI(RR0(R!RRRR((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt__register_portsc	Cs|jj|}|jj|j|}|j||}||jdkrsttjd|||fn|dkr|j
|}n|}|jr|jt
||||n|j|j|||dkr|jtn|S(NRIs'%s:%s' not in '%s'(RR:RR RR0RRRR1R*RSRRRRRgRZ(	R!R)RR
RVRyRRRW((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pytremove_ports"

		cCs(||jdkr$|jd|=ndS(NRI(R0(R!RR((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt__unregister_portscCsp|j|||j|dkr)tSx@|j|dD]+\}}t||r=||kr=tSq=WtS(NRI(RRRZRR(R!R)RR
RR((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt
query_ports% cCst|j|djS(NRI(RRR,(R!R)((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyRscCs%t|s!ttj|ndS(N(RRRtINVALID_PROTOCOL(R!R
((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pytcheck_protocolscCs|j||S(N(R(R!R
((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt
__protocol_ids
c
Cs|jj|}|jj||jj|j|}|j|}||jdkr}ttj	d||fn|dkr|j|}	n|}	|jr|j
t|||	n|j|||||	j|j|||dkr|	jtn|S(NROs'%s' already in '%s'(RR:RRR t_FirewallZone__protocol_idR0RRRR1R*RSRRZt _FirewallZone__register_protocolRt"_FirewallZone__unregister_protocolRg(
R!R)R
RRRVRyRtprotocol_idRW((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyR`s$

		cCs!|j|||jd|<dS(NRO(RR0(R!RRRR((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt__register_protocolscCs|jj|}|jj|j|}|j|}||jdkrmttjd||fn|dkr|j
|}n|}|jr|jt
|||n|j|j|||dkr|jtn|S(NROs'%s' not in '%s'(RR:RR RR0RRRR1R*RSRRRRRgRZ(R!R)R
RVRyRRRW((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pytremove_protocols"

		cCs(||jdkr$|jd|=ndS(NRO(R0(R!RR((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt__unregister_protocolscCs |j||j|dkS(NRO(RR(R!R)R
((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pytquery_protocolscCst|j|djS(NRO(RRR,(R!R)((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyRscCs#|j||t|d|fS(NR(R
R(R!RR
((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt__source_port_idscCs|jj|}|jj||jj|j|}|j||}	|	|jdkrttj	d|||fn|dkr|j|}
n|}
|jr|j
t||||
n|j||	|||
j|j||	|dkr|
jtn|S(NRLs'%s:%s' already in '%s'(RR:RRR t_FirewallZone__source_port_idR0RRRR1R*RSRRZt#_FirewallZone__register_source_portRt%_FirewallZone__unregister_source_portRg(R!R)RR
RRRVRyRRRW((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyRas&

			cCs!|j|||jd|<dS(NRL(RR0(R!RRRR((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt__register_source_port)sc	Cs|jj|}|jj|j|}|j||}||jdkrsttjd|||fn|dkr|j
|}n|}|jr|jt
||||n|j|j|||dkr|jtn|S(NRLs'%s:%s' not in '%s'(RR:RR R$R0RRRR1R*RSRRRR&RgRZ(	R!R)RR
RVRyRRRW((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pytremove_source_port-s"

		cCs(||jdkr$|jd|=ndS(NRL(R0(R!RR((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt__unregister_source_portHscCs#|j|||j|dkS(NRL(R$R(R!R)RR
((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pytquery_source_portLscCst|j|djS(NRL(RRR,(R!R)((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyRPscCstS(N(RZ(R!((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt__masquerade_idUsc	Cs|jj|}|jj||jj|j|}|j}||jdkrtttj	d|n|dkr|j|}n|}|jr|j
t||n|j|||||j|j|||dkr|jtn|S(NRJs"masquerade already enabled in '%s'(RR:RRR t_FirewallZone__masquerade_idR0RRRR1R*RSRRZt"_FirewallZone__register_masqueradeRt$_FirewallZone__unregister_masqueradeRg(	R!R)RRRVRyRt
masquerade_idRW((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyRbXs&

		cCs!|j|||jd|<dS(NRJ(RR0(R!RR/RR((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt__register_masqueradeuscCs|jj|}|jj|j|}|j}||jdkrdttjd|n|dkr|j
|}n|}|jr|jt
||n|j|j|||dkr|jtn|S(NRJsmasquerade not enabled in '%s'(RR:RR R,R0RRRR1R*RSRRRR.RgRZ(R!R)RVRyRR/RW((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pytremove_masqueradeys"

		cCs(||jdkr$|jd|=ndS(NRJ(R0(R!RR/((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt__unregister_masqueradescCs|j|j|dkS(NRJ(R,R(R!R)((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyRscCs|jj||jj||r9|jj|n|rft||sfttj|qfn|r|rttjdndS(Ns.port-forwarding is missing to-port AND to-addr(RR
RR	RRRtINVALID_FORWARD(R!RwRR
ttoportttoaddr((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pytcheck_forward_portscCsltd|r+|jd||||n|jd||||t|d|t|dt|fS(NRuRtR(R	R6RR=(R!RR
R4R5((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt__forward_port_ids
c	
CsE|jj|}	|jj||jj|j|	}
|j||||}||
jdkrttj	d|||||	fn|jj
}|dkr|j|	}
n|}
|
j
r|jt|	|
||||d|n|j|
|||||
j|j|
|||dkrA|
jtn|	S(NRKs'%s:%s:%s:%s' already in '%s'R(RR:RRR t_FirewallZone__forward_port_idR0RRRRR1R*RSRRZt$_FirewallZone__register_forward_portRt&_FirewallZone__unregister_forward_portRg(R!R)RR
R4R5RRRVRyRt
forward_idRRW((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyR]s,

		
cCs'|j||d||jd|<dS(NRRK(RR0(R!RR;RRR((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt__register_forward_portsc
Cs"|jj|}|jj|j|}|j||||}	|	|jdkrttjd|||||fn|jd|	d}
|dkr|j
|}n|}|jr|jt
||||||d|
n|j|j||	|
|dkr|jtn|S(NRKs'%s:%s:%s:%s' not in '%s'RR(RR:RR R8R0RRRR1R*RSRRRR:RgRZ(R!R)RR
R4R5RVRyRR;RRW((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pytremove_forward_ports(

		
cCs8||jdkr$|jd|=n|jj|dS(NRK(R0RR(R!RR;R((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt__unregister_forward_portscCs/|j||||}||j|dkS(NRK(R8R(R!R)RR
R4R5R;((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pytquery_forward_portscCst|j|djS(NRK(RRR,(R!R)((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyRscCs|jj|dS(N(Rtcheck_icmptype(R!ticmp((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pytcheck_icmp_blockscCs|j||S(N(RB(R!RA((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt__icmp_block_ids
c
Cs|jj|}|jj||jj|j|}|j|}||jdkr}ttj	d||fn|dkr|j|}	n|}	|jr|j
t|||	n|j|||||	j|j|||dkr|	jtn|S(NRMs'%s' already in '%s'(RR:RRR t_FirewallZone__icmp_block_idR0RRRR1R*RSRRZt"_FirewallZone__register_icmp_blockRt$_FirewallZone__unregister_icmp_blockRg(
R!R)RARRRVRyRticmp_idRW((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyR\s$

		cCs!|j|||jd|<dS(NRM(RR0(R!RRGRR((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt__register_icmp_block(scCs|jj|}|jj|j|}|j|}||jdkrmttjd||fn|dkr|j
|}n|}|jr|jt
|||n|j|j|||dkr|jtn|S(NRMs'%s' not in '%s'(RR:RR RDR0RRRR1R*RSRRRRFRgRZ(R!R)RARVRyRRGRW((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pytremove_icmp_block,s"

		cCs(||jdkr$|jd|=ndS(NRM(R0(R!RRG((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt__unregister_icmp_blockFscCs |j||j|dkS(NRM(RDR(R!R)RA((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pytquery_icmp_blockJscCs|j|djS(NRM(RR,(R!R)((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyRMscCstS(N(RZ(R!((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt__icmp_block_inversion_idRsc	Csz|jj|}|jj|j|}|j}||jdkrdttjd|n|dkr|j
|}n|}|jrx1|j|dD]}|j
t|||qW|jt||n|j||||j|j||||jrZx1|j|dD]}|j
t|||q$W|jt||n|dkrv|jtn|S(NRPs,icmp-block-inversion already enabled in '%s'RM(RR:RR t&_FirewallZone__icmp_block_inversion_idR0RRRR1R*RSRRRRft,_FirewallZone__register_icmp_block_inversionRt(_FirewallZone__undo_icmp_block_inversionRZRg(	R!R)RRVRyRticmp_block_inversion_idRWRA((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyRXUs4

		cCs!|jd||jd|<dS(NiRP(RR0(R!RRPR((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt__register_icmp_block_inversion~scCs|j|}|jrOx4|j|dD]}|jt|||q,Wn||jdkrs|jd|=n|jrx4|j|dD]}|jt|||qWn|jtdS(NRMRP(R*RSRRRR0RZRg(R!RyRRPRWRA((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt__undo_icmp_block_inversions		cCsw|jj|}|jj|j|}|j}||jdkrdttjd|n|dkr|j
|}n|}|jrx1|j|dD]}|j
t|||qW|jt||n|j|||j|j||d|jrWx1|j|dD]}|j
t|||q!W|jt||n|dkrs|jtn|S(NRPs(icmp-block-inversion not enabled in '%s'RM(RR:RR RMR0RRRR1R*RSRRRRft._FirewallZone__unregister_icmp_block_inversionRRNRZRg(R!R)RVRyRRPRWRA((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pytremove_icmp_block_inversions4

		
	cCs(||jdkr$|jd|=ndS(NRP(R0(R!RRP((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt!__unregister_icmp_block_inversionscCs|j|j|dkS(NRP(RMR(R!R)((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyRs	c		Cs+x$|D]\}}|r[||jkr||j|kr||j||krqqn?||jks||j|ks||j||krqnxZ|jjD]I}|jr||jkr|j|||}|j||qqW|j||||j|j|||qWdS(N(	RRtenabled_backendstzones_supportedtget_available_tablestbuild_zone_chain_rulest	add_rulesRR(	R!R)R~RRiRxRptbackendRN((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyRvs"		c

Csx|jjD]}|js%qnxu|jD]g}x^|j|D]M}|rg|j||n|j||||||}	|j||	qHWq2WqWdS(N(RRVRWRXtget_zone_table_chainst	add_chaint!build_zone_source_interface_rulesRZ(
R!RR)R2RWR|R[RxRpRN((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyRs		cCs2|jjj|dkrdS|jjj|S(Nshash:mac(RRtget_typeR1t
get_family(R!R@((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyRscCs|jjj|S(N(RRR_(R!R@((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt__ipset_typescCs#dj|g|jjj|S(Nt,(tjoinRRt
get_dimension(R!R@tflag((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt_ipset_match_flagsscCs|jjj|S(N(RRt
check_applied(R!R@((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyRscCs>|j|}|tkr:ttjd||fndS(Ns.ipset '%s' with type '%s' not usable as source(t_FirewallZone__ipset_typeRRRt
INVALID_IPSET(R!R@t_type((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyRsc
	Csx|r|jj|gn|jjD]}|js@q+nxr|jD]d}x[|j|D]J}|r|j||n|j|||||}	|j||	qcWqMWq+WdS(N(	Rtget_backend_by_ipvRVRWRXR\R]tbuild_zone_source_address_rulesRZ(
R!RR)RwR7RWR[RxRpRN((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyRs1	cCs
|jdk	r|jg}n1gddgD]}|jj|r+|^q+}|j|j}|dk	r|dkr|jdk	r|j|krttjd||jfqq|g}n||_	x	t
g|D]}	|jj|	^qD]	}
t|j
tkr|jjj|j
j}g}t|jdkr|jrlttjdnxS|D];}||jkrs|
j|rs|j|j|qsqsWn
|jdx|D]}
|r
|jdd|jjdkr
|jd	d
q
nt|jtkr|j|j|}g}x6|D].}|j}t|}|jjdkr.|jdd}|j||jdkr|
j|jrqDnt|jd
kr|j|qrx|jD]@\}}|
j |||||
|j|}|j!|
|qWqD|j|krD|j|j|jjdd}|j|qDqDW|j"|nxs|jD]h\}}|rt|jt#kr|jdd
n|
j$|||||
|}|j!|
|qWxj|j%D]_}|r:t|jt#kr:|jdd
n|
j&||||
|}|j!|
|qWxs|j'D]h\}}|rt|jt#kr|jdd
n|
j(|||||
|}|j!|
|qsWqWqt|j
t)kr|j
j*}|j
j+}|j,|||r<|jddn|rjt|jt#krj|jdd
n|
j$||||d|}|j!|
|qt|j
t-kr>|j
j.}|j/||r|jddn|rt|jt#kr|jdd
n|
j&|||d|}|j!|
|qt|j
t0kr|r|jdd|jddx3|D](}|
j|r|j1t2|qqWn|
j3|||}|j!|
|qt|j
t4kr|j
j*}|j
j+}|j
j5}|j
j6}xX|D]P}|
j|rT|j7|||||n|r#|r#|j1t2|q#q#W|sdnd}|r|jdd
|jdd
|jd|n|
j8|||||||||	}|j!|
|qt|j
t9kr|j
j*}|j
j+}|j,|||rR|jddn|rt|jt#kr|jdd
n|
j(||||d|}|j!|
|qt|j
t:kst|j
t;kr
|jj<j=|j
j}t|j
t:kr>	|jr>	t|jtkr>	ttjdn|jr	xv|D]k}||jkrN	|
j|rN	ttjdt|j
t:kr	dnd|j
j|
jfqN	qN	Wnd}|r	|j|d|j|dn|
j>||||}|j!|
|q|j
dkr
|rB
|jddn|rp
t|jt#krp
|jdd
n|
j?|||}|j!|
|qttjdt|j
qW|S(NRtRuRs;Source address family '%s' conflicts with rule family '%s'.is"Destination conflict with service.tfiltertINPUTtrawt
PREROUTINGt	conntracktnatitmangletPOSTROUTINGtFORWARD_OUTt
FORWARD_INs'IcmpBlock not usable with accept actionsIcmp%s %s not usable with %stBlocktTypesUnknown element %s(@tfamilyR1Rtis_ipv_enabledRR7RRtINVALID_RULEtipvstsetRkRRRRtget_serviceR@RYtdestinationtis_ipv_supportedR|R]RtactionRR	RRRtreplaceRItbuild_zone_helper_ports_rulesRZtadd_modulesRtbuild_zone_ports_rulesROtbuild_zone_protocol_rulesRLtbuild_zone_source_ports_rulesRRR
R
RtvalueRRRRtbuild_zone_masquerade_rulesRtto_portt
to_addressR6tbuild_zone_forward_port_rulesRRRticmptypetget_icmptypetbuild_zone_icmp_block_rulest(build_zone_rich_source_destination_rules(R!RR)RRRWR|Rwt
source_ipvRGR[tsvctdestinationsRthelpersRRRRt
nat_moduleRtprotoRNR
R4R5tfilter_chaintictRx((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyRsH1		2		


	
	
"


		
#cCsJ|jjj|}|j|j|}|r|jjdkrU|jddnVg}x@|D]8}|j|j|jj	dd}	|j|	qbW|j
||jddng}
xdd	gD]}|jj|sqn|jj|}t
|jdkrE||jkrm|
j||j|fqmq|df|
kr|
j|dfqqWx|
D]\}}
|jjdkr|x|D]}|j}t|}|jj	dd}	|j|	|jd
kr|j|jrqnt
|jdkr'|j|qxK|jD]@\}}|j|||||
|j|}|j||q1WqWnxB|jD]7\}}|j|||||
}|j||qWx9|jD].}|j||||
}|j||qWxB|jD]7\}}|j|||||
}|j||qWqxWdS(NiRoRpRqRrRmRnRtRuRi(RRR~R	RRR]R|RRRRzRkRYRR1Rt
add_moduleRyRRIRR@RZRRORRLR(R!RR)RRWRRRRRtbackends_ipvRwR[RRRRRRNR
((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyRsd

 
	
"cCsn|r|jddnxN|jjD]=}|js>q)n|j||||}|j||q)WdS(NRmRn(R]RRVRWRRZ(R!RR)RR
RWR[RN((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyR3s		cCsk|r|jddnxK|jjD]:}|js>q)n|j|||}|j||q)WdS(NRmRn(R]RRVRWRRZ(R!RR)R
RWR[RN((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyR?s	cCsn|r|jddnxN|jjD]=}|js>q)n|j||||}|j||q)WdS(NRmRn(R]RRVRWRRZ(R!RR)RR
RWR[RN((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyRJs	cCsw|r)|jdd|jddnd}|jt||jj|}|j||}|j||dS(NRrRtRmRuRt(R]RRRRkRRZ(R!RR)RWRwR[RN((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyRUsc	

Cstd|rd}	nd}	|s*dnd}
|ri|jdd|jdd|jd|
n|r|r|jt|	n|jj|	}|j|||
|||||}|j||dS(	NRuRtRnRvRsRpRrRm(R	R]RRRRkRRZ(
R!RR)RWRR
R4R5RRwRR[RN((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyRas	c
Cs|jjj|}|r>|jdd|jddnx|jjD]}|jscqNnt}|jrxBddgD]1}||jkr|j|st	}PqqqWn|rqNn|j
|||}	|j||	qNWdS(NRmRnRvRtRu(RRRR]RVRWRRRRZRRZ(
R!RR)RARWRR[tskip_backendRwRN((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyRws$		cCs|j|j}|dkr dS|j|r@|dkr@dS|jdd|jdd|r|j||jnxH|jjD]7}|jsqn|j	||}|j
||qWdS(	NtDROPs
%%REJECT%%tREJECTtACCEPTRmRnRv(Rs
%%REJECT%%R(R ttargetRR]RgR&RRVRWt%build_zone_icmp_block_inversion_rulesRZ(R!RR)RWRR[RN((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyRfs

	N(t__name__t
__module__R#R%R'R(R*R-R4R9R<RERRRUR1RjRkRsRzRRRRRRRTRRRRR/RdRRRRRRRRR6ReRRRRRRRRRRRcRRRRRRRR^RRRRRR	R
RR_RRRRRRRR`RR RR"RR$RaR%R(R&R*RR,RbR-R1R.RR6R8R]R9R=R:R?RRBRDR\RERIRFRKRRMRXRNRORTRSRRvRRRRhRfRRRRRRRRRRRRf(((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyR's$												<			
		)?					'						&	 							 																															
	 										(		(											A				
	((Rtfirewall.core.baseRRRtfirewall.core.loggerRtfirewall.functionsRRRRRR	R
RRtfirewall.core.richR
RRRRRRRRRRtfirewall.core.fw_transactionRRtfirewallRtfirewall.errorsRtfirewall.fw_typesRtobjectR(((s9/usr/lib/python2.7/site-packages/firewall/core/fw_zone.pyt<module>s@L
Back to Directory File Manager