#!/usr/bin/env bash DESC="TP firewall" SYSTEMS="bigboss tiny web societe lambda nomade" repairQ0() { vdn-ssh -t root@societe " cat << EOF > vide.sh #!/bin/sh iptables -F INPUT iptables -F OUTPUT iptables -F FORWARD iptables -F POSTROUTING -t nat iptables -F PREROUTING -t nat EOF chmod 755 vide.sh ./vide.sh " } repairQ1() { vdn-ssh -t root@societe " cat << EOF > local.sh #!/bin/sh iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE EOF chmod 755 local.sh ./local.sh " } repairQ2() { cat << EOF > /dev/null # Solution alternative qui valide les tests # Semble nécessiter plus de mémoir, à vérifier #!/bin/sh iptables -A INPUT -p tcp --dport 22 -j ACCEPT # ssh iptables -A INPUT -p tcp --dport 53 -j ACCEPT # DNS iptables -A INPUT -p tcp --dport 25 -j ACCEPT # Mail iptables -A INPUT -p tcp --dport 993 -j ACCEPT # Imap sur ssl iptables -A INPUT -i eth0 -m state --state NEW -j REJECT EOF vdn-ssh -t root@societe " cat << EOF > fermeDehors.sh #!/bin/sh iptables -A INPUT -p tcp --dport 22 -j ACCEPT # ssh iptables -A INPUT -p tcp --dport 53 -j ACCEPT # DNS iptables -A INPUT -p tcp --dport 25 -j ACCEPT # Mail iptables -A INPUT -p tcp --dport 993 -j ACCEPT # Imap sur ssl iptables -A INPUT -p tcp -m tcp --tcp-flags ACK ACK -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT iptables -A INPUT -m state --state RELATED -j ACCEPT iptables -A INPUT -i eth0 -j REJECT EOF chmod 755 fermeDehors.sh ./fermeDehors.sh " } repairQ3() { vdn-ssh -t root@societe " cat << EOF > forward.sh iptables -t nat -A PREROUTING -p tcp -d $IP_SOCIETE_PUBLIC --dport 80 -j DNAT --to 192.168.1.2 EOF chmod 755 forward.sh ./forward.sh " } repairQ4() { vdn-ssh -t root@societe " mv local.sh local-1.sh cat << EOF > local.sh #!/bin/sh iptables -s 192.168.30.0/24 -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables -s 192.168.1.2 -p tcp --dport 80 -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables -s 192.168.1.2 -p tcp --dport 53 -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables -s 192.168.1.2 -p tcp --dport 25 -t nat -A POSTROUTING -o eth0 -j MASQUERADE EOF chmod 755 local.sh ./vide.sh ./fermeDehors.sh ./forward.sh ./local.sh " } # Partie 2 : IPv6 # Fonction utilitaire : Récupère l'adresse IPv6 autoconfigurée # $1 : host # $2 : interface # Exemple : getIPv6 bigboss eth0 getIPv6() { echo $(vdn-ssh root@$1 'ip -6 addr show dev '$2' | grep inet6 | tr -s " " | cut -d " " -f 3 | cut -d "/" -f 1') | sed -re 's/[^[:print:]]//g' } repairQ5() { # réinitialise les interfaces echo "Repair Q5. Config IPv6... please wait..." vdn-ssh root@bigboss "systemctl restart networking" vdn-ssh root@web "systemctl restart networking" vdn-ssh root@societe " echo 1 >/proc/sys/net/ipv6/conf/all/forwarding systemctl restart networking " # Ajoute les adresses IPv6 "locales uniques" en utilisant le suffixe # de l'adresse "lien local" # # * la DMZ (web) aura le préfixe fc01 # * le réseau interne (bigboss) aura le préfixe fc00 # # La fonction routage IPv6 est activé sur société # et les routes par défaut sont fixées sur web et bigboss # # un ping6 de bigboss vers web valide la config. ipSocieteWeb=$(getIPv6 societe eth1) ipSocieteWeb=$(echo $ipSocieteWeb | sed -re 's/fe80:/fc01:/') vdn-ssh root@societe "ip -6 addr add $ipSocieteWeb/64 dev eth1" ipSocieteBigboss=$(getIPv6 societe eth2) ipSocieteBigboss=$(echo $ipSocieteBigboss | sed -re 's/fe80:/fc00:/') vdn-ssh root@societe "ip -6 addr add $ipSocieteBigboss/64 dev eth2" ipWeb=$(getIPv6 web eth0) ipWeb=$(echo $ipWeb | sed -re 's/fe80:/fc01:/') vdn-ssh root@web "ip -6 addr add $ipWeb/64 dev eth0" ipBigboss=$(getIPv6 bigboss eth0) ipBigboss=$(echo $ipBigboss | sed -re 's/fe80:/fc00:/') vdn-ssh root@bigboss "ip -6 addr add $ipBigboss/64 dev eth0" vdn-ssh root@web " ip -6 route del ::/0 &> /dev/null ip -6 route add ::/0 via $ipSocieteWeb" vdn-ssh root@bigboss " ip -6 route del ::/0 &> /dev/null ip -6 route add ::/0 via $ipSocieteBigboss" #vdn-ssh root@bigboss "ping6 -c 3 -I eth0 $ipWeb" } run() { setErrorHandler echoStart #requireSshGuests $SYSTEMS IP_SOCIETE_PUBLIC=$($VDN_PATH/bin/vdn-infos societe PUBLIC_IP) repairQ0 repairQ1 repairQ2 repairQ3 repairQ4 repairQ5 unsetErrorHandler echoDone sleep 1 }