EngelsFransSpaans

Ad


OnWorks-favicon

ferm - Online in de cloud

Voer ferm uit in de gratis hostingprovider van OnWorks via Ubuntu Online, Fedora Online, Windows online emulator of MAC OS online emulator

Dit is de opdracht ferm die kan worden uitgevoerd in de gratis hostingprovider van OnWorks met behulp van een van onze meerdere gratis online werkstations zoals Ubuntu Online, Fedora Online, Windows online emulator of MAC OS online emulator

PROGRAMMA:

NAAM


ferm - een firewallregelparser voor Linux

KORTE INHOUD


ferm opties Invoer bestand

PRODUCTBESCHRIJVING


ferm is een frontend voor iptables. Het leest de regels uit een gestructureerd configuratiebestand
en oproepen iptables(8) om ze in de actieve kernel te plaatsen.

fermHet doel van Firewall is om firewallregels eenvoudig te schrijven en leesbaar te maken. Het probeert te verminderen
de vervelende taak van het opschrijven van regels, waardoor de firewallbeheerder geld kan uitgeven
meer tijd aan het ontwikkelen van goede regels dan aan het correct implementeren van de regel.

Om dit te behalen, ferm maakt gebruik van een eenvoudige maar krachtige configuratietaal, die dit mogelijk maakt
variabelen, functies, arrays, blokken. Je kunt er ook andere bestanden mee opnemen, waardoor
u kunt bibliotheken maken van veelgebruikte structuren en functies.

ferm, uitgesproken als "stevig", staat voor "For Easy Rule Making".

LET OP


Deze handleidingpagina doet dat wel niet Ik wil u leren hoe firewalling werkt en hoe u goed kunt schrijven
reglement. Er is al voldoende documentatie over dit onderwerp.

INLEIDING


Laten we beginnen met een eenvoudig voorbeeld:

keten INPUT {
proto tcp ACCEPTEREN;
}

Hierdoor wordt een regel toegevoegd aan de vooraf gedefinieerde invoerketen, waarbij alle TCP wordt gematcht en geaccepteerd
pakketten. Oké, laten we het ingewikkelder maken:

keten (INPUT OUTPUT) {
proto (udp tcp) ACCEPTEREN;
}

Hiermee worden 4 regels ingevoegd, namelijk 2 in keteninvoer en 2 in ketenuitvoer, matching en
accepteert zowel udp- als tcp-pakketten. Normaal typ je dit:

iptables -A INPUT -p tcp -j ACCEPTEREN
iptables -A UITVOER -p tcp -j ACCEPTEREN
iptables -A INPUT -p udp -j ACCEPTEREN
iptables -A OUTPUT -p udp -j ACCEPTEREN

Merk op hoeveel minder typen we moeten doen? :-)

In principe is dit alles wat er is, hoewel je het nog veel complexer kunt maken.
Iets om naar te kijken:

keten INPUT {
beleid ACCEPTEREN;
daddr 10.0.0.0/8 proto tcp dport! ftp jump mychain sport:1023 TOS 4 sets 8 mark 2;
daddr 10.0.0.0/8 proto tcp dport ftp WEIGEREN;
}

Mijn punt hier is dat *jij* mooie regels moet maken, ze leesbaar voor je moet houden en
anderen, en maak er geen puinhoop van.

Het zou de lezer helpen als de resulterende firewallregels hier ter referentie zouden worden geplaatst.
U kunt ook de geneste versie opnemen met een betere leesbaarheid.

Probeer opmerkingen te gebruiken om te laten zien wat je doet:

# deze regel maakt transparante http-proxying voor het interne netwerk mogelijk:
proto tcp als eth0 daddr! 192.168.0.0/255.255.255.0
dport http DOORLEIDEN naar-poorten 3128;

Je zult er later dankbaar voor zijn!

keten INPUT {
beleid ACCEPTEREN;
interface (eth0 ppp0) {
# toegang weigeren aan notorius-hackers, kom hier terug als er geen match is
# bleek de normale firewalling te hervatten
spring slechteriken;

protocol tcp sprong fw_tcp;
protocol udp sprong fw_udp;
}
}

Hoe meer je nestelt, hoe beter het eruit ziet. Zorg ervoor dat de volgorde die u opgeeft correct is
zou dit niet willen doen:

ketting VOORUIT {
proto! udp DROP;
proto tcp dport ftp ACCEPTEREN;
}

omdat de tweede regel nooit zal overeenkomen. De beste manier is om eerst alles op te geven
toegestaan, en vervolgens al het andere ontkennen. Kijk naar de voorbeelden voor meer goede snapshots.
De meeste mensen doen zoiets als dit:

proto-tcp {
dport (
sshhttpftp
) AANVAARDEN;
dpoort 1024:65535 ! syn ACCEPTEREN;
DRUPPEL;
}

STRUCTUUR OF A FIREWALL FILE


De structuur van een goed firewallbestand ziet eruit als vereenvoudigde C-code. Slechts een paar
syntactische tekens worden gebruikt in ferm-configuratiebestanden. Naast deze bijzondere
karakters, ferm gebruikt 'sleutels' en 'waarden', beschouw ze als opties en parameters, of als
variabelen en waarden, wat dan ook.

Met deze woorden definieert u de kenmerken van uw firewall. Elke firewall
bestaat uit twee dingen: kijk eerst of het netwerkverkeer aan bepaalde voorwaarden voldoet, en
ten tweede, wat te doen met dat verkeer.

U kunt voorwaarden opgeven die geldig zijn voor het kernelinterfaceprogramma dat u gebruikt,
waarschijnlijk iptables(8). Wanneer u bijvoorbeeld in iptables TCP-pakketten probeert te matchen,
je zou zeggen:

iptables --protocol tcp

In ferm wordt dit:

protocol-tcp;

Gewoon dit in ferm typen doet niets, je moet het ferm vertellen (eigenlijk moet dat wel
vertellen iptables(8) en de kernel) wat te doen met verkeer dat aan deze voorwaarde voldoet:

iptables --protocol tcp -j ACCEPTEREN

Of vertaald naar ferm:

protocol tcp ACCEPTEREN;

De ; karakter staat aan het einde van elke ferm-regel. Ferm negeert regeleinden, wat betekent dat de
Het bovenstaande voorbeeld is identiek aan het volgende:

protocol-tcp
AANVAARDEN;

Hier is een lijst met de speciale tekens:

; Dit personage voltooit een regel.

Gescheiden door puntkomma's kunt u meerdere regels op één regel schrijven, hoewel dit wel het geval is
vermindert de leesbaarheid:

protocol tcp ACCEPTEREN; protocol udp DROP;

{} Het nestsymbool definieert een 'blok' met regels.

De accolades bevatten een willekeurig aantal geneste regels. Alle wedstrijden vóór de
blok worden hier naartoe overgedragen.

De sluitende accolade rondt de regelset af. Je mag geen ';' schrijven na
dat, omdat dat een loze regel zou zijn.

Voorbeeld:

keten INPUT proto icmp {
icmp-type echo-verzoek ACCEPTEREN;
DRUPPEL;
}

