#!/bin/sh

#------------------------------------------------------------------------------------------------------
## ouvre.firewall pour EOLE
#------------------------------------------------------------------------------------------------------


### politique par defaut

## on vide les regles existantes
/sbin/iptables -t filter -F
/sbin/iptables -t mangle -F
/sbin/iptables -t nat -F

## on vide les regles utilisateurs
/sbin/iptables -t filter -X
/sbin/iptables -t mangle -X
/sbin/iptables -t nat -X

## activer l'anti-spoofing
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
## mise en place de la politique par defaut
/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -P FORWARD ACCEPT

#tcpwrapper
echo "ALL: ALL" > /etc/hosts.allow

# NAT tout ce qui n’est pas sur le même réseau
iptables -t nat -A POSTROUTING ! -s %%adresse_network_eth0/%%adresse_netmask_eth0 -o %%nom_zone_eth0 -j MASQUERADE
#------------------------------------------------------------------------------------------------------

%if %%mode_conteneur_actif == 'oui'
    %set interfaces = dict()
    %for %%interface in %%creole_client.get_interfaces()
        %set %%interfaces.setdefault(%%interface['container_group'], {})[%%interface['linkto']] = %%interface['name']
    %end for
    %for access in %%creole_client.get_service_accesss()
        %if 'activate' in %%access and 'name' in %%access and %%access['node_name'] == 'port'
            %set %%container_name = %%access['container_group']
            %set %%container_ip = %%getVar('container_ip_' + %%container_name)
            %set %%port = %%access['name']
            %set %%source = '0/0'
            %if %%access['protocol'] == 'tcp'
                %set %%protocol = '-p tcp --syn'
            %else
                %set %%protocol = '-p udp -m udp'
            %end if
            %for num_int in %%range(0, %%int(%%nombre_interfaces))
                %set %%eth_name = 'eth' + %%str(num_int)
                %set %%interface = %%getVar('nom_zone_' + %%eth_name)
                %set %%interface_in_container = %%interfaces.get(%%container_name, {}).get(%%eth_name, None)
                %if %%current_container.ip == '127.0.0.1' and %%current_container.ip != %%container_ip and %%interface_in_container == None
/sbin/iptables -A FORWARD -i %%interface -s %%source %%protocol --dport %%port -d %%container_ip -j ACCEPT
/sbin/iptables -t nat -A PREROUTING -i %%interface -s %%source %%protocol --dport %%port -j DNAT --to-destination %%container_ip:%%port
                %end if
            %end for
        %end if
    %end for
%end if

# lancement de ouvre.firewall sur chaque conteneur
CreoleRun /usr/share/eole/ouvre.firewall all

echo "Le serveur n'est plus protégé. Pour relancer le pare-feu, exécuter \"CreoleService bastion restart\""
