Englishfrançaisespagnol

Icône de favori OnWorks

ferm - En ligne dans le Cloud

Exécutez ferm dans le fournisseur d'hébergement gratuit OnWorks sur Ubuntu Online, Fedora Online, l'émulateur en ligne Windows ou l'émulateur en ligne MAC OS

Il s'agit de la commande ferm qui peut être exécutée dans le fournisseur d'hébergement gratuit OnWorks en utilisant l'un de nos multiples postes de travail en ligne gratuits tels que Ubuntu Online, Fedora Online, l'émulateur en ligne Windows ou l'émulateur en ligne MAC OS

PROGRAMME:

Nom


ferm - un analyseur de règles de pare-feu pour Linux

SYNOPSIS


ferm Options fichier d'entrée

DESCRIPTION


ferm est une interface pour iptables. Il lit les règles à partir d'un fichier de configuration structuré
et appelle iptables(8) pour les insérer dans le noyau en cours d'exécution.

fermL'objectif de est de rendre les règles de pare-feu faciles à écrire et à lire. Il essaie de réduire
la tâche fastidieuse d'écrire des règles, permettant ainsi à l'administrateur du firewall de passer
plus de temps sur l'élaboration de bonnes règles que sur la bonne mise en œuvre de la règle.

Pour y parvenir, ferm utilise un langage de configuration simple mais puissant, qui permet
variables, fonctions, tableaux, blocs. Il vous permet également d'inclure d'autres fichiers, permettant
vous permet de créer des bibliothèques de structures et de fonctions couramment utilisées.

ferm, prononcé « firme », signifie « For Easy Rule Making ».

ATTENTION


Cette page de manuel ne pas à l'intention de vous apprendre comment fonctionne le pare-feu et comment écrire correctement
règles. Il existe déjà suffisamment de documentation sur ce sujet.

INTRODUCTION


Commençons par un exemple simple :

chaîne ENTREE {
proto tcp ACCEPTER;
}

Cela ajoutera une règle à la chaîne d'entrée prédéfinie, correspondant et acceptant tous les tcp
paquets. Bon, compliquons les choses :

chaîne (ENTRÉE SORTIE) {
proto (udp tcp) ACCEPTER;
}

Cela insérera 4 règles, à savoir 2 en entrée de chaîne et 2 en sortie de chaîne, correspondant et
accepter les paquets udp et tcp. Normalement, vous taperez ceci :

iptables -A ENTRÉE -p tcp -j ACCEPTER
iptables -A SORTIE -p tcp -j ACCEPTER
iptables -A ENTRÉE -p udp -j ACCEPTER
iptables -A SORTIE -p udp -j ACCEPTER

Notez combien moins de frappe nous devons faire ? :-)

Fondamentalement, c'est tout ce qu'il y a à faire, même si vous pouvez le rendre beaucoup plus complexe.
Quelque chose à regarder :

chaîne ENTREE {
politique ACCEPTER;
daddr 10.0.0.0/8 proto tcp déporté ! ftp jump mychain sport : 1023 TOS 4 settos 8 marque 2 ;
daddr 10.0.0.0/8 proto tcp dport ftp REJET;
}

Ce que je veux dire ici, c'est que *vous* devez établir de bonnes règles, les garder lisibles pour vous et
autres, et ne pas en faire un gâchis.

Cela aiderait le lecteur si les règles de pare-feu résultantes étaient placées ici pour référence.
En outre, vous pouvez inclure la version imbriquée avec une meilleure lisibilité.

Essayez d'utiliser des commentaires pour montrer ce que vous faites :

# cette ligne active un proxy http transparent pour le réseau interne :
proto tcp si eth0 papa ! 192.168.0.0/255.255.255.0
dport http REDIRECT vers les ports 3128 ;

Vous en serez reconnaissant plus tard !

chaîne ENTREE {
politique ACCEPTER;
interface (eth0 ppp0) {
# refuser l'accès aux pirates notorius, revenez ici si aucune correspondance
# a été trouvé pour reprendre le pare-feu normal
sauter les méchants;

protocole tcp jump fw_tcp;
protocole udp jump fw_udp;
}
}

Plus vous nichez, mieux c'est. Assurez-vous que la commande que vous spécifiez est correcte, vous
je ne voudrais pas faire ça :

chaîne AVANT {
proto ! udp DROP ;
proto tcp dport ftp ACCEPTER;
}

car la deuxième règle ne correspondra jamais. Le meilleur moyen est de spécifier d'abord tout ce qui est
autorisé, puis nier tout le reste. Regardez les exemples pour plus de bons instantanés.
La plupart des gens font quelque chose comme ça :

protocole tcp {
port (
ssh http ftp
) J'ACCEPTE;
dport 1024:65535 ! syn ACCEPTER;
TOMBER;
}

STRUCTURE OF A FIREWALL DOSSIER


La structure d'un fichier de pare-feu approprié ressemble à un code C simplifié. Seulement quelques uns
les caractères syntaxiques sont utilisés dans les fichiers de configuration ferm. En plus de ces spéciaux
caractères, ferm utilise des « clés » et des « valeurs », considérez-les comme des options et des paramètres, ou comme
variables et valeurs, peu importe.

Avec ces mots, vous définissez les caractéristiques de votre pare-feu. Chaque pare-feu
se compose de deux choses : d'abord, regardez si le trafic réseau correspond à certaines conditions, et
deuxièmement, que faire de ce trafic.

Vous pouvez spécifier des conditions valides pour le programme d'interface du noyau que vous utilisez,
Probablement iptables(8). Par exemple, dans iptables, lorsque vous essayez de faire correspondre les paquets TCP,
tu dirais:

iptables --protocole tcp

En ferm, cela deviendra :

protocole tcp;

Le simple fait de taper ceci dans ferm ne fait rien, vous devez dire à ferm (en fait, vous devez
dire iptables(8) et le noyau) que faire de tout trafic qui correspond à cette condition :

iptables --protocole tcp -j ACCEPTER

Ou, traduit en ferm:

protocole tcp ACCEPTER;

Le ; caractère est à la fin de chaque règle de ferm. Ferm ignore les sauts de ligne, ce qui signifie que le
l'exemple ci-dessus est identique au suivant :

protocole tcp
J'ACCEPTE;

Voici une liste des caractères spéciaux :

; Ce personnage finalise une règle.

Séparées par des points-virgules, vous pouvez écrire plusieurs règles sur une seule ligne, bien que cela
diminue la lisibilité :

protocole tcp ACCEPTER; protocole udp DROP;

{} Le symbole d'imbrication définit un « bloc » de règles.

Les accolades contiennent un nombre quelconque de règles imbriquées. Tous les matchs avant le
bloc sont reportés sur ceux-ci.

L'accolade fermante finalise l'ensemble de règles. Vous ne devriez pas écrire un ';' après
cela, parce que ce serait une règle vide de sens.

Mise en situation :

chaîne INPUT proto icmp {
demande d'écho de type icmp ACCEPTER ;
TOMBER;
}

Ce bloc affiche deux règles à l'intérieur d'un bloc, qui seront toutes deux fusionnées avec n'importe quoi
devant lui, vous obtiendrez donc deux règles :

iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPTER
iptables -A INPUT -p icmp -j DROP