Dit blok toont twee regels binnen een blok, die beide met wat dan ook kunnen worden samengevoegd
ervoor, dus je krijgt twee regels:

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

Er kunnen meerdere nestniveaus zijn:

keten INPUT {
proto imp {
icmp-type echo-verzoek ACCEPTEREN;
DRUPPEL;
}
daddr 172.16.0.0/12 WEIGEREN;
}

Merk op dat de 'REJECT'-regel niet wordt beïnvloed door 'proto icmp', hoewel dat niet het geval is
';' na de sluitende accolade. Vertaald naar iptables:

iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPTEREN
iptables -A INPUT -p icmp -j DROP
iptables -A INPUT -d 172.16.0.0/12 -j WEIGEREN

$ Variabele expansie. Vervangt '$FOO' door de waarde van de variabele. Zie de sectie
VARIABELEN voor meer info.

& Functie oproep. Zie de sectie FUNCTIES voor meer info.

() Het array-symbool. Met behulp van de haakjes kunt u een 'lijst' met waarden definiëren
moet worden toegepast op de sleutel links ervan.

Voorbeeld:

protocol (tcp udp icmp)

dit resulteert in drie regels:

... -p tcp...
... -p udp...
... -p icm ...

Alleen waarden kunnen worden 'vermeld', dus je kunt zoiets als dit niet doen:

proto tcp (ACCEPTEER LOG);

maar je kunt dit doen:

keten (INPUT OUTPUT FORWARD) proto (icmp udp tcp) DROP;

(wat resulteert in negen regels!)

Waarden worden gescheiden door spaties. Het array-symbool is zowel links- als rechts-
associatief, in tegenstelling tot het nestblok, dat alleen linksassociatief is.

" # " Het commentaarsymbool. Alles dat dit symbool volgt tot aan het einde van de regel is dat
buiten beschouwing gelaten.

"`opdracht`"
Voer de opdracht uit in een shell en voeg de procesuitvoer in. Zie de sectie
terugslag voor meer info.

'draad'
Citeer een string die spaties, het dollarteken enz. kan bevatten.

LOG log-prefix ' hey, dit is mijn log-prefix!';

"draad"
Citeer een string (zie hierboven), maar variabele verwijzingen met een dollarteken zijn dat wel
geëvalueerd:

DNAT naar "$mijnhost:$mijnpoort";

Trefwoorden
In de vorige sectie hebben we al enkele basiszoekwoorden geïntroduceerd, zoals 'keten',
"protocol" en "ACCEPTEREN". Laten we hun aard verkennen.

Er zijn drie soorten zoekwoorden:

· plaats trefwoorden definiëren waar een regel wordt gemaakt. Voorbeeld: "tafel", "keten".

· match trefwoorden voeren een test uit op alle passerende pakketten. De huidige regel is zonder
effect als één (of meer) van de wedstrijden niet slaagt. Voorbeeld: "proto", "daddr".

De meeste overeenkomsten worden gevolgd door een parameter: "proto tcp", "daddr 172.16.0.0/12".

· doel trefwoorden geven aan wat er met een pakket moet gebeuren. Voorbeeld: "ACCEPTEREN", "WEIGEREN",
"springen".

Sommige doelen definiëren meer trefwoorden om details te specificeren: "REJECT afwijzen-met icmp-
netto-onbereikbaar".

Elke regel bestaat uit een plaats en doel, plus een willekeurig aantal lucifers:

tabelfilter # locatie
proto tcp dport (http https) # match
AANVAARDEN; # doel

Strikt genomen is er nog een vierde soort: ferm trefwoorden (die de interne
gedrag), maar ze zullen later worden uitgelegd.

parameters
Veel trefwoorden gebruiken parameters. Deze kunnen worden gespecificeerd als letterlijke waarden, variabele verwijzingen of
lijsten (arrays):

proto udp
sadr $TRUSTED_HOSTS;
proto tcp dport (http https ssh);
LOG log-voorvoegsel "funky wardriver alert: ";

Sommige ervan kunnen worden ontkend (lijsten kunnen niet worden ontkend):

proto!esp;
proto udp dport !domein;

Trefwoorden die geen parameters gebruiken, worden ontkend door een voorvoegsel '!':

proto tcp!syn;

Lees iptables(8) om te zien waar de ! kunnen worden gebruikt.

BASIC TREFWOORDEN


Locatie trefwoorden
domein [ip|ip6]
Stel het domein in. "ip" is standaard en betekent "IPv4" (iptables). "ip6" is voor IPv6
ondersteuning, met behulp van "ip6tables".

tafel [filter|nat|mangel]
Specificeert in welke netfiltertabel deze regel wordt ingevoegd: "filter" (standaard),
"nat" of "mangel".

keten [ketennaam]
Specificeert de netfilterketen (binnen de huidige tabel) die deze regel zal zijn
ingevoegd. Veel voorkomende vooraf gedefinieerde ketennamen zijn "INPUT", "OUTPUT", "FORWARD",
"PREROUTING", "POSTROUTING", afhankelijk van de tabel. Zie het netfilter
documentatie voor details.

Als u hier een niet-bestaande keten opgeeft, voegt ferm de regel toe aan een aangepaste keten
met die naam.

beleidsmaatregelen [ACCEPTEREN|LATEN|..]
Specificeert het standaardbeleid voor de huidige keten (alleen ingebouwd). Kan een van zijn
de ingebouwde doelen (ACCEPTEREN, DROP, WEIGEREN, ...). Een pakket dat aan geen regels voldoet
in een keten worden behandeld zoals gespecificeerd in het beleid.

Om dubbelzinnigheid te voorkomen, specificeert u altijd het beleid van alle vooraf gedefinieerde ketens
uitdrukkelijk.

@subketen ["KETENNAAM"] { ... }
Werkt zoals de normale blokoperatoren (dat wil zeggen zonder de @subketen trefwoord), behalve
dat ferm verplaatst regels binnen de accolades naar een nieuwe aangepaste keten. De naam
want deze keten wordt automatisch gekozen door ferm.

In veel gevallen is dit sneller dan alleen een blok, omdat de kernel a
enorm blok regels als een voorwaarde onwaar is. Stel je het volgende voorbeeld voor:

tabelfilterketen INPUT {
sadr (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) ACCEPTEREN;
proto udp dport domein ACCEPTEREN;
}
}

Dit genereert 20 regels. Wanneer er een pakket arriveert dat niet door de verdrietig
match, controleert het toch alle 20 regels. Met @subketen, deze controle is voltooid
één keer, wat resulteert in snellere netwerkfiltering en minder CPU-belasting:

tabelfilterketen INPUT {
saddr (1.2.3.4 2.3.4.5 3.4.5.6 4.5.6.7 5.6.7.8) @subchain {
proto tcp dport (http https ssh) ACCEPTEREN;
proto udp dport domein ACCEPTEREN;
}
}

Optioneel kunt u de naam van de subketen definiëren:

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

De naam kan een letterlijke tekenreeks tussen aanhalingstekens zijn, of een uitgebreide ferm-expressie
zoals @cat("interface_", $iface) of @substr($var,0,20).

