Iptables Failover: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(7 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 45: Zeile 45:
 
= Firewall =
 
= Firewall =
  
* Die Firewall wird drei Modi haben:
+
* Die Firewall wird zwei Modi haben:
 
** Kompletter Verkehr geht durch die Hauptleitung (Normaler Zustand)
 
** Kompletter Verkehr geht durch die Hauptleitung (Normaler Zustand)
** Nur VPN Pakete gehen durch die Nebenleitung
 
 
** Kompletter Verkehr geht durch die Nebenleitung (beim Ausfall der Hauptleitung)
 
** Kompletter Verkehr geht durch die Nebenleitung (beim Ausfall der Hauptleitung)
 
* Pakete, welche durch die Nebenleitung gehen sollen, werden in der mangle-Tabelle markiert
 
* Pakete, welche durch die Nebenleitung gehen sollen, werden in der mangle-Tabelle markiert
Zeile 113: Zeile 112:
 
         if test  "$2" = "backup"  
 
         if test  "$2" = "backup"  
 
         then
 
         then
   
 
 
             echo backup > /tmp/fw.status
 
             echo backup > /tmp/fw.status
 
             iptables -A PREROUTING -t mangle -s $LAN ! -d  $LAN  -j tel
 
             iptables -A PREROUTING -t mangle -s $LAN ! -d  $LAN  -j tel
Zeile 120: Zeile 118:
 
        
 
        
 
         iptables -t nat -A POSTROUTING -j SNAT -s $LAN -d 10.0.10.0/24 -o $TELDEV --to-source 172.30.28.2   
 
         iptables -t nat -A POSTROUTING -j SNAT -s $LAN -d 10.0.10.0/24 -o $TELDEV --to-source 172.30.28.2   
         iptables -t nat -A POSTROUTING -j SNAT -s $LAN -o $TELDEV --to-source $TELIP
+
         iptables -t nat -A POSTROUTING -j SNAT -s $LAN -o $TELDEV --to-source $TELIP
 
         iptables -t nat -A POSTROUTING -j SNAT -s $LAN -d 10.0.10.0/24 -o $VODDEV --to-source 172.30.28.1
 
         iptables -t nat -A POSTROUTING -j SNAT -s $LAN -d 10.0.10.0/24 -o $VODDEV --to-source 172.30.28.1
         iptables -t nat -A POSTROUTING -j SNAT -s $LAN -o $VODDEV --to-source $VODIP
+
         iptables -t nat -A POSTROUTING -j SNAT -s $LAN -o $VODDEV --to-source $VODIP
 
        
 
        
 
        
 
        
Zeile 147: Zeile 145:
 
  ;;
 
  ;;
 
  esac
 
  esac
 +
 +
==Benutzung==
 +
 +
===Normaler Zustand===
 +
 +
* firewall start
 +
 +
===Bei Ausfall der Hauptleitung===
 +
 +
* firewall start backup
 +
 +
=VPN=
 +
 +
* Es werden zwei VPNs aufgebaut#
 +
* jeweils eine pro Leitung
 +
* vi /etc/ipsec.conf
 +
 +
conn xin-vod
 +
      authby=secret
 +
      keyexchange=ikev2
 +
      left=3.3.3.3
 +
      leftsubnet=10.0.10.0/24
 +
      right=10.81.240.3
 +
      rightid=1.1.1.1
 +
      rightsubnet=172.30.28.1
 +
      ike=aes256-sha256-modp4096!
 +
      mobike=yes
 +
      esp=aes256-sha256-modp4096!
 +
      auto=start
 +
 +
conn xin-tel
 +
      authby=secret
 +
      keyexchange=ikev2
 +
      left=3.3.3.3
 +
      leftsubnet=10.0.10.0/24
 +
      right=10.81.96.2
 +
      rightid=2.2.2.2
 +
      rightsubnet=172.30.28.2
 +
      mobike=yes
 +
      ike=aes256-sha256-modp4096!
 +
      esp=aes256-sha256-modp4096!
 +
      auto=start
 +
 +
* vi /etc/ipsec.secrets
 +
 +
194.59.156.17 24.134.2.5  : PSK "123JesusKeilerei"
 +
194.59.156.17 87.128.42.65 : PSK "123JesusKeilerei"
 +
 +
=Failover=
 +
 +
* Ein Skript, welches den Zustand der Leitungen überwacht
 +
* Falls die Hauptleitung ausfällt, soll die Firewall neu mit der umleitenden Konfiguration gestartet werden
 +
* Wenn, die Hauptleitung wieder verfügbar ist, soll sie wieder benutzt werden
 +
* Wenn der Zustand sich nicht ändert, soll die Firewall nicht neu gestartet werden
 +
 +
#!/bin/bash
 +
GW1=4.4.4.4
 +
GW2=5.5.5.5
 +
while true
 +
do
 +
if ping -c 1 -w 1 $GW1 > /dev/null 2<&1
 +
then
 +
  if [ "backup" = $(cat /tmp/fw.status) ]
 +
    then  
 +
      echo normal
 +
      firewall start
 +
      conntrack -F
 +
  fi 
 +
else
 +
  if [ "normal" = $(cat /tmp/fw.status) ]
 +
  then
 +
      echo backup
 +
    firewall start backup
 +
    conntrack -F
 +
  fi 
 +
fi
 +
sleep 10
 +
done

Aktuelle Version vom 16. Dezember 2022, 09:58 Uhr

Ziel

  • Eine Firewall hat zwei Internetleitungen
  • Eine Hauptleitung 1.1.1.1
  • Eine Nebenleitung 2.2.2.2
  • Falls die Hauptleitung ausfällt sollen alle Pakete (Pings, Webanfragen, VPNs) automatisch über die Nebenleitung laufen.
  • VPN:
    • IP: 3.3.3.3
    • Lokales Netz: 10.0.10.0/24

Netzwerkkonfiguration

  • vi /etc/network/interfaces
auto lo
iface lo inet loopback

# Hauptleitung
auto ens18
iface ens18 inet static
 address 10.81.240.3/21
 gateway 10.81.240.1

# Nebenleitung
auto ens19
iface ens19 inet static
 address 10.81.96.2/19
 post-up ip rule add  fwmark 200 table 200
 post-up ip rule add from 10.81.96.2  table 200
 pre-down ip rule del  fwmark 200 table 200
 pre-down ip rule del from 10.81.96.2  table 200
 post-up ip route add default via 10.81.96.1 table 200

# LAN-Schnittstelle
auto ens20
iface ens20 inet static
 address 10.81.11.1/19
 dns-nameservers 10.81.0.2

Firewall

  • Die Firewall wird zwei Modi haben:
    • Kompletter Verkehr geht durch die Hauptleitung (Normaler Zustand)
    • Kompletter Verkehr geht durch die Nebenleitung (beim Ausfall der Hauptleitung)
  • Pakete, welche durch die Nebenleitung gehen sollen, werden in der mangle-Tabelle markiert
  • Dadurch wird die entsprechende Routing-Tabelle benutzt
  • Außderm müssen die Pakete entsprechend genattet werden
  • Der Modus der Firewall wird in einer Flagge unter /tmp/fw.status gespeichert

Variablen

  • vi /usr/local/etc/firewall.cfg
VODDEV=ens18
TELDEV=ens19
TELIP="10.81.96.2"
VODIP="10.81.240.3"
LANDEV=ens20
LAN="10.81.0.0/19"
LANIP="10.81.11.1"

Regeln

  • vi /usr/local/sbin/firewall
#!/bin/bash
#Einlesen der Konfigurationsdatei
source /usr/local/etc/firewall.cfg
echo normal > /tmp/fw.status
case $1 in
start)
    echo "starte firewall"
    #Löschen aller Reglen
        iptables -F
        iptables -F -t nat
        iptables -F -t mangle
      
        iptables -X
        iptables -X -t nat
        iptables -X -t mangle
     
        #Setzen der Default Policy auf DROP
        iptables -P INPUT DROP
        iptables -P OUTPUT DROP
        iptables -P FORWARD DROP
        #Aktivieren des Connection Tracking Konzeptes
        iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
        iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
        iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
        #Verkehr von Rechner hinaus freischalten
        iptables -A OUTPUT -m state --state NEW -j ACCEPT
        #Verkehr über das loopback device freischalten
        iptables -A INPUT -i lo -m state --state NEW -j ACCEPT
        #Verkehr zum Rechner ZUM TCP PORT 22 erlauben
        iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
        #ICMP echo-request freigeschaltet
        iptables -A INPUT -p icmp --icmp-type echo-request -m state --state NEW -j ACCEPT
     
        iptables -A FORWARD -m state --state NEW -j ACCEPT
     
        iptables -t mangle -N tel
        iptables -t mangle -A tel -j MARK --set-mark 200
     
        if test  "$2" = "backup" 
        then
            echo backup > /tmp/fw.status
            iptables -A PREROUTING -t mangle -s $LAN ! -d  $LAN  -j tel
            iptables -A OUTPUT     -t mangle -s $LANIP ! -d $LAN  -j tel
        fi
     
        iptables -t nat -A POSTROUTING -j SNAT -s $LAN -d 10.0.10.0/24 -o $TELDEV --to-source 172.30.28.2  
        iptables -t nat -A POSTROUTING -j SNAT -s $LAN -o $TELDEV --to-source $TELIP
        iptables -t nat -A POSTROUTING -j SNAT -s $LAN -d 10.0.10.0/24 -o $VODDEV --to-source 172.30.28.1
        iptables -t nat -A POSTROUTING -j SNAT -s $LAN -o $VODDEV --to-source $VODIP
     
     
        iptables -A INPUT  -j LOG  --log-prefix "--iptables-drop-in--"
        iptables -A OUTPUT -j LOG  --log-prefix "--iptables-drop-out--"
        iptables -A FORWARD -j LOG --log-prefix "--iptables-drop-for--"
