<!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j8                 @   s  d ddddddddd	d
dddddddgZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm	Z	 G dd  d e
ZG dd de
ZG dd de
ZG dd de
ZG dd deZG dd de
ZG dd de
ZG dd de
ZG d d de
ZG d!d	 d	e
ZG d"d
 d
e
ZG d#d de
ZG d$d de
ZG d%d de
ZG d&d deZG d'd de
Zd(d)d/d1d+ZG d,d de
ZG d-d de
Zd.S )2Rich_SourceRich_DestinationRich_Service	Rich_PortRich_ProtocolRich_MasqueradeRich_IcmpBlockRich_IcmpTypeRich_SourcePortRich_ForwardPortRich_Log
Rich_AuditRich_AcceptRich_Reject	Rich_Drop	Rich_Mark
Rich_Limit	Rich_Rule    )	functions)check_ipset_name)REJECT_TYPES)errors)FirewallErrorc               @   s   e Zd ZdddZdd ZdS )r   Fc             C   s   || _ | j dkrd | _ || _| jdks0| jd kr8d | _n| jd k	rN| jj | _|| _| jdkrdd | _|| _| j d kr| jd kr| jd krttjdd S )N zno address, mac and ipset)addrmacupperipsetinvertr   r   INVALID_RULE)selfr   r   r   r    r!   /usr/lib/python3.6/rich.py__init__$   s    


zRich_Source.__init__c             C   sj   d| j rdnd }| jd k	r*|d| j  S | jd k	rB|d| j  S | jd k	rZ|d| j  S ttjdd S )Nz	source%s z NOTr   zaddress="%s"zmac="%s"z
ipset="%s"zno address, mac and ipset)r   r   r   r   r   r   r   )r    retr!   r!   r"   __str__5   s    


zRich_Source.__str__N)F)__name__
__module____qualname__r#   r%   r!   r!   r!   r"   r   #   s   
c               @   s   e Zd ZdddZdd ZdS )r   Fc             C   sV   || _ | j dkrd | _ || _| jdkr,d | _|| _| j d krR| jd krRttjdd S )Nr   zno address and ipset)r   r   r   r   r   r   )r    r   r   r   r!   r!   r"   r#   B   s    

zRich_Destination.__init__c             C   sR   d| j rdnd }| jd k	r*|d| j  S | jd k	rB|d| j  S ttjdd S )Nzdestination%s z NOTr   zaddress="%s"z
ipset="%s"zno address and ipset)r   r   r   r   r   r   )r    r$   r!   r!   r"   r%   N   s    

zRich_Destination.__str__N)F)r&   r'   r(   r#   r%   r!   r!   r!   r"   r   A   s   
c               @   s   e Zd Zdd Zdd ZdS )r   c             C   s
   || _ d S )N)name)r    r)   r!   r!   r"   r#   Y   s    zRich_Service.__init__c             C   s
   d| j  S )Nzservice name="%s")r)   )r    r!   r!   r"   r%   \   s    zRich_Service.__str__N)r&   r'   r(   r#   r%   r!   r!   r!   r"   r   X   s   c               @   s   e Zd Zdd Zdd ZdS )r   c             C   s   || _ || _d S )N)portprotocol)r    r*   r+   r!   r!   r"   r#   `   s    zRich_Port.__init__c             C   s   d| j | jf S )Nzport port="%s" protocol="%s")r*   r+   )r    r!   r!   r"   r%   d   s    zRich_Port.__str__N)r&   r'   r(   r#   r%   r!   r!   r!   r"   r   _   s   c               @   s   e Zd Zdd ZdS )r	   c             C   s   d| j | jf S )Nz#source-port port="%s" protocol="%s")r*   r+   )r    r!   r!   r"   r%   h   s    zRich_SourcePort.__str__N)r&   r'   r(   r%   r!   r!   r!   r"   r	   g   s   c               @   s   e Zd Zdd Zdd ZdS )r   c             C   s
   || _ d S )N)value)r    r,   r!   r!   r"   r#   m   s    zRich_Protocol.__init__c             C   s
   d| j  S )Nzprotocol value="%s")r,   )r    r!   r!   r"   r%   p   s    zRich_Protocol.__str__N)r&   r'   r(   r#   r%   r!   r!   r!   r"   r   l   s   c               @   s   e Zd Zdd Zdd ZdS )r   c             C   s   d S )Nr!   )r    r!   r!   r"   r#   t   s    zRich_Masquerade.__init__c             C   s   dS )N
