Shorewall

Updated 13 Juillet 2022

Shorewall

Shorewall ou, plus précisément, Shoreline Firewall est un outil de configuration de pare-feu. Techniquement, il s'agit d'un add-on de sous-système de noyau Netfilter (iptables/ipchains) qui implémente des méthodes de configuration simplifiées. Il fournit un niveau d'abstraction plus élevé pour la description des règles de pare-feu.

Installer Shorewall

Dans Calculate Linux Desktop et Calculate Directory Server, Shorewall est inclus dans le système de base. Si vous avez une autre version de Calculate, vous devez l'installer :

emerge -a net-firewall/shorewall

Note

Pour inclure des exemples et de la documentation, installez le paquet avec le drapeau USE doc activé :

USE="doc" emerge -a net-firewall/shorewall

Pour bénéficier de davantage de fonctionnalités pare-feu, essayez les paquets suivants :

  • net-firewall/xtables-addons+, extensions non ajoutées à kernel/iptables (pour définir le trafic p2p)
  • net-misc/l7-filter-userspace, p classification par contenu (pour détecter le trafic par le contenu)
  • net-libs/gupnp-igd, pour la fonctionnalité UPnP

Pour les installer :

emerge -a net-firewall/xtables-addons net-misc/l7-filter-userspace net-libs/gupnp-igd

Configuration de Shorewall

