################################################################################ # Configuration ################################################################################ myPrivateIp="192.168.1.x 192.168.1.x" myPublicIp4="94.130.8.x" myPublicIp6="2a01:4f8:10b:c4x::/64" clusterPrivateNetwork="192.168.1.0/24" clusterV6Network="2a01:4f8:10b:c41::/64 2a01:4f8:10b:c42::/64" # Si vous décommentez la ligne qui suit, le firewall considérera que fip # pointe sur cette machine avec l'adresse déclarée. # fip="88.99.233.240" declare -A dispatching=( ["dns"]='( "53" "tcp udp" "192.168.1.53" "2a01:4f8:10b:c42:5054:ff:fe08:3282")' ["http"]='( "80" "tcp" "192.168.1.93" "2a01:4f8:10b:c41:5054:ff:fe08:48ff")' ["https"]='( "443" "tcp" "192.168.1.93" "2a01:4f8:10b:c41:5054:ff:fe08:48ff")' ["icinga"]='("5665" "tcp" "192.168.1.70" "2a01:4f8:10b:c41:5054:ff:fe9b:6f27")' ["smtp"]='( "25" "tcp" "192.168.1.57" "2a01:4f8:10b:c42:5054:ff:fec3:b9c7")' ["ssh"]='( "22" "tcp" "192.168.1.93" "2a01:4f8:10b:c41:5054:ff:fe08:48ff")' ) ################################################################################ # /Configuration ################################################################################ ################################################################################ # NAT pour ipv4 ################################################################################ if test -n "$fip" then for service in "${!dispatching[@]}" do eval "srv=${dispatching[$service]}" dport="${srv[0]}" protos="${srv[1]}" ipv4="${srv[2]}" for proto in $protos do ipv4 dnat to $ipv4 inface enp0s31f6 dst $fip proto $proto dport $dport done done # Contrôle de l'IP de sortie ipv4 snat to $fip outface enp0s31f6 fi ################################################################################ # IPv6 ################################################################################ ipv6 interface any v6interop proto icmpv6 client ipv6neigh accept server ipv6neigh accept policy return ################################################################################ # DHCP ################################################################################ interface4 virbr0 dhcp policy return server dhcp accept ################################################################################ # FIP -> ME # The purpose of this interface is to control the traffic # on the enp0s31f6 interface destinated to fip IP. ################################################################################ if test -n "$fip" then interface enp0s31f6 fip_trafic dst4 $fip dst6 $myPublicIp6 # The default policy is DROP. policy drop # Protection anti flood protection strong # Services acceptés server ICMP accept server ICMPV6 accept # The following means that this machine can REQUEST anything via enp0s31f6. client all accept fi ################################################################################ # EXT->ME # The purpose of this interface is to control the traffic # on the enp0s31f6 interface destinated to public IP. ################################################################################ interface enp0s31f6 external_trafic dst4 $myPublicIp4 dst6 $myPublicIp6 # The default policy is DROP. policy drop # Protection anti flood protection strong # Services acceptés server ssh accept server ICMP accept server ICMPV6 accept # The following means that this machine can REQUEST anything via enp0s31f6. client all accept ################################################################################ # LAN->ME # The purpose of this interface is to control the traffic # on the {enp1s0,virbr0,virbr1} interface destinated to private IP. ################################################################################ interface "enp1s0 virbr0 virbr1" internal_trafic src4 $clusterPrivateNetwork dst4 "$myPrivateIp" src6 "$clusterV6Network" dst6 $myPublicIp6 # On est entre amis # The default policy is REJECT. policy reject # Here are the services listening on enp1s0. server ICMP accept server ICMPV6 accept server dns accept server ssh accept server dhcp accept server dhcpv6 accept server icinga accept server drbd accept # The following means that this machine can REQUEST anything via enp1s0. client all accept ################################################################################ # Clients on enp0s31f6 (Internet) accessing servers on {enp1s0,virbr0,virbr1} (LAN). ################################################################################ router ext2me inface enp0s31f6 outface "enp1s0 virbr0 virbr1" protection strong ################################################################################ # Clients on {enp1s0,virbr0,virbr1} (LAN) accessing servers on enp0s31f6 (Internet). ################################################################################ router me2ext inface "enp1s0 virbr0 virbr1" outface enp0s31f6 masquerade # If you remove it, no REQUEST will pass matching this traffic. route all accept ################################################################################ # Clients on {enp1s0,virbr0,virbr1} (LAN) accessing servers on {enp1s0,virbr0,virbr1} (LAN). ################################################################################ router me2me inface "enp1s0 virbr0 virbr1" outface "enp1s0 virbr0 virbr1" # If you remove it, no REQUEST will pass matching this traffic. route all accept ################################################################################ # Clients on enp0s31f6 (Internet) accessing cluster's servers. ################################################################################ if test -n "$fip" then for service in "${!dispatching[@]}" do eval "srv=${dispatching[$service]}" dport="${srv[0]}" protos="${srv[1]}" ipv4="${srv[2]}" ipv6="${srv[3]}" for proto in $protos do router "$service"_"$dport"_"$proto" inface enp0s31f6 outface "virbr0 virbr1" dst4 $ipv4 dst6 $ipv6 protection strong server $service accept done done fi