;;
stop)
    echo "stoppe firewall"
    #Löschen aller Reglen
        iptables -F
        iptables -F -t nat
        iptables -F -t mangle
        iptables -X
        iptables -X -t nat
        iptables -X -t mangle
        #Setzen der Default Policy auf ACCEPT
        iptables -P INPUT ACCEPT
        iptables -P OUTPUT ACCEPT
        iptables -P FORWARD ACCEPT
;;
*)
    echo "usage: $0 start|stop"
;;
esac

Benutzung

Normaler Zustand

  • firewall start

Bei Ausfall der Hauptleitung

  • firewall start backup

VPN

  • Es werden zwei VPNs aufgebaut#
  • jeweils eine pro Leitung
  • vi /etc/ipsec.conf
conn xin-vod
     authby=secret
     keyexchange=ikev2
     left=3.3.3.3
     leftsubnet=10.0.10.0/24
     right=10.81.240.3
     rightid=1.1.1.1
     rightsubnet=172.30.28.1
     ike=aes256-sha256-modp4096!
     mobike=yes
     esp=aes256-sha256-modp4096!
     auto=start

conn xin-tel
     authby=secret
     keyexchange=ikev2
     left=3.3.3.3
     leftsubnet=10.0.10.0/24
     right=10.81.96.2
     rightid=2.2.2.2
     rightsubnet=172.30.28.2
     mobike=yes
     ike=aes256-sha256-modp4096!
     esp=aes256-sha256-modp4096!
     auto=start
  • vi /etc/ipsec.secrets
194.59.156.17 24.134.2.5  : PSK "123JesusKeilerei"
194.59.156.17 87.128.42.65 : PSK "123JesusKeilerei"

Failover

  • Ein Skript, welches den Zustand der Leitungen überwacht
  • Falls die Hauptleitung ausfällt, soll die Firewall neu mit der umleitenden Konfiguration gestartet werden
  • Wenn, die Hauptleitung wieder verfügbar ist, soll sie wieder benutzt werden
  • Wenn der Zustand sich nicht ändert, soll die Firewall nicht neu gestartet werden
#!/bin/bash
GW1=4.4.4.4
GW2=5.5.5.5
while true
do
if ping -c 1 -w 1 $GW1 > /dev/null 2<&1
then
  if [ "backup" = $(cat /tmp/fw.status) ] 
   then 	   
      echo normal
      firewall start 
      conntrack -F
  fi   
else
  if [ "normal" = $(cat /tmp/fw.status) ] 
  then
      echo backup
    firewall start backup
    conntrack -F
  fi  
fi 
sleep 10 
done