Shorewall n'est pas un démon, ce qui veut dire qu'il ne tourne pas en permanence. The rules are stored in text files. When shorewall starts, it reads its configuration files and converts them into settings that ipchains/iptables can understand, after which these firewall settings take effect until the operating system restarts.

  • Zones Shorewall considers the network in which it operates as a set of zones. This is why you need to define one or more zones in the /etc/shorewall/+zones when you start configuring Shorewall. Zones are individual IP addresses of hosts, subnets, or incoming/outgoing packets for a specific interface. They can refer to an external network, an internal network, or a [DMZ] (https://en.wikipedia.org/wiki/DMZ_(computing)) network.
  • Les zones sont reconnues soit par l'interface réseau qui leur est associée, telle que définie dans /etc/shorewall/ interfaces, soit par l'adresse IP du sous-réseau spécifié dans /etc/shorewall/hosts. Une zone peut être associée à plusieurs interfaces, ainsi qu'une interface peut être associée à plusieurs zones. Notez que Shorewall considère le système de pare-feu comme sa propre zone.
  • Actions Une fois les zones définies, vous devez définir l'action par défaut dans /etc/shorewall/+policy+ (telle que ACCEPT ou DROP), à appliquer au trafic entre chaque zone source et zone destination.
  • Politiques Enfin, le fichier /etc/shorewall/rules contient des exceptions de politiques qui permettent l'accès à des ports spécifiques, etc.

Zone declaration

Pour déclarer une zone, vous devez éditer le fichier /etc/shorewall/zones. Pour déclarer une zone, vous devez spécifier son nom (ZONE) et son type (TYPE) (attention, "firewall" est la zone firewall, tandis que "ipv4" est la zone standard).

The order in which zones are described is important because it is in this order that iptables chains will be called to check for packets forwarded from one zone to another. In other words, a packet addressed to the firewall is first checked for net, and then for loc~, as shown in the example above. Cette règle est importante si une zone en comprend une autre. Par exemple, vous pouvez créer une zone " phone " dans loc, qui inclurait plusieurs adresses IP de ~loc. Now, if you describe ~loc~ first and then "phone", the policy described for "phone" will never be executed, because the traffic will go to ~loc~ chains. Ce problème peut être résolu en indiquant que la zone "phone" est une sous-zone de loc ("phone:loc ipv4").

Voici un exemple de configuration pour deux cartes réseau :

  • Le pare-feu (fw), firewall
  • La connexion Internet (net) utilise ipv4
  • Le réseau local (loc) utilise le protocole ipv4.

/etc/shorewall/zones

#ZONE   #TYPE
fw      firewall
net     ipv4
loc     ipv4

Pour en savoir plus sur les possibilités de modification de ce fichier, tapez man shorewall-zones.

Relier l'interface à une zone spécifique

Pour assigner l'interface à une zone, éditez le fichier /etc/shorewall/interfaces. Dans ce fichier, vous pouvez également définir les filtres à utiliser pour le traitement des paquets entrants.

Pour affecter une interface à une certaine zone, vous devez spécifier le nom de cette zone (ZONE), le nom de l'interface (INTERFACE), l'adresse de diffusion (BROADCAST) ("detect" est la valeur recommandée), et, si nécessaire, lister les filtres (OPTIONS).

Voici un exemple avec deux cartes réseau.

Dans le fichier, indiquez que eth0~ est destiné à l'accès à Internet (net), tandis que eth1~ désigne le réseau local (~loc). Les filtres du flux entrant sont tcpflags, routefilter, nosmurfs et logmartians.

  • tcpflags signifie que les paquets entrants sont vérifiés pour détecter une éventuelle combinaison erronée de drapeaux TCP ;
  • routefilter ajoute un contrôle anti-spoofing.
  • nosmrfs évite de sauter un paquet avec une adresse de diffusion sortante.
  • logmartians représente l'enregistrement des paquets contenant une adresse de sortie impossible.

/etc/shorewall/interfaces

?FORMAT 2
#ZONE       INTERFACE       OPTIONS
net         eth0            tcpflags,routefilter,nosmurfs,logmartians
loc         eth1            tcpflags,routefilter,nosmurfs,logmartians

Pour en savoir plus sur les possibilités de modification de ce fichier, tapez man shorewall-interfaces.

Relier les adresses IP à une zone spécifique

Pour lier des adresses IP ou des sous-réseaux à la zone, éditez le fichier /etc/shorewall/hosts. Pour attribuer des hôtes/sous-réseaux à une zone, vous devez fournir un nom de zone (ZONE) et une interface réseau avec son sous-réseau ou ses adresses IP ( HOST).

This is an example of a "vpn" zone definition. The current gateway sets up a tunnel with another gateway that is connected to segment ~10.0.0.0/24~.

/etc/shorewall/hosts

#ZONE       HOSTS
vpn         eth0:10.0.0.0/24

Voici un exemple d'attribution d'adresses IP réservées aux téléphones (IP allant de ~192.168.0.60~ à ~192.168.0.80~~) à une zone "phone" dédiée. Cela peut être pratique pour les politiques de gestion de l'accès, et non pour les exceptions.

/etc/shorewall/hosts

#ZONE       HOSTS
phone       eth1:192.168.0.60-192.168.0.80

Pour en savoir plus sur les possibilités de modification de ce fichier, tapez man shorewall-hosts.

Définition du comportement par défaut des paquets

L'action ou la stratégie par défaut appliquée au trafic entre chaque zone source et la zone de destination est spécifiée dans le fichier /etc/shorewall/policy . A rule is described as follows: source zone (SOURCE), destination zone (DEST), default rule (POLICY) (DROP, ACCEPT, REJECT) and, if necessary, the logging level (e.g. info).

La stratégie prend en compte les paquets qui créent de nouvelles connexions. * RELATED / ESTABLISHED * Les paquets (paquets de la connexion établie) sont ignorés par défaut.

Par exemple, définissez les politiques suivantes:

  1. activer la connexion Internet dans le réseau local
  2. autoriser l'accès à partir du pare-feu n'importe où
  3. supprimer tous les paquets provenant d'Internet et effectuer la journalisation
  4. rejeter d'autres paquets avec un message d'erreur et faire la journalisation

/etc/shorewall/policy

#SOURCE     DEST    POLICY      LOGLEVEL
loc         net     ACCEPT
$FW         all     ACCEPT
net         all     DROP        info
all         all     REJECT      info

Pour en savoir plus sur les possibilités de modification de ce fichier, tapez man shorewall-policy.

Ajout du masquage

Le masquage d'adresse IP est une méthode de remappage d'un espace d'adresse IP dans un autre en substituant dynamiquement l'adresse de l'expéditeur, en fonction de l'adresse attribuée à l'interface.

Le NAT dynamique (Masquerading) et le NAT source (SNAT) sont définis dans в /etc/shorewall/snat.

To add masquerading to a specific interface, you have to define it (INTERFACE:DEST), then indicate the subnetwork for which this masquerading (SOURCE) and outgoing address (ADDRESS) for SNAT will be used. Si l'adresse de sortie n'est pas spécifiée, le NAT dynamique sera utilisé.

Par exemple, pour tous les paquets envoyés via eth0 depuis votre réseau interne (~192.168.0.0/24~~), vous devez utiliser SNAT (~24.56.78.21~).

/etc/shorewall/snat

#ACTION             SOURCE              DEST
SNAT(24.56.78.21)   192.168.0.0/24      eth0

Si besoin est, vous pouvez exclure la NAT lors de l'envoi de paquets vers des sous-réseaux spécifiques, par exemple, pour la tunnellisation ipsec.

Par exemple, pour désactiver le NAT lors de l'envoi d'un paquet vers le sous-réseau ~192.168.2.0/24~~ :

/etc/shorewall/snat

#ACTION             SOURCE              DEST
SNAT(24.56.78.21)   192.168.0.0/24      eth0:!192.168.2.0/24

Pour en savoir plus sur le contenu de ce fichier que vous pouvez modifier, tapez man shorewall-masq.

Ajout de règles

Vous devez définir des règles qui décrivent les exceptions aux politiques appliquées au trafic. Celles-ci sont contenues dans le fichier /etc/shorewall/rules.

Ce fichier contient trois sections : RELATED, ESTABLISHED, NEW, qui correspondent à trois états de connexion. Les conditions d'état sont définies par le critère conntrack, qui permet de classer les paquets en fonction de leur relation aux connexions. L'état NOUVEAU permet de sélectionner uniquement les paquets qui ouvrent de nouvelles connexions, l'état ÉTABLI représente les paquets appartenant aux connexions établies, et l'état RELATÉ correspond aux paquets qui ouvrent de nouvelles connexions qui sont logiquement liées à celles déjà établies (par exemple, connexion de données en mode FTP passif). Le statut INVALID signifie qu'il est impossible de déterminer la connexion à laquelle le paquet appartient (INVALID est également inclus dans la section NEW). Comme expliqué précédemment, la politique décrit le comportement de la section NOUVELLE, tandis que ACCEPTER est appliqué par défaut aux sections RELATIVES et ÉTABLIES.

Les exemples suivants sont écrits dans la section NOUVEAU .

Refuser l'accès à Internet à partir de certains nœuds

/etc/shorewall/rules

#ACTION     SOURCE                          DEST
REJECT      loc:10.0.0.100-10.0.0.254       net

Port d'accès avant (DNAT) 80

/etc/shorewall/rules

#ACTION     SOURCE      DEST
HTTP/DNAT   net         loc:10.0.0.5

Si cette règle doit également s'appliquer aux paquets envoyés du LAN vers l'IP externe de la passerelle, éditez les fichiers "masq" et "interfaces".
In "interfaces", add the routeback option for loc~, allowing the router to send packets from one local network to another.

/etc/shorewall/rules

#ACTION     SOURCE      DEST        PROTO
loc         eth1        detect      tcpflags,routeback

Add a SNAT rule to "masq" so that a packet for ~10.0.0.5 be sent from the IP of the gateway (~10.0.0.1 is the internal gateway IP).

/etc/shorewall/rules

#ACTION       SOURCE    DEST
eth1:10.0.0.5 eth1      10.0.0.1

To the rule added above add DNAT in "rules", so that all packets from the local network be sent to 10.0.0.5 (~1.2.3.4~~ , i.e. the external IP of the gateway must be placed in ORIGINAL DEST).

/etc/shorewall/rules

#ACTION     SOURCE      DEST            PROTO       DPORT      SPORT
HTTP/DNAT   loc         loc:10.0.0.5    -           -          1.2.3.4

Transfert des ports 222 à 22

/etc/shorewall/rules

#ACTION     SOURCE      DEST                PROTO       DPORT
DNAT        net         loc:10.0.0.5:22     tcp         222

Transférer le port LDAP

For example, to enable remote replication for unix, samba, and mail services to the Calculate Directory Server:

/etc/shorewall/rules

#ACTION     SOURCE      DEST
LDAP/DNAT   net         loc:10.0.0.5

Dans l'exemple du port 80, une macro est utilisée, qui est un modèle de règle(s). Les macros échantillons sont stockées dans / usr / share / shorewall et appelées macro.macroname. Contenu des macros HTTP

/usr/share/shorewall/macro.HTTP

#ACTION     SOURCE      DEST        PROTO       DPORT
PARAM       -           -           tcp         80

Selon le contenu de la macro, son utilisation est équivalente à:

/etc/shorewall/rules

#ACTION     SOURCE      DEST            PROTO       DPORT
DNAT        net         loc:10.0.0.5    tcp         80

L'émetteur et le récepteur du paquet peuvent être définis comme suit.

Exemple Description
dmz:192.168.2.2 noeud 192.168.2.2 dans la zone DMZ
réseau:155.186.235.0/24 sous-réseau 155.186.235.0/24 sur Internet
loc:192.168.1.1,192.168.1.2 les nœuds 192.168.1.1.1 et 192.168.1.2 du réseau local
loc:~00-A0-C9-15-39-78 dans le réseau local avec adresse MAC 00C939 : 78
réseau:192.0.2.11-192.0.2.17 de 192.0.2.11 à 192.0.2.17 sur Internet
réseau:!192.0.2.11-192.0.2.17 tous les nœuds sur Internet, à l'exception de ceux de 192.0.2.11 à 192.0.2.17
réseau:155.186.235.0/24!155.186.235.16/28 sous-réseau 155.186.235.0/24 sur Internet, à l'exception du 155.186.235.16/28

Pour en savoir plus sur les modifications possibles de ce fichier, tapez man shorewall-rules.

Détection de tunnels de réseau

Pour que Shorewall ne réinitialise pas le trafic crypté, le tunnel doit être décrit dans /etc/shorewall/tunnels . Ce fichier décrit les règles de transmission du trafic encapsulé (généralement crypté) entre Shorewall et une passerelle distante.

The description contains the type of tunnel (TYPE), the original zone (ZONE) and the address of the remote gateway (GATEWAY).

As an example, define an IPSEC tunnel (ESP) between the current gateway and the remote one (at ~4.33.99.124~).

/etc/shorewall/tunnels

#TYPE           ZONE        GATEWAY
ipsec:esp       net         4.33.99.124

Pour en savoir plus sur les modifications possibles de ce fichier, tapez man shorewall-tunnels.

Ajouter Shorewall au démarrage automatique

Pour que Shorewall démarre lorsque la passerelle est démarrée, exécutez:

rc-update add shorewall boot

Configuration de la gestion de la bande passante

L'organisation de la file d'attente (file d'attente) détermine comment les données sont envoyées. Il est important de comprendre que seul le débit de transmission des données envoyées peut être géré.

As the Internet appears now, we cannot control the amount of incoming traffic. C'est un peu comme une boîte aux lettres installée à l'intérieur de votre porte: vous ne pouvez pas choisir la quantité de courrier que vous recevez, à moins que vous ne parliez à tous ceux qui vous écrivent.

Toutefois, Internet fonctionne principalement sur la base du protocole TCP/IP, qui présente quelques caractéristiques utiles. TCP/IP ignore la bande passante du réseau entre deux hôtes, de sorte qu'il envoie les données de plus en plus vite (ce qu'on appelle "slow start"). En cas de surcharge, les paquets sont perdus et la connexion devient lente. (C'est un peu plus compliqué - et plus intelligent que, comme nous l'expliquerons plus loin.)

Les disciplines de traitement des files d'attente définissent la façon dont les données sont transmises. Les disciplines peuvent être "sans classe" ou "classé". Ils reçoivent généralement les données, les réordonnent, les retardent ou les détruisent. Les disciplines Classées permettent d'utiliser des classes pour un type de trafic spécifique. Par conséquent, il existe une discipline racine pour l'interface donnée qui est soit classée, soit sans classe. Une discipline de classe, à son tour, contient plusieurs classes qui vous permettent de gérer le trafic.

Pour gérer le trafic, il est nécessaire de définir la discipline fondamentale appliquée à l'appareil.

Le trafic entrant est introduit dans la discipline entrante, qui peut contenir un certain nombre de filtres pour traiter les paquets. Celles-ci peuvent donc être jetées, perdues, filtrées. Это называется ограничением (policing).
Cela se produit assez tôt dans le temps, avant que le paquet ne soit transmis pour un traitement ultérieur, afin de diminuer l'utilisation du CPU.

Si un paquet passe cette étape en toute sécurité, il peut être transféré soit vers des applications locales (dans ce cas, il se retrouve dans la pile IP pour un traitement ultérieur), soit vers le réseau via le classificateur sortant vers un autre noeud du réseau. Les applications utilisateur peuvent également envoyer des données au réseau, qui sont également transmises par le classificateur sortant. Le classificateur sortant divise le trafic en files d'attente, chacune ayant sa propre discipline. Par défaut, pfifo_fast est la seule file d'attente sortante. C'est ce qu'on appelle la "file d'attente".

Une fois dans une file d'attente, le paquet attend que le noyau le transmette à l'interface réseau. C'est ce qu'on appelle "aller chercher dans la file d'attente".

Activer la gestion du trafic sur une interface

Pour activer la gestion du trafic, éditez le fichier /etc/shorewall/tcdevices.

Ce fichier décrit la largeur de canal de l'interface sur laquelle vous souhaitez utiliser la gestion de la bande passante. La largeur du canal peut être mesurée en kbps, mbps, kbit, mbit et bps.

IN-BANDWIDTH définit la largeur de bande du signal entrant pour l'interface. Keep in mind that you cannot manage incoming traffic, because it has already been received. What you can do is limit the allowed traffic. Then packets that exceed this value will be dumped. If you do not want to dump, set value to 0 or -.

OUT-BANDWIDTH définit la largeur de bande du signal de sortie de l'interface. Cette vitesse maximale est utilisée comme "pleine" lors de la classification du trafic. The incoming traffic that exceeds this value will be dumped.

Si Shorewall est installé sur une passerelle sur laquelle il est important de gérer le trafic de transit, il est nécessaire de ne pas spécifier le trafic entrant pour les deux interfaces, car il peut y avoir des problèmes plus tard dans la gestion de la bande passante.

Here is how to set a channel of 10 mbit at the gateway (incoming traffic from the Internet is managed as outcoming to the local network):

/etc/shorewall/tcdevices

#NUMBER:        IN-BANDWITH     OUT-BANDWIDTH
eth0            -               10mbit
eth1            -               10mbit

Pour en savoir plus sur les modifications possibles de ce fichier, tapez man shorewall-tcdevices.

Définition de la classe de trafic

Les classes sont définies dans /etc/shorewall/tcclasses. Chaque ligne définit une classe de trafic, à savoir : l'INTERFACE pour laquelle la classe est créée, le MARQUE pour définir le trafic de la classe, le TAUX de trafic garanti, le débit souhaité (CEIL), la PRIORITÉ et les OPTIONS supplémentaires.

Le marqueur sera utilisé lors de la définition des règles (tcrules) pour le flux appartenant à une classe spécifique. La bande passante garantie et souhaitée peut être indiquée en valeur absolue ou comparée à la bande passante globale fournie pour l'interface (par exemple, 2*full/3, deux tiers du canal). _ Largeur de bande garantie_ signifie qu'aux charges de pointe, ce type de trafic aura au moins la largeur de bande spécifiée, _ largeur de bande désirée_ signifie que la largeur de bande pour ce type de trafic ne dépassera pas la valeur spécifiée. Plus la valeur de priorité est basse, plus la priorité du trafic est élevée. Le trafic de priorité inférieure ne sera pas traité tant que le trafic de priorité supérieure n'aura pas été traité. Les autres paramètres sont séparés par des virgules et peuvent prendre les valeurs suivantes:

  • default est la classe par défaut. Tout le trafic non marqué sera mis ici.
  • tos=0xvalue[/0xmask] signifie que la classification du flux est basée sur le TOS.
  • tos-tosname établit la classification du flux de trafic TOS en fonction des cinq valeurs standard
  • tcp-ack - pour la détection des paquets tcp ask dont la taille est inférieure à 64 octets
  • pfifo tells to use the pfifo discipline instead of SFQ for the class.
  • Limite = nombre - spécifie le nombre maximum de paquets qui peuvent être placés dans cette file d'attente.

Pour un exemple de classification, voir ci-dessous:

  • 100-180kbit for TOS byte 68/b8 traffic (EF and AFF3-1 VOIP traffic)
  • Le trafic interactif, les acks TCP et tout paquet marqué comme 2 auront un quart garanti de la bande passante totale et pourront prendre le canal entier.
  • Le trafic non classifié et les paquets marqués 3 auront un quart garanti de la bande passante totale et pourront prendre le canal entier.
  • Les paquets marqués 4 ont la priorité la plus basse, ils sont garantis 1/8 de la bande passante et peuvent prendre 80% du canal.

/etc/shorewall/tcclasses

#INTERFACE  MARK    RATE        CEIL        PRIO        OPTIONS
eth0        1       100kbit     180kbit     1           tos=0x68/0xfc,tos=0xb8/0xfc
eth0        2       full/4      full        2           tcp-ack,tos-minimize-delay
eth0        3       full/4      full        3           default
eth0        4       full/8      full*8/10   4

Pour en savoir plus sur les modifications possibles de ce fichier, tapez man shorewall-tcclasses.

Configuration de marquage du trafic

Traffic marking can be configured by editing /etc/shorewall/mangle. Grâce au marquage, les entrées de ce fichier déterminent la classe à laquelle le paquet appartient. Les zones définissant les conditions marquées sont les suivantes:

  • ACTION
  • SOURCE représente l'expéditeur du paquet.
  • DEST représente le destinataire du paquet.
  • PROTO représente le protocole de connexion.
  • DEST PORT représente le(s) port(s) du destinataire.
  • SOURCE PORT représente le(s) port(s) de l'expéditeur.
  • USER est l'utilisateur à qui appartient le processus ayant créé le paquet (cela n'a de sens que pour le flux provenant du pare-feu lui-même).
  • TEST représente le marqueur défini.
  • LENGTH représente la taille du paquet.
  • TOS représente la valeur de l'octet TOS
  • CONNBYTES est l'abréviation de l'ensemble des données de connexion transmises.
  • HELPER est le nom du module d'aide de Netfiler, par exemple pour définir ftp, sip, amanda, etc.