Hetzelfde kun je bereiken door expliciet een keten op maat aan te geven, maar je mag wel voelen
dat gebruik @subketen vereist minder typen.

Basic iptables match trefwoorden
interface [interfacenaam]
Definieer de interfacenaam, uw externe netwerkkaart, zoals eth0, of inbelverbinding
ppp1, of welk apparaat u ook wilt matchen voor het doorgeven van pakketten. Het is gelijkwaardig
naar de "-i"-schakelaar iptables(8).

buitenkant [interfacenaam]
Hetzelfde als interface, alleen voor het matchen van de uitgaande interface voor een pakket, zoals in
iptables(8).

protocol [protocolnaam|protocolnummer]
Momenteel ondersteund door de kernel zijn tcp, udp en icmp, of hun respectieve
getallen.

saddr|padr [adres-specificatie]
Komt overeen met pakketten die afkomstig zijn van het opgegeven adres (saddr) of waarop gericht is
het adres (daddr).

Voorbeelden:

sadr 192.168/8 ACCEPTEREN; # (identiek aan de volgende :)
saddr 192.168.0.0/255.255.255.0 ACCEPTEREN;
daddr mijn.domein.com ACCEPTEER;

fragment
Geef op dat alleen gefragmenteerde IP-pakketten moeten worden gematcht. Wanneer pakketten zijn
groter dan de maximale pakketgrootte die uw systeem aankan (genaamd Maximum
Transmission Unit of MTU) worden ze in bits gehakt en één voor één verzonden als
enkele pakketten. Zien ifconfig(8) als u de MTU voor uw systeem wilt vinden (de
standaard is meestal 1500 bytes).

Fragmenten worden veelvuldig gebruikt bij DOS-aanvallen, omdat er geen manier is om deze te vinden
de oorsprong van een fragmentpakket achterhalen.

sport|sport [poortspecificatie]
Komt overeen met pakketten op de opgegeven TCP- of UDP-poort. 'sport' komt overeen met de bron
poort en dport komt overeen met de bestemmingspoort.

Deze overeenkomst kan alleen worden gebruikt nadat u "protocol tcp" of "protocol udp" hebt opgegeven.
omdat alleen deze twee protocollen daadwerkelijk poorten hebben.

En enkele voorbeelden van geldige poorten/bereiken:

dpoort 80 ACCEPTEREN;
dport http ACCEPTEREN;
dport ssh:http ACCEPTEREN;
dpoort 0:1023 ACCEPTEREN; # gelijk aan :1023
dpoort 1023:65535 ACCEPTEREN;

syn Specificeer dat de SYN-vlag in een tcp-pakket moet overeenkomen, zoals gewend
nieuwe TCP-verbindingen bouwen. Hiermee kun je inkomende verbindingen identificeren, en
beslis of u dit wilt toestaan ​​of niet. Pakketten die deze vlag niet hebben, zijn dat wel
waarschijnlijk afkomstig van een reeds bestaande verbinding, dus het wordt als redelijk beschouwd
veilig om deze door te laten.

module [module naam]
Laad een iptables-module. De meeste modules bieden meer matchzoekwoorden. We komen er wel
dat later.

Basic doel trefwoorden
springen [aangepaste ketennaam]
Springt naar een aangepaste keten. Als er geen enkele regel in de aangepaste keten overeenkomt, retourneert netfilter
naar de volgende regel in de vorige keten.

echtgoto [aangepaste ketennaam]
Ga naar een aangepaste ketting. In tegenstelling tot de springen keuze, RETURN zal de verwerking niet voortzetten
in deze keten, maar in plaats daarvan in de keten die ons via belde springen.

Het trefwoord echtgoto werd gekozen tijdens de overgangsperiode, omdat goto
(reeds verouderd) was vroeger een alias voor springen.

ACCEPTEREN Accepteert bijpassende pakketten.

DROP Laat overeenkomende pakketten zonder voorafgaande kennisgeving achter.

WEIGEREN Weigert overeenkomende pakketten, dwz stuurt een ICMP-pakket naar de afzender, die port-
standaard onbereikbaar. U kunt een ander ICMP-type opgeven.

AFWIJZEN; # standaard ingesteld op icmp-port-unreachable
WEIGEREN afwijzen-met icmp-net-onbereikbaar;

Typ "iptables -j REJECT -h" voor meer informatie.

RETURN Beëindig de huidige keten en keer terug naar de oproepende keten (als "jump
[aangepaste ketennaam]" werd gebruikt).

GEEN P Helemaal geen actie.

EXTRA TREFWOORDEN


Netfilter is modulair. Modules kunnen aanvullende doelen bieden en trefwoorden matchen. De lijst
Het aantal netfiltermodules groeit voortdurend en ferm probeert deze te ondersteunen
alle. In dit hoofdstuk worden modules beschreven die momenteel worden ondersteund.

iptables match modules
account Accountverkeer voor alle hosts in gedefinieerd netwerk/netmasker. Dit is een van de
match-modules die zich als een doelwit gedragen, dat wil zeggen dat u meestal de GEEN P
doelwit.

mod account aname mynetwork aaddr 192.168.1.0/24 ashort NOP;

adrestype
Controleer het adrestype; bronadres of bestemmingsadres.

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

Typ "iptables -m addrtype -h" voor meer informatie.

ah Controleert de SPI-header in een AH-pakket.

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

Aanvullende argumenten voor IPv6:

mod ah ahlen 32 ACCEPTEREN;
mod ah ahlen !32 ACCEPTEREN;
mod ah ahres ACCEPTEREN;

commentaar Voegt een opmerking van maximaal 256 tekens toe aan een regel, zonder effect. Let daar op
in tegenstelling tot ferm commentaren ('#'), zal deze verschijnen in "iptables -L".

mod commentaar commentaar "Dit is mijn commentaar." AANVAARDEN;

voorwaarde
Komt overeen als een waarde in /proc/net/ipt_condition/NAME 1 is (pad is
/proc/net/ip6t_condition/NAME voor het ip6-domein).

mod voorwaarde voorwaarde (abc def) ACCEPTEREN;
mod voorwaarde voorwaarde !foo ACCEPTEER;

connbytes
Vergelijk het aantal bytes of pakketten van een verbinding (of een van de twee stromen).
die de verbinding vormen) tot nu toe zijn overgedragen, of met een gemiddelde bytes per
pakket.

mod connbytes connbytes 65536: connbytes-dir beide connbytes-mode bytes ACCEPTEREN;
mod connbytes connbytes !1024:2048 connbytes-dir antwoord connbytes-mode pakketten ACCEPTEREN;

Geldige waarden voor connbytes-dir: origineel, antwoord, zowel; voor connbytes-modus:
pakketten, bytes, gem.

samenvoegen
Hiermee kunt u het aantal parallelle TCP-verbindingen met een server per beperken
client-IP-adres (of adresblok).

mod connlimit connlimit-boven 4 WEIGEREN;
mod connlimit connlimit-boven !4 ACCEPTEER;
mod connlimit connlimit-above 4 connlimit-mask 24 REJECT;