masquerader!   )r    r!   r!   r"   r%   w   s    zRich_Masquerade.__str__N)r&   r'   r(   r#   r%   r!   r!   r!   r"   r   s   s   c               @   s   e Zd Zdd Zdd ZdS )r   c             C   s
   || _ d S )N)r)   )r    r)   r!   r!   r"   r#   {   s    zRich_IcmpBlock.__init__c             C   s
   d| j  S )Nzicmp-block name="%s")r)   )r    r!   r!   r"   r%   ~   s    zRich_IcmpBlock.__str__N)r&   r'   r(   r#   r%   r!   r!   r!   r"   r   z   s   c               @   s   e Zd Zdd Zdd ZdS )r   c             C   s
   || _ d S )N)r)   )r    r)   r!   r!   r"   r#      s    zRich_IcmpType.__init__c             C   s
   d| j  S )Nzicmp-type name="%s")r)   )r    r!   r!   r"   r%      s    zRich_IcmpType.__str__N)r&   r'   r(   r#   r%   r!   r!   r!   r"   r      s   c               @   s   e Zd Zdd Zdd ZdS )r
   c             C   s<   || _ || _|| _|| _| jd kr(d| _| jd kr8d| _d S )Nr   )r*   r+   to_port
to_address)r    r*   r+   r.   r/   r!   r!   r"   r#      s    

zRich_ForwardPort.__init__c             C   s<   d| j | j| jdkrd| j nd| jdkr4d| j ndf S )Nz(forward-port port="%s" protocol="%s"%s%sr   z to-port="%s"z to-addr="%s")r*   r+   r.   r/   )r    r!   r!   r"   r%      s    zRich_ForwardPort.__str__N)r&   r'   r(   r#   r%   r!   r!   r!   r"   r
      s   c               @   s   e Zd ZdddZdd ZdS )r   Nc             C   s   || _ || _|| _d S )N)prefixlevellimit)r    r0   r1   r2   r!   r!   r"   r#      s    zRich_Log.__init__c             C   s>   d| j rd| j  nd| jr$d| j nd| jr6d| j ndf S )Nz	log%s%s%sz prefix="%s"r   z level="%s"z %s)r0   r1   r2   )r    r!   r!   r"   r%      s    zRich_Log.__str__)NNN)r&   r'   r(   r#   r%   r!   r!   r!   r"   r      s   
c               @   s   e Zd ZdddZdd ZdS )r   Nc             C   s
   || _ d S )N)r2   )r    r2   r!   r!   r"   r#      s    zRich_Audit.__init__c             C   s   d| j rd| j  nd S )Nzaudit%sz %sr   )r2   )r    r!   r!   r"   r%      s    zRich_Audit.__str__)N)r&   r'   r(   r#   r%   r!   r!   r!   r"   r      s   
c               @   s   e Zd ZdddZdd ZdS )r   Nc             C   s
   || _ d S )N)r2   )r    r2   r!   r!   r"   r#      s    zRich_Accept.__init__c             C   s   d| j rd| j  nd S )Nzaccept%sz %sr   )r2   )r    r!   r!   r"   r%      s    zRich_Accept.__str__)N)r&   r'   r(   r#   r%   r!   r!   r!   r"   r      s   