Il peut y avoir plusieurs niveaux d'imbrication :

chaîne ENTREE {
protocole ICMP {
demande d'écho de type icmp ACCEPTER ;
TOMBER;
}
daddr 172.16.0.0/12 REJETER;
}

Notez que la règle 'REJECT' n'est pas affectée par 'proto icmp', bien qu'il n'y ait pas
';' après l'accolade de fermeture. Traduit en iptables :

iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPTER
iptables -A INPUT -p icmp -j DROP
iptables -A ENTRÉE -d 172.16.0.0/12 -j REJET

$ Agrandissement variable. Remplace '$FOO' par la valeur de la variable. Voir la rubrique
VARIABLES pour en savoir plus.

& Appel de fonction. Voir la rubrique FONCTIONS pour en savoir plus.

() Le symbole du tableau. À l'aide des parenthèses, vous pouvez définir une « liste » de valeurs qui
doit être appliqué pour la clé à sa gauche.

Mise en situation :

protocole ( tcp udp icmp )

cela se traduira par trois règles :

... -p TCP ...
... -p udp ...
... -p icmp ...

Seules les valeurs peuvent être « listées », vous ne pouvez donc pas faire quelque chose comme ceci :

proto tcp ( ACCEPTER LE JOURNAL );

mais tu peux faire ça :

chaîne (INPUT OUTPUT FORWARD) proto (icmp udp tcp) DROP;

(ce qui donnera neuf règles !)

Les valeurs sont séparées par des espaces. Le symbole du tableau est à la fois à gauche et à droite
associatif, contrairement au bloc d'imbrication, qui est uniquement associatif à gauche.

" # " Le symbole de commentaire. Tout ce qui suit ce symbole jusqu'à la fin de la ligne est
ignoré.

"`commande`"
Exécutez la commande dans un shell et insérez la sortie du processus. Voir la rubrique
recule pour en savoir plus.

'chaîne'
Citez une chaîne qui peut contenir des espaces, le signe dollar, etc.

LOG log-prefix ' hé, c'est mon préfixe de log !';

"chaîne"
Citez une chaîne (voir ci-dessus), mais les références de variables avec un signe dollar sont
évalué:

DNAT vers "$myhost:$myport" ;

Mots clés
Dans la section précédente, nous avons déjà introduit quelques mots-clés de base comme "chaîne",
« protocole » et « ACCEPTER ». Explorons leur nature.

Il existe trois types de mots-clés :

· Localisation les mots-clés définissent où une règle sera créée. Exemple : "table", "chaîne".

· rencontre les mots-clés effectuent un test sur tous les paquets qui passent. La règle actuelle est sans
effet si un (ou plusieurs) des matchs ne passe pas. Exemple : "proto", "daddr".

La plupart des correspondances sont suivies d'un paramètre : "proto tcp", "daddr 172.16.0.0/12".

· l'objectif les mots-clés indiquent quoi faire avec un paquet. Exemple : "ACCEPTER", "REJETER",
"saut".

Certaines cibles définissent plus de mots-clés pour spécifier des détails : "REJECT Reject-with icmp-
net-inaccessible".

Chaque règle consiste en un Localisation et l'objectif, plus un nombre quelconque de allumettes:

filtre de table # emplacement
proto tcp dport (http https) # correspondance
J'ACCEPTE; # cible

Strictement parlant, il existe un quatrième type : ferm mots-clés (qui contrôlent les paramètres internes de ferm
comportement), mais ils seront expliqués plus tard.

Paramètres
De nombreux mots-clés prennent des paramètres. Ceux-ci peuvent être spécifiés en tant que littéraux, références de variables ou
listes (tableaux):

proto udp
saddr $TRUSTED_HOSTS ;
port proto tcp (http https ssh);
LOG préfixe de journal « alerte funky wardriver : » ;

Certains d'entre eux peuvent être annulés (les listes ne peuvent pas être annulées) :

proto !esp;
proto udp dport !domaine;

Les mots-clés qui ne prennent aucun paramètre sont niés par un préfixe '!' :

protocole tcp !syn;

Lire iptables(8) pour voir où le ! peut être utilisé.

BASIQUE MOTS-CLÉS


Emplacement mots clés
domaine [ip|ip6]
Définissez le domaine. "ip" est la valeur par défaut et signifie "IPv4" (iptables). "ip6" est pour IPv6
support, en utilisant "ip6tables".

table [filtre|nat|mangle]
Spécifie dans quelle table netfilter cette règle sera insérée : "filter" (par défaut),
"nat" ou "mangle".

chaîne [nom-chaîne]
Spécifie la chaîne netfilter (dans la table actuelle) cette règle sera
inséré à. Les noms de chaînes prédéfinis courants sont "INPUT", "OUTPUT", "FORWARD",
« PREROUTING », « POSTROUTING », selon la table. Voir le netfiltre
documentation pour plus de détails.

Si vous spécifiez une chaîne inexistante ici, ferm ajoutera la règle à une chaîne personnalisée
avec ce nom.

politique [ACCEPTER|RETIRER|..]
Spécifie la stratégie par défaut pour la chaîne actuelle (intégrée uniquement). Peut être l'un des
les cibles intégrées (ACCEPTER, ABANDONNER, REJETER, ...). Un paquet qui ne correspond à aucune règle
dans une chaîne sera traité comme spécifié par la politique.

Pour éviter toute ambiguïté, spécifiez toujours les politiques de toutes les chaînes prédéfinies
explicitement.

