<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
Yj$                 @   s&  d gZ ddlZddlmZ ddlmZ ddlmZm	Z	m
Z
 ddlmZ ddlmZ ddlmZmZ ddlZd	gd
ddgdddgdZi Zi Zi Zxej D ]tZg ee< e ee< x\ee D ]PZee jde  ee jdeef  ee jde  ee jde  qW qW G dd  d eZdS )ebtables    N)runProg)log)tempFilereadfile	splitArgs)COMMANDS)	ipXtables)FirewallErrorINVALID_IPVZBROUTINGZ
PREROUTINGZPOSTROUTINGZOUTPUTZINPUTZFORWARD)ZbrouteZnatfilterz-N %s_directz-I %s 1 -j %s_directz-I %s_direct 1 -j RETURNz	%s_directc               @   s   e Zd ZdZd ZdZdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd/d d!Zd"d# Zd$d% Zd&d' Zd(d) Zd0d+d,Zd-d. ZdS )1r   ZebFc             C   sB   t | j | _t d| j  | _| j | _| j | _| j  g | _	d S )Nz
%s-restore)
r   ipv_command_restore_command_detect_restore_noflush_optionZrestore_noflush_option_detect_concurrent_optionconcurrent_optionfill_existsavailable_tables)self r   /usr/lib/python3.6/ebtables.py__init__9   s    

zebtables.__init__c             C   s$   t jj| j| _t jj| j| _d S )N)ospathexistsr   Zcommand_existsr   Zrestore_command_exists)r   r   r   r   r   A   s    zebtables.fill_existsc             C   s(   d}t | jddg}|d dkr$d}|S )N z--concurrentz-Lr   )r   r   )r   r   retr   r   r   r   E   s
    z"ebtables._detect_concurrent_optionc             C   s.   g }y| j |d W n tk
r(   dS X dS )NoffFT)	set_rules
ValueError)r   rulesr   r   r   r   O   s    z'ebtables._detect_restore_noflush_optionc             C   s   g }| j r | j |kr |j| j  |dd |D 7 }tjd| j| jdj| t| j|\}}|dkr~td| jdj||f |S )Nc             S   s   g | ]}d | qS )z%sr   ).0itemr   r   r   
<listcomp>^   s    z"ebtables.__run.<locals>.<listcomp>z	%s: %s %s r   z'%s %s' failed: %s)	r   appendr   debug2	__class__r   joinr   r    )r   argsZ_argsstatusr   r   r   r   Z__runY   s    zebtables.__runc             C   s(   x"dD ]}||krt td| qW d S )N
%%REJECT%%%%ICMP%%%%LOGTYPE%%z'%s' invalid for ebtables)r,   r-   r.   )r
   r   )r   rulestrr   r   r   _rule_validatef   s    
zebtables._rule_validatec             C   s   |t ko|t | kS )N)BUILT_IN_CHAINS)r   r   tablechainr   r   r   is_chain_builtinl   s    zebtables.is_chain_builtinc             C   sJ   g }|r4|j d|d|g |j d|d|dddg n|j d|d|g |S )Nz-tz-Nz-I1z-jZRETURNz-X)r&   )r   addr3   r4   r!   r   r   r   build_chain_rulesp   s    zebtables.build_chain_rulesc             C   s8   d|g}|r |d|t |g7 }n|d|g7 }||7 }|S )Nz-tz-Iz-D)r0   )r   r7   r3   r4   indexr*   r/   r   r   r   
build_rule{   s    zebtables.build_rulec             C   s
   t j|S )N)r	   Zcommon_reverse_rule)r   r*   r   r   r   reverse_rule   s    zebtables.reverse_rulec             C   s   t j| d S )N)r	   Zcommon_check_passthrough)r   r*   r   r   r   check_passthrough   s    zebtables.check_passthroughc             C   s
   t j|S )N)r	   Zcommon_reverse_passthrough)r   r*   r   r   r   reverse_passthrough   s    zebtables.reverse_passthroughc             C   s<  t  }d}i }x|D ]}|d d  }| j| xTdD ]L}y|j|}	W n tk