connmark
Controleer het markeringsveld dat is gekoppeld aan de verbinding, ingesteld door het CONNMARK-doel.

mod connmark-markering 64;
mod connmark-markering 6/7;

conntrack
Controleer informatie over het volgen van verbindingen.

mod conntrack ctstate (VESTIGD GERELATEERD);
mod conntrack ctproto tcp;
mod conntrack ctorigsrc 192.168.0.2;
mod conntrack volgende 1.2.3.0/24;
mod conntrack torigsrcport 67;
mod conntrack torigdstport 22;
mod conntrack ctreplsrc 2.3.4.5;
mod conntrack ctrepldst! 3.4.5.6;
mod conntrack ctstatus VERZEKERD;
mod conntrack cexpire 60;
mod conntrack cexpire 180:240;

Typ "iptables -m conntrack -h" voor meer informatie.

dcp Controleer de specifieke kenmerken van DCCP (Datagram Congestion Control Protocol). Dit
module wordt automatisch geladen wanneer u "protocol dccp" gebruikt.

proto dccp sport 1234 dport 2345 ACCEPTEREN;
proto dccp dccp-types (SYNCACK ACK) ACCEPTEREN;
proto dccp dccp-types !VERZOEK DROP;
proto dccp dccp-optie 2 ACCEPTEREN;

dscp Zorg ervoor dat het 6-bits DSCP-veld binnen het TOS-veld overeenkomt.

mod dscp dscp 11;
mod dscp dscp-klasse AF41;

ECN Zorg ervoor dat de ECN-bits van een IPv4 TCP-header overeenkomen.

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

Typ "iptables -m ecn -h" voor meer informatie.

esp Controleert de SPI-header in een ESP-pakket.

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

eui64 "Deze module komt overeen met het EUI-64-gedeelte van een staatloos automatisch geconfigureerd IPv6-adres.
Het vergelijkt de EUI-64 die is afgeleid van het bron-MAC-adres in het Ehternet-frame
de onderste 64 bits van het IPv6-bronadres. Maar het "Universeel/Lokaal"-bit is dat niet
vergeleken. Deze module komt niet overeen met andere linklaagframes en is alleen geldig in
de PREROUTING-, INPUT- en FORWARD-ketens."

mod eui64 ACCEPTEREN;

fuzzy "Deze module komt overeen met een snelheidslimiet op basis van een fuzzy logic controller [FLC]."

mod fuzzy ondergrens 10 bovengrens 20 ACCEPTEER;

hb Komt overeen met de kop Hop-by-Hop Opties (ip6).

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

hl Komt overeen met het veld Hoplimiet (ip6).

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

helper Controleert welke conntrack-helpermodule deze verbinding volgt. De haven kan dat zijn
opgegeven met "-poortnr".

mod helper helper irc ACCEPTEREN;
mod helper helper ftp-21 ACCEPTEREN;

icmp Controleer ICMP-specifieke kenmerken. Deze module wordt automatisch geladen wanneer u deze gebruikt
"protocol-icmp".

proto icmp icmp-type echo-verzoek ACCEPTEREN;

Deze optie kan ook worden gebruikt in be ip6 domein, ook al heet dit icmpv6 in
ip6tabellen.

Gebruik "iptables -p icmp "-h"" om een ​​lijst met geldige ICMP-typen te verkrijgen.

ipbereik Match een reeks IPv4-adressen.

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

ipv4opties
Match op IPv4-headeropties zoals bronroutering, recordroute, tijdstempel en
router-waarschuwing.

mod ipv4options ssrr ACCEPTEREN;
mod ipv4options lsrr ACCEPTEREN;
mod ipv4options no-srr ACCEPTEREN;
mod ipv4options !rr ACCEPTEREN;
mod ipv4options !ts ACCEPTEREN;
mod ipv4options !ra ACCEPTEREN;
mod ipv4options !elke optie ACCEPTEREN;

ipv6-header
Komt overeen met de IPv6-extensieheader (ip6).

mod ipv6header header !(hop frag) ACCEPTEER;
mod ipv6header header (auth dst) ACCEPTEREN;

hashlimiet
Vergelijkbaar met 'mod limit', maar voegt de mogelijkheid toe om per bestemming of per poort toe te voegen
limieten beheerd in een hashtabel.

mod hashlimit hashlimit 10/minuut hashlimit-burst 30/minuut
hashlimit-mode dstip hashlimit-naam foobar ACCEPTEREN;

Mogelijke waarden voor hashlimit-mode: dstip dstport srcip srcport (of een lijst met
meer dan één hiervan).

Er zijn meer instellingen mogelijk, typ hiervoor "iptables -m hashlimit -h".
documentatie.

lengte Controleer de pakketlengte.

mod lengte lengte 128; # precies 128 bytes
mod lengte lengte 512:768; # bereik
mod lengte lengte! 256; # ontkend

begrenzing Beperkt de pakketsnelheid.

mod-limietlimiet 1/seconde;
mod limiet limiet 15/minuut limiet-burst 10;

Typ "iptables -m limit -h" voor meer informatie.

Mac Overeenkomen met het bron-MAC-adres.

mod mac mac-bron 01:23:45:67:89;

Mark Matcht pakketten op basis van hun netfiltermarkeringsveld. Dit kan een geheel getal van 32 bits zijn
tussen 0 en 4294967295.

mod-markeringsmarkering 42;

mh Komt overeen met de mobiliteitsheader (domain ip6).

proto mh mh-type binding-update ACCEPTEREN;

meerdere poorten
Match een set bron- of doelpoorten (alleen UDP en TCP).

mod multiport bronpoorten (https ftp);
mod multiport bestemmingspoorten (mysql-domein);

Deze regel heeft een groot voordeel ten opzichte van "dport" en "sport": er ontstaat slechts één regel
voor maximaal 15 poorten in plaats van één regel voor elke poort.

zoveelste Zorg dat elk pakket bij elkaar past.

mod nde elke 3;
mod nde teller 5 elke 2;
mod nde start 2 elke 3;
mod nde start 5 pakket 2 elke 6;

Typ "iptables -m nth -h" voor meer informatie.

OSF Match pakketten afhankelijk van het besturingssysteem van de afzender.

mod osf-genre Linux;
mod osf! genre FreeBSD ttl 1 log 1;

Typ "iptables -m osf -h" voor meer informatie.

eigenaar Controleer informatie over de maker van het pakket, namelijk gebruikers-ID, groeps-ID, proces-ID,
sessie-ID en opdrachtnaam.

mod-eigenaar uid-eigenaar 0;
mod-eigenaar gid-eigenaar 1000;
mod-eigenaar pid-eigenaar 5432;
mod-eigenaar zij-eigenaar 6543;
mod-eigenaar cmd-eigenaar "sendmail";

("cmd-eigenaar", "pid-eigenaar" en "sid-eigenaar" vereisen geen speciale kernelpatches
opgenomen in de vanille Linux-kernel)

