Era24 » Historique » Version 23
Version 22 (Gwenael Remond, 29/01/2013 11:13) → Version 23/24 (Gwenael Remond, 29/01/2013 11:14)
h1. Era24
h2. Décoreller le backend du frontend
* types de règles générés par Era
* règles générées par des directives -> OK
* règles générées par le compilateur lui-même (politique par défaut, netbios, icmp...) -> TODO
* 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>
h3. 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
h2. Décoreller le backend du frontend
* types de règles générés par Era
* règles générées par des directives -> OK
* règles générées par le compilateur lui-même (politique par défaut, netbios, icmp...) -> TODO
* 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>
h3. 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