La marque est définie comme suit:

  • "MARK(value)[:{C|F|P|T|CF|CP|CT}]"
    "F" - marked in the FORWARD chain
    "P" - marked in the PREROUTING chain
    "T" - marked in the POSTROUTING chain
    "CF" - marked in the FORWARD chain
    "CP" - marked in the PREROUTING chain
    "CT" - marked in the POSTROUTING chain
  • "RESTORE[/mask]" - restaure la marque du paquet à partir de la marque de connexion
  • "SAVE[/mask]" - sauvegarde la marque de paquet sur la marque de connexion
  • CONTINUER - ne pas traiter les règles suivantes dans la table de marquage

Exemple:

  • All GRE packets (protocol 47), that were not created in the firewall system and with target IP 155.186.235.151 must be marked as 1.
  • All SSH packets coming from 192.168.1.0/24 and going to 155.186.235.151 must be marked as 2.
  • Tous les paquets P2P doivent être étiquetés 4.

/etc/shorewall/mangle

#ACTION         SOURCE          DEST            PROTO       DPORT       SPORT    USER      TEST
MARK(1):T       0.0.0.0/0       155.182.235.151 47
MARK(2):T       192.168.1.0/24  155.182.235.151 tcp         22
RESTORE         0.0.0.0/0       0.0.0.0/0       all         -           -        -         0
CONTINUE        0.0.0.0/0       0.0.0.0/0       all         -           -        -         !0
MARK(4):T       0.0.0.0/0       0.0.0.0/0       ipp2p:all
SAVE            0.0.0.0/0       0.0.0.0/0       all         -           -        -         !0