c               @   s&   e Zd ZdddZdd Zdd ZdS )	r   Nc             C   s   || _ || _d S )N)typer2   )r    Z_typer2   r!   r!   r"   r#      s    zRich_Reject.__init__c             C   s,   d| j rd| j  nd| jr$d| j ndf S )Nz
reject%s%sz
 type="%s"r   z %s)r3   r2   )r    r!   r!   r"   r%      s    zRich_Reject.__str__c             C   sT   | j rP|sttjd|dkrP| j t| krPdjt| }ttjd| j |f d S )Nz9When using reject type you must specify also rule family.ipv4ipv6z, z%Wrong reject type %s.
Use one of: %s.)r4   r5   )r3   r   r   r   r   join)r    familyZvalid_typesr!   r!   r"   check   s    zRich_Reject.check)NN)r&   r'   r(   r#   r%   r8   r!   r!   r!   r"   r      s   
c               @   s   e Zd Zdd ZdS )r   c             C   s   d| j rd| j  nd S )Nzdrop%sz %sr   )r2   )r    r!   r!   r"   r%      s    zRich_Drop.__str__N)r&   r'   r(   r%   r!   r!   r!   r"   r      s   c               @   s&   e Zd ZdddZdd Zdd ZdS )	r   Nc             C   s   || _ || _d S )N)setr2   )r    Z_setr2   r!   r!   r"   r#      s    zRich_Mark.__init__c             C   s   d| j | jrd| j ndf S )Nzmark set=%s%sz %sr   )r9   r2   )r    r!   r!   r"   r%      s    zRich_Mark.__str__c             C   s   | j d k	r| j }nttjdd|krv|jd}t|dkrHttj|tj|d  shtj|d  rttj|ntj|sttj|d S )Nzno value set/   r      )r9   r   r   ZINVALID_MARKsplitlenr   ZcheckUINT32)r    xsplitsr!   r!   r"   r8      s    


zRich_Mark.check)N)r&   r'   r(   r#   r%   r8   r!   r!   r!   r"   r      s   
r<   <      )smhdc               @   s   e Zd ZdddZdd Zedd Zejdd Zed	d
 Zejdd
 Ze	dd Z
dd Ze	dd Zdd Zdd ZdS )r   Nc             C   s   || _ || _d S )N)r,   burst)r    r,   rG   r!   r!   r"   r#      s    zRich_Limit.__init__c             C   s   | j   | j  d S )N)value_parseburst_parse)r    r!   r!   r"   r8      s    zRich_Limit.checkc             C   s   | j S )N)_value)r    r!   r!   r"   r,      s    zRich_Limit.valuec             C   sf   |d krd | _ d S y| j|\}}W n tk
r<   |}Y nX | d| }t| dd |krb|| _ d S )Nr:   rJ   )rJ   _value_parser   getattr)r    r,   ratedurationvr!   r!   r"   r,      s    
c             C   s   | j S )N)_burst)r    r!   r!   r"   rG     s    zRich_Limit.burstc             C   s\   |d krd | _ d S y| j|}W n tk
r8   |}Y n
X t|}t| dd |krX|| _ d S )NrP   )rP   _burst_parser   strrL   )r    rG   br!   r!   r"   rG     s    
c             C   s   d }d| kr| j d}| s(t|dkr4ttj| |\}}yt|}W n   ttj| Y nX |dkrv|d d }|dk s|dkrttj| dt|  | dkrttjd| f |dkr|dkrttjd| f ||fS )Nr:   r;   secondminutehourdayr<   rC   rD   rE   rF   i'  r   z%s too fastz%s too slow)rT   rU   rV   rW   )rC   rD   rE   rF   )r=   r>   r   r   INVALID_LIMITintDURATION_TO_MULT)r,   r@   rM   rN   r!   r!   r"   rK     s&    
zRich_Limit._value_parsec             C   s   | j | jS )N)rK   rJ   )r    r!   r!   r"   rH   :  s    zRich_Limit.value_parsec          	   C   sR   | d krd S yt | }W n   ttj| Y nX |dk sB|dkrNttj| |S )Nr<   i )rY   r   r   rX   )rG   rS   r!   r!   r"   rQ   =  s    zRich_Limit._burst_parsec             C   s   | j | jS )N)rQ   rP   )r    r!   r!   r"   rI   K  s    zRich_Limit.burst_parsec             C   s,   d| j  d}| jd k	r(|d| j 7 }|S )Nzlimit value=""z burst=)rJ   rP   )r    rC   r!   r!   r"   r%   N  s    
zRich_Limit.__str__)N)r&   r'   r(   r#   r8   propertyr,   setterrG   staticmethodrK   rH   rQ   rI   r%   r!   r!   r!   r"   r      s   
c               @   s>   e Zd ZdZdZdddZdd Zd	d
 Zdd Zdd Z	dS )r   i   i  Nr   c             C   sV   |d k	rt || _nd | _|| _d | _d | _d | _d | _d | _d | _|rR| j	| d S )N)