fysdev Komt overeen met het fysieke apparaat waarop een pakket is binnengekomen of op het punt staat het te verlaten
machine. Dit is handig voor overbrugde interfaces.

mod physdev physdev-in ppp1;
mod physdev physdev-out eth2;
mod physdev physdev-is-in;
mod physdev physdev-is-uit;
mod physdev physdev-is-overbrugd;

pkttype Controleer het link-layer-pakkettype.

mod pkttype pkt-type unicast;
mod pkt-type broadcase van het pkt-type;
mod pkttype pkt-type multicast;

beleidsmaatregelen Komt overeen met het IPsec-beleid dat op dit pakket wordt toegepast.

mod beleid dir out pol ipsec ACCEPTEREN;
mod-beleid strikt vereist 23 spi 0x10 proto ah ACCEPTEREN;
mod beleidsmodus tunnel tunnel-src 192.168.1.2 ACCEPTEREN;
mod beleidsmodus tunnel tunnel-dst 192.168.2.1 ACCEPTEREN;
mod-beleid strikt volgende vereiste 24 spi 0x11 ACCEPTEREN;

Houd er rekening mee dat het trefwoord daarom wordt ook gebruikt als een verkorte versie van protocol
(ingebouwde matchmodule). U kunt dit conflict oplossen door altijd de long
trefwoord protocol.

psd Detecteer TCP/UDP-poortscans.

mod psd psd-gewichtsdrempel 21 psd-vertragingsdrempel 300
psd-lo-poorten-gewicht 3 psd-hi-poorten-gewicht 1 DROP;

quotum Implementeert netwerkquota door bij elk pakket een byteteller te verlagen.

mod quotaquota 65536 ACCEPTEREN;

willekeurige Match een willekeurig percentage van alle pakketten.

mod willekeurig gemiddelde 70;

rijk Overeenkomen met het routeringsdomein. Handig in omgevingen waarin BGP wordt gebruikt.

mod rijk rijk 3;

recent Markeer tijdelijk de bron-IP-adressen.

mod recente set;
mod recente rcheck seconden 60;
mod recente set bronnaam "badguy";
mod recente set rdest;
mod recente rcheck rbronnaam "badguy" seconden 60;
mod recente update seconden 120 hitcount 3 rttl;

Deze netfiltermodule heeft een ontwerpfout: hoewel deze als match is geïmplementeerd
module, vertoont het doelachtig gedrag bij gebruik van het trefwoord "set".

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

rt Zorg ervoor dat de IPv6-routeringsheader overeenkomt (alleen IP6).

mod rt rt-type 2 rt-len 20 ACCEPTEREN;
mod rt rt-type !2 rt-len !20 ACCEPTEREN;
mod rt rt-segsleft 2:3 ACCEPTEREN;
mod rt rt-segsleft !4:5 ACCEPTEREN;
mod rt rt-0-res rt-0-addrs (::1 ::2) rt-0-niet-strikt ACCEPTEREN;

SCTP Controleer de specifieke kenmerken van SCTP (Stream Control Transmission Protocol). Dit
module wordt automatisch geladen wanneer u "protocol sctp" gebruikt.

proto sctp sport 1234 dport 2345 ACCEPTEREN;
alleen proto sctp chunk-types DATA:Be ACCEPT;
proto sctp chunk-types elk (INIT INIT_ACK) ACCEPT;
proto sctp chunk-types !all (HEARTBEAT) ACCEPTEREN;

Gebruik "iptables -p sctp "-h"" om een ​​lijst met geldige chunktypen te verkrijgen.

reeks Controleert de bron- of bestemmings-IP/poort/MAC met een set.

mod set set badguys src DROP;

Zienhttp://ipset.netfilter.org/> voor meer informatie.

staat Controleert de status van het volgen van de verbinding.

mod state staat ONGELDIGE DROP;
mod state staat (GEVESTIGD GERELATEERD) ACCEPTEREN;

Typ "iptables -m state -h" voor meer informatie.

statistisch
opvolger van zoveelste en willekeurige, momenteel zonder papieren in de iptables(8) man-pagina.

mod statistische modus willekeurige waarschijnlijkheid 0.8 ACCEPTEREN;
mod statistische modus nde elke 5 pakketten 0 DROP;

snaar Komt overeen met een string.

mod string string "foo bar" ACCEPTEREN;
mod string algo kmp van 64 tot 128 hexadecimale string "deadbeef" ACCEPTEREN;

tcp Controleert TCP-specifieke kenmerken. Deze module wordt automatisch geladen wanneer u deze gebruikt
"protocol-tcp".

proto tcp-sport 1234;
proto tcp dport 2345;
proto tcp tcp-vlaggen (SYN ACK) SYN;
proto tcp tcp-vlaggen! (SYN ACK) SYN;
proto tcp tcp-vlaggen ALLES (RST ACK);
proto tcp-syn;
proto tcp tcp-optie 2;
prototype tcp mss 512;

Typ "iptables -p tcp -h" voor meer informatie.

tcpms Controleer het TCP MSS-veld van een SYN- of SYN/ACK-pakket.

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

niet de tijd of Controleer of de tijd waarop een pakket arriveert binnen een bepaald bereik ligt.

mod tijd tijdstart 12:00;
mod tijd tijdstop 13:30;
mod tijddagen (ma wo vr);
mod tijd datumstart 2005:01:01;
mod tijd datumbegin 2005:01:01:23:59:59;
mod tijd datestop 2005:04:01;
mod tijd maanddag (30 31);
mod. tijd weekdagen (wo do);
mod tijd tijdstart 12:00 utc;
mod tijd tijdstart 12:00 localtz;

Typ "iptables -m time -h" voor meer informatie.

tos Matcht een pakket op de opgegeven TOS-waarde.

mod tos tos Kosten minimaliseren ACCEPTEREN;
mod tos tos !Normale service ACCEPTEREN;

Typ "iptables -m tos -h" voor meer informatie.

ttl Komt overeen met het ttl-veld (time to live) in de IP-header.

mod ttl ttl-eq 12; # ttl is gelijk aan
mod ttl ttl-gt 10; # ttl groter dan
mod ttl ttl-lt 16; # ttl minder dan

u32 Vergelijkt onbewerkte gegevens uit het pakket. U kunt meer dan één filter in een ferm opgeven
lijst; deze worden niet uitgebreid naar meerdere regels.

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

onrein Komt overeen met pakketten die misvormd of ongebruikelijk lijken. Deze wedstrijd heeft niet verder
parameters.

iptables doel modules
De volgende extra doelen zijn beschikbaar in ferm, op voorwaarde dat je ze hebt ingeschakeld
jouw kernel:

CLASSIFICEREN
Stel de CBQ-klasse in.

CLASSIFICEREN set-klasse 3:50;

CLUSTERIP
Configureer een eenvoudig cluster van knooppunten die een bepaald IP- en MAC-adres delen.
Verbindingen worden statisch verdeeld tussen de knooppunten.

CLUSTERIP nieuwe hashmode sourceip clustermac 00:12:34:45:67:89
totaal knooppunten 4 lokaal knooppunt 2 hash-init 12345;