@sous-chaîne ["CHAIN-NAME"] { }
Fonctionne comme les opérateurs de bloc normaux (c'est-à-dire sans le @sous-chaîne mot-clé), sauf
qui ferm déplace les règles entre les accolades dans une nouvelle chaîne personnalisée. Le nom
car cette chaîne est choisie automatiquement par ferm.

Dans de nombreux cas, c'est plus rapide qu'un simple bloc, car le noyau peut sauter un
énorme bloc de règles lorsqu'une condition préalable est fausse. Imaginez l'exemple suivant :

table filtre chaîne INPUT {
triste (1.2.3.4 2.3.4.5 3.4.5.6 4.5.6.7 5.6.7.8) {
proto tcp dport (http https ssh) ACCEPTER ;
proto udp dport domaine ACCEPTER;
}
}

Cela génère 20 règles. Lorsqu'un paquet arrive qui ne passe pas le triste
match, il vérifie néanmoins les 20 règles. Avec @sous-chaîne, ce contrôle est fait
une fois, ce qui permet un filtrage réseau plus rapide et une charge CPU moindre :

table filtre chaîne INPUT {
saddr (1.2.3.4 2.3.4.5 3.4.5.6 4.5.6.7 5.6.7.8) @sous-chaîne {
proto tcp dport (http https ssh) ACCEPTER ;
proto udp dport domaine ACCEPTER;
}
}

Facultativement, vous pouvez définir le nom de la sous-chaîne :

saddr (1.2.3.4 2.3.4.5 3.4.5.6) @subchain "foobar" {
proto tcp dport (http https ssh) ACCEPTER ;
proto udp dport domaine ACCEPTER;
}

Le nom peut être soit une chaîne littérale entre guillemets, soit une expression ferm développée
comme @cat("interface_", $iface) ou @substr($var,0,20).

Vous pouvez obtenir la même chose en déclarant explicitement une chaîne personnalisée, mais vous pouvez vous sentir
qu'en utilisant @sous-chaîne nécessite moins de frappe.

Basic iptables rencontre mots clés
interface [nom-interface]
Définissez le nom de l'interface, votre carte réseau externe, comme eth0, ou dialup comme
ppp1, ou tout autre périphérique que vous souhaitez faire correspondre pour transmettre des paquets. c'est équivalent
au commutateur "-i" dans iptables (8).

face externe [nom-interface]
Identique à l'interface, uniquement pour faire correspondre l'interface sortante pour un paquet, comme dans
iptables (8).

protocole [nom-protocole|numéro-protocole]
Actuellement pris en charge par le noyau sont tcp, udp et icmp, ou leurs
chiffres.

saddr|papa [adresse-spécification]
Correspond aux paquets provenant de l'adresse spécifiée (saddr) ou destinés à
l'adresse (daddr).

Exemples :

saddr 192.168/8 ACCEPTER; # (identique au suivant :)
saddr 192.168.0.0/255.255.255.0 ACCEPTER ;
daddr mon.domaine.com ACCEPTER;

fragment
Spécifiez que seuls les paquets IP fragmentés doivent être mis en correspondance. Lorsque les paquets sont
plus grand que la taille maximale des paquets que votre système peut gérer (appelée Maximum
Unité de transmission ou MTU) ils seront découpés en bits et envoyés un par un comme
paquets uniques. Voir i(8) si vous voulez trouver le MTU de votre système (le
la valeur par défaut est généralement de 1500 octets).

Les fragments sont fréquemment utilisés dans les attaques DOS, car il n'y a aucun moyen de trouver
l'origine d'un paquet de fragments.

sport|déport [spécifications du port]
Correspond aux paquets sur le port TCP ou UDP spécifié. "sport" correspond à la source
port et dport correspond au port de destination.

Cette correspondance ne peut être utilisée qu'après avoir spécifié "protocol tcp" ou "protocol udp",
car seuls ces deux protocoles ont réellement des ports.

Et quelques exemples de ports/plages valides :

dport 80 ACCEPTER ;
dport http ACCEPTER;
dport ssh:http ACCEPTER;
dport 0:1023 ACCEPTER ; # équivalent à :1023
dport 1023 : 65535 ACCEPTER ;

syn Spécifiez que le drapeau SYN dans un package tcp doit correspondre, qui sont utilisés pour
construire de nouvelles connexions tcp. Vous pouvez identifier les connexions entrantes avec ceci, et
décidez si vous voulez l'autoriser ou non. Les paquets qui n'ont pas ce drapeau sont
probablement à partir d'une connexion déjà établie, il est donc considéré comme raisonnable
en toute sécurité pour les laisser passer.

module [nom-module]
Chargez un module iptables. La plupart des modules fournissent plus de mots-clés de correspondance. Nous arriverons à
ça plus tard.

Basic l'objectif mots clés
saut [nom-chaîne-personnalisée]
Passe à une chaîne personnalisée. Si aucune règle de la chaîne personnalisée ne correspond, netfilter renvoie
à la règle suivante dans la chaîne précédente.

réelgoto [nom-chaîne-personnalisée]
Accédez à une chaîne personnalisée. Contrairement au saut option, RETOUR ne continuera pas le traitement
dans cette chaîne mais plutôt dans la chaîne qui nous a appelés via saut.

Le mot-clé réelgoto a été choisi pendant la période de transition, car goto
(déjà obsolète) était un alias pour saut.

ACCEPTER Accepte les paquets correspondants.

GOUTTE Abandonnez les paquets correspondants sans autre préavis.

REJETER Rejette les paquets correspondants, c'est-à-dire envoie un paquet ICMP à l'expéditeur, qui est le port-
inaccessible par défaut. Vous pouvez spécifier un autre type ICMP.

REJETER; # par défaut sur icmp-port-unreachable
REJET rejeter avec icmp-net-unreachable ;

Tapez "iptables -j REJECT -h" pour plus de détails.

RETOUR Terminer la chaîne en cours et revenir à la chaîne appelante (si "jump
[custom-chain-name]" a été utilisé).

NOP Aucune action du tout.

COMPLÉMENTAIRES MOTS-CLÉS


Netfilter est modulaire. Les modules peuvent fournir des cibles supplémentaires et des mots-clés de correspondance. La liste
des modules netfilter est en constante augmentation, et ferm essaie de continuer à les prendre en charge
tous. Ce chapitre décrit les modules actuellement pris en charge.

iptables rencontre modules
Compte Trafic de compte pour tous les hôtes dans le réseau/masque de réseau défini. C'est l'un des
match des modules qui se comportent comme une cible, c'est-à-dire que vous devrez principalement utiliser le NOP
cible.

compte mod aname mynetwork aaddr 192.168.1.0/24 ashort NOP;

type d'adresse
Vérifiez le type d'adresse ; soit l'adresse source, soit l'adresse de destination.

mod addrtype src-type DIFFUSION;
mod addrtype dst-type LOCAL ;

Tapez "iptables -m addrtype -h" pour plus de détails.

ah Vérifie l'en-tête SPI dans un paquet AH.

mod ah ahspi 0x101 ;
mod ah ahspi ! 0x200:0x2ff ;

Arguments supplémentaires pour IPv6 :

mod ah ahlen 32 ACCEPTER;
mod ah ahlen !32 ACCEPTER ;
mod ah ahres ACCEPTER;

commentaire Ajoute un commentaire de 256 caractères maximum à une règle, sans effet. Noter que
contrairement aux commentaires ferm ("#"), celui-ci apparaîtra dans "iptables -L".

commentaire du mod commentaire "Ceci est mon commentaire." J'ACCEPTE;

condition
Correspond si une valeur dans /proc/net/ipt_condition/NAME est 1 (le chemin est
/proc/net/ip6t_condition/NAME pour le domaine ip6).

mod condition condition (abc def) ACCEPTER;
mod condition condition !foo ACCEPTER;

connoctets
Faire correspondre par combien d'octets ou de paquets une connexion (ou l'un des deux flux
constituant la connexion) ont été transférés jusqu'à présent, soit en moyenne par octets par
paquet.

mod connbytes connbytes 65536 : connbytes-dir les deux connbytes-mode bytes ACCEPT ;
mod connbytes connbytes !1024:2048 connbytes-dir réponse connbytes-mode packets ACCEPT;

Valeurs valides pour répertoire-connbytes: original, répondre, tous les deux; pour mode connbytes:
paquets, octets, moy.pkt.

limiter
Permet de restreindre le nombre de connexions TCP parallèles à un serveur par
adresse IP du client (ou bloc d'adresse).

mod connlimit connlimit-au-dessus de 4 REJETER ;
mod connlimit connlimit-above !4 ACCEPTER ;
mod connlimit connlimit-dessus de 4 connlimit-mask 24 REJECT;

connmark
Vérifiez le champ de marquage associé à la connexion, défini par la cible CONNMARK.

mod connmark marque 64;
mod connmark marque 6/7;

conntrack
Vérifiez les informations de suivi de connexion.

mod conntrack ctstate (ÉTABLI EN RELATION);
mod conntrack ctproto tcp ;
mod conntrack crigsrc 192.168.0.2;
mod conntrack ctorigdst 1.2.3.0/24 ;
mod conntrack crigsrcport 67;
mod conntrack crigdstport 22;
mod conntrack ctreplsrc 2.3.4.5 ;
mod conntrack ctrepldst ! 3.4.5.6 ;
mod conntrack ctstatus ASSURÉ ;
mod conntrack ctexpire 60 ;
mod conntrack ctexpire 180:240 ;

Tapez "iptables -m conntrack -h" pour plus de détails.

DCCP Vérifiez les attributs spécifiques du DCCP (Datagram Congestion Control Protocol). Cette
module est automatiquement chargé lorsque vous utilisez "protocole dccp".

proto dccp sport 1234 dport 2345 ACCEPTER;
proto dccp dccp-types (SYNCACK ACK) ACCEPTER ;
proto dccp types-dccp !REQUEST DROP;
proto dccp dccp-option 2 ACCEPTER ;

DSCP Faites correspondre le champ DSCP 6 bits dans le champ TOS.

mod dscp dscp 11 ;
mod dscp dscp-classe AF41;

ecn Faites correspondre les bits ECN d'un en-tête TCP IPv4.

mod ecn ecn-tcp-cwr ;
mod ecn ecn-tcp-ece ;
mod ecn ecn-ip-ect 2 ;

Tapez "iptables -m ecn -h" pour plus de détails.

esp Vérifie l'en-tête SPI dans un paquet ESP.

mod esp espspi 0x101 ;
mod esp espspi ! 0x200:0x2ff ;

eui64 "Ce module correspond à la partie EUI-64 d'une adresse IPv6 autoconfigurée sans état.
Il compare l'EUI-64 dérivé de l'adresse MAC source dans la trame Ethernet avec
les 64 bits inférieurs de l'adresse source IPv6. Mais le bit "Universel/Local" n'est pas
par rapport. Ce module ne correspond pas aux autres trames de couche de liaison et n'est valide que dans
les chaînes PREROUTING, INPUT et FORWARD."

mod eui64 ACCEPTER;

flou "Ce module correspond à une limite de débit basée sur un contrôleur à logique floue [FLC]."

mod flou limite inférieure 10 limite supérieure 20 ACCEPTER;

hbh Correspond à l'en-tête Hop-by-Hop Options (ip6).

mod hbh hbh-len 8 ACCEPTER ;
mod hbh hbh-len !8 ACCEPTER;
mod hbh hbh-opts (1:4 2:8) ACCEPTER ;

hl Correspond au champ Hop Limit (ip6).

mod hl hl-eq (8 10) ACCEPTER ;
mod hl hl-eq !5 ACCEPTER;
mod hl hl-gt 15 ACCEPTER;
mod hl hl-lt ​​2 ACCEPTER;

assistant Vérifie quel module d'assistance conntrack suit cette connexion. Le port peut être
spécifié avec "-portnr".

mod helper helper irc ACCEPTER;
mod helper helper ftp-21 ACCEPTER;

icmp Vérifiez les attributs spécifiques à ICMP. Ce module est automatiquement chargé lorsque vous utilisez
"protocole icmp".

proto icmp icmp-type echo-request ACCEPTER;

Cette option peut également être utilisée dans être ip6 domaine, bien que cela s'appelle icmpv6 in
ip6tables.

Utilisez "iptables -p icmp "-h"" pour obtenir une liste des types ICMP valides.

Plage ip Faites correspondre une plage d'adresses IPv4.

mod iprange src-range 192.168.2.0-192.168.3.255 ;
mod iprange dst-range ! 192.168.6.0-192.168.6.255 ;

optionsipv4
Correspondance sur les options d'en-tête IPv4 telles que le routage source, l'itinéraire d'enregistrement, l'horodatage et
routeur-alerte.

mod ipv4options ssrr ACCEPTER;
mod ipv4options lsrr ACCEPTER;
mod ipv4options no-srr ACCEPTER;
mod ipv4options !rr ACCEPTER;
mod ipv4options !ts ACCEPTER;
mod ipv4options !ra ACCEPTER;
mod ipv4options !any-opt ACCEPTER;

en-tête ipv6
Correspond à l'en-tête d'extension IPv6 (ip6).

mod ipv6header header !(hop frag) ACCEPTER;
en-tête mod ipv6header (auth dst) ACCEPTER ;

limite de hachage
Similaire à 'mod limit', mais ajoute la possibilité d'ajouter par destination ou par port
limites gérées dans une table de hachage.

mod hashlimit hashlimit 10/minute hashlimit-burst 30/minute
hashlimit-mode dstip hashlimit-name foobar ACCEPT ;

Valeurs possibles pour hashlimit-mode : dstip dstport srcip srcport (ou une liste avec
plus d'un d'entre eux).

Il y a plus de paramètres possibles, tapez "iptables -m hashlimit -h" pour
Documentation.

longueur Vérifiez la longueur du paquet.

longueur du module longueur 128 ; # exactement 128 octets
longueur du module 512:768 ; # gamme
longueur du module longueur ! 256 ; # annulé

limite Limite le débit de paquets.

limite mod limite 1/seconde ;
mod limite limite 15/minute limite-rafale 10 ;

Tapez "iptables -m limit -h" pour plus de détails.

mac Faites correspondre l'adresse MAC source.

mod mac mac source 01:23:45:67:89 ;

marque Correspond aux paquets en fonction de leur champ de marque netfilter. Cela peut être un entier de 32 bits
entre 0 et 4294967295.

marque de mod marque 42 ;

mh Correspond à l'en-tête de mobilité (domaine ip6).

mise à jour de liaison de type proto mh mh ACCEPTER ;

multiport
Faites correspondre un ensemble de ports source ou de destination (UDP et TCP uniquement).

ports source multiport mod (https ftp);
ports de destination multiports mod (domaine mysql);

Cette règle a un gros avantage sur "dport" et "sport": elle ne génère qu'une seule règle
jusqu'à 15 ports au lieu d'une règle pour chaque port.

n Faites correspondre chaque 'n-ième paquet.

mod nième tous les 3 ;
mod nième compteur 5 tous les 2 ;
mod nième démarrer 2 tous les 3 ;
mod nth start 5 paquet 2 tous les 6 ;

Tapez "iptables -m nth -h" pour plus de détails.

osf Faites correspondre les paquets en fonction du système d'exploitation de l'expéditeur.

mod OSF genre Linux;
mode osf ! genre FreeBSD ttl 1 log 1;

Tapez "iptables -m osf -h" pour plus de détails.

propriétaire Vérifiez les informations sur le créateur du paquet, à savoir l'identifiant de l'utilisateur, l'identifiant du groupe, l'identifiant du processus,
ID de session et nom de la commande.

propriétaire du mod uid-owner 0 ;
propriétaire du mod gid-owner 1000 ;
propriétaire du mod pid-owner 5432 ;
propriétaire du mod sid-propriétaire 6543 ;
propriétaire du mod cmd-propriétaire "sendmail" ;

("cmd-owner", "pid-owner" et "sid-owner" nécessitent des correctifs spéciaux pour le noyau non
inclus dans le noyau Linux vanille)

développement physique Correspond au périphérique physique sur lequel un paquet est entré ou est sur le point de quitter le
machine. Ceci est utile pour les interfaces pontées.

mod physdev physdev-in ppp1 ;
mod physdev sortie physdev eth2 ;
mod physdev physdev-est-in ;
mod physdev physdev-is-out ;
mod physdev physdev-est-ponté ;

type de paquet Vérifiez le type de paquet de couche liaison.

mod pkttype pkt-type unicast ;
boîtier de diffusion de type pkt type pkt mod ;
mod pkttype multidiffusion de type pkt;

politique Correspond à la stratégie IPsec appliquée à ce paquet.

mod politique dir out pol ipsec ACCEPTER;
politique de mod strict reqid 23 spi 0x10 proto ah ACCEPTER;
tunnel en mode politique mod tunnel-src 192.168.1.2 ACCEPTER ;
tunnel en mode politique mod tunnel-dst 192.168.2.1 ACCEPTER ;
mod policy strict next reqid 24 spi 0x11 ACCEPTER ;

Notez que le mot-clé proto est également utilisé comme une version abrégée de protocole
(module de correspondance intégré). Vous pouvez résoudre ce conflit en utilisant toujours le long
mot-clé protocole.

psd Détecter les analyses de port TCP/UDP.

mod psd psd-poids-seuil 21 psd-délai-seuil 300
psd-lo-ports-weight 3 psd-hi-ports-weight 1 DROP ;

quota Met en œuvre des quotas de réseau en décrémentant un compteur d'octets avec chaque paquet.

quota de mod quota 65536 ACCEPTER;

aléatoire Faites correspondre un pourcentage aléatoire de tous les paquets.

moyenne aléatoire mod 70 ;

royaume Faites correspondre le domaine de routage. Utile dans les environnements utilisant BGP.

royaume des mods royaume 3;

récent Marquez temporairement les adresses IP sources.

ensemble récent de mods ;
mod recent rcheck secondes 60;
nom de la source de l'ensemble récent du mod "badguy" ;
mod ensemble récent rdest;
mod recent rcheck nom de la source "badguy" secondes 60;
seconde de mise à jour récente du mod 120 hitcount 3 rttl;

Ce module netfilter a un défaut de conception : bien qu'il soit implémenté comme une correspondance
module, il a un comportement semblable à une cible lors de l'utilisation du mot-clé "set".

<http://snowman.net/projects/ipt_recent/>

rt Faites correspondre l'en-tête de routage IPv6 (ip6 uniquement).

mod rt rt-type 2 rt-len 20 ACCEPTER;
mod rt rt-type !2 rt-len !20 ACCEPTER;
mod rt rt-segsleft 2:3 ACCEPTER;
mod rt rt-segsleft !4:5 ACCEPTER;
mod rt rt-0-res rt-0-addrs (::1 ::2) rt-0-not-strict ACCEPTER;

sctp Vérifiez les attributs spécifiques SCTP (Stream Control Transmission Protocol). Cette
module est automatiquement chargé lorsque vous utilisez "protocol sctp".

proto sctp sport 1234 dport 2345 ACCEPTER;
types de blocs proto sctp uniquement DATA:Be ACCEPT;
proto sctp chunk-types any (INIT INIT_ACK) ACCEPT ;
proto sctp chunk-types !all (HEARTBEAT) ACCEPT ;

Utilisez "iptables -p sctp "-h"" pour obtenir une liste des types de blocs valides.

set Vérifie la source ou la destination IP/Port/MAC par rapport à un ensemble.

ensemble de mods ensemble badguys src DROP;

Voirhttp://ipset.netfilter.org/> pour plus d'informations.

Etat Vérifie l'état du suivi de la connexion.

état mod état INVALID DROP;
état mod état (ÉTABLISHED RELATED) ACCEPTER ;

Tapez "iptables -m state -h" pour plus de détails.

statistique
Successeur de n et aléatoire, actuellement sans papiers dans le iptables(8) page de manuel.

Mod statistique mode probabilité aléatoire 0.8 ACCEPTER;
mod statistic mode nième tous les 5 paquets 0 DROP ;

un magnifique Correspond à une chaîne.

chaîne mod chaîne "foo bar" ACCEPTER;
chaîne de modification algo kmp de 64 à 128 chaîne hexadécimale « deadbeef » ACCEPTER ;

tcp Vérifie les attributs spécifiques à TCP. Ce module est automatiquement chargé lorsque vous utilisez
"protocole tcp".

protocole TCP Sport 1234 ;
port proto tcp 2345 ;
proto tcp tcp-drapeaux (SYN ACK) SYN;
proto tcp tcp-drapeaux ! (SYN ACK) SYN;
proto tcp tcp-flags TOUS (RST ACK);
synchro proto tcp ;
proto tcp tcp-option 2 ;
proto tcp mss 512 ;

Tapez "iptables -p tcp -h" pour plus de détails.

tcpmss Vérifiez le champ TCP MSS d'un paquet SYN ou SYN/ACK.

mod tcpmss mss 123 ACCEPTER;
mod tcpmss mss 234:567 ACCEPTER ;

fois Vérifiez si l'heure d'arrivée d'un paquet se situe dans une plage donnée.

heure du module heure de début 12:00 ;
heure mod timestop 13:30;
jours de temps de mod (Lun Mer Ven);
date de début de l'heure du module 2005 : 01 : 01 ;
date de début de l'heure du module 2005 : 01 : 01 : 23 : 59 : 59 ;
heure du mod datestop 2005:04:01 ;
heure du mois jour du mois (30 31);
heure du module en semaine (mer jeu);
heure du mod timestart 12:00 utc;
heure du mod timestart 12:00 localtz;

Tapez "iptables -m time -h" pour plus de détails.

tousser Correspond à un paquet sur la valeur TOS spécifiée.

mod tos tos Minimiser-Coût ACCEPTER;
mod tos tos !Normal-Service ACCEPTER;

Tapez "iptables -m tos -h" pour plus de détails.

ttl Correspond au champ ttl (durée de vie) dans l'en-tête IP.

mod ttl ttl-eq 12; # ttl est égal
mod ttl ttl-gt 10; # ttl supérieur à
mod ttl ttl-lt 16; # ttl inférieur à

u32 Compare les données brutes du paquet. Vous pouvez spécifier plus d'un filtre dans un ferm
liste; celles-ci ne sont pas développées en plusieurs règles.

mod u32 u32 '6&0xFF=1' ACCEPTER;
mod u32 u32 ('27&0x8f=7' '31=0x527c4833') DROP;

impur Correspond aux paquets qui semblent mal formés ou inhabituels. Ce match n'a pas d'autre
paramètres.

iptables l'objectif modules
Les cibles supplémentaires suivantes sont disponibles dans ferm, à condition de les avoir activées dans
votre noyau :

CLASSER
Définissez la classe CBQ.

CLASSIFIER la classe d'ensemble 3:50 ;

CLUSTERIP
Configurez un simple cluster de nœuds qui partagent une certaine adresse IP et MAC.
Les connexions sont réparties de manière statique entre les nœuds.

CLUSTERIP nouveau hashmode sourceip clustermac 00:12:34:45:67:89
total-nodes 4 local-node 2 hash-init 12345 ;

CONNMARK
Définit la valeur de la marque netfilter associée à une connexion.

marque-marque CONNMARK 42 ;
Marque de sauvegarde CONNMARK ;
Marque de restauration CONNMARK ;
Masque de marque de sauvegarde CONNMARK 0x7fff ;
Masque de marque de restauration CONNMARK 0x8000 ;

CONNSECMARK
Ce module copie les marquages ​​de sécurité des paquets vers les connexions (si non étiquetés),
et des connexions aux paquets (également uniquement s'ils ne sont pas étiquetés). Généralement utilisé dans
en conjonction avec SECMARK, il n'est valable que dans la table mangle.

CONNSECMARK enregistrer ;
restauration CONNSECMARK ;

DNAT à [adresse-ip|plage-ip|plage-port-ip]
Modifiez l'adresse de destination du paquet.

DNAT à 10.0.0.4;
DNAT à 10.0.0.4:80;
DNAT à 10.0.0.4:1024-2048;
DNAT à 10.0.1.1-10.0.1.20;

ECN Cette cible permet de contourner sélectivement les trous noirs ECN connus. Il ne peut que
être utilisé dans la table de mangle.

ECN ecn-tcp-remove ;

HL Modifiez le champ IPv6 Hop Limit (ip6/mangle uniquement).

HL hl-set 5 ;
HL hl-déc 2 ;
HL hl-inc 1 ;

IPV4OPTSSTRIP
Supprimez toutes les options IP d'un paquet. Ce module ne prend aucune option.

IPV4OPTSSTRIP ;

Se Connecter Enregistrez tous les paquets qui correspondent à cette règle dans le journal du noyau. Attention au journal
inondation. Notez qu'il s'agit d'une "cible non terminale", c'est-à-dire un parcours de règle
continue à la règle suivante.

LOG avertissement au niveau du journal préfixe du journal « Regardez ceci : » ;
LOG log-tcp-sequence log-tcp-options ;
LOG log-ip-options ;

MARK Définit le champ netfilter mark pour le paquet (un entier de 32 bits compris entre 0 et
4294967295):

MARK repère 42 ;
MARK set-xmark 7/3 ;
MARQUEz et marquez 31 ;
MARK ou-mark 1;
MARK xor-mark 12 ;

MASCARADE
Des mascarades assorties aux paquets. Eventuellement suivi d'un port ou d'une plage de ports pour
iptables. Spécifiez comme "123", "123-456" ou "123:456". Le paramètre de plage de ports
spécifie de quels ports locaux les connexions masquées doivent provenir.

MASCARADE;
MASQUÉRADE vers les ports 1234:2345 ;
MASQUERADE vers les ports 1234:2345 aléatoire ;

MIROIR Cible de démonstration expérimentale qui inverse les champs source et destination
dans l'en-tête IP.

MIROIR;

NETMAP Mappez un réseau entier sur un autre réseau dans le nat tableau.

NETMAP à 192.168.2.0/24 ;

NONTRACK Désactivez le suivi de connexion pour tous les paquets correspondant à cette règle.

port proto tcp (135:139 445) NOTRACK ;

NFLLOG Enregistrer les paquets sur netlink ; c'est le successeur de ULOG.

NFLOG nflog-group 5 nflog-prefix "Regardez ceci : ";
NFLOG nflog-plage 256 ;
NFLOG nflog-seuil 10 ;

NFQUEUE Mise en file d'attente de l'espace utilisateur, nécessite la prise en charge du noyau nfnetlink_queue.

proto tcp dport ftp NFQUEUE file d'attente-num 20;

FILE D'ATTENTE File d'attente de l'espace utilisateur, le prédécesseur de NFQUEUE. Tous les paquets vont dans la file d'attente 0.

proto tcp dport ftp QUEUE ;

RÉORIENTER vers-ports [port]
Proxy transparent : modifiez l'IP de destination du paquet vers la machine
elle-même.

proto tcp dport http REDIRECTION vers les ports 3128 ;
proto tcp dport http REDIRECTION vers les ports 3128 aléatoire ;

MÊME Similaire à SNAT, mais un client est mappé sur la même IP source pour tous ses
connexions.

IDENTIQUE à 1.2.3.4-1.2.3.7 ;
IDENTIQUE à 1.2.3.8-1.2.3.15 au coude à coude ;
Idem au 1.2.3.16-1.2.3.31 aléatoire ;

SECMARQUE Ceci est utilisé pour définir la valeur de la marque de sécurité associée au paquet à utiliser par
sous-systèmes de sécurité tels que SELinux. Il n'est valable que dans la table mangle.

SECMARK selctx "system_u:object_r:httpd_packet_t:s0" ;

SET [ajouter-ensemble|supprimer-ensemble] [nom du jeu] [drapeau(s)]
Ajoutez l'IP à l'ensemble spécifié. Voirhttp://ipset.netfilter.org/>

proto icmp icmp-type echo-request SET add-set badguys src ;

SNAT à [adresse-ip|plage-ip|plage-port-ip]
Modifiez l'adresse source du paquet.

SNAT à 1.2.3.4 ;
SNAT à 1.2.3.4 : 20000-30000 ;
SNAT à 1.2.3.4 aléatoire ;

TCPMSS Modifiez la valeur MSS des paquets TCP SYN.

TCPMSS set-mss 1400 ;
TCPMSS clamp-mss-to-pmtu ;

CGU réglages [valeur]
Définissez le bit de type de service du package tcp sur cette valeur. Celui-ci sera utilisé par
quel que soit le planificateur de trafic qui le souhaite, principalement votre propre machine Linux, mais peut-être
Suite. Les tos-bits d'origine sont effacés et écrasés par cette valeur.

Tos set-tos Maximize-Throughput;
TOS et-tos 7;
TOS ou-tos 1 ;
TOS xor-tos 4 ;

Tapez "iptables -j TOS -h" pour plus de détails.

TTL Modifiez le champ d'en-tête TTL.

TTL ttl-set 16 ;
TTL ttl-déc 1 ; # diminuer de 1
TTL ttl-inc 4; # augmenter de 4

ULOG Consignez les paquets dans un programme de l'espace utilisateur.

ULOG ulog-nlgroup 5 ulog-prefix « Regardez ceci : » ;
ULOG ulog-cprange 256 ;
ULOG ulog-qthreshold 10 ;

AUTRES DOMAINES


Depuis la version 2.0, ferm prend en charge non seulement ip et ip6Mais c'est aussi arp (tableaux ARP) et eb
(tables de pontage Ethernet). Les concepts sont similaires à iptables.

arptables mots clés
IP source, IP de destination
Correspond à l'adresse IPv4 source ou de destination. Pareil que triste et papa dans le ip
domaine.

source-mac, destination-mac
Correspond à l'adresse MAC source ou de destination.

interface, face externe
Interface d'entrée et de sortie.

longueur h
Longueur matérielle du paquet.

chaîne INPUT longueur h 64 ACCEPTER;

code opération Code d'opération, pour plus de détails voir le iptables (8).

code opération 9 ACCEPTER ;

type h Type de matériel.

h-type 1 ACCEPTER ;

prototype
Type de protocole.

prototype 0x800 ACCEPTER ;

mutiler
Les mots clés mangle-ip-s, mangle-ip-d, mangle-mac-s, mangle-mac-d, mangle-cible
peut être utilisé pour le mutilation ARP. Voir iptables(8) pour plus de détails.

créances mots clés
proto Correspond au protocole qui a créé le cadre, par exemple IPv4 or PPP. Pour une liste, voir
/etc/ethertypes.

interface, face externe
Interface physique d'entrée et de sortie.

entrée logique, sortie logique
L'interface de pont logique.

triste, papa
Correspond à l'adresse MAC source ou de destination.

Match modules
Les modules de correspondance suivants sont pris en charge : 802.3, arp, ip, mark_m, pkttype, stp,
vlan, journal.

Cible extensions
Les extensions cibles suivantes sont prises en charge : arpreply, dnat, mark, redirect,
crotte.

Veuillez noter qu'il existe un conflit entre --marque du marque_m module de correspondance
et -j marque. Puisque les deux seraient implémentés avec le mot-clé ferm marque, Nous
a décidé de résoudre ce problème en écrivant le nom de la cible en majuscule, comme dans l'autre
domaines. L'exemple suivant réécrit la marque 1 à 2 :

marquez 1 marquez 2 ;

Avancé CARACTERISTIQUES


Variables
Dans les fichiers de pare-feu complexes, il est utile d'utiliser des variables, par exemple pour donner un réseau
interface un nom significatif.

Pour définir des variables, écrivez :

@def $DEV_INTERNET = eth0;
@def $PORTS = (http ftp);
@def $PLUS_PORTS = ($PORTS 8080);

Dans le code ferm réel, les variables sont utilisées comme n'importe quel autre paramètre mot-clé :

chaîne INPUT interface $DEV_INTERNET proto tcp dport $MORE_PORTS ACCEPT;

Notez que les variables ne peuvent être utilisées que dans les paramètres de mot-clé ("192.168.1.1", "http"); elles ou ils
ne peut pas contenir de mots-clés ferm comme "proto" ou "interface".

Les variables ne sont valides que dans le bloc courant :

@def $DEV_INTERNET = eth1;
chaîne ENTREE {
protocole tcp {
@def $DEV_INTERNET = ppp0;
interface $DEV_INTERNET port http ACCEPT;
}
interface $DEV_INTERNET DROP ;
}

sera étendu à :

chaîne ENTREE {
protocole tcp {
interface ppp0 dport http ACCEPTER;
}
interface eth1 DROP ;
}

Le "def $DEV_INTERNET = ppp0" n'est valable que dans le bloc "proto tcp" ; le bloc parent
sait toujours "set $DEV_INTERNET = eth1".

Les fichiers inclus sont spéciaux - les variables déclarées dans un fichier inclus sont toujours disponibles dans
le bloc d'appel. Ceci est utile lorsque vous incluez un fichier qui ne déclare que des variables.

Automatique les variables
Certaines variables sont définies en interne par ferm. Les scripts Ferm peuvent les utiliser comme n'importe quel autre
variable.

$NOM DE FICHIER
Le nom du fichier de configuration relatif au répertoire ferm a été démarré.

$NOM DU FICHIER
Le nom de base du fichier de configuration.

$NOMDIR
Le répertoire du fichier de configuration.

$DOMAINE Le domaine actuel. Un des ip, ip6, arp, eb.

TABLE $ La table netfilter actuelle.

CHAÎNE $ La chaîne de filtrage actuelle.

LIGNE $ La ligne du script actuel. Il peut être utilisé comme ceci :

@def &log($msg) = {
LOG préfixe de journal "rule=$msg:$LINE " ;
}
.
.
.
&log("message de journal");

Les fonctions
Les fonctions sont similaires aux variables, sauf qu'elles peuvent avoir des paramètres, et elles fournissent
commandes ferm, pas des valeurs.

@def &FOO() = proto (tcp udp) domaine dport ;
&FOO() ACCEPTER;

@def &TCP_TUNNEL($port, $dest) = {
table filtre chaîne FORWARD interface ppp0 proto tcp dport $port daddr $dest externalface eth0 ACCEPTER;
table nat chain PREROUTING interface ppp0 proto tcp dport $port daddr 1.2.3.4 DNAT vers $dest;
}

&TCP_TUNNEL(http, 192.168.1.33) ;
&TCP_TUNNEL(ftp, 192.168.1.30) ;
&TCP_TUNNEL((ssh smtp), 192.168.1.2);

Un appel de fonction qui contient un bloc (comme '{...}') doit être la dernière commande dans un ferm
règle, c'est-à-dire qu'il doit être suivi de ';'. Les '&FO()' exemple ne contient pas de bloc, donc
vous pouvez écrire « ACCEPTER » après l'appel. Pour contourner cela, vous pouvez réorganiser les mots-clés :

@def &IPSEC() = { proto (en particulier ah); proto udp dport 500; }
chaîne INPUT ACCEPT &IPSEC();

Backticks
Avec les backticks, vous pouvez utiliser la sortie d'une commande externe :

@def $DNSSERVERS = `grep serveur de noms / Etc / resolv.conf | awk '{print $2}'`;
chaîne INPUT proto tcp saddr $DNSSERVERS ACCEPT;

La commande est exécutée avec le shell (/ Bin / sh), tout comme les backticks en perl. ferm fait
ne faites aucune expansion de variable ici.

La sortie est ensuite tokenisée et enregistrée sous forme de liste ferm (tableau). Lignes commençant par '#'
sont ignorés ; les autres lignes peuvent contenir n'importe quel nombre de valeurs, séparées par des espaces.

Inclus
Le @comprendre le mot-clé vous permet d'inclure des fichiers externes :

@include 'vars.ferm';

Le nom du fichier est relatif au fichier appelant, par exemple lors de l'inclusion de
/etc/ferm/ferm.conf, la déclaration ci-dessus comprend /etc/ferm/vars.ferm. Variables et
les fonctions déclarées dans un fichier inclus sont toujours disponibles dans le fichier appelant.

de Swanson comprennent fonctionne dans un bloc :

chaîne ENTREE {
@include 'input.ferm';
}

Si vous spécifiez un répertoire (avec un '/' à la fin), tous les fichiers de ce répertoire sont
inclus, classés par ordre alphabétique :

@include 'ferm.d/';

Avec un symbole de tuyau de fuite, ferm exécute une commande shell et analyse sa sortie :

@include '/root/generate_ferm_rules.sh $HOSTNAME|'

Conditionnel
Le mot-clé @si introduit une expression conditionnelle :

@if $condition DROP ;

Une valeur est évaluée vraie comme en Perl : zéro, liste vide, chaîne vide sont fausses,
tout le reste est vrai. Exemples de vraies valeurs :

(un B); 1; « foo » ; (0 0)

Exemples de fausses valeurs :

(); 0 ; « 0 » ; ''

Il y a aussi @autre:

@if $condition DROP; @else REJETER;

Notez le point-virgule avant le @autre.

Il est possible d'utiliser des accolades après soit @si or @autre:

@if $état {
MARK repère 2 ;
RETOUR;
} @autre {
MARK repère 3 ;
}

Étant donné que l'accolade fermante termine également la commande, le point-virgule n'est pas nécessaire.

Il n'y a pas de @elsif, utilisation @autre @si à la place.

Mise en situation :

@def $have_ipv6 = `test -f /proc/net/ip6_tables_names && echo 1 || echo`;
@if $avoir_ipv6 {
domaine ip6 {
#....
}
}

Crochets
Pour exécuter des commandes personnalisées, vous pouvez installer des hooks :

@hook pré "écho 0 >/proc/sys/net/ipv4/conf/eth0/transmission";
@hook post "écho 1 >/proc/sys/net/ipv4/conf/eth0/transmission";
@hook flush "écho 0 >/proc/sys/net/ipv4/conf/eth0/transmission";

La commande spécifiée est exécutée à l'aide du shell. "pre" signifie exécuter la commande avant
en appliquant les règles du pare-feu, et "post" signifie exécuter la commande par la suite. crochets "à fleur"
sont exécutés après que ferm a vidé les règles du pare-feu (option --flush). Vous pouvez installer n'importe quel
nombre de crochets.

SLIP INTÉGRÉ FONCTIONS


Il existe plusieurs fonctions intégrées qui pourraient vous être utiles.

@eq(a,b)
Teste l'égalité de deux valeurs. Exemple:

@if @eq($DOMAIN, ip6) DROP ;

@ne(a,b)
Semblable à @eq, cela teste la non-égalité.

@pas(x)
Annule une valeur booléenne.

@resolve((nom d'hôte1 nom d'hôte2 ...), [taper])
Habituellement, les noms d'hôtes sont résolus par iptables. Pour laisser ferm résoudre les noms d'hôtes, utilisez le
fonction @resolve :

saddr @resolve(my.host.foo) proto tcp dport ssh ACCEPTER;
saddr @resolve((un autre.hôte.foo troisième.hôte.foo)) proto tcp dport openvpn ACCEPTER ;
daddr @resolve(ipv6.google.com, AAAA) proto tcp dport http ACCEPTER ;

Notez les doubles parenthèses dans la deuxième ligne : la paire intérieure pour créer une liste ferm,
et la paire externe en tant que délimiteurs de paramètres de fonction.

Le deuxième paramètre est facultatif et spécifie le type d'enregistrement DNS. La valeur par défaut est "A".

Soyez prudent avec les noms d'hôtes résolus dans la configuration du pare-feu. Les requêtes DNS peuvent bloquer le
configuration du pare-feu pendant une longue période, laissant la machine vulnérable, ou ils peuvent échouer.

@chat(un, b, ...)
Concaténez tous les paramètres en une seule chaîne.

@substr(expression, décalage, longueur)
Extrait une sous-chaîne d'expression et la renvoie. Le premier caractère est à l'offset 0. Si
OFFSET est négatif, commence aussi loin de la fin de la chaîne.

@longueur(expression)
Renvoie la longueur en caractères de la valeur de EXPR.

@basename(chemin)
Renvoie le nom de base du fichier pour un chemin donné (File::Spec::splitpath).

@dirname(chemin)
Renvoie le nom du dernier répertoire pour un chemin donné, en supposant que le dernier composant est un
nom de fichier (File::Spec::splitpath).

@ipfilter(liste)
Filtre les adresses IP qui ne correspondent évidemment pas au domaine actuel. C'est-à-dire
utile pour créer des variables et des règles communes pour IPv4 et IPv6 :

@def $TRUSTED_HOSTS = (192.168.0.40 2001:abcd:ef::40);

domaine (ip ip6) chaîne INPUT {
saddr @ipfilter($TRUSTED_HOSTS) proto tcp dport ssh ACCEPTER;
}

RECETTES


Le ./exemples/ répertoire contient de nombreuses configurations ferm qui peuvent être utilisées pour commencer
un nouveau pare-feu. Cette section contient plus d'échantillons, de recettes et d'astuces.

Facile port la transmission
La fonction Ferm rend les tâches de routine rapides et faciles :

@def &FORWARD_TCP($proto, $port, $dest) = {
table filtre chaîne FORWARD interface $DEV_WORLD face externe $DEV_DMZ daddr $dest proto $proto dport $port ACCEPT;
table nat chain PREROUTING interface $DEV_WORLD daddr $HOST_STATIC proto $proto dport $port DNAT vers $dest;
}

&FORWARD_TCP(tcp, http, 192.168.1.2);
&FORWARD_TCP(tcp, smtp, 192.168.1.3);
&FORWARD_TCP((tcp udp), domaine, 192.168.1.4);

Remote ferm
Si la machine cible ne peut pas s'exécuter ferm pour une raison quelconque (peut-être un périphérique intégré
sans Perl), vous pouvez éditer le ferm fichier de configuration sur un autre ordinateur et laissez ferm
y générer un script shell.

Exemple pour OpenWRT :

ferm --remote --shell mywrt/ferm.conf >mywrt/firewall.user
chmod +x monwrt/firewall.user
scp mywrt/firewall.user mywrt.local.net :/ Etc /
ssh monwrt.local.net /etc/firewall.user

OPTIONS


--noexec N'exécutez pas le iptables(8) commandes, mais sautez à la place. De cette façon, vous pouvez
analyser vos données, utiliser --lignes pour voir la sortie.

--affleurer Efface les règles du pare-feu et définit la politique de toutes les chaînes sur ACCEPTER. ferm
a besoin d'un fichier de configuration pour déterminer quels domaines et tables sont
affecté.

--lignes Affichez les lignes de pare-feu qui ont été générées à partir des règles. ils seront montrés
juste avant leur exécution, donc si vous obtenez des messages d'erreur de iptables(8)
etc., vous pouvez voir quelle règle a causé l'erreur.

--interactif
Appliquez les règles du pare-feu et demandez confirmation à l'utilisateur. Revient au
ensemble de règles précédent s'il n'y a pas de réponse utilisateur valide dans les 30 secondes (voir
--temps libre). C'est utile pour l'administration du firewall à distance : vous pouvez tester
les règles sans craindre de s'enfermer.

--temps libre S If --interactif est utilisé, puis annuler s'il n'y a pas de réponse utilisateur valide
après ce nombre de secondes. La valeur par défaut est 30.

--Aidez-moi Affiche une brève liste des options de ligne de commande disponibles.

--version Affiche le numéro de version du programme.

--vite Activer le mode rapide : ferm génère un iptables-sauvegarder(8) et l'installe
avec iptables-restauration(8). C'est beaucoup plus rapide, car ferm appelle iptables(8)
une fois pour chaque règle par défaut.

Le mode rapide est activé par défaut car ferm 2.0, dépréciant cette option.

--lent Désactiver le mode rapide, c'est-à-dire exécuter iptables(8) pour chaque règle, et n'utilisez pas
iptables-restauration (8).

--coquille Générer un script shell qui appelle iptables-restauration(8) et l'imprime.
Implique --fast --lines.

--à distance Générer des règles pour une machine distante. Implique --noexec et --lignes. Peut être
combiné avec --coquille.

--domaine {ip|ip6}
Ne gère que le domaine spécifié. ferm la sortie peut être vide si le domaine est
pas configuré dans le fichier d'entrée.

--déf '$nom=valeur'
Remplacer une variable définie dans le fichier de configuration.

Utilisez ferm en ligne en utilisant les services onworks.net


Serveurs et postes de travail gratuits

Télécharger des applications Windows et Linux

Commandes Linux

Ad