rR   r7   prioritysourcedestinationelementlogauditaction_import_from_string)r    r7   rule_strr_   r!   r!   r"   r#   X  s    zRich_Rule.__init__c             C   s   g }x|t j|D ]n}d|krp|jd}t|dksF|d  sF|d  rVttjd| |j|d |d d q|jd|i qW |jddi |S )	z Lexical analysis =r;   r   r<   zinternal error in _lexer(): %s)	attr_name
attr_valuerb   EOL)r   Z	splitArgsr=   r>   r   r   r   append)r    rg   tokensrattrr!   r!   r"   _lexeri  s    
 
zRich_Rule._lexerc             C   s  |st tjdtj|}d| _d | _d | _d | _d | _	d | _
d | _d | _| j|}|rv|d jddkrvt tjdi }g }d}x`|| jddko|dgks|| jd}|| jd}|| jd}| r|dHkrt tjd|  n|dIkr|dkr| jrt tjd+n|dkr<| jr<t tjd,n|dJkrf| j	rft tjd-|| j	f nh|d"kr| j
rt tjd.nH|d#kr| jrt tjd/n(|dKkr| jrt tjd0|| jf nt tjd1| t|dkr|t|d2  nd3}	|	d3kr| r`|r`|d	kr2t tjd4n,|dkrJt tjd5nt tjd6||f n*d|krt tjd7||f n
|jd nL|	dkrD|d	kr|dLkrt tjd:| || _n||dkryt|| _W n& tk
r   t tjd;| Y nX n:|r6|dkrd<}
nd=||f }
t tj|
n
|j| n|	dkr|dMkrb|||< nV|dNkrvd>|d< nBt|jd
|jd|jd|jdd?| _|j  |j  |d2 }n|	dkr,|dOkr|||< nN|dPkrd>|d< n:t|jd
|jd|jdd?| _|j  |j  |d2 }n|	dkrd|dkrTt|| _	|j  nt tjd@nv|	dkr|dkrt|| _	|j  nt tjdAn>|	dkr|dQkr|||< n0t|jd|jd| _	|j  |j  |d2 }n|	dkr&|dkrt|| _	|j  nt tjdBn|	dkr^|dkrNt|| _	|j  nt tjdCn||	dkrt | _	|j  |j  |d2 }nN|	d kr|dRkr|||< n@t|jd|jd|jd|jd| _	|j  |j  |d2 }n|	d!kr@|dSkr|||< n0t|jd|jd| _	|j  |j  |d2 }n|	d"kr|dTkr^|||< nN|d(krt|jd( n8t |jd|jd|jd(| _
|j  |j  |d2 }n*|	d#kr|d(kr|jd( n(t!|jd(| _|j  |j  |d2 }n|	d$krH|d(kr|jd( n(t"|jd(| _|j  |j  |d2 }n|	d%kr|d(krh|jd( n(t#|jd(| _|j  |j  |d2 }nF|	d&kr|dkr|||< nF|d(kr|jd( n0t$|jd|jd(| _|j  |j  |d2 }n|	d'kr`|dkr|||< nF|d(kr.|jd( n0t%|jd|jd(| _|j  |j  |d2 }nz|	d(kr|dUkr||dD| < nVdE|krt tjdFt&|dE |jdG|d(< |jdEd  |jdGd  |j  |d2 }|d2 }qW | j'  d S )VNz
empty ruler   rb   rk   ruleri   rj   r_   r7   addressr   r   r   r,   r*   r+   to-portto-addrr)   r0   r1   r3   r9   rG   zbad attribute '%s'r`   ra   service
icmp-block	icmp-typer-   forward-portsource-portrc   rd   acceptdroprejectmarkr2   notNOTzmore than one 'source' elementz#more than one 'destination' elementzFmore than one element. There cannot be both '%s' and '%s' in one rule.zmore than one 'log' elementzmore than one 'audit' elementzOmore than one 'action' element. There cannot be both '%s' and '%s' in one rule.zunknown element %sr<   r   z0'family' outside of rule. Use 'rule family=...'.z4'priority' outside of rule. Use 'rule priority=...'.z:'%s' outside of any element. Use 'rule <element> %s= ...'.z,'%s' outside of rule. Use 'rule ... %s ...'.r4   r5   zH'family' attribute cannot have '%s' value. Use 'ipv4' or 'ipv6' instead.z(invalid 'priority' attribute value '%s'.zdwrong 'protocol' usage. Use either 'rule protocol value=...' or  'rule [forward-]port protocol=...'.zDattribute '%s' outside of any element. Use 'rule <element> %s= ...'.TFzinvalid 'protocol' elementzinvalid 'service' elementzinvalid 'icmp-block' elementzinvalid 'icmp-type' elementzlimit.zlimit.valuezinvalid 'limit' elementzlimit.burst)r_   r7   rr   r   r   r   r,   r*   r+   rs   rt   r)   r0   r1   r3   r9   rG   )rq   r`   ra   r+   ru   r*   rv   rw   r-   rx   ry   rc   rd   rz   r{   r|   r}   r2   r~   r   rk   )r+   ru   r*   rv   rw   r-   rx   ry   )rz   r{   r|   r}   )r4   r5   )rr   r   r   r   )r~   r   )rr   r   r   )r~   r   )r*   r+   )r*   r+   rs   rt   )r*   r+   )r0   r1   )r,   rG   )(r   r   r   r   ZstripNonPrintableCharactersr_   r7   r`   ra   rb   rc   rd   re   rp   getr>   rl   rY   
ValueErrorINVALID_PRIORITYr   popclearr   r   r   r   r   r   r   r
   r	   r   r   r   r   r   r   r   r8   )r    rg   rm   ZattrsZin_elementsindexrb   ri   rj   Z
in_elementZerr_msgr!   r!   r"   rf   z  s   

"       "













*




"






















(






 




















zRich_Rule._import_from_stringc          	   C   s`  | j d k	r"| j d kr"ttj| j | j d krn| jd k	rB| jjd k	sL| jd k	rVttjt| j	t
krnttj| j| jk s| j| jkrttjd| j| jf | j	d ko| jd ks| jd k	o| jdkr
| jd krttjd| jd ko| jd ko| jdkr
ttjdt| j	tt
tgkrP| jd krP| jd krP| jd krPttjd| jd k	rj| jjd k	r| j d krttj| jjd k	rttjd| jjd k	rttjd	tj| j | jjsjttjt| jjn| jjd k	r,| jjd k	rttjd
tj| jjsjttjt| jjn>| jjd k	r^t| jjsjttjt| jjnttjd| jd k	r| jjd k	r| j d krttj| jjd k	rttjd	tj| j | jjsttjt| jjn>| jjd k	rt| jjsttjt| jjnttjdt| j	t krd| j	j!d ksLt"| j	j!dk r`ttj#t| j	j!nt| j	t$krtj%| j	j&sttj'| j	j&| j	j(d!kr`ttj)| j	j(nt| j	t*krtj+| j	j,s`ttj)| j	j,nvt| j	tkr<| jd k	rttjd| jd k	r`| jjd k	r`ttjdn$t| j	tkr| j	j!d kslt"| j	j!dk rttj-t| j	j!| jr`ttjdnt| j	t.kr| j	j!d kst"| j	j!dk r`ttj-t| j	j!nt| j	t
krtj%| j	j&sttj'| j	j&| j	j(d"kr.ttj)| j	j(| j	j/dkrZ| j	j0dkrZttj'| j	j/| j	j/dkrtj%| j	j/ rttj'| j	j/| j	j0dkrtj1| j | j	j0 rttj| j	j0| j d krttj| jd k	r`ttjdnrt| j	t2kr>tj%| j	j&sttj'| j	j&| j	j(d#kr`ttj)| j	j(n"| j	d k	r`ttjdt| j	 | jd k	r| jj3r| jj3d$krttj4| jj3| jj5d k	r| jj5j6  | jd k	rt| jt7t8t9gkrttj:t| j| jj5d k	r| jj5j6  | jd k	r\t| jt8kr(| jj6| j  nt| jt;krB| jj6  | jj5d k	r\| jj5j6  d S )%Nr4   r5   z/'priority' attribute must be between %d and %d.r   zno element, no actionz%no element, no source, no destinationzno action, no log, no auditzaddress and maczaddress and ipsetzmac and ipsetzinvalid sourcezinvalid destinationr<   tcpudpsctpdccpzmasquerade and actionzmasquerade and mac sourcezicmp-block and actionr   zforward-port and actionzUnknown element %semergalertcriterrorwarningnoticeinfodebug)r4   r5   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   r   r   r   r   )<r7   r   r   ZINVALID_FAMILYr`   r   ra   ZMISSING_FAMILYr3   rb   r
   r_   priority_minpriority_maxr   rc   re   r   r   r   rd   r   r   r   Zcheck_addressZINVALID_ADDRrR   Z	check_macZINVALID_MACr   ZINVALID_IPSETZINVALID_DESTINATIONr   r)   r>   ZINVALID_SERVICEr   Z
check_portr*   ZINVALID_PORTr+   ZINVALID_PROTOCOLr   ZcheckProtocolr,   ZINVALID_ICMPTYPEr   r.   r/   Zcheck_single_addressr	   r1   ZINVALID_LOG_LEVELr2   r8   r   r   r   ZINVALID_AUDIT_TYPEr   )r    r!   r!   r"   r8   h  s    




 
 



   


zRich_Rule.checkc             C   s   d}| j r|d| j  7 }| jr,|d| j 7 }| jr@|d| j 7 }| jrT|d| j 7 }| jrh|d| j 7 }| jr||d| j 7 }| jr|d| j 7 }| jr|d| j 7 }tj	rtj
|S |S )Nrq   z priority="%d"z family="%s"z %s)r_   r7   r`   ra   rb   rc   rd   re   r   ZPY2Zu2b)r    r$   r!   r!   r"   r%     s$    zRich_Rule.__str__i )NNr   )
r&   r'   r(   r   r   r#   rp   rf   r8   r%   r!   r!   r!   r"   r   T  s   
 o -Ni  i  iQ )__all__Zfirewallr   Zfirewall.core.ipsetr   Zfirewall.core.baser   r   Zfirewall.errorsr   objectr   r   r   r   r	   r   r   r   r   r
   r   r   r   r   r   r   rZ   r   r   r!   r!   r!   r"   <module>   s@   d