Shorewall
Updated 13 Juillet 2022
- Installer Shorewall
- Configuration de Shorewall
- Configuration de la gestion de la bande passante
- Exemples de configuration
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
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:
- activer la connexion Internet dans le réseau local
- autoriser l'accès à partir du pare-feu n'importe où
- supprimer tous les paquets provenant d'Internet et effectuer la journalisation
- 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.151must be marked as1. - All SSH packets coming from
192.168.1.0/24and going to155.186.235.151must be marked as2. - 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 :
- computers in the internal network have IPs ~192.168.1.0/24~
- a Calculate Directory Server, connected to the internal network at
eth1with the IP address set192.168.1.1and with Internet access ateth0with 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 :
- computers in the internal network have IPs ~192.168.1.0/24~
- a Calculate Directory Server, connected to the internal network at
eth1with the IP address set192.168.1.1and with Internet access ateth0with 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 :
- 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) :
- 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
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