#!/sbin/nft -f

# Toujours effectuer un flush, pour supprimer les règles du profil précédent
flush ruleset

include "/etc/scibian-firewall/utils/variables"

table inet edf-internal {
    chain input {
        # Le policy drop va refuser tous les paquets qui ne sont pas explicitement autorisés
        # dans les règles ci dessous
        type filter hook input priority 0; policy drop;

        # On accepte les paquets des connexions initiées par le poste sur l'interface wifi
        # Exemple : on accepte la réponse d'un serveur HTTP qu'on a requêté
        iifname $wifi_interfaces ct state established,related accept
        iifname $ethernet_interfaces ct state established,related accept

        # On accepte les connexions ssh entrantes sur les interfaces wifi et ethernet
        iifname $wifi_interfaces tcp dport ssh accept
        iifname $ethernet_interfaces tcp dport ssh accept

        # On accepte les connexions ping entrantes sur les interfaces wifi et ethernet
        iifname $wifi_interfaces ip protocol icmp accept
        iifname $ethernet_interfaces ip protocol icmp accept

        # On accepte les paquets marqués comme valides par le profil vpn en amont
        # En étant connecté en direct sur le réseau EDF, on peut utiliser le vpnadmin
        meta mark $packet_accepted_by_vpn accept

        # On accepte les paquets marqués comme valides par le profil vdi en amont
        meta mark $packet_accepted_by_vdi accept 

        # On accepte les paquets entrants sur localhost
        iifname lo accept
    }

    chain output {
        # Le policy drop va refuser tous les paquets qui ne sont pas explicitement autorisés
        # dans les règles ci dessous
        type filter hook output priority 0; policy drop;

        # On accepte les paquets sortants sur l'interface wifi
        oifname $wifi_interfaces accept
        oifname $ethernet_interfaces accept

        # On accepte les paquets sortants sur localhost
        oifname lo accept

        # On accepte les paquets marqués comme valides par le profil vpn en amont
        # En étant connecté en direct sur le réseau EDF, on peut utiliser le vpnadmin
        meta mark $packet_accepted_by_vpn accept

        # On accepte les paquets marqués comme valides par le profil vdi en amont
        meta mark $packet_accepted_by_vdi accept
    }

    chain forward {
        # Le poste n'est pas un routeur, on drop tous les paquets qui transitent via le poste
        # et qui ne lui sont pas destinés
        type filter hook forward priority 0; policy drop;
    }
}