Ces quatre dernières règles signifient ce qui suit:

Si le paquet n'a pas été classé (marqué comme 0), copiez la marque de connexion sur la marque de paquet. Si la marque du paquet est déjà définie, aucune autre action n'est nécessaire. Si le paquet est P2P, définissez la marque du paquet tom 4. Si la marque du paquet est définie, enregistrez-la comme marque de connexion.

Pour en savoir plus sur les modifications possibles de ce fichier, tapez man shorewall-tcrules.

Exemples de configuration

Exemple de configuration de pare-feu avec VPN

Supposons qu'il s'agisse de votre réseau :

Example of configuration with VPN

  • computers in the internal network have IPs ~192.168.1.0/24~
  • a Calculate Directory Server, connected to the internal network at eth1 with the IP address set 192.168.1.1 and with Internet access at eth0 with the IP address set ~1.2.3.4~ (gateway)
  • OpenVPN or WireGuard server with network 192.168.20.0/24

Définissez d'abord les zones requises

/etc/shorewall/zones

#ZONE       TYPE
fw          firewall
net         ipv4
loc         ipv4
vpn         ipv4

Définissez maintenant net comme étant desservi par l'interface eth0, loc~ comme étant desservi par eth1, ~vpn comme étant desservi par tun0~. The incoming traffic will be filtered on both network interfaces with tcpflags, routefilter, nosmurfs, and logmartians:

/etc/shorewall/interfaces

?FORMAT 2
#ZONE       INTERFACE       OPTIONS
net         eth0            tcpflags,nosmurfs,routefilter,logmartians
loc         eth1            tcpflags,nosmurfs,routefilter,logmartians
vpn         tun0
#vpn        wg0

Describe the default rules, or policies for transport through the gateway: the local network (~loc) and gateway ($FW~) are allowed access to all zones, packets from the network (~net) are dumped, the REJECT rule with logging is applied to the rest:

/etc/shorewall/policy

#SOURCE     DEST        POLICY          LOGLEVEL
loc         all         ACCEPT
vpn         all         ACCEPT
$FW         all         ACCEPT
net         all         DROP
all         all         REJECT          info

Ajoutez des masques pour les paquets du réseau local allant vers l'Internet par VPN :

/etc/shorewall/snat

#ACTION         SOURCE              DEST
SNAT(1.2.3.4)   192.168.1.0/24      eth0
SNAT(1.2.3.4)   192.168.20.0/24     eth0

Décrivez un tunnel OpenVPN, l'associant à la zone vpn :

/etc/shorewall/tunnels

#TYPE                   ZONE            GATEWAY                 GATEWAY_ZONE
openvpnserver:udp       net             0.0.0.0/0               vpn

Ou alors, décrivez un tunnel WireGuard, l'associant également à la zone vpn :

/etc/shorewall/tunnels

#TYPE                   ZONE            GATEWAY                 GATEWAY_ZONE
openvpnserver:udp:51820 net             0.0.0.0/0               vpn

La passerelle fournissant un accès Internet au réseau local est prête à être utilisée. Ajoutez quelques règles :

  • autoriser les pings de passerelle à partir d'Internet
  • allow remote SSH connection to the gateway

/etc/shorewall/rules

?SECTION NEW
#ACTION         SOURCE                              DEST
Ping/ACCEPT     net                                 fw
SSH/ACCEPT      net                                 fw

Activez la redirection IP, TCP Clamp MSS et le démarrage de Shorewall :

/etc/shorewall/shorewall.conf

...
IP_FORWARDING=Yes
CLAMPMSS=Yes
STARTUP_ENABLED=Yes

Configuration de la passerelle

Supposons qu'il s'agisse de votre réseau :

exemple de configuration de la passerelle

  • computers in the internal network have IPs ~192.168.1.0/24~
  • a Calculate Directory Server, connected to the internal network at eth1 with the IP address set 192.168.1.1 and with Internet access at eth0 with the IP address set ~1.2.3.4~ (gateway)
  • the local network has a mail server, 192.168.1.10

Définissez d'abord les zones nécessaires:'net' pour Internet,'loc' pour le réseau local,'fw' pour CDS :

/etc/shorewall/zones

#ZONE       TYPE
fw          firewall
net         ipv4
loc         ipv4

Now associate net with the eth0 interface and loc with the eth1 interface. The incoming traffic will be filtered on both network interfaces with tcpflags, routefilter, nosmurfs, and logmartians:

/etc/shorewall/interfaces

?FORMAT 2
#ZONE       INTERFACE       OPTIONS
net         eth0            tcpflags,nosmurfs,routefilter,logmartians
loc         eth1            tcpflags,nosmurfs,routefilter,logmartians

Describe the default rules (or policies) for traffic passing through the gateway: local network (~loc) and gateway (~$FW) allowed access to all zones, packets from the Internet (net) are dumped, the REJECT rule is applied to all other packets and the whole process is logged:

/etc/shorewall/policy

#SOURCE     DEST        POLICY          LOGLEVEL
loc         all         ACCEPT
$FW         all         ACCEPT
net         all         DROP
all         all         REJECT          info

Ajouter le masquage pour les paquets partant du réseau local vers l'Internet :

/etc/shorewall/snat

#ACTION         SOURCE              DEST
SNAT(1.2.3.4)   192.168.1.0/24      eth0

La passerelle fournissant un accès Internet au réseau local est prête à être utilisée. Puis ajoutez quelques règles :

  • autoriser les pings de passerelle à partir d'Internet
  • allow remote SSH connection to the gateway
  • refuser la connexion Internet des IP 192.168.1.100 à 192.168.1.254
  • transférer les ports IMAP/IMAPS pour l'accès au serveur de messagerie à partir d'Internet
  • rediriger le port SMTP vers le serveur de messagerie

/etc/shorewall/rules

?SECTION NEW
#ACTION         SOURCE                              DEST
Ping/ACCEPT     net                                 fw
SSH/ACCEPT      net                                 fw
REJECT          loc:192.168.1.100-192.168.1.254     net
IMAP/DNAT       net                                 loc:192.168.1.10
IMAPS/DNAT      net                                 loc:192.168.1.10
SMTP/DNAT       net                                 loc:192.168.1.10

Permettre à Shorewall de démarrer :

/etc/shorewall/shorewall.conf

STARTUP_ENABLED=Yes

Activer la téléphonie IP

Ajoutez la téléphonie IP à l'exemple précédent :

Activation de la téléphonie IP

  • les téléphones sont connectés au réseau principal et leurs adresses IP sont comprises entre ~192.168.1.70~ et ~192.168.1.99~~.
  • installer Asterisk sur le serveur 192.168.1.10~

Déclarez une nouvelle zone, phone~ pour les téléphones. ~phone doit être déclaré avant loc~ :

/etc/shorewall/zones

#ZONE       TYPE
fw          firewall
net         ipv4
phone       ipv4
loc         ipv4

Affectez les téléphones de la zone loc à phone :

/etc/shorewall/hosts

#ZONE       HOST
phone       eth1:192.168.1.70-192.168.1.99

Décrivez une politique interdisant aux téléphones (~phone~) d'être en ligne (~net) :

/etc/shorewall/policy

#SOURCE     DEST        POLICY          LOG
phone       net         DROP
loc         all         ACCEPT
$FW         all         ACCEPT
net         all         DROP
all         all         REJECT          info

Faites un ping des ports SIP et IAX à 192.168.1.10 :

/etc/shorewall/rules

?SECTION NEW
#ACTION         SOURCE          DEST                PROTO       DEST
...
SMTP/DNAT       net             loc:192.168.1.10
# SIP
DNAT            net             loc:192.168.1.10    udp         5060
# IAX
DNAT            net             loc:192.168.1.10    udp         4569

Tunnelage IPSEC

Modifiez le réseau de l'exemple précédent conformément au schéma (ajouter un sous-réseau distant) :

tunnelage IPSEC

  • The gateway establishes an ipsec tunnel with a remote gateway, connecting segment ~192.168.3.0/24~+
  • L'IP de la passerelle distante est 1.2.3.5~.

Ajoutez la zone "vpn" pour le sous-réseau distant:

/etc/shorewall/zones

#ZONE       TYPE
fw          firewall
vpn         ipv4
net         ipv4
phone       ipv4
loc         ipv4

Définissez vpn (paquets provenant de eth0 et placés dans le sous-réseau ~192.168.3.0/24~) :

/etc/shorewall/hosts

#ZONE       HOSTS
phone       eth1:192.168.1.70-192.168.1.99
vpn         eth0:192.168.3.0/24

Décrivez le tunnel

Décrivez le tunnel : ipsec, le tunnel passe par la zone net~, l'adresse IP de la passerelle distante est la suivante :

/etc/shorewall/tunnels

#TYPE      ZONE        GATEWAY          GATEWAY ZONE
ipsec      net         1.2.3.5

Désactivez le masquage des paquets envoyés du réseau local (~loc) vers le sous-réseau distant (~vpn) :

/etc/shorewall/snat

#ACTION         SOURCE              DEST
SNAT(1.2.3.4)   192.168.1.0/24      eth0:!192.168.3.0/24

Décrivez la politique qui autorise la connexion "vpn" à la zone locale loc :

/etc/shorewall/policy

#SOURCE     DEST        POLICY          LOGLEVEL
phone       net         DROP
vpn         loc         ACCEPT
loc         all         ACCEPT
fw          all         ACCEPT
net         all         DROP
all         all         REJECT          info

Exemple de gestion du trafic

Vous disposez d'un canal de 5 Mbit que vous souhaitez diviser comme suit :

  • SIP depuis Internet, 256Kbit garanti et maximum, priorité maximale
  • SIP à travers un tunnel à 1 Mbit, garanti et maximum, priorité maximale
  • RDP à travers un tunnel de 1 Mbit garanti et le canal entier moins SIP maximum (5Mbit-1Mbit-256Kbit), priorité normale
  • trafic http avec une faible priorité, 256 Kbit garanti et le canal entier moins le maximum SIP
  • trafic ftp avec haute priorité, 256 Kbit garanti et le canal entier moins le maximum SIP
  • priorité régulière pour tous les autres trafics, 256 Kbit garantis et le canal entier moins SIP maximum

Définissez la largeur des canaux d'entrée et de sortie:

/etc/shorewall/tcdevices

#NUMBER:        IN-BANDWITH     OUT-BANDWIDTH
eth0            -               5mbit
eth1            -               5mbit

Définir les classes de trafic. Comme eth0 gère la connexion Internet, il doit être mentionné pour tout le flux sortant, tandis que eth1 est utilisé pour les connexions locales et, par conséquent, tout le flux entrant en relève.

/etc/shorewall/tcclasses

#INTERFACE      MARK        RATE        CEIL        PRIO
# INBOUND
eth1            1           256kbit     256kbit     1
eth1            2           1mbit       1mbit       1
eth1            3           1mbit       3768kbit    3
eth1            4           256kbit     3768kbit    2
eth1            5           256kbit     3768kbit    4
eth1            256         256kbit     3768kbit    3

# OUTBOUND
eth1            1           256kbit     256kbit     1
eth1            2           1mbit       1mbit       1
eth1            3           1mbit       3768kbit    3
eth1            4           256kbit     3768kbit    2
eth1            5           256kbit     3768kbit    4
eth1            256         256kbit     3768kbit    3

Définissez les règles du trafic à affecter à une classe particulière:

/etc/shorewall/mangle

