a è iÆ$ã@sdgZddlZddlmZddlmZddlmZm Z m Z ddl m Z ddl mZddlmZmZddlZd ggd ¢gd ¢d œZiZiZiZe ¡D]pZgee<eƒee<eeD]PZee d e¡ee deef¡ee de¡ee de¡q²q”Gdd„deƒZdS)ÚebtableséN)ÚrunProg)Úlog)ÚtempFileÚreadfileÚ splitArgs)ÚCOMMANDS)Ú ipXtables©Ú FirewallErrorÚ INVALID_IPVZBROUTING)Z PREROUTINGZ POSTROUTINGÚOUTPUT)ZINPUTr ZFORWARD)ZbrouteZnatÚfilterz -N %s_directz-I %s 1 -j %s_directz-I %s_direct 1 -j RETURNz %s_directc@sÄeZdZdZdZdZdd„Zdd„Zdd„Zd d „Z d d „Z d d„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd„Zdd„Zd/d d!„Zd"d#„Zd$d%„Zd&d'„Zd(d)„Zd0d+d,„Zd-d.„ZdS)1rZebFcCsBt|j|_td|j|_| ¡|_| ¡|_| ¡g|_ dS)Nz %s-restore) rÚipvÚ_commandÚ_restore_commandÚ_detect_restore_noflush_optionZrestore_noflush_optionÚ_detect_concurrent_optionÚconcurrent_optionÚ fill_existsÚavailable_tables©Úself©rú:/usr/lib/python3.9/site-packages/firewall/core/ebtables.pyÚ__init__9s    zebtables.__init__cCs$tj |j¡|_tj |j¡|_dS©N)ÚosÚpathÚexistsrZcommand_existsrZrestore_command_existsrrrrrAszebtables.fill_existscCs(d}t|jddgƒ}|ddkr$d}|S)NÚz --concurrentú-Lr)rr)rrÚretrrrrEs  z"ebtables._detect_concurrent_optioncCs.g}z| |d¡Wnty(YdS0dS)NÚoffFT)Ú set_rulesÚ ValueError)rÚrulesrrrrOs  z'ebtables._detect_restore_noflush_optioncCs‚g}|jr |j|vr | |j¡|dd„|Dƒ7}t d|j|jd |¡¡t|j|ƒ\}}|dkr~td|jd |¡|fƒ‚|S)NcSsg|] }d|‘qS)z%sr)Ú.0ÚitemrrrÚ ^óz"ebtables.__run..ú %s: %s %sú rú'%s %s' failed: %s) rÚappendrÚdebug2Ú __class__rÚjoinrr%)rÚargsÚ_argsÚstatusr"rrrZ__runYs  ÿzebtables.__runcCs$dD]}||vrttd|ƒ‚qdS)N)z %%REJECT%%z%%ICMP%%z %%LOGTYPE%%z'%s' invalid for ebtablesr )rÚruleÚstrrrrÚ_rule_validatefs ÿzebtables._rule_validatecCs|tvo|t|vSr)ÚBUILT_IN_CHAINS)rrÚtableÚchainrrrÚis_chain_builtinls ÿzebtables.is_chain_builtinc CsJg}|r4| d|d|g¡| d|d|dddg¡n| d|d|g¡|S)Nú-tz-Nú-IÚ1z-jZRETURNú-X)r.)rÚaddr9r:r&rrrÚbuild_chain_rulesps zebtables.build_chain_rulescCs8d|g}|r |d|t|ƒg7}n |d|g7}||7}|S)Nr<r=z-D)r6)rr@r9r:Úindexr2r5rrrÚ build_rule{s  zebtables.build_rulecCs t |¡Sr)r Zcommon_reverse_rule©rr2rrrÚ reverse_rule„szebtables.reverse_rulecCst |¡dSr)r Zcommon_check_passthroughrDrrrÚcheck_passthrough‡szebtables.check_passthroughcCs t |¡Sr)r Zcommon_reverse_passthroughrDrrrÚreverse_passthroughŠszebtables.reverse_passthroughc Cstƒ}d}i}|D]Â}|dd…}| |¡dD]J}z| |¡} WntyTYq00t|ƒ| dkr0| | ¡| | ¡}q0t|ƒD]<\} } tjD],} | | vr’|   d¡r²|   d¡s’d| || <q’q„|  |g¡  |¡q|D]4}|  d|¡||D]}|  d |¡d¡qôqÚ| ¡t |j¡} t d |j|jd |j| jf¡g} |   d ¡t|j| |jd \}}t ¡d krÔt|jƒ}|durÔd} |D]@}tjd| |fddd|  d¡sÈtjddd| d7} q’t |j¡|dkrtd|jd | ¡|fƒ‚dS)Nr)r<z--tableéú"z"%s"z*%s r,Ú r+z%s: %dz --noflush)Ústdinéz%8d: %sr)ÚnofmtÚnlr )rMr-)rr7rBr%ÚlenÚpopÚ enumerateÚstringZ whitespaceÚ startswithÚendswithÚ setdefaultr.Úwriter1ÚcloserÚstatÚnamerr/r0rÚst_sizerZgetDebugLogLevelrZdebug3Úunlink)rr&Ú log_deniedZ temp_filer9Z table_rulesZ_ruler5ÚoptÚiÚelementÚcrXr2r4r"ÚlinesÚlinerrrr$sb      ÿ  ÿ ÿ        ÿzebtables.set_rulescCs| |¡| |¡Sr)r7Ú_ebtables__run)rr5r\rrrÚset_ruleÍs zebtables.set_ruleNc Cs†g}|r|gnt ¡}|D]f}||jvr4| |¡qz*| d|dg¡|j |¡| |¡Wqty~t d|¡Yq0q|S)Nr<r!z#ebtables table '%s' does not exist.)r8Úkeysrr.rcr%rZdebug1)rr9r"ZtablesrrrÚget_available_tablesÑs    zebtables.get_available_tablescCsiSrr)rr9rrrÚget_zone_table_chainsászebtables.get_zone_table_chainscCs>g}t ¡D],}|| ¡vrq dD]}| d||g¡q"q |S)N)z-Fr?z-Zr<©r8rerfr.)rr&r9ÚflagrrrÚbuild_flush_rulesäs  zebtables.build_flush_rulesc CsVg}|dkrdn|}t ¡D]4}|| ¡vr.qt|D]}| d|d||g¡q6q|S)NZPANICZDROPr<z-Prh)rZpolicyZpolicy_detailsr&Z_policyr9r:rrrÚbuild_set_policy_rulesðs   zebtables.build_set_policy_rulescCsgSrrrrrrÚbuild_default_tablesúszebtables.build_default_tablesr#cCsŽg}tD]€}|| ¡vrqt|dd…}|dkrH|tvrH| t|¡d|g}|D]2}t|ƒtkrt| ||¡qT| |t|ƒ¡qTq|S)Nr#r<)Ú DEFAULT_RULESrfÚ LOG_RULESÚextendÚtypeÚlistr.r)rr\Z default_rulesr9Z_default_rulesÚprefixr5rrrÚbuild_default_rulesþs  zebtables.build_default_rulescCs ||jkSr)r)rrrrrÚis_ipv_supportedszebtables.is_ipv_supported)N)r#)Ú__name__Ú __module__Ú __qualname__rrYZpolicies_supportedrrrrrcr7r;rArCrErFrGr$rdrfrgrjrkrlrsrtrrrrr4s0     @    )Ú__all__Zos.pathrZfirewall.core.progrZfirewall.core.loggerrZfirewall.functionsrrrZfirewall.configrZ firewall.corer Zfirewall.errorsr r rRr8rmrnZ OUR_CHAINSrer9Úsetr:r.r@ÚobjectrrrrrÚs0    ý