Projet

Général

Profil

Era24 » Historique » Version 20

Version 19 (Gwenael Remond, 28/01/2013 17:13) → Version 20/24 (Gwenael Remond, 28/01/2013 17:24)

h1. Era24

h2. Décoreller le backend du frontend

* commencer par faire le bilan des types de règles générés par Era

* rappel : les types de directives :

<pre>
if directive.action in (1, 2): # ACTION_DENY, ACTION_ALLOW
return BasicDirectiveProcessor(directive, default_policy=default_policy)
if directive.action == 4: # ACTION_REDIRECT
return RedirectDirectiveProcessor(directive)
if directive.action == 8: # ACTION_DNAT
return DNATDirectiveProcessor(directive, is_container)
if directive.action == 16: # ACTION_MASK
return SNATDirectiveProcessor(directive)
if directive.action == 32: # ACTION_FORWARD
return ForwardDirectiveProcessor(directive)
</pre>

h2. bilan des règles iptables générées par Era

h3. règles sandards

* <code>BasicDirectiveProcessor</code>

* ACCEPT

<pre>
/sbin/iptables -t filter -A ext-bas -m state --state NEW -p tcp --dport 8500 --tcp-flags SYN,RST,ACK SYN -s 0/0 -d 0.0.0.0 -j ACCEPT
</pre>

* DROP

<pre>
/sbin/iptables -t filter -A bas-ext -m state --state NEW -p tcp --dport 8500 --tcp-flags SYN,RST,ACK SYN -s 0.0.0.0 -d 0/0 -j DROP
</pre>

* directive non basiques :

* SNAT

<pre>
/sbin/iptables -t nat -A POSTROUTING -p tcp --dport 8500 --tcp-flags SYN,RST,ACK SYN -s 0/0 -d 0.0.0.0 -j ACCEPT
/sbin/iptables -t filter -A ext-bas -p tcp --dport 8500 --tcp-flags SYN,RST,ACK SYN -s 0/0 -d 0.0.0.0 -j ACCEPT
</pre>

* DNAT

<pre>
/sbin/iptables -t nat -A PREROUTING -p tcp --dport 8500 --tcp-flags SYN,RST,ACK SYN -s 0/0 -d 0.0.0.0 -j ACCEPT
</pre>

* REDIRECT

<pre>
/sbin/iptables -t filter -A ext-bas -p tcp --dport 56 -j ACCEPT
/sbin/iptables -t nat -A PREROUTING -p tcp --dport 8500 --tcp-flags SYN,RST,ACK SYN -s 0/0 -d 0.0.0.0 -j REDIRECT --to-ports 56
</pre>

* FORWARD

<pre>
/sbin/iptables -t filter -I FORWARD -p tcp --dport 8500 --tcp-flags SYN,RST,ACK SYN -s 0/0 -d 0.0.0.0 -j ACCEPT
/sbin/iptables -t filter -I FORWARD -p tcp --dport 8500 --tcp-flags SYN,RST,ACK SYN -s 0/0 -d 0.0.0.0 -m state --state RELATED,ESTABLISHED -j ACCEPT
</pre>

h2. règles spécifiques

* directive avec log
* directive avec time

* possibilités d'inversions :

* inversion d'une source (pour une source unique)
* inversion d'une destination (pour une destination unique)
* inversion d'un service (pas d'un groupe de services)

types de piles

* pile principale <code>rules</code>
* pile secondaire (à la fin), pour les règles implicites <code>implicit_rules</code>

création d'une règle dans <code>processor.py</code> :

<pre>
def create_rule(self, target, chain_name, table, match_params, service_param, param_list):
# On crée la règle avec la bonne chaine
rule = TargettedRule(target, chain_name, table)
# On ajoute tous les paramètres à la règle
rule.add_parameter(service_param)
for param in param_list:
rule.add_parameter(param)
# on process les paramètre du module time
self.process_time(rule)
return rule
</pre>

<code>iptrules.ParameterFactory</code> permet de générer des bouts de règles en une seule fois

* règle de log

exemple DROP :

<pre>
/sbin/iptables -t filter -A dmz-ext -m state --state NEW -p tcp --dport 8500 --tcp-flags SYN,RST,ACK SYN -i eth3 -o %%interface_gw -s 0/0 -d 0/0 -j LOG --log-prefix "iptables: era dmz-ext"
/sbin/iptables -t filter -A dmz-ext -m state --state NEW -p tcp --dport 8500 --tcp-flags SYN,RST,ACK SYN -i eth3 -o %%interface_gw -s 0/0 -d 0/0 -j DROP
</pre>

exemple ACCEPT avec une règle de log qui a une plage horaire

<pre>
/sbin/iptables -t filter -A dmz-ext -m state --state NEW -p tcp --dport 8500 --tcp-flags SYN,RST,ACK SYN -i eth3 -o %%interface_gw -s 0/0 -d 0/0 -m time --timestart 10:00 --timestop 12:00 --weekdays Mon,Tue -j LOG --log-prefix "iptables: era dmz-ext"
/sbin/iptables -t filter -A dmz-ext -m state --state NEW -p tcp --dport 8500 --tcp-flags SYN,RST,ACK SYN -i eth3 -o %%interface_gw -s 0/0 -d 0/0 -m time --timestart 10:00 --timestop 12:00 --weekdays Mon,Tue -j DROP
/sbin/iptables -t filter -A dmz-ext -i eth3 -o %%interface_gw -s 19.168.234.15/255.255.255.255 -d 0/0 -j ACCEPT
</pre>

exemple SNAT :

<pre>
/sbin/iptables -t nat -A POSTROUTING -o %%interface_gw -s 19.168.234.15/255.255.255.255 -d 0/0 -j SNAT --to-source %%adresse_ip_eth0
/sbin/iptables -t filter -A dmz-ext -i eth3 -o %%interface_gw -s 19.168.234.15/255.255.255.255 -d 0/0 -j LOG --log-prefix "iptables: era dmz-ext"
/sbin/iptables -t filter -A dmz-ext -i eth3 -o %%interface_gw -s 19.168.234.15/255.255.255.255 -d 0/0 -j ACCEPT
</pre>

* marquage (MARK)

TODO

* ipsec

TODO

*
règle spécifique container

<code>build_container_rule()</code>

TODO

h2. bilan des règles ipsets générées par Era

TODO

h2. bilan des règles d'authentification (nufw) générée par Era

TODO