Anomalie #2113
Gestion de eole-firewall pour le mode bridge
Description
Si les interfaces supplémentaires sont en mode bridge, eole-firewall bloque la communication.
La communication inter-conteneur ou entre l'extérieur et les conteneurs devrait être ouverte.
Autorise le FORWARD sur l'interface (communication inter-conteneur et surement (mais pas tester) entre l'extérieur et les conteneurs) :
--- /root/end_static_rules.sh 2011-09-26 22:01:41.859838229 +0200 +++ /usr/share/eole/creole/distrib/end_static_rules.sh 2011-09-26 22:46:02.275938785 +0200 @@ -1,10 +1,23 @@ +%set global %%method_eth0='macvlan' +%set global %%method_eth1='macvlan' +%set global %%method_eth2='macvlan' +%set global %%method_eth3='macvlan' +%set global %%method_eth4='macvlan' +%include "/etc/eole/containers_bridge.conf" + %if %%adresse_ip_br0 != "127.0.0.1" -/sbin/iptables -t nat -A POSTROUTING -o eth0 -s %%adresse_network_br0/%%adresse_netmask_br0 -d 0.0.0.0/0.0.0.0 -j SNAT --to-source %%adresse_ip_eth0 + + %if %%method_eth0 == 'bridge' +%set %%interface_eth0='breth0' + %else +%set %%interface_eth0='eth0' + %end if +/sbin/iptables -t nat -A POSTROUTING -o %%interface_eth0 -s %%adresse_network_br0/%%adresse_netmask_br0 -d 0.0.0.0/0.0.0.0 -j SNAT --to-source %%adresse_ip_eth0 /sbin/iptables -A INPUT -s %%adresse_network_br0/%%adresse_netmask_br0 -d %%adresse_ip_br0 -i br0 -p tcp -m tcp --dport 514 --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT /sbin/iptables -A INPUT -i br0 -m state --state RELATED,ESTABLISHED -j ACCEPT /sbin/iptables -A FORWARD -i br0 -m state --state RELATED,ESTABLISHED -j ACCEPT -/sbin/iptables -A FORWARD -i eth0 -o br0 -m state --state RELATED,ESTABLISHED -j ACCEPT +/sbin/iptables -A FORWARD -i %%interface_eth0 -o br0 -m state --state RELATED,ESTABLISHED -j ACCEPT /sbin/iptables -A cont-cont -m limit --limit 15/min -j LOG --log-prefix="DROP container->container: " /sbin/iptables -A cont-cont -j DROP @@ -20,41 +33,64 @@ /sbin/iptables -A wide-wide -m state --state ESTABLISHED,RELATED -j ACCEPT /sbin/iptables -A wide-wide -j DROP -/sbin/iptables -A FORWARD -i eth0 -o eth0 -j wide-wide +/sbin/iptables -A FORWARD -i %%interface_eth0 -o %%interface_eth0 -j wide-wide %end if %if %%nombre_interfaces >= "2" /sbin/iptables -A eth1-root -m state --state ESTABLISHED,RELATED -j ACCEPT /sbin/iptables -A eth1-root -j DROP + %if %%method_eth1 == 'bridge' +/sbin/iptables -A FORWARD -i breth1 -j ACCEPT +/sbin/iptables -A INPUT -i breth1 -j eth1-root + %else /sbin/iptables -A INPUT -i eth1 -j eth1-root + %end if /sbin/iptables -A eth0-eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT /sbin/iptables -A eth0-eth1 -j DROP -/sbin/iptables -A FORWARD -i eth0 -o eth1 -j eth0-eth1 +/sbin/iptables -A FORWARD -i %%interface_eth0 -o eth1 -j eth0-eth1 /sbin/iptables -A eth1-eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT /sbin/iptables -A eth1-eth0 -j DROP -/sbin/iptables -A FORWARD -i eth1 -o eth0 -j eth1-eth0 +/sbin/iptables -A FORWARD -i eth1 -o %%interface_eth0 -j eth1-eth0 %end if %if %%nombre_interfaces >= "3" /sbin/iptables -A eth2-root -m state --state ESTABLISHED,RELATED -j ACCEPT /sbin/iptables -A eth2-root -j DROP + %if %%method_eth2 == 'bridge' +/sbin/iptables -A FORWARD -i breth2 -j ACCEPT +/sbin/iptables -A INPUT -i breth2 -j eth2-root + %else /sbin/iptables -A INPUT -i eth2 -j eth2-root + %end if %end if %if %%nombre_interfaces >= "4" /sbin/iptables -A eth3-root -m state --state ESTABLISHED,RELATED -j ACCEPT /sbin/iptables -A eth3-root -j DROP + %if %%method_eth3 == 'bridge' +/sbin/iptables -A FORWARD -i breth3 -j ACCEPT +/sbin/iptables -A INPUT -i breth3 -j eth3-root + %else /sbin/iptables -A INPUT -i eth3 -j eth3-root + %end if %end if %if %%nombre_interfaces >= "5" /sbin/iptables -A eth4-root -m state --state ESTABLISHED,RELATED -j ACCEPT /sbin/iptables -A eth4-root -j DROP + %if %%method_eth4 == 'bridge' +/sbin/iptables -A FORWARD -i breth4 -j ACCEPT +/sbin/iptables -A INPUT -i breth4 -j eth4-root + %else /sbin/iptables -A INPUT -i eth4 -j eth4-root + %end if %end if /sbin/iptables -A wide-root -m state --state ESTABLISHED,RELATED -j ACCEPT #desactive les logs wide->root #/sbin/iptables -A DROP_W2R -m limit --limit 15/min -j LOG --log-prefix="DROP wide->root: " /sbin/iptables -A wide-root -j DROP -/sbin/iptables -A INPUT -i eth0 -j wide-root + %if %%method_eth0 == 'bridge' +/sbin/iptables -A FORWARD -i breth0 -j ACCEPT + %end if +/sbin/iptables -A INPUT -i %%interface_eth0 -j wide-root
Dans eole-firewall, change automatique les adresses ethx en brethx si nécessaire (pas complètement testé) :
fwobjects.py
--- fwobjects.py 2011-09-26 22:52:31.716625257 +0200
+++ /usr/share/eole/bastion/fwobjects.py 2011-09-26 23:00:24.140377644 +0200
@@ -19,6 +19,12 @@
state_policy='-m policy'
state_ipsec_target='{0} --pol ipsec --proto esp --dir'.format(state_policy)
+bridge=open('/etc/eole/containers_bridge.conf').readlines()
+interfaces_brige=[]
+for i in range(0, 5):
+ if "#set global $method_eth%s='bridge'\n" % i in bridge:
+ interfaces_brige.append('eth%s'%i)
+
def join(*args):
return " ".join(list(args))
@@ -64,9 +70,15 @@
def is_era(self):
return is_installed('era')
+ def calc_interface(self, interface):
+ if interface in interfaces_brige:
+ return 'br' + interface
+ return interface
+
def _build_wide_src_allow(self):
+ interface = self.calc_interface(self.interface1)
if self.is_era():
- return "# rule from %s to %s port1 %s int %s desactivated with era" % (self.ip1, self.ip2, self.port1, self.interface1)
+ return "# rule from %s to %s port1 %s int %s desactivated with era" % (self.ip1, self.ip2, self.port1, interface)
if self.protocol == 'tcp':
port_target = tcp_port_target
elif self.protocol == 'udp':
@@ -74,11 +86,11 @@
else:
raise Exception("Protocol %s not supported in _build_wide_src_allow"%self.protocol)
- ret = join(ipt, forward_target, '-i', self.interface1, '-s',
+ ret = join(ipt, forward_target, '-i', interface, '-s',
str(self.ip2), port_target, str(self.port1),
'-d', str(self.ip1), accept_target)
ret += '\n'
- ret += join(ipt, prerouting_target, '-i', self.interface1, '-s',
+ ret += join(ipt, prerouting_target, '-i', interface, '-s',
str(self.ip2), port_target, str(self.port2),
dnat_target, '{0}:{1}'.format(str(self.ip1), str(self.port2)))
return ret
@@ -86,6 +98,7 @@
def _build_wide_dst_allow(self):
#if self.is_era():
# return "# rule from %s to %s port %s int %s desactivated with era" % (self.ip1, self.ip2, self.port, self.interface)
+ interface = self.calc_interface(self.interface1)
if self.protocol == 'tcp':
build_target = join(tcp_port_target, str(self.port1))
elif self.protocol == 'udp':
@@ -97,7 +110,7 @@
else:
raise Exception("Protocol %s not supported in _build_wide_dst_allow"%self.protocol)
- return join(ipt, forward_target, '-i', 'br0', '-o', self.interface1,
+ return join(ipt, forward_target, '-i', 'br0', '-o', interface,
'-s', str(self.ip1), build_target,
'-d', str(self.ip2), accept_target)
Demandes liées
Révisions associées
end_static_rules.sh : application du patch pour les bridges (fixes #2113)
fwobjects.py : application du patch pour les bridges (fixes #2113)
Historique
#1 Mis à jour par Joël Cuissinat il y a plus de 14 ans
- Version cible mis à Mises à jour 2.3 - 03 RC
#2 Mis à jour par Joël Cuissinat il y a plus de 14 ans
- Assigné à mis à Joël Cuissinat
- Version cible changé de Mises à jour 2.3 - 03 RC à Mises à jour 2.3 - 02 Stable
- Temps estimé mis à 0.50 h
- Distribution mis à EOLE 2.3
#3 Mis à jour par Joël Cuissinat il y a plus de 14 ans
- Statut changé de Nouveau à Résolu
- % réalisé changé de 0 à 100
Appliqué par commit f4f190a0f57e7b931cb4c70572be0494fe87d9ca.
#4 Mis à jour par Joël Cuissinat il y a plus de 14 ans
Appliqué par commit 04bb4d864000f03c986dc78270c4c4944e716594.
#5 Mis à jour par Joël Cuissinat il y a plus de 14 ans
- Statut changé de Résolu à Fermé
=> Fonctionnement à valider sur Eclair