CONNMARK
Stelt de netfiltermarkeringswaarde in die aan een verbinding is gekoppeld.

CONNMARK-markering 42;
CONNMARK-opslagmarkering;
CONNMARK herstelteken;
CONNMARK masker voor opslagmarkering 0x7fff;
CONNMARK herstelmarkeringsmasker 0x8000;

CONNSECMARK
Deze module kopieert beveiligingsmarkeringen van pakketten naar verbindingen (indien niet gelabeld),
en van verbindingen terug naar pakketten (ook alleen als ze niet gelabeld zijn). Meestal gebruikt in
in combinatie met SECMARK is het alleen geldig in de mangeltabel.

CONNSECMARK opslaan;
CONNSECMARK herstellen;

DTA naar [ip-adres|ip-bereik|ip-poort-bereik]
Wijzig het bestemmingsadres van het pakket.

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

ECN Dit doel maakt het mogelijk om selectief rond bekende ECN-zwarte gaten te werken. Het kan alleen
te gebruiken in de mangeltafel.

ECN ecn-tcp-verwijderen;

HL Wijzig het veld IPv6 Hop Limit (alleen ip6/mangle).

HL hl-set 5;
HL hl-2 december;
HL hl-incl. 1;

IPV4OPTSSTRIP
Verwijder alle IP-opties uit een pakket. Deze module bevat geen opties.

IPV4OPTSSTRIP;

LOG Registreer alle pakketten die aan deze regel voldoen in het kernellogboek. Wees voorzichtig met loggen
overstromingen. Merk op dat dit een "niet-beëindigend doel" is, dat wil zeggen het doorlopen van regels
gaat verder bij de volgende regel.

LOG log-niveau waarschuwing log-voorvoegsel "Kijk hier eens naar: ";
LOG log-tcp-sequentie log-tcp-opties;
LOG log-ip-opties;

MARK Stelt het netfiltermarkeringsveld in voor het pakket (een 32-bits geheel getal tussen 0 en
4294967295):

MARK-markering 42;
MARK-set-xmark 7/3;
MARK en merk 31;
MARK of-markering 1;
MARK xor-markering 12;

MASQUERADE
Maskerades die bij elkaar passen. Eventueel gevolgd door een poort of poortbereik voor
iptables. Specificeer als "123", "123-456" of "123:456". De poortbereikparameter
specificeert van welke lokale poorten gemaskerde verbindingen afkomstig moeten zijn.

MASKERADE;
MASQUERADE naar-poorten 1234:2345;
MASQUERADE naar poorten 1234:2345 willekeurig;

SPIEGEL Experimenteel demonstratiedoel dat de bron- en bestemmingsvelden omkeert
in de IP-header.

SPIEGEL;

NETMAP Wijs een heel netwerk toe aan een ander netwerk in de nat tafel.

NETMAP naar 192.168.2.0/24;

GEEN SPOOR Schakel het volgen van verbindingen uit voor alle pakketten die aan die regel voldoen.

proto tcp dport (135:139 445) NOTRACK;

NFLOG Pakketten loggen via netlink; dit is de opvolger van ULOG.

NFLOG nflog-group 5 nflog-prefix "Kijk hier eens naar: ";
NFLOG nflog-bereik 256;
NFLOG nflog-drempel 10;

NFWACHTRIJ Voor wachtrijen in de gebruikersruimte is ondersteuning voor de nfnetlink_queue-kernel vereist.

proto tcp dport ftp NFQUEUE wachtrijnummer 20;

WACHTRIJ Userspace wachtrijen, de voorloper van NFWACHTRIJ. Alle pakketten gaan naar wachtrij 0.

proto tcp dport ftp WACHTRIJ;

REDIRECT naar-poorten [poorten]
Transparante proxying: verander het bestemmings-IP van het pakket naar de machine
zelf.

proto tcp dport http OMSCHRIJVING naar-poorten 3128;
proto tcp dport http OMSCHRIJVING naar-poorten 3128 willekeurig;

DEZELFDE Vergelijkbaar met SNAT, maar een client wordt voor al zijn bestanden toegewezen aan hetzelfde bron-IP
verbindingen.

HETZELFDE tot 1.2.3.4-1.2.3.7;
HETZELFDE tot 1.2.3.8-1.2.3.15 knikken;
HETZELFDE tot 1.2.3.16-1.2.3.31 willekeurig;

SECMARK Dit wordt gebruikt om de beveiligingsmarkeringswaarde in te stellen die is gekoppeld aan het pakket waarvoor het moet worden gebruikt
beveiligingssubsystemen zoals SELinux. Het is alleen geldig in de mangeltabel.

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

SET [add-set|del-set] [setnaam] [vlag(gen)]
Voeg het IP-adres toe aan de opgegeven set. Zienhttp://ipset.netfilter.org/>

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

SNAT naar [ip-adres|ip-bereik|ip-poort-bereik]
Wijzig het bronadres van het pakket.

SNAT naar 1.2.3.4;
SNAT naar 1.2.3.4:20000-30000;
SNAT naar 1.2.3.4 willekeurig;

TCPMSS Wijzig de MSS-waarde van TCP SYN-pakketten.

TCPMSS set-mss 1400;
TCPMSS klem-mss-naar-pmtu;

Servicevoorwaarden ingesteld [waarde]
Stel de TCP-pakket Type Of Service-bit in op deze waarde. Deze zal gebruikt worden door
welke verkeersplanner dan ook bereid is, meestal je eigen Linux-machine, maar misschien
meer. De originele tos-bits worden blanco gemaakt en overschreven door deze waarde.

TOS-instellingen Maximaliseer doorvoer;
TOS en tos 7;
TOS of-tos 1;
TOS xor-tos 4;

Typ "iptables -j TOS -h" voor meer informatie.

TTL Wijzig het TTL-headerveld.

TTL ttl-set 16;
TTL ttl-1 december; # verlagen met 1
TTL ttl-inc 4; # verhogen met 4

ULOG Log pakketten naar een gebruikersruimteprogramma.

ULOG ulog-nlgroep 5 ulog-prefix "Kijk hier eens naar: ";
ULOG ulog-cprange 256;
ULOG ulog-qdrempel 10;

ANDERE DOMEINEN


Sinds versie 2.0, ferm ondersteunt niet alleen ip en ip6, maar ook arp (ARP-tabellen) en eb
(Ethernet-bridgingtabellen). De concepten zijn vergelijkbaar met iptables.

aptables trefwoorden
bron-ip, Destination IP
Komt overeen met het bron- of bestemmings-IPv4-adres. Hetzelfde als verdrietig en papadr in de ip
domein.

bron-mac, bestemming-mac
Komt overeen met het bron- of bestemmings-MAC-adres.

interface, buitenkant
Invoer- en uitvoerinterface.

h-lengte
Hardwarelengte van het pakket.

ketting INPUT h-lengte 64 ACCEPTEREN;

opcode Bedieningscode, zie voor details de iptables(8).

opcode 9 ACCEPTEREN;

h-type Type hardware.

h-type 1 ACCEPTEREN;

