Warning: session_start(): Session cannot be started after headers have already been sent in /home/tvrreohg/public_html/manga.php on line 13
3 ³Y„j%ñã@s<ddlZddlZddlmZddlmZddlmZm Z m Z m Z m Z m Z mZmZddlmZddlmZmZmZmZmZmZddlmZmZmZmZmZmZm Z ddl!m"Z"m#Z#ddl$Z$d Z%d d d gd d gd dd d d gd dd gd d d gdœZ&dddœZ'dddœZ(dd„Z)dd„Z*dd„Z+Gdd„de,ƒZ-Gdd„de-ƒZ.dS)éN)ÚrunProg)Úlog)ÚtempFileÚreadfileÚ splitArgsÚ check_macÚportStrÚcheck_single_addressÚ check_addressÚ normalizeIP6)Úconfig)Ú FirewallErrorÚINVALID_PASSTHROUGHÚ INVALID_RULEÚ UNKNOWN_ERRORÚ INVALID_ADDRÚINVALID_ICMPTYPE)Ú Rich_AcceptÚ Rich_RejectÚ Rich_DropÚ Rich_MarkÚRich_MasqueradeÚRich_ForwardPortÚRich_IcmpBlock)Ú ICMP_TYPESÚ ICMPV6_TYPESÚÚINPUTÚOUTPUTÚFORWARDÚ PREROUTINGÚ POSTROUTING)ÚsecurityÚrawÚmangleÚnatÚfilterzicmp-host-prohibitedzicmp6-adm-prohibited)Úipv4Úipv6Úicmpz ipv6-icmpcCs¢dddddddœ}|dd…}x~|D]v}y|j|ƒ}Wntk rLw$YnX|d krŽyt||d ƒWntk r~YnX|j|d ƒ||||<q$W|S) z Inverse valid rule z-Dz--deletez-Xz--delete-chain)z-Az--appendz-Iz--insertz-Nz --new-chainNú-Iú--inserté)r*r+)ÚindexÚ ExceptionÚintÚpop)ÚargsÚ replace_argsÚret_argsÚargÚidx©r6ú/usr/lib/python3.6/ipXtables.pyÚcommon_reverse_rule;s(  r8cCs®dddddddœ}|dd…}x€|D]x}y|j|ƒ}Wntk rLw$YnX|d krŽyt||d ƒWntk r~YnX|j|d ƒ||||<|SWttd ƒ‚dS) z Reverse valid passthough rule z-Dz--deletez-Xz--delete-chain)z-Az--appendz-Iz--insertz-Nz --new-chainNú-Iú--insertr,zno '-A', '-I' or '-N' arg)r9r:)r-Ú ValueErrorr/r0r r)r1r2r3Úxr5r6r6r7Úcommon_reverse_passthrough`s,   r=cCs”t|ƒ}tddddddddd d d d d dddddddgƒ}t||@ƒdkrbttdt||@ƒdƒ‚tddddddgƒ}t||@ƒdkr�ttdƒ‚dS)zZ Check if passthough rule is valid (only add, insert and new chain rules are allowed) z-Cz--checkz-Dz--deletez-Rz --replacez-Lz--listz-Sz --list-rulesz-Fz--flushz-Zz--zeroz-Xz--delete-chainz-Pz--policyz-Ez--rename-chainrzarg '%s' is not allowedz-Az--appendz-Iz--insertz-Nz --new-chainzno '-A', '-I' or '-N' argN)ÚsetÚlenr rÚlist)r1Z not_allowedZneededr6r6r7Úcommon_check_passthroughŠs*  rAc@sÀeZdZdZdZdZdd„Zdd„Zdd„Zd d „Z d d „Z d d„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd „Zdjd"d#„Zd$d%„Zd&d'„Zd(d)„Zd*d+„Zdkd,d-„Zd.d/„Zdld1d2„Zd3d4„Zd5d6„Zdmd8d9„Zdnd:d;„Z dd?„Z"d@dA„Z#dBdC„Z$dDdE„Z%dFdG„Z&dHdI„Z'dJdK„Z(dLdM„Z)dNdO„Z*dPdQ„Z+dodRdS„Z,dpdTdU„Z-dqdVdW„Z.dXdY„Z/drdZd[„Z0dsd\d]„Z1dtd^d_„Z2d`da„Z3dudbdc„Z4ddde„Z5dfdg„Z6dhdi„Z7d!S)vÚ ip4tablesr'TcCsd||_tj|j|_tjd|j|_|jƒ|_|jƒ|_ |j ƒg|_ i|_ i|_ g|_i|_dS)Nz %s-restore)Ú_fwr ZCOMMANDSÚipvÚ_commandÚ_restore_commandÚ_detect_wait_optionÚ wait_optionÚ_detect_restore_wait_optionÚrestore_wait_optionÚ fill_existsÚavailable_tablesÚrich_rule_priority_countsÚpolicy_priority_countsÚzone_source_index_cacheÚ our_chains)ÚselfÚfwr6r6r7Ú__init__¯s  zip4tables.__init__cCs$tjj|jƒ|_tjj|jƒ|_dS)N)ÚosÚpathÚexistsrEZcommand_existsrFZrestore_command_exists)rQr6r6r7rK¼szip4tables.fill_existscCs†|jr(|j|kr(|jgdd„|Dƒ}ndd„|Dƒ}tjd|j|jdj|ƒƒt|j|ƒ\}}|dkr‚td|jdj|ƒ|fƒ‚|S)NcSsg|] }d|‘qS)z%sr6)Ú.0Úitemr6r6r7ú Ãsz#ip4tables.__run..cSsg|] }d|‘qS)z%sr6)rWrXr6r6r7rYÅsz %s: %s %sú rz'%s %s' failed: %s)rHrÚdebug2Ú __class__rEÚjoinrr;)rQr1Z_argsÚstatusÚretr6r6r7Z__runÀszip4tables.__runc Cs<y|j|ƒ}Wntk r"dSX||||d…<dSdS)NFéT)r-r;)rQÚruleÚpatternZ replacementÚir6r6r7Ú _rule_replaceÍs zip4tables._rule_replacecCs|tko|t|kS)N)ÚBUILT_IN_CHAINS)rQrDÚtableÚchainr6r6r7Úis_chain_builtinÖszip4tables.is_chain_builtincCs2d|g}|r|jdƒn |jdƒ|j|ƒ|gS)Nz-tz-Nz-X)Úappend)rQÚaddrfrgrar6r6r7Úbuild_chain_rulesÚs    zip4tables.build_chain_rulescCs8d|g}|r |d|t|ƒg7}n |d|g7}||7}|S)Nz-tz-Iz-D)Ústr)rQrjrfrgr-r1rar6r6r7Ú build_ruleãs  zip4tables.build_rulecCst|ƒS)N)r8)rQr1r6r6r7Ú reverse_ruleìszip4tables.reverse_rulecCs t|ƒdS)N)rA)rQr1r6r6r7Úcheck_passthroughïszip4tables.check_passthroughcCst|ƒS)N)r=)rQr1r6r6r7Úreverse_passthroughòszip4tables.reverse_passthroughcCsžd}y|jdƒ}Wntk r&YnXt|ƒ|dkrD||d}d}xLd D]D}y|j|ƒ}Wntk rtYqNXt|ƒ|dkrN||d}qNW||fS) Nr&z-tr`ú-Aú--appendú-Iú--insertú-Nú --new-chain)rqrrrsrtrurv)r-r;r?)rQr1rfrcrgÚoptr6r6r7Úpassthrough_parse_table_chainõs$ z'ip4tables.passthrough_parse_table_chaincCs4yH|jdƒ}|j|ƒ|j|ƒ}d|dkr:||df}n ||df}WnFtk rŽy|jdƒ}|j|ƒd}Wntk rˆdSXYnXd}|ddkr¤d }|rÂ| rÂ||krÀ|j|ƒnn|�r0|�rü||krð|j|ƒ|jd d „d�|j|ƒ}n|jj�r d}nt|ƒ}d|d<|j dd|dƒdS)Nz%%ZONE_SOURCE%%z-méééz%%ZONE_INTERFACE%%Trú-Dú--deleteFcSs|dS)Nrr6)r<r6r6r7Ú(sz4ip4tables._run_replace_zone_source..)Úkeyz-Ir,z%dr`)r|r}) r-r0r;ÚremoveriÚsortrCÚ_allow_zone_driftingr?Úinsert)rQrarOrcÚzoneZ zone_sourceÚrule_addr-r6r6r7Ú_run_replace_zone_source s>             z"ip4tables._run_replace_zone_sourcecCsy|j|ƒ}Wntk r$Y�nöXd}d}d}|j|ƒ|j|ƒ}t|ƒtkr\ttdƒ‚d} xLdD]D} y|j| ƒ} Wntk rŒYqfXt|ƒ| dkrf|| d} qfWxhdD]`} y|j| ƒ}Wntk rÚYq´Xt|ƒ|dk�rú||d} | dk�rd}| dkr´d}q´W| | f} |�sp| |k�sP||| k�sP|| |dk�rZttdƒ‚|| |d8<nª| |k�r‚i|| <||| k�rœd|| |<d} xHt || j ƒƒD]4}||k�rÈ|�rÈP| || |7} ||k�r²P�q²W|| |d7<d ||<|j |dd| ƒdS)a Change something like -t filter -I public_IN %%RICH_RULE_PRIORITY%% 123 or -t filter -A public_IN %%RICH_RULE_PRIORITY%% 321 into -t filter -I public_IN 4 or -t filter -I public_IN TFr`z%priority must be followed by a numberr&ú-tú--tableú-Aú--appendú-Iú--insertú-Dú--deleterz*nonexistent or underflow of priority countr,z%dNéÿÿÿÿ)r‡rˆ)r‰rŠr‹rŒr�rŽ)r‹rŒ)r�rŽ) r-r;r0Útyper/r rr?rÚsortedÚkeysrƒ)rQraZpriority_countsÚtokenrcr…rƒZinsert_add_indexÚpriorityrfrwÚjrgr-Úpr6r6r7Ú_set_rule_replace_priority4sj             z$ip4tables._set_rule_replace_prioritycCsPtƒ}i}tj|jƒ}tj|jƒ}tj|jƒ}�x¨|D�]ž}|dd…} |j| dddt|jgƒ|j| dt |jgƒy| j dƒ} Wnt k ršYn8X|dkr¦q6|d$krÈd d d |g| | | d …<n | j | ƒ|j | |dƒ|j | |dƒ|j| |ƒd} xZd%D]R} y| j | ƒ} Wnt k �r,Yn(Xt| ƒ| d k�r| j | ƒ| j | ƒ} �qWxhtt| ƒƒD]X} xPtjD]F} | | | k�rt| | jdƒ�o¢| | jdƒ �rtd| | | | <�qtW�qhW|j| gƒj| ƒq6WxR|D]J} || }|jd| ƒx"|D]} |jdj| ƒdƒ�qW|jdƒ�qàW|jƒtj|jƒ}tjd|j|j d|j|j!fƒg}|j"�rz|j|j"ƒ|jdƒt#|j ||jd�\}}tj$ƒdk�r t%|jƒ}|dk �r d } xH|D]@}tj&d| |fd dd �|jdƒ�sütj&d!d d"�| d 7} �qÆWtj'|jƒ|dk�r:t d#|j dj|ƒ|fƒ‚||_||_||_dS)&Nz %%REJECT%%ÚREJECTz --reject-withz%%ICMP%%z %%LOGTYPE%%ÚoffÚunicastÚ broadcastÚ multicastz-mÚpkttypez --pkt-typer`z%%RICH_RULE_PRIORITY%%z%%POLICY_PRIORITY%%r&ú-tú--tableú"z"%s"z*%s rZÚ zCOMMIT z %s: %s %sz%s: %dz-n)Ústdinr,z%8d: %sr)ÚnofmtÚnlr)r£z'%s %s' failed: %s)ršr›rœ)ržrŸ)(rÚcopyÚdeepcopyrMrNrOrdÚDEFAULT_REJECT_TYPErDÚICMPr-r;r0r—r†r?ÚrangeÚstringZ whitespaceÚ startswithÚendswithÚ setdefaultriÚwriter]ÚcloserTÚstatÚnamerr[r\rFÚst_sizerJrZgetDebugLogLevelrZdebug3Úunlink)rQÚrulesÚ log_deniedÚ temp_fileZ table_rulesrMrNrOZ_rulerarcrfrwÚcr°r1r^r_ÚlinesÚliner6r6r7Ú set_rules„sŠ                    zip4tables.set_rulesc Csø|j|dddt|jgƒ|j|dt|jgƒy|jdƒ}Wntk rRYn:X|dkr`dS|dkr‚d d d |g|||d…<n |j|ƒtj|j ƒ}tj|j ƒ}tj|j ƒ}|j ||dƒ|j ||dƒ|j ||ƒ|j|ƒ}||_ ||_ ||_ |S)Nz %%REJECT%%r˜z --reject-withz%%ICMP%%z %%LOGTYPE%%r™rršr›rœz-mr�z --pkt-typer`z%%RICH_RULE_PRIORITY%%z%%POLICY_PRIORITY%%)ršr›rœ)rdr§rDr¨r-r;r0r¥r¦rMrNrOr—r†Ú_ip4tables__run)rQrarµrcrMrNrOÚoutputr6r6r7Úset_ruleås.      zip4tables.set_ruleNc Cs”g}|r|gntjƒ}xx|D]p}||jkr6|j|ƒqy,|jd|ddgƒ|jj|ƒ|j|ƒWqtk rŠtjd|j|fƒYqXqW|S)Nz-tz-Lz-nzA%s table '%s' does not exist (or not enough permission to check).) rer’rLrir»r;rZdebug1rD)rQrfr_Ztablesr6r6r7Úget_available_tabless    zip4tables.get_available_tablescCs`d}t|jdddgƒ}|ddkr\d}t|jdddgƒ}|ddkrHd}tjd|j|j|ƒ|S)Nrz-wz-Lz-nrz-w10z%s: %s will be using %s option.)rrErr[r\)rQrHr_r6r6r7rGs  zip4tables._detect_wait_optioncCsŒtƒ}|jdƒ|jƒd}xJd D]B}t|j|g|jd�}|ddkr"d|dkr"d |dkr"|}Pq"Wtjd |j|j|ƒt j |jƒ|S) Nz#foorú-wú--wait=2)r¢rzinvalid optionr`zunrecognized optionz%s: %s will be using %s option.)r¿rÀ) rr®r¯rrFr±rr[r\rTr³)rQr¶rHZ test_optionr_r6r6r7rI$s    z%ip4tables._detect_restore_wait_optioncCsVi|_i|_g|_g}x:tjƒD].}|j|ƒs0q xdD]}|jd||gƒq6Wq W|S)Nú-Fú-Xú-Zz-t)rÁrÂrÃ)rMrNrOrer’r¾ri)rQr´rfÚflagr6r6r7Úbuild_flush_rules7s  zip4tables.build_flush_rulescCsfg}|dkrdn|}xLtjƒD]@}|j|ƒs.q|dkr8qx$t|D]}|jd|d||gƒqBWqW|S)NZPANICÚDROPr%z-tz-P)rer’r¾ri)rQÚpolicyr´Ú_policyrfrgr6r6r7Úbuild_set_policy_rulesFs z ip4tables.build_set_policy_rulescCsNtƒ}|dks|jdkr&|jtjƒƒ|dks8|jdkrF|jtjƒƒt|ƒS)Nr'r()r>rDÚupdaterr’rr@)rQrDZ supportedr6r6r7Úsupported_icmp_typesRs zip4tables.supported_icmp_typescCsgS)Nr6)rQr6r6r7Úbuild_default_tables\szip4tables.build_default_tablesr™c Csi}|jdƒrpg|d<tƒ|jd<xLtdD]@}|djd|ƒ|djd||fƒ|jdjd|ƒq,W|jdƒ�r\g|d<tƒ|jd<xÊtdD]¾}|djd|ƒ|djd||fƒ|jdjd|ƒ|dkršxt|jjrøddd d gndd d gD]R}|djd ||fƒ|djd |||fƒ|jdjtd ||fgƒƒ�qWqšW|jdƒ�rNg|d<tƒ|jd<xÐtdD]Ä}|djd|ƒ|djd||fƒ|jdjd|ƒ|dk�r†xv|jj�rèddd d gndd d gD]R}|djd ||fƒ|djd |||fƒ|jdjtd ||fgƒƒ�qòW�q†W|jdƒ�r@g|d<tƒ|jd<xÐtdD]Ä}|djd|ƒ|djd||fƒ|jdjd|ƒ|d9k�rxxv|jj�rÚddd d gndd d gD]R}|djd ||fƒ|djd |||fƒ|jdjtd ||fgƒƒ�qäW�qxWg|d<tƒ|jd<|djdƒ|djdƒ|djdƒ|djdƒ|jdjtdƒƒxf|jj�r¸ddd d gndd d gD]B}|djd|ƒ|djd|ƒ|jdjtd|ƒƒ�qÂW|dk�r |djdƒ|djdƒ|dk�rF|djdƒ|djdƒ|djdƒ|djd ƒ|djd!ƒ|djd"ƒ|jdjtd#ƒƒxJd:D]B}|djd$|ƒ|djd%|ƒ|jdjtd&|ƒƒ�q¦Wxzd;D]r}xj|jj�r dd gnd gD]N}|djd)||fƒ|djd*||fƒ|jdjtd+||fƒƒ�qW�qòWxJdD]B}|djd5|ƒ|djd6|ƒ|jdjtd7|ƒƒ�q~Wg}xJ|D]B}||jƒk�rä�qÎx(||D]}|jd8|gt |ƒƒ�qîW�qÎW|S)?Nr"z -N %s_directz-A %s -j %s_directz %s_directr#r Ú POLICIES_preZ ZONES_SOURCEZZONESÚ POLICIES_postz-N %s_%sz-A %s -j %s_%sz%s_%sr$r%r!r&zB-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED,DNAT -j ACCEPTz-A INPUT -i lo -j ACCEPTz-N INPUT_directz-A INPUT -j INPUT_directZ INPUT_directz -N INPUT_%sz-A INPUT -j INPUT_%szINPUT_%sr™z^-A INPUT -m conntrack --ctstate INVALID %%LOGTYPE%% -j LOG --log-prefix 'STATE_INVALID_DROP: 'z/-A INPUT -m conntrack --ctstate INVALID -j DROPz9-A INPUT %%LOGTYPE%% -j LOG --log-prefix 'FINAL_REJECT: 'z-A INPUT -j %%REJECT%%zD-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED,DNAT -j ACCEPTz-A FORWARD -i lo -j ACCEPTz-N FORWARD_directz-A FORWARD -j FORWARD_directZFORWARD_directz -N FORWARD_%sz-A FORWARD -j FORWARD_%sz FORWARD_%sÚINÚOUTz-N FORWARD_%s_%sz-A FORWARD -j FORWARD_%s_%sz FORWARD_%s_%sz`-A FORWARD -m conntrack --ctstate INVALID %%LOGTYPE%% -j LOG --log-prefix 'STATE_INVALID_DROP: 'z1-A FORWARD -m conntrack --ctstate INVALID -j DROPz;-A FORWARD %%LOGTYPE%% -j LOG --log-prefix 'FINAL_REJECT: 'z-A FORWARD -j %%REJECT%%z-N OUTPUT_directz>-A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPTz-A OUTPUT -o lo -j ACCEPTz-A OUTPUT -j OUTPUT_directZ OUTPUT_directz -N OUTPUT_%sz-A OUTPUT -j OUTPUT_%sz OUTPUT_%sz-t)r r!)rÍ)rÏrÐ)rÎ)rÍ)rÎ) r¾r>rPrerirjrCr‚rÊr) rQrµZ default_rulesrgZdispatch_suffixÚ directionZfinal_default_rulesrfrar6r6r7Úbuild_default_rules`sÔ    $(   &*   &* &    (       "zip4tables.build_default_rulescCsf|dkrdddhS|dkr,d|jƒkr,dhS|dkrHd|jƒkrHddhS|d krbd |jƒkrbdhSiS) Nr&rÚ FORWARD_INÚ FORWARD_OUTr$r r%r!r#)r¾)rQrfr6r6r7Úget_zone_table_chainsÚs    zip4tables.get_zone_table_chainsc sì|jjj|ƒ‰ˆjdkrdnd‰ˆdkr4ˆdkr4dnd} |jjj|ˆt| ƒ‰g} g} x|D]} | jd| gƒqZWx|D]} | jd | gƒqvWxB|D]:} |jjj| ƒ}|dkrº|j |ƒ rºq’| j|j d | ƒƒq’Wx\|D]T} |jjj| ƒ}|dk�r|j |ƒ �rqÖt | ƒ�rˆdk�rqÖ| j|j d| ƒƒqÖW‡‡‡‡‡‡fdd„}g}| �r x˜| D]F}| �r€x8| D]}|j|||ƒƒ�qdWn|�rˆn|j||dƒƒ�qTWnH|�r¨n@| �rÐx8| D]}|j|d|ƒƒ�q´Wn|�rØn|j|ddƒƒ|S)NrÚpreÚpostr%r!TFz-iz-or'r(z-srÔrz-dcsVdddœˆ}dˆ|dˆˆfdˆjg}|r6|j|ƒ|rD|j|ƒ|jdˆgƒ|S)Nz-Az-D)TFz-tz%s_POLICIES_%sz%%POLICY_PRIORITY%%z-j)r”Úextend)Úingress_fragmentÚegress_fragmentÚadd_delra)rÈrgÚ chain_suffixÚenableÚp_objrfr6r7Ú_generate_policy_dispatch_rules   zSip4tables.build_policy_ingress_egress_rules.._generate_policy_dispatch_rule)r'r()r'r()r!rÔr) rCrÇZ get_policyr”Úpolicy_base_chain_nameÚPOLICY_CHAIN_PREFIXrir„Z check_sourceÚis_ipv_supportedÚ_rule_addr_fragmentr)rQrÝrÇrfrgZingress_interfacesZegress_interfacesZingress_sourcesZegress_sourcesÚisSNATZingress_fragmentsZegress_fragmentsÚ interfaceÚaddrrDrßr´rÙrÚr6)rÈrgrÜrÝrÞrfr7Ú!build_policy_ingress_egress_rulesésR        z+ip4tables.build_policy_ingress_egress_rulesFc Cs¨|dkr|dkrdnd}|jjj||t|d�} dddddddœ|} d } |rb| rbd d |d g} n,|rtd d |g} ndd |g} |sŽ| d g7} | d|| || | g7} | gS)Nr%r!TF)räz-iz-o)r r!rrÓrÔrz-gz-Iz%s_ZONESz%%ZONE_INTERFACE%%z-Az-Dz-t)rCrÇràrá) rQrÝr„rÇrårfrgrirärÈrwÚactionrar6r6r7Ú!build_zone_source_interface_rules6s&   z+ip4tables.build_zone_source_interface_rulescCsÆ|jdƒrP|dd…}|dkr$d}nd}dj|g|jjj|ƒƒ}ddd ||gSt|ƒrz|dkrjttd ƒ‚dd d |jƒgSt d |ƒrŽt |ƒ}n,t d |ƒrº|j dƒ}t |dƒd|d}||gSdS)Nzipset:éz-dÚdstÚsrcú,z-mr>z --match-setzCan't match a destination MAC.Úmacz --mac-sourcer(ú/rr`) r«r]rCÚipsetZ get_dimensionrr rÚupperr r r Úsplit)rQrwÚaddressÚinvertr±ÚflagsÚ addr_splitr6r6r7rãPs"       zip4tables._rule_addr_fragmentc Cs¶dddœ|}|dkr"|dkr"dnd}|jjj||t|d�} d d d d d d d œ|} |jjrdd |} nd |} t|ƒr€|dkr€gS|| d|d|g} | j|j| |ƒƒ| jd| gƒ| gS)Nz-Iz-D)TFr%r!TF)räz-sz-d)r r!rrÓrÔrz%s_ZONES_SOURCEz%s_ZONESrÔrz%%ZONE_SOURCE%%z-tz-g)r!rÔr)rCrÇràrár‚rrØrã) rQrÝr„rÇrórfrgrÛrärÈrwZzone_dispatch_chainrar6r6r7Úbuild_zone_source_address_rulesfs& z)ip4tables.build_zone_source_address_rulesc Cs>dddœ|}dddœ|}|dkr0|dkr0dnd }|jjj||t|d �}|j|jt|d |d |d |d|d|gƒƒg} | j||d|gƒ| j|d |d|gƒ| j|d |d|gƒ| j|d |d|gƒ| j|d|d|gƒ| j|d|d|gƒ| j||d|dd |gƒ| j||d|dd |gƒ| j||d|dd |gƒ| j||d|dd|gƒ| j||d|dd|gƒ|jjj|j } |jj ƒdk�r|dk�r| dk�rØ| j||d|ddddd|g ƒ| dk�r| j||d|ddddd|g ƒ|dk�r,| dk�r,| j||d|d| gƒ|�s:| j ƒ| S)Nz-Nz-X)TFz-Az-Dr%r!TF)räz%s_logz%s_denyz%s_prez%s_postz%s_allowz-tz-jr™r&r˜ú %%REJECT%%z %%LOGTYPE%%ÚLOGz --log-prefixz "%s_REJECT: "rÆz "%s_DROP: "ÚACCEPT)r˜rø)rúr˜rørÆ) rCrÇràrárPrÊr>riZ _policiesÚtargetÚget_log_deniedÚreverse) rQrÝrÇrfrgZ add_del_chainZ add_del_rulerärÈr´rûr6r6r7Úbuild_policy_chain_rules„sN       z"ip4tables.build_policy_chain_rulescCs2|sgSddd|jg}|jdk r.|d|jg7}|S)Nz-mÚlimitz--limitz --limit-burst)ÚvalueZburst)rQrÿÚsr6r6r7Ú _rule_limit´s  zip4tables._rule_limitcCsÂt|jƒtttgkrn<|jrHt|jƒtttt gkrRt t dt|jƒƒ‚n t t dƒ‚|j dkr¬t|jƒttgks€t|jƒtt gkr„dSt|jƒtgks¦t|jƒttgkr¾dSn|j dkrºdSdSdS)NzUnknown action %szNo rule action specified.rÚallowZdenyrÖr×) r�Úelementrrrrèrrrrr rr”)rQÚ rich_ruler6r6r7Ú_rich_rule_chain_suffix¼s    z!ip4tables._rich_rule_chain_suffixcCs>|j r|j rttdƒ‚|jdkr(dS|jdkr6dSdSdS)NzNot log or auditrrrÖr×)rÚauditr rr”)rQrr6r6r7Ú _rich_rule_chain_suffix_from_logÒs   z*ip4tables._rich_rule_chain_suffix_from_logcCs|jdkrgSd|jgS)Nrz%%RICH_RULE_PRIORITY%%)r”)rQrr6r6r7Ú_rich_rule_priority_fragmentÝs z&ip4tables._rich_rule_priority_fragmentc Cs´|js gS|jjj||tƒ}dddœ|}|j|ƒ}d||d||fg} | |j|ƒ7} | |ddg7} |jjr‚| dd |jjg7} |jjrž| d d |jjg7} | |j |jj ƒ7} | S) Nz-Az-D)TFz-tz%s_%sz-jrùz --log-prefixz'%s'z --log-levelz%s) rrCrÇràrárr ÚprefixÚlevelrrÿ) rQrÇrrÝrfÚ rule_fragmentrÈrÛrÜrar6r6r7Ú_rich_rule_logâs zip4tables._rich_rule_logc CsÄ|js gSdddœ|}|jjj||tƒ}|j|ƒ}d||d||fg} | |j|ƒ7} | |7} t|jƒt krrd} n,t|jƒt kr†d} nt|jƒt kršd} nd } | d d d | g7} | |j |jj ƒ7} | S) Nz-Az-D)TFz-tz%s_%sZacceptZrejectZdropÚunknownz-jZAUDITz--type)rrCrÇràrárr r�rèrrrrrÿ) rQrÇrrÝrfr rÛrÈrÜraÚ_typer6r6r7Ú_rich_rule_auditös$ zip4tables._rich_rule_auditc Cs2|js gSdddœ|}|jjj||tƒ}|j|ƒ}d||f} t|jƒtkrXddg} nžt|jƒtkrˆddg} |jjrö| d|jjg7} nnt|jƒt kr dd g} nVt|jƒt krâd }|jjj||tƒ}d||f} dd d |jj g} nt t d t|jƒƒ‚d||| g} | |j|ƒ7} | || 7} | |j|jjƒ7} | S)Nz-Az-D)TFz%s_%sz-jrúr˜z --reject-withrÆr$ÚMARKz --set-xmarkzUnknown action %sz-t)rèrCrÇràrárr�rrrrr>r rr rrÿ) rQrÇrrÝrfr rÛrÈrÜrgZ rule_actionrar6r6r7Ú_rich_rule_actions4       zip4tables._rich_rule_actioncCsÔ|sgSg}|jrŒ|jr"|jdƒtd|jƒrB|dt|jƒg7}qÐtd|jƒr||jjdƒ}|dt|dƒd|dg7}qÐ|d|jg7}nD|jrÐ|ddg7}|jr®|jdƒ|jj j |jd ƒ}|d |j|g7}|S) Nú!r(z-drïrr`z-mr>rëz --match-set) rærôrir r r ròrðrCr„Ú_ipset_match_flags)rQZ rich_destr rörõr6r6r7Ú_rich_rule_destination_fragment1s&    "  z)ip4tables._rich_rule_destination_fragmentcCs|sgSg}|jrŒ|jr"|jdƒtd|jƒrB|dt|jƒg7}nHtd|jƒr||jjdƒ}|dt|dƒd|dg7}n|d|jg7}nŒt|dƒrÈ|jrÈ|ddg7}|jr¸|jdƒ|d |jg7}nPt|d ƒoÖ|j �r|dd g7}|jrö|jdƒ|j j j |j d ƒ}|d |j |g7}|S)Nrr(z-srïrr`rîz-mz --mac-sourcerðr>rìz --match-set) rærôrir r r ròÚhasattrrîrðrCr„r)rQZ rich_sourcer rörõr6r6r7Ú_rich_rule_source_fragmentIs0    "    z$ip4tables._rich_rule_source_fragmentc Csdddœ|}d}|jjj||tƒ} d|g} |rD| ddt|ƒg7} |rT| d|g7} |rx| |j|jƒ7} | |j|jƒ7} | sŒt |j ƒt krœ| d d d d g7} g} |rî| j |j ||||| ƒƒ| j |j||||| ƒƒ| j |j||||| ƒƒn"| j |d | d|g| ddgƒ| S)Nz-Az-D)TFr&z-pz--dportz%sz-dz-mÚ conntrackz --ctstatez NEW,UNTRACKEDz%s_allowz-tz-jrú)rCrÇràrárrÚ destinationrÚsourcer�rèrrir rr) rQrÝrÇÚprotoÚportrrrÛrfrÈr r´r6r6r7Úbuild_policy_ports_rulesfs* z"ip4tables.build_policy_ports_rulesc Csüdddœ|}d}|jjj||tƒ}d|g} |r<| d|g7} |r`| |j|jƒ7} | |j|jƒ7} | stt|j ƒt kr„| ddd d g7} g} |rÖ| j |j ||||| ƒƒ| j |j ||||| ƒƒ| j |j||||| ƒƒn"| j |d |d |g| d dgƒ| S)Nz-Az-D)TFr&z-pz-dz-mrz --ctstatez NEW,UNTRACKEDz%s_allowz-tz-jrú)rCrÇràrárrrrr�rèrrir rr) rQrÝrÇÚprotocolrrrÛrfrÈr r´r6r6r7Úbuild_policy_protocol_rules�s& z%ip4tables.build_policy_protocol_rulesc Csdddœ|}d}|jjj||tƒ} d|g} |rD| ddt|ƒg7} |rT| d|g7} |rx| |j|jƒ7} | |j|jƒ7} | sŒt |j ƒt krœ| d d d d g7} g} |rî| j |j ||||| ƒƒ| j |j||||| ƒƒ| j |j||||| ƒƒn"| j |d | d|g| ddgƒ| S)Nz-Az-D)TFr&z-pz--sportz%sz-dz-mrz --ctstatez NEW,UNTRACKEDz%s_allowz-tz-jrú)rCrÇràrárrrrrr�rèrrir rr) rQrÝrÇrrrrrÛrfrÈr r´r6r6r7Úbuild_policy_source_ports_rulesšs* z)ip4tables.build_policy_source_ports_rulesc Csvd}|jjj||tƒ} dddœ|} | d| ddd|g} |rP| dd t|ƒg7} |r`| d |g7} | d d d |g7} | gS)Nr#z-Az-D)TFz%s_allowz-tz-pz--dportz%sz-dz-jZCTz--helper)rCrÇràrár) rQrÝrÇrrrZ helper_nameZmodule_short_namerfrÈrÛrar6r6r7Úbuild_policy_helper_ports_rules¶s z)ip4tables.build_policy_helper_ports_rulesc Cs‚dddœ|}|jjj||tƒ}g} |rH| jdd|d|d|dd gƒn6t|ƒrTgS| jdd|d|g|jd |ƒdd gƒ| S) Nz-Az-D)TFz-tr&z%s_allowz-oz-jrúz-d)rCrÇràrárirrã) rQrÝr„rÇrfrårrÛrÈr´r6r6r7Úbuild_zone_forward_rulesÅs z"ip4tables.build_zone_forward_rulesc Cs,d}|jjj||tdd�}dddœ|}g}|rj|j|ƒ}||j|ƒ7}||j|jƒ7}||j|j ƒ7}nd}g} | j dd|d ||fg|d d d d dgƒg}|rà|j|ƒ}||j|ƒ7}||j|jƒ7}||j|j ƒ7}nd}d}|jjj||tƒ}| j dd|d ||fg|ddddd dgƒ| S)Nr%T)räz-Az-D)TFrz-tz%s_%srz-oÚloz-jZ MASQUERADEr&z-mrz --ctstatez NEW,UNTRACKEDrú) rCrÇràrárr rrrrri) rQrÝrÇrrfrÈrÛr rÜr´r6r6r7Úbuild_policy_masquerade_rules×s6  z'ip4tables.build_policy_masquerade_rulesc Cs d}|jjj||tƒ} dddœ|} d} |rPtd|ƒrH| dt|ƒ7} n| |7} |rn|dkrn| dt|d ƒ7} g} |r¬|j|ƒ} |j|ƒ} | |j |j ƒ7} | |j |j ƒ7} nd } g}|rÐ|j |j|||d| ƒƒ|j d d| d | | fg| d |dt|ƒddd| gƒ|S)Nr%z-Az-D)TFrr(z[%s]z:%sú-rz-tz%s_%sz-pz--dportz-jZDNATz--to-destination)rCrÇràrár r rrr rrrrrir )rQrÝrÇrrZtoportZtoaddrrrfrÈrÛZtor rÜr´r6r6r7Úbuild_policy_forward_port_rulesüs2     z)ip4tables.build_policy_forward_port_rulescCs´|jdkrL|tkrLt|\}}}|r,t|ƒnt|ƒdt|ƒ}ddd|gS|jdkr˜|tkr˜t|\}}}|rxt|ƒnt|ƒdt|ƒ}ddd|gSttd |›d |j›�ƒ‚dS) Nr'rïz-mr)z --icmp-typer(Zicmp6z --icmpv6-typez ICMP type z not supported by )rDrrlrr rr±)rQZ icmp_typerÚ_codeZ _omit_codeZ _type_strr6r6r7Ú_icmp_types_fragments    zip4tables._icmp_types_fragmentcCs°d}|jjj||tƒ}dddœ|}|jdkrDddg}|j|jƒ} nddg}|j|jƒ} g} |jjj|ƒrxd |} d } n d |} d } g} |r¬| |j|j ƒ7} | |j |j ƒ7} | || 7} |�rL| j |j ||||| ƒƒ| j |j||||| ƒƒ|j�r| j |j||||| ƒƒn:|j|ƒ}| j d ||d||fg|j|ƒ| dd gƒn`|jjƒdk�rŽ| d k�rŽ| j || d |g| ddddd|gƒ| j || d |g| d| gƒ| S)Nr&z-Az-D)TFr'z-pr)z ipv6-icmpz%s_allowrúz%s_denyz %%REJECT%%z-tz%s_%sz-jr™z %%LOGTYPE%%rùz --log-prefixz"%s_ICMP_BLOCK: ")rCrÇràrárDr(r±Úquery_icmp_block_inversionrrrrrir rrèrrr rü)rQrÝrÇZictrrfrÈrÛrÚmatchr´Z final_chainZ final_targetr rÜr6r6r7Úbuild_policy_icmp_block_rules,sJ      z'ip4tables.build_policy_icmp_block_rulesc CsÎd}|jjj||tƒ}g}d}|jjj|ƒrŒd}|jjƒdkr�|rRd|t|ƒg}nd|g}|d|dd d d d d d|g }|j|ƒ|d7}nd}|r¤d|t|ƒg}nd|g}|d|dd d |g}|j|ƒ|S)Nr&rêz %%REJECT%%r™z-Iz-Dz-tz-pz%%ICMP%%z %%LOGTYPE%%z-jrùz --log-prefixz"%s_ICMP_BLOCK: "r`rú)rCrÇràrár)rürlri) rQrÝrÇrfrÈr´Zrule_idxZ ibi_targetrar6r6r7Ú'build_policy_icmp_block_inversion_rules]s.     z1ip4tables.build_policy_icmp_block_inversion_rulescCsxd}g}||j|jƒ7}||j|jƒ7}g}|j|j|||||ƒƒ|j|j|||||ƒƒ|j|j|||||ƒƒ|S)Nr&)rrrrrir rr)rQrÝrÇrrfr r´r6r6r7Ú*build_policy_rich_source_destination_rulessz4ip4tables.build_policy_rich_source_destination_rulescCs ||jkS)N)rD)rQrDr6r6r7râ�szip4tables.is_ipv_supported)N)N)r™)F)F)NN)NN)NN)NN)N)N)N)8Ú__name__Ú __module__Ú __qualname__rDr±Zpolicies_supportedrSrKr»rdrhrkrmrnrorprxr†r—rºr½r¾rGrIrÅrÉrËrÌrÒrÕrçrérãr÷rþrrrr r rrrrrrr r!r"r$r&r(r+r,r-râr6r6r6r7rBªsj     )Pa#    zN  0 "     & ! 1"rBc@s&eZdZdZdZddd„Zdd„ZdS) Ú ip6tablesr(Fc Csˆg}|jddddddddd d g ƒ|d krL|jddddddddd d d dg ƒ|jdddddddd dg ƒ|jdddddddd dg ƒ|S)Nz-Ir z-tr$z-mZrpfilterz--invertz --validmarkz-jrÆr™rùz --log-prefixzrpfilter_DROP: z-pz ipv6-icmpz$--icmpv6-type=neighbour-solicitationrúz"--icmpv6-type=router-advertisement)ri)rQrµr´r6r6r7Úbuild_rpfilter_rules”s$        zip6tables.build_rpfilter_rulesc CsÊddddddddd g }d }|jd j|ƒg}|jd d d |gƒxT|D]L}|jd d d|d|ddddg ƒ|jjdkrF|jd d d|d|ddddg ƒqFW|jd d dddd|gƒ|jd d dddd|gƒ|S)Nz ::0.0.0.0/96z::ffff:0.0.0.0/96z2002:0000::/24z2002:0a00::/24z2002:7f00::/24z2002:ac10::/28z2002:c0a8::/32z2002:a9fe::/32z2002:e000::/19Z RFC3964_IPv4r&z-tz-Nz-Iz-dz-jr˜z --reject-withz addr-unreachršÚallrùz --log-prefixz"RFC3964_IPv4_REJECT: "rÚ4r)ršr3)rPrjrirCZ _log_denied)rQZ daddr_listZ chain_namer´Zdaddrr6r6r7Úbuild_rfc3964_ipv4_rules¨s4       z"ip6tables.build_rfc3964_ipv4_rulesN)F)r.r/r0rDr±r2r5r6r6r6r7r1�s r1)/Zos.pathrTr¥Zfirewall.core.progrZfirewall.core.loggerrZfirewall.functionsrrrrrr r r Zfirewallr Zfirewall.errorsr rrrrrZfirewall.core.richrrrrrrrZfirewall.core.icmprrrªrárer§r¨r8r=rAÚobjectrBr1r6r6r6r7ÚsB  (  $ %* o