rZ   Y q4X t||	d kr4|j|	 |j|	}q4W x^tt|D ]N}	xHtjD ]>}
|
||	 kr||	 j	do||	 j
d rd||	  ||	< qW qW |j|g j| qW xD|D ]<}|jd|  x&|| D ]}|jdj|d	  qW q W |j  tj|j}tjd
| j| jd|j|jf  g }|jd t| j||jd\}}tj dkrt|j}|d k	rd}	xH|D ]@}tjd|	|f ddd |j
d	stjddd |	d7 }	qW tj|j |dkr8td| jdj||f d S )Nr   -t--table   "z"%s"z*%s
r%   
z	%s: %s %sz%s: %dz	--noflush)stdin   z%8d: %sr   )nofmtnlr   )rE   z'%s %s' failed: %s)r>   r?   )r   r1   r9   r    lenpoprangestringZ
whitespace
startswithendswith
setdefaultr&   writer)   closer   statnamer   r'   r(   r   st_sizer   ZgetDebugLogLevelr   Zdebug3unlink)r   r!   
log_deniedZ	temp_filer3   Ztable_rulesZ_ruler/   opticrP   r*   r+   r   linesliner   r   r   r      sZ    




 




zebtables.set_rulesc             C   s   | j | | j|S )N)r1   _ebtables__run)r   r/   rT   r   r   r   set_rule   s    
zebtables.set_ruleNc             C   s   g }|r|gnt j }xp|D ]h}|| jkr6|j| qy*| jd|dg | jj| |j| W q tk
r   tjd|  Y qX qW |S )Nz-tz-Lz#ebtables table '%s' does not exist.)r2   keysr   r&   rZ   r    r   Zdebug1)r   r3   r   Ztablesr   r   r   get_available_tables   s    

zebtables.get_available_tablesc             C   s   i S )Nr   )r   r3   r   r   r   get_zone_table_chains   s    zebtables.get_zone_table_chainsc             C   sF   g }x<t j D ]0}|| j kr qxdD ]}|jd||g q&W qW |S )N-F-X-Zz-t)r_   r`   ra   )r2   r\   r]   r&   )r   r!   r3   flagr   r   r   build_flush_rules   s    
zebtables.build_flush_rulesc             C   s^   g }|dkrdn|}xDt j D ]8}|| j kr0qx$t | D ]}|jd|d||g q:W qW |S )NZPANICZDROPz-tz-P)r2   r\   r]   r&   )r   Zpolicyr!   Z_policyr3   r4   r   r   r   build_set_policy_rules   s    zebtables.build_set_policy_rulesc             C   s   g S )Nr   )r   r   r   r   build_default_tables   s    zebtables.build_default_tablesr   c             C   s   g }xt D ]}|| j krq
t | d d  }|dkrJ|tkrJ|jt|  d|g}x:|D ]2}t|tkrx|j||  qX|j|t|  qXW q
W |S )Nr   z-t)DEFAULT_RULESr]   	LOG_RULESextendtypelistr&   r   )r   rT   Zdefault_rulesr3   Z_default_rulesprefixr/   r   r   r   build_default_rules   s    

zebtables.build_default_rulesc             C   s
   || j kS )N)r   )r   r   r   r   r   is_ipv_supported  s    zebtables.is_ipv_supported)N)r   )__name__
__module____qualname__r   rQ   Zpolicies_supportedr   r   r   r   rZ   r1   r5   r8   r:   r;   r<   r=   r   r[   r]   r^   rc   rd   re   rl   rm   r   r   r   r   r   4   s0   

	@


)__all__Zos.pathr   Zfirewall.core.progr   Zfirewall.core.loggerr   Zfirewall.functionsr   r   r   Zfirewall.configr   Zfirewall.corer	   Zfirewall.errorsr
   r   rJ   r2   rf   rg   Z
OUR_CHAINSr\   r3   setr4   r&   r7   objectr   r   r   r   r   <module>   s.   