prototype
Protocoltype.

prototype 0x800 ACCEPTEREN;

Mangelen
De sleutelwoorden mangel-ip-s, mangel-ip-d, mangel-mac-s, mangel-mac-d, mangel-doel
kan worden gebruikt voor ARP-mangelen. Zien iptables(8) voor details.

ebtafels trefwoorden
daarom Komt overeen met het protocol dat het frame heeft gemaakt, bijv IPv4 or PPP. Voor een lijst, zie
/etc/ethertypes.

interface, buitenkant
Fysieke invoer- en uitvoerinterface.

logisch-in, logisch-uit
De logische bridge-interface.

verdrietig, papadr
Komt overeen met het bron- of bestemmings-MAC-adres.

Match modules
De volgende matchmodules worden ondersteund: 802.3, arp, ip, mark_m, pkttype, stp,
vlan, logboek.

doelwit extensies
De volgende doelextensies worden ondersteund: arpreply, dnat, mark, redirect,
snat.

Houd er rekening mee dat er een conflict is tussen --markering van het mark_m match-module
en -j Mark. Omdat beide zouden worden geïmplementeerd met het ferm-trefwoord Mark, wij
besloot dit op te lossen door de naam van het doelwit in hoofdletters te schrijven, zoals in de andere
domeinen. In het volgende voorbeeld wordt cijfer 1 naar 2 herschreven:

merkteken 1 merkteken 2;

ADVANCED KENMERKEN


Variabelen
In complexe firewallbestanden is het handig om variabelen te gebruiken, bijvoorbeeld om een ​​netwerk op te geven
interface een betekenisvolle naam.

Om variabelen in te stellen, schrijft u:

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

In de echte ferm-code worden variabelen gebruikt zoals elke andere trefwoordparameter:

keten INPUT interface $DEV_INTERNET proto tcp dport $MORE_PORTS ACCEPT;

Houd er rekening mee dat variabelen alleen kunnen worden gebruikt in trefwoordparameters ("192.168.1.1", "http"); zij
mogen geen ferm-trefwoorden zoals 'proto' of 'interface' bevatten.

Variabelen zijn alleen geldig in het huidige blok:

@def $DEV_INTERNET = eth1;
keten INPUT {
proto-tcp {
@def $DEV_INTERNET = ppp0;
interface $DEV_INTERNET dport http ACCEPTEREN;
}
interface $DEV_INTERNET DROP;
}

wordt uitgebreid naar:

keten INPUT {
proto-tcp {
interface ppp0 dport http ACCEPTEREN;
}
interface eth1 DROP;
}

De "def $DEV_INTERNET = ppp0" is alleen geldig in het "proto tcp" blok; het ouderblok
kent nog steeds "set $DEV_INTERNET = eth1".

Inclusief bestanden zijn speciaal: variabelen die in een opgenomen bestand zijn gedeclareerd, zijn nog steeds beschikbaar in
het belblok. Dit is handig als u een bestand opneemt dat alleen variabelen declareert.

Automatisch variabelen
Sommige variabelen worden intern ingesteld door ferm. Ferm-scripts kunnen ze net als alle andere gebruiken
variabel.

$BESTANDSNAAM
De naam van het configuratiebestand relatief aan de map ferm waarin werd gestart.

$BESTANDSNAAM
De basisnaam van het configuratiebestand.

$DIRNAAM
De directory van het configuratiebestand.

$DOMEIN Het huidige domein. Een van de ip, ip6, arp, eb.

$TABEL De huidige netfiltertabel.

$KETEN De huidige netfilterketen.

$ LIJN De regel van het huidige script. Het kan als volgt worden gebruikt:

@def &log($msg) = {
LOG log-voorvoegsel "rule=$msg:$LINE ";
}
.
.
.
&log("logboekbericht");

Functies
Functies zijn vergelijkbaar met variabelen, behalve dat ze parameters kunnen hebben, en die bieden ze ook
ferm-opdrachten, geen waarden.

@def &FOO() = proto (tcp udp) dport-domein;
&FOO() ACCEPTEREN;

@def &TCP_TUNNEL($poort, $dest) = {
tabelfilterketen FORWARD interface ppp0 proto tcp dport $port daddr $dest outsideface eth0 ACCEPT;
tabel nat keten PREROUTING interface ppp0 proto tcp dport $port daddr 1.2.3.4 DNAT naar $dest;
}

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

Een functieaanroep die een blok bevat (zoals '{...}') moet het laatste commando in een ferm zijn
regel, dwz deze moet worden gevolgd door ';'. De '&VOE()' voorbeeld bevat dus geen blok
u kunt na het gesprek 'ACCEPTEREN' schrijven. Om dit te omzeilen, kunt u de trefwoorden opnieuw rangschikken:

@def &IPSEC() = { proto (in het bijzonder ah); proto udp dport 500; }
keten INPUT ACCEPTEREN &IPSEC();

Terugslagen
Met backticks kunt u de uitvoer van een extern commando gebruiken:

@def $DNSSERVERS = `grep naamserver / Etc / resolv.conf | awk '{print $2}'`;
keten INPUT proto tcp saddr $DNSSERVERS ACCEPTEREN;

De opdracht wordt uitgevoerd met de shell (/ Bin / sh), net als backticks in perl. ferm wel
doe hier geen variabele uitbreiding.

De uitvoer wordt vervolgens getokeniseerd en opgeslagen als een ferm-lijst (array). Regels die beginnen met '#'
worden genegeerd; de andere regels kunnen een willekeurig aantal waarden bevatten, gescheiden door witruimte.

Inclusief
De @erbij betrekken trefwoord kunt u externe bestanden opnemen:

@include 'vars.ferm';

De bestandsnaam is relatief ten opzichte van het oproepende bestand, bijvoorbeeld bij het opnemen van from
/etc/ferm/ferm.conf, omvat de bovenstaande verklaring /etc/ferm/vars.ferm. Variabelen en
functies die in een opgenomen bestand zijn gedeclareerd, zijn nog steeds beschikbaar in het aanroepende bestand.

omvatten werkt binnen een blok:

keten INPUT {
@include 'invoer.ferm';
}

Als u een map opgeeft (met een '/' aan het einde), zijn alle bestanden in deze map dat wel
inbegrepen, alfabetisch gesorteerd:

@include 'ferm.d/';

Met een sleeppijpsymbool, ferm voert een shell-opdracht uit en parseert de uitvoer ervan:

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

Voorwaardelijke
Het trefwoord @indien introduceert een voorwaardelijke uitdrukking:

@if $condition DROP;

Een waarde wordt als waar geëvalueerd, net als in Perl: nul, lege lijst, lege string zijn false,
al het andere is waar. Voorbeelden voor echte waarden:

(ab); 1; 'foe'; (0 0)

Voorbeelden van valse waarden:

(); 0; '0'; ''

Er is ook @anders:

@if $condition DROP; @else WEIGEREN;

Let op de puntkomma vóór de @anders.

Het is mogelijk om na beide accolades te gebruiken @indien or @anders:

@if $voorwaarde {
MARK-markering 2;
TERUGKEER;
} @anders {
MARK-markering 3;
}

Omdat de sluitende accolade ook de opdracht beëindigt, is er geen puntkomma nodig.

Er is geen @elsif, Gebruik dan @anders @indien gebruiken.

Voorbeeld:

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

haken
Om aangepaste opdrachten uit te voeren, kunt u hooks installeren:

@hook pre "echo 0 >/proc/sys/net/ipv4/conf/eth0/forwarding";
@hook bericht "echo 1 >/proc/sys/net/ipv4/conf/eth0/forwarding";
@hook flush "echo 0 >/proc/sys/net/ipv4/conf/eth0/forwarding";

De opgegeven opdracht wordt uitgevoerd met behulp van de shell. "pre" betekent dat u de opdracht eerder uitvoert
het toepassen van de firewallregels, en "post" betekent dat u de opdracht daarna uitvoert. "verzonken" haken
worden uitgevoerd nadat ferm de firewallregels heeft leeggemaakt (optie --flush). U kunt er een installeren
aantal haken.

INGEBOUWDE FUNCTIES


Er zijn verschillende ingebouwde functies die u wellicht handig vindt.

@eq(a,b)
Test twee waarden op gelijkheid. Voorbeeld:

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

@ne(a,b)
Net als bij @eq wordt hier getest op niet-gelijkheid.

@niet(x)
Negeert een Booleaanse waarde.

@resolve((hostnaam1 hostnaam2 ...), [type])
Meestal worden hostnamen omgezet door iptables. Om ferm hostnamen te laten oplossen, gebruikt u de
functie @resolve:

saddr @resolve(mijn.host.foo) proto tcp dport ssh ACCEPTEREN;
saddr @resolve((een andere.host.foo derde.host.foo)) proto tcp dport openvpn ACCEPTEER;
daddr @resolve(ipv6.google.com, AAAA) proto tcp dport http ACCEPTEREN;

Let op de dubbele haakjes in de tweede regel: het binnenste paar voor het maken van een fermlijst,
en het buitenste paar als functieparameterbegrenzers.

De tweede parameter is optioneel en specificeert het DNS-recordtype. De standaardwaarde is "A".

Wees voorzichtig met opgeloste hostnamen in de firewallconfiguratie. DNS-verzoeken kunnen de
firewallconfiguratie gedurende lange tijd, waardoor de machine kwetsbaar blijft, anders kunnen ze mislukken.

@kat(een, b, ...)
Voeg alle parameters samen in één string.

@substr(expressie, compensatie, lengte)
Extraheert een subtekenreeks uit de expressie en retourneert deze. Het eerste teken bevindt zich op offset 0. If
OFFSET is negatief en begint zo ver van het einde van de string.

@lengte(expressie)
Retourneert de lengte in tekens van de waarde van EXPR.

@basisnaam(pad)
Retourneert de basisnaam van het bestand voor een bepaald pad (File::Spec::splitpath).

@mapnaam(pad)
Retourneert de naam van de laatste map voor een bepaald pad, ervan uitgaande dat de laatste component a is
bestandsnaam (Bestand::Spec::splitpath).

@ipfilter(lijst)
Filtert de IP-adressen eruit die duidelijk niet overeenkomen met het huidige domein. Dat is
handig om gemeenschappelijke variabelen en regels voor IPv4 en IPv6 te creëren:

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

domein (ip ip6) keten INPUT {
saddr @ipfilter($TRUSTED_HOSTS) proto tcp dport ssh ACCEPTEREN;
}

RECEPTEN


De ./voorbeelden/ directory bevat talloze ferm-configuraties die kunnen worden gebruikt om te beginnen
een nieuwe firewall. Deze sectie bevat meer voorbeelden, recepten en trucs.

Eenvoudige port expeditie
De Ferm-functie maakt routinetaken snel en eenvoudig:

@def &FORWARD_TCP($proto, $port, $dest) = {
tabelfilterketen FORWARD interface $DEV_WORLD buitenkant $DEV_DMZ daddr $dest proto $proto dport $port ACCEPT;
tabel nat keten PREROUTING interface $DEV_WORLD daddr $HOST_STATIC proto $proto dport $port DNAT naar $dest;
}

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

op Afstand ferm
Als de doelmachine niet kan worden uitgevoerd ferm om de een of andere reden (misschien een ingebed apparaat
zonder Perl), kunt u het ferm configuratiebestand op een andere computer en laat het ferm
genereer daar een shellscript.

Voorbeeld voor OpenWRT:

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

OPTIES


--noexec Voer de iptables(8) opdrachten, maar sla deze in plaats daarvan over. Op deze manier kan dat
parseer uw gegevens, gebruik --lijnen om de uitvoer te bekijken.

--doorspoelen Wist de firewallregels en stelt het beleid van alle ketens in op ACCEPTEREN. ferm
heeft daarvoor een configuratiebestand nodig om te bepalen welke domeinen en tabellen dat zijn
getroffen.

--lijnen Toon de firewalllijnen die op basis van de regels zijn gegenereerd. Ze zullen worden getoond
vlak voordat ze worden uitgevoerd, dus als je foutmeldingen krijgt van iptables(8)
enz., kunt u zien welke regel de fout heeft veroorzaakt.

--interactief
Pas de firewallregels toe en vraag de gebruiker om bevestiging. Keert terug naar de
vorige regelset als er binnen 30 seconden geen geldig gebruikersantwoord is (zie
--time-out). Dit is handig voor extern firewallbeheer: u kunt het testen
de regels zonder bang te zijn jezelf buiten te sluiten.

--time-out S If --interactief wordt gebruikt, en draai vervolgens terug als er geen geldig gebruikersantwoord is
na dit aantal seconden. De standaardwaarde is 30.

--help Toon een korte lijst met beschikbare opdrachtregelopties.

--versie Toont het versienummer van het programma.

--snel Schakel de snelle modus in: ferm genereert een iptables-opslaan(8) bestand en installeert het
Met iptables-herstel(8). Dit gaat veel sneller, omdat ferm callt iptables(8)
standaard één keer voor elke regel.

De snelle modus is sindsdien standaard ingeschakeld ferm 2.0, waarbij deze optie wordt beëindigd.

--traag Schakel de snelle modus uit, dat wil zeggen rennen iptables(8) voor elke regel, en gebruik deze niet
iptables-herstel(8).

--schelp Genereer een shellscript dat aanroept iptables-herstel(8) en drukt het af.
Impliceert --fast --lijnen.

--op afstand Genereer regels voor een externe machine. Impliceert --noexec en --lijnen. Kan zijn
gecombineerd met --schelp.

--domein {ip|ip6}
Behandel alleen het opgegeven domein. ferm uitvoer kan leeg zijn als het domein dat is
niet geconfigureerd in het invoerbestand.

--def '$naam=waarde'
Overschrijf een variabele die is gedefinieerd in het configuratiebestand.

Gebruik ferm online met behulp van onworks.net-services


Gratis servers en werkstations

Windows- en Linux-apps downloaden

Linux-commando's

Ad