#MARK       SOURCE          DEST            PROTO   DEST        SOURCE      USER    TEST    LENGTH  TOS     CONNBYTES   HELPER
# SIP internet
MARK(1)     0.0.0.0/24      0.0.0.0/24      udp     5060
MARK(1)     0.0.0.0/24      0.0.0.0/24      udp     -           5060
MARK(1)     0.0.0.0/24      0.0.0.0/24      all     -           -           -       -       -       -       -           sip
# SIP tunnel
MARK(2)     192.168.3.0/24  192.168.1.0/24  udp     5060
MARK(2)     192.168.1.0/24  192.168.3.0/24  udp     5060
MARK(2)     192.168.3.0/24  192.168.1.0/24  udp     -           5060
MARK(2)     192.168.1.0/24  192.168.3.0/24  udp     -           5060
MARK(2)     192.168.3.0/24  192.168.1.0/24  all     -           -           -       -       -       -       -           sip
MARK(2)     192.168.1.0/24  192.168.3.0/24  all     -           -           -       -       -       -       -           sip
# RDP tunnel
MARK(3)     192.168.3.0/24  192.168.1.0/24  tcp     3389
MARK(3)     192.168.1.0/24  192.168.3.0/24  tcp     3389
MARK(3)     192.168.3.0/24  192.168.1.0/24  tcp     -           3389
MARK(3)     192.168.1.0/24  192.168.3.0/24  tcp     -           3389
# high priority FTP
MARK(4)     0.0.0.0/24      0.0.0.0/24      all     -           -           -       -       -       -       -           ftp
# low priority http,https
MARK(5)     0.0.0.0/24      0.0.0.0/24      tcp     http,https

Cette configuration a quelque chose de particulier

exemple de gestion du trafic

Dans l'utilisation de cette classification, vous devez spécifier l'option "classifier" pour chaque interface:

/etc/shorewall/tcdevices

#INTERFACE      IN_BANDWITH     OUT_BANDWIDTH       OPTIONS
eth0            -               5mbit               classify
eth1            -               5mbit               classify

Modifions les classes de trafic selon la structure présentée ci-dessus:

/etc/shorewall/tcclasses

#INTERFACE      MARK        RATE        CEIL        PRIO
# SIP
1:10            -           1256kbit    1256kbit    1
eth1:10:101     -           256kbit     256kbit     1
eth1:10:102     -           1mbit       1mbit       1

# OTHER
1:20            -           3768kbit    3768kbit    2
eth1:20:201     -           1mbit       3768kbit    3
eth1:20:202     -           256kbit     3768kbit    2
eth1:20:203     -           256kbit     3768kbit    4
eth1:20:204     -           256kbit     3768kbit    3

# OUTBOUND
2:30            -           1256kbit    1256kbit    1
eth0:30:301     -           256kbit     256kbit     1
eth0:30:302     -           1mbit       1mbit       1

# OTHER
2:40            -           3768kbit    3768kbit    2
eth0:40:401     -           1mbit       3768kbit    3
eth0:40:402     -           256kbit     3768kbit    2
eth0:40:403     -           256kbit     3768kbit    4
eth0:40:404     -           256kbit     3768kbit    3

Redéfinir les règles de trafic à affecter à une classe:

/etc/shorewall/mangle

#MARK               SOURCE          DEST            PROTO   DEST        SOURCE  USER    TEST    LENGTH  TOS   CONNBYTES HELPER
# SIP internet
CLASSIFY(10:101)    0.0.0.0/24      0.0.0.0/24      udp     5060
CLASSIFY(10:101)    0.0.0.0/24      0.0.0.0/24      udp     -           5060
CLASSIFY(10:101)    0.0.0.0/24      0.0.0.0/24      all     -           -       -       -       -       -     -         sip
CLASSIFY(30:301)    0.0.0.0/24      0.0.0.0/24      udp     5060
CLASSIFY(30:301)    0.0.0.0/24      0.0.0.0/24      udp     -           5060
CLASSIFY(30:301)    0.0.0.0/24      0.0.0.0/24      all     -           -       -       -       -       -     -         sip

# SIP tunnel
CLASSIFY(10:102)    192.168.3.0/24  192.168.1.0/24  udp     5060
CLASSIFY(30:302)    192.168.1.0/24  192.168.3.0/24  udp     5060
CLASSIFY(10:102)    192.168.3.0/24  192.168.1.0/24  udp     -           5060
CLASSIFY(30:302)    192.168.1.0/24  192.168.3.0/24  udp     -           5060
CLASSIFY(10:102)    192.168.3.0/24  192.168.1.0/24  all     -           -       -       -       -       -     -         sip
CLASSIFY(10:302)    192.168.1.0/24  192.168.3.0/24  all     -           -       -       -       -       -     -         sip
# RDP tunnel
CLASSIFY(20:201)    192.168.3.0/24  192.168.1.0/24  tcp     3389
CLASSIFY(40:401)    192.168.1.0/24  192.168.3.0/24  tcp     3389
CLASSIFY(20:201)    192.168.3.0/24  192.168.1.0/24  tcp     -           3389
CLASSIFY(40:401)    192.168.1.0/24  192.168.3.0/24  tcp     -           3389
# high priority FTP
CLASSIFY(20:203)    0.0.0.0/24      0.0.0.0/24      all     -           -       -       -       -       -     -         ftp
CLASSIFY(40:403)    0.0.0.0/24      0.0.0.0/24      all     -           -       -       -       -       -     -         ftp
# low priority http,https
CLASSIFY(20:204)    0.0.0.0/24      0.0.0.0/24      tcp     http,https
CLASSIFY(40:404)    0.0.0.0/24      0.0.0.0/24      tcp     http,https