Dit is de opdracht ferm die kan worden uitgevoerd in de gratis hostingprovider OnWorks met behulp van een van onze verschillende gratis online werkstations, zoals Ubuntu Online, Fedora Online, Windows online emulator of MAC OS online emulator
PROGRAMMA:
NAAM
ferm - een firewall-regelparser voor Linux
KORTE INHOUD
ferm opties Invoer bestand
PRODUCTBESCHRIJVING
ferm is een frontend voor iptablesHet leest de regels uit een gestructureerd configuratiebestand
en oproepen iptables(8) om ze in de actieve kernel te plaatsen.
fermHet doel is om firewallregels gemakkelijk te schrijven en te lezen te maken. Het probeert
de vervelende taak om regels op te schrijven, waardoor de firewallbeheerder tijd kan besteden
meer tijd besteden aan het ontwikkelen van goede regels dan aan de correcte implementatie ervan.
Om dit te behalen, ferm maakt gebruik van een eenvoudige maar krachtige configuratietaal, die het mogelijk maakt
variabelen, functies, arrays, blokken. Het maakt het ook mogelijk om andere bestanden op te nemen, waardoor
waarmee u bibliotheken kunt maken met veelgebruikte structuren en functies.
ferm, uitgesproken als "firm", staat voor "For Easy Rule Making".
LET OP
Deze handleidingpagina doet niet Ik wil je leren hoe firewalling werkt en hoe je goede
regels. Er is al voldoende documentatie over dit onderwerp.
INLEIDING
Laten we beginnen met een eenvoudig voorbeeld:
keten INPUT {
proto tcp ACCEPTEREN;
}
Hiermee wordt een regel toegevoegd aan de vooraf gedefinieerde invoerketen, die alle TCP-gegevens matcht en accepteert.
pakketten. Oké, laten we het wat ingewikkelder maken:
keten (INPUT UITGANG) {
proto (udp tcp) ACCEPTEREN;
}
Hiermee worden 4 regels ingevoegd, namelijk 2 in de keteninvoer en 2 in de ketenuitvoer, die overeenkomen en
Accepteert zowel UDP- als TCP-pakketten. Normaal gesproken typt u dit:
iptables -A INPUT -p tcp -j ACCEPT
iptables -A UITVOER -p tcp -j ACCEPTEREN
iptables -A INPUT -p udp -j ACCEPT
iptables -A UITVOER -p udp -j ACCEPTEREN
Zie je hoeveel minder typen we hoeven te doen? :-)
Dit is in principe alles wat er te doen is, maar je kunt het nog ingewikkelder 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 REJECT;
}
Mijn punt hier is dat *jij* goede regels moet maken, ze leesbaar moet houden voor jezelf en
anderen, en er geen puinhoop van maken.
Het zou handig zijn als de resulterende firewallregels hier ter referentie worden geplaatst.
U kunt ook de geneste versie opnemen, die is dan beter leesbaar.
Probeer opmerkingen te gebruiken om te laten zien wat u doet:
# Deze regel maakt transparante http-proxying mogelijk voor het interne netwerk:
proto tcp als eth0 daddr ! 192.168.0.0/255.255.255.0
dport http REDIRECT naar poorten 3128;
Je zult er later dankbaar voor zijn!
keten INPUT {
beleid ACCEPTEREN;
interface (eth0 ppp0) {
# weiger toegang aan beruchte hackers, kom hier terug als er geen match is
# bleek de normale firewall te hervatten
springende slechteriken;
protocol tcp sprong fw_tcp;
protocol udp-sprong fw_udp;
}
}
Hoe meer je nestelt, hoe beter het eruitziet. Zorg ervoor dat de volgorde die je 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 te specificeren wat is
toegestaan, en vervolgens al het andere weigeren. Bekijk de voorbeelden voor meer goede snapshots.
De meeste mensen doen zoiets:
proto-tcp {
dport (
ssh http ftp
) ACCEPTEREN;
dpoort 1024:65535 ! syn ACCEPTEREN;
DRUPPEL;
}
STRUCTUUR OF A FIREWALL FILE
De structuur van een goed firewallbestand lijkt op vereenvoudigde C-code. Slechts een paar
Syntactische tekens worden gebruikt in ferm-configuratiebestanden. Naast deze speciale
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: Ten eerste wordt gekeken of het netwerkverkeer aan bepaalde voorwaarden voldoet, en
Ten tweede, wat moeten we met dat verkeer doen?
U kunt voorwaarden opgeven die geldig zijn voor het kernelinterfaceprogramma dat u gebruikt,
waarschijnlijk iptables(8). Bijvoorbeeld, in iptables, wanneer u probeert TCP-pakketten te matchen,
je zou zeggen:
iptables --protocol tcp
In ferm wordt dit:
protocol-tcp;
Als je dit gewoon in ferm typt, gebeurt er niets. Je moet ferm (eigenlijk moet je) vertellen
vertellen iptables(8) en de kernel) wat te doen met verkeer dat aan deze voorwaarde voldoet:
iptables --protocol tcp -j ACCEPT
Of vertaald naar ferm:
protocol tcp ACCEPTEREN;
De ; Het teken staat aan het einde van elke ferm-regel. Ferm negeert regeleinden, wat betekent dat
bovenstaand voorbeeld is identiek aan het volgende:
TCP-protocol
ACCEPTEREN;
Hier is een lijst met de speciale tekens:
; Dit personage maakt een regel definitief.
Gescheiden door puntkomma's kunt u meerdere regels op één regel schrijven, hoewel dit
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 overeenkomsten vóór de
blok worden naar deze overgedragen.
De afsluitende accolade maakt de regelset compleet. Je mag geen ';' na de accolade schrijven.
omdat dat een loze regel zou zijn.
Voorbeeld:
keten INPUT proto icmp {
icmp-type echo-aanvraag ACCEPT;
DRUPPEL;
}
Dit blok toont twee regels binnen een blok, die beide met iets worden samengevoegd
ervoor, dan krijg je twee regels:
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp -j DROP
Er kunnen meerdere nestingsniveaus zijn:
keten INPUT {
proto-icmp {
icmp-type echo-aanvraag ACCEPT;
DRUPPEL;
}
daddr 172.16.0.0/12 AFWIJZEN;
}
Houd er rekening mee dat de 'REJECT'-regel niet wordt beïnvloed door 'proto icmp', hoewel er geen
';' na de afsluitende accolade. Vertaald naar iptables:
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp -j DROP
iptables -A INPUT -d 172.16.0.0/12 -j REJECT
$ Variabele uitbreiding. Vervangt '$FOO' door de waarde van de variabele. Zie de sectie
VARIABELEN voor meer info.
& Functieaanroep. Zie de sectie FUNCTIES voor meer info.
() Het array-symbool. Met behulp van de haakjes kunt u een 'lijst' met waarden definiëren die
moet worden toegepast op de sleutel links ervan.
Voorbeeld:
protocol (tcp udp icmp)
Dit resulteert in drie regels:
...-p tcp ...
... -p udp ...
... -p icmp ...
Alleen waarden kunnen worden 'weergegeven', dus u kunt dit niet doen:
proto tcp ( ACCEPT LOG );
maar je kunt dit doen:
keten (INPUT UITGANG VOORUIT) 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 uitsluitend links-associatief is.
"#" Het commentaarsymbool. Alles wat na dit symbool tot het einde van de regel komt, is
buiten beschouwing gelaten.
"`commando`"
Voer de opdracht uit in een shell en voeg de procesuitvoer toe. Zie de sectie
terugslag voor meer info.
'draad'
Haal een tekenreeks aan die spaties, het dollarteken etc. kan bevatten.
LOG log-prefix ' hey, dit is mijn log-prefix!';
"draad"
Een tekenreeks citeren (zie hierboven), maar variabeleverwijzingen met een dollarteken worden niet vermeld.
geëvalueerd:
DNAT naar "$myhost:$myport";
Trefwoorden
In de vorige sectie hebben we al enkele basis-trefwoorden geïntroduceerd, zoals 'keten',
"protocol" en "ACCEPTEREN". Laten we hun aard eens onderzoeken.
Er zijn drie soorten trefwoorden:
· plaats Trefwoorden definiëren waar een regel wordt gemaakt. Bijvoorbeeld: "tabel", "keten".
· match trefwoorden voeren een test uit op alle passerende pakketten. De huidige regel is zonder
Effect als een (of meer) van de matches niet slaagt. Bijvoorbeeld: "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. Bijvoorbeeld: "ACCEPT", "REJECT",
"springen".
Sommige doelen definiëren meer trefwoorden om details te specificeren: "REJECT reject-with icmp-
"net-onbereikbaar".
Elke regel bestaat uit een plaats en doel, plus een willekeurig aantal lucifers:
tabelfilter # locatie
proto tcp dport (http https) # overeenkomst
ACCEPTEREN; # doel
Strikt genomen is er een vierde soort: ferm sleutelwoorden (die de interne werking van ferm regelen
gedrag), maar deze worden later uitgelegd.
Kenmerken
Veel trefwoorden hebben parameters. Deze kunnen worden opgegeven als letterlijke waarden, variabelereferenties of
lijsten (arrays):
proto udp
saddr $VERTROUWDE_HOSTS;
proto tcp dport (http https ssh);
LOG log-prefix "funky wardriver waarschuwing: ";
Sommige hiervan kunnen worden ontkend (lijsten kunnen niet worden ontkend):
proto !esp;
proto udp dport !domein;
Trefwoorden die geen parameters hebben, worden ontkend door een voorvoegsel '!':
proto-tcp !syn;
Lees iptables(8) om te zien waar de ! kunnen worden gebruikt.
BASIC TREFWOORDEN
Bestemming trefwoorden
domein [ip|ip6]
Stel het domein in. "ip" is standaard en betekent "IPv4" (iptables). "ip6" staat voor IPv6.
ondersteuning, met behulp van "ip6tables".
tafel [filter|nat|verwarren]
Geeft aan in welke netfiltertabel deze regel wordt ingevoegd: "filter" (standaard),
"nat" of "mangel".
keten [ketennaam]
Geeft de netfilterketen (binnen de huidige tabel) aan waar deze regel op van toepassing zal zijn
ingevoegd. Veelvoorkomende 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, zal ferm de regel toevoegen aan een aangepaste keten
met die naam.
beleidsmaatregelen [ACCEPTEREN|DROP|..]
Geeft het standaardbeleid voor de huidige keten op (alleen ingebouwd). Kan een van de volgende zijn:
de ingebouwde doelen (ACCEPT, DROP, REJECT, ...). Een pakket dat aan geen enkele regel voldoet
in een keten worden behandeld zoals gespecificeerd in het beleid.
Om dubbelzinnigheid te voorkomen, moet u altijd het beleid van alle vooraf gedefinieerde ketens specificeren
uitdrukkelijk.
@subchain ["KETENNAAM"] { ... }
Werkt zoals de normale blokoperatoren (dus zonder de @subchain trefwoord), behalve
uit die ferm verplaatst regels binnen de accolades naar een nieuwe aangepaste keten. De naam
want deze keten wordt automatisch door ferm gekozen.
In veel gevallen is dit sneller dan alleen een blok, omdat de kernel een blok kan overslaan.
Een enorm blok regels wanneer een voorwaarde onwaar is. Stel je het volgende voorbeeld voor:
tabelfilterketen INPUT {
saddr (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 een pakket arriveert dat de verdrietig
wedstrijd, controleert het desalniettemin alle 20 regels. Met @subchain, deze controle is gedaan
eenmalig, 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).
U kunt hetzelfde bereiken door expliciet een aangepaste keten te declareren, maar u zult zich misschien ongemakkelijk voelen
dat gebruik @subchain vereist minder typen.
Basic iptables match trefwoorden
interface [interface-naam]
Definieer de interfacenaam, uw externe netwerkkaart, zoals eth0, of inbelverbinding zoals
ppp1, of welk apparaat je ook wilt gebruiken voor het doorgeven van pakketten. Het is equivalent
naar de "-i"-schakelaar in iptables(8).
buitenkant [interface-naam]
Hetzelfde als interface, alleen voor het matchen van de uitgaande interface voor een pakket, zoals in
iptables(8).
protocol [protocolnaam|protocolnummer]
Momenteel worden door de kernel tcp, udp en icmp ondersteund, of hun respectievelijke
getallen.
saddr|papa [adres-spec]
Overeenkomsten op pakketten die afkomstig zijn van het opgegeven adres (saddr) of gericht zijn op
het adres (papa).
Voorbeelden:
saddr 192.168/8 ACCEPT; # (identiek aan de volgende:)
saddr 192.168.0.0/255.255.255.0 ACCEPTEREN;
daddr mijn.domein.com ACCEPTEREN;
fragment
Geef aan dat alleen gefragmenteerde IP-pakketten moeten worden vergeleken. Wanneer pakketten
groter dan de maximale pakketgrootte die uw systeem aankan (Maximum
Transmissie-eenheid of MTU) worden ze in stukjes gehakt en één voor één verzonden
enkele pakketten. Zie ifconfig(8) als u de MTU voor uw systeem wilt vinden (de
standaard is dit meestal 1500 bytes).
Fragmenten worden vaak gebruikt bij DOS-aanvallen, omdat er geen manier is om ze te vinden
de oorsprong van een fragmentpakket achterhalen.
sport|dport [poort-specificatie]
Komt overeen met pakketten op de opgegeven TCP- of UDP-poort. "sport" komt overeen met de bron
poort en dport komt overeen met de doelpoort.
Deze match 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:
dport 80 ACCEPTEREN;
dport http ACCEPTEREN;
dport ssh:http ACCEPTEREN;
dport 0:1023 ACCEPT; # equivalent aan :1023
dport 1023:65535 ACCEPTEREN;
syn Geef aan dat de SYN-vlag in een TCP-pakket moet overeenkomen, die worden gebruikt om
Nieuwe TCP-verbindingen bouwen. Hiermee kunt u inkomende verbindingen identificeren en
Beslis of u het wilt toestaan of niet. Pakketten die deze vlag niet hebben, worden
waarschijnlijk vanuit een reeds bestaande verbinding, dus het wordt als redelijkerwijs beschouwd
veilig om deze door te laten.
module [module-naam]
Laad een iptables-module. De meeste modules bieden meer match-keywords. We komen er zo op.
dat later.
Basic doel trefwoorden
springen [custom-chain-naam]
Springt naar een aangepaste keten. Als geen enkele regel in de aangepaste keten overeenkomt, retourneert netfilter
naar de volgende regel in de vorige keten.
realgoto [custom-chain-naam]
Ga naar een aangepaste ketting. In tegenstelling tot de springen keuze, RETURN zal niet doorgaan met verwerken
in deze keten maar in plaats daarvan in de keten die ons via springen.
Het trefwoord realgoto werd gekozen tijdens de overgangsperiode, omdat goto
(reeds verouderd) was vroeger een alias voor springen.
ACCEPTEREN Accepteert overeenkomende pakketten.
DROP Overeenkomende pakketten zonder nadere aankondiging verwijderen.
WEIGEREN Verwerpt overeenkomende pakketten, d.w.z. stuurt een ICMP-pakket naar de verzender, dat is poort-
Standaard onbereikbaar. U kunt een ander ICMP-type opgeven.
REJECT; # standaard naar icmp-poort-onbereikbaar
REJECT reject-met icmp-net-unreachable;
Typ "iptables -j REJECT -h" voor meer informatie.
RETURN Maak de huidige keten af en keer terug naar de aanroepende keten (als "jump"
[custom-chain-name]" werd gebruikt).
GEEN P Er is helemaal geen actie ondernomen.
EXTRA TREFWOORDEN
Netfilter is modulair. Modules kunnen extra doelen en zoekwoorden leveren. De lijst
van netfiltermodules groeit voortdurend, en ferm probeert deze te blijven ondersteunen
alles. In dit hoofdstuk worden de 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 gedragen als een doelwit, d.w.z. je zult 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 LOKAAL;
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 op:
In tegenstelling tot ferm-opmerkingen ('#') wordt deze weergegeven in "iptables -L".
mode commentaar commentaar "Dit is mijn commentaar." ACCEPTEREN;
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 conditie conditie (abc def) ACCEPTEREN;
mod conditie conditie !foo ACCEPT;
connbytes
Vergelijk met het aantal bytes of pakketten van een verbinding (of een van de twee stromen)
die de verbinding vormen) tot nu toe zijn overgedragen, of gemiddeld bytes per
pakket.
mod connbytes connbytes 65536: connbytes-dir beide connbytes-mode bytes ACCEPT;
mod connbytes connbytes !1024:2048 connbytes-dir antwoord connbytes-mode pakketten ACCEPT;
Geldige waarden voor connbytes-map: origineel, doorgaans, zowel; voor connbytes-modus:
pakketten, bytes, avgpkt.
verbindingslimiet
Hiermee kunt u het aantal parallelle TCP-verbindingen met een server per gebruiker beperken
IP-adres van de client (of adresblok).
mod connlimit connlimit-above 4 REJECT;
mod connlimit connlimit-above !4 ACCEPTEREN;
mod connlimit connlimit-above 4 connlimit-mask 24 REJECT;
connmark
Controleer het markeringsveld dat aan de verbinding is gekoppeld en dat is ingesteld door het CONNMARK-doel.
mod connmark mark 64;
mod connmark mark 6/7;
conntrack
Controleer de verbindingstrackinginformatie.
mod conntrack ctstate (GERELATEERD IN VERBAND MET VESTIGING);
mod conntrack ctproto tcp;
mod conntrack ctorigsrc 192.168.0.2;
mod conntrack ctorigdst 1.2.3.0/24;
mod conntrack ctorigsrcport 67;
mod conntrack ctorigdstport 22;
mod conntrack ctreplsrc 2.3.4.5;
mod conntrack ctrepldst ! 3.4.5.6;
mod conntrack ctstatus VERZEKERD;
mod conntrack cverloopt 60;
mod conntrack cexpire 180:240;
Typ "iptables -m conntrack -h" voor meer informatie.
dcp Controleer DCCP (Datagram Congestion Control Protocol)-specifieke kenmerken.
module wordt automatisch geladen wanneer u "protocol dccp" gebruikt.
proto dccp sport 1234 dport 2345 ACCEPTEREN;
proto dccp dccp-typen (SYNCACK ACK) ACCEPTEREN;
proto dccp dccp-types !VERZOEK DROP;
proto dccp dccp-optie 2 ACCEPTEREN;
dscp Zorg dat het 6-bits DSCP-veld overeenkomt met het TOS-veld.
mod dscp dscp 11;
mod dscp dscp-klasse AF41;
ECN Koppel de ECN-bits van een IPv4 TCP-header.
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 espspi 0x101;
mod esp espspi ! 0x200:0x2ff;
eui64 "Deze module komt overeen met het EUI-64-gedeelte van een stateless, automatisch geconfigureerd IPv6-adres.
Het vergelijkt de EUI-64 afgeleid van het bron-MAC-adres in het Ethernet-frame met
de onderste 64 bits van het IPv6-bronadres. Maar de "Universele/Lokale" bit is 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 voldoet aan een snelheidslimiet op basis van een fuzzy logic controller [FLC]."
mod fuzzy ondergrens 10 bovengrens 20 ACCEPTEREN;
hb Komt overeen met de Hop-by-Hop-opties-header (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 Hop Limit-veld (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 poort kan zijn
opgegeven met "-portnr".
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-aanvraag ACCEPTEREN;
Deze optie kan ook worden gebruikt in ip6 domein, hoewel dit wordt genoemd icmpv6 in
ip6tabellen.
Gebruik "iptables -p icmp "-h"" om een lijst met geldige ICMP-typen te verkrijgen.
ipbereik Komt overeen met 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 ACCEPT;
mod ipv4options !ts ACCEPTEREN;
mod ipv4options !ra ACCEPT;
mod ipv4options !any-opt ACCEPT;
ipv6-header
Komt overeen met de IPv6-extensieheader (ip6).
mod ipv6header header !(hop frag) ACCEPTEREN;
mod ipv6header header (auth dst) ACCEPTEREN;
hashlimiet
Vergelijkbaar met 'mod-limiet', maar biedt de mogelijkheid om per bestemming of per poort toe te voegen
limieten beheerd in een hashtabel.
mod hashlimit hashlimit 10/minuut hashlimit-burst 30/minuut
hashlimit-modus dstip hashlimit-naam foobar ACCEPT;
Mogelijke waarden voor hashlimit-mode: dstip dstport srcip srcport (of een lijst met
(meer dan één van deze).
Er zijn meer mogelijke instellingen, typ "iptables -m hashlimit -h" voor
documentatie.
lengte Controleer de lengte van het pakket.
mod lengte lengte 128; # exact 128 bytes
mod lengte lengte 512:768; # bereik
mod lengte lengte ! 256; # genegeerd
begrenzing Beperkt de pakketsnelheid.
mod limiet limiet 1/seconde;
mod limiet limiet 15/minuut limiet-burst 10;
Typ "iptables -m limit -h" voor meer informatie.
Mac Zorg dat het MAC-adres overeenkomt met de bron.
mod mac mac-bron 01:23:45:67:89;
Mark Matcht pakketten op basis van hun netfiltermarkveld. Dit kan een 32-bits geheel getal zijn.
tussen 0 en 4294967295.
mod-markering markering 42;
mh Komt overeen met de mobiliteitsheader (domein ip6).
proto mh mh-type binding-update ACCEPT;
meerdere poorten
Koppel 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": hij genereert slechts één regel
voor maximaal 15 poorten in plaats van één regel voor elke poort.
zoveelste Combineer elk zoveelste pakketje.
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 Vergelijk pakketten op basis van het besturingssysteem van de verzender.
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;
moderator cmd-eigenaar "sendmail";
("cmd-owner", "pid-owner" en "sid-owner" vereisen speciale kernelpatches die niet
inbegrepen in de vanille Linux kernel)
physdev Komt overeen met het fysieke apparaat waarop een pakket het apparaat is binnengekomen of op het punt staat het te verlaten
machine. Dit is handig voor gebrugde 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-gebrugd;
pkttype Controleer het pakkettype op de linklaag.
mod pkttype pkt-type unicast;
mod pkttype pkt-type broadcase;
mod pkttype pkt-type multicast;
beleidsmaatregelen Komt overeen met het IPsec-beleid dat op dit pakket wordt toegepast.
mod beleid dir out pol ipsec ACCEPT;
mod-beleid strikt vereist 23 spi 0x10 proto ah ACCEPT;
mod beleid modus tunnel tunnel-src 192.168.1.2 ACCEPT;
mod beleid modus tunnel tunnel-dst 192.168.2.1 ACCEPT;
mod-beleid strikt volgende vereiste 24 spi 0x11 ACCEPTEREN;
Houd er rekening mee dat het trefwoord daarom wordt ook gebruikt als een korte versie van protocol
(ingebouwde matchmodule). U kunt dit conflict oplossen door altijd de lange
trefwoord protocol.
psd TCP/UDP-poortscans detecteren.
mod psd psd-gewicht-drempel 21 psd-vertraging-drempel 300
psd-lo-poorten-gewicht 3 psd-hi-poorten-gewicht 1 DROP;
quotum Implementeert netwerkquota's door een byteteller bij elk pakket te verlagen.
mod quotum quotum 65536 ACCEPTEREN;
willekeurige Zoek een willekeurig percentage van alle pakketten.
mod willekeurig gemiddelde 70;
rijk Match het routingdomein. Handig in omgevingen die BGP gebruiken.
mod-rijk rijk 3;
recent Markeer tijdelijk bron-IP-adressen.
mod recente set;
mod recente rcheck seconden 60;
mod recent ingestelde rsource naam "badguy";
mod recente set rdest;
mod recente rcheck rsource naam "badguy" seconden 60;
mod recente update seconden 120 hitcount 3 rttl;
Deze netfiltermodule heeft een ontwerpfout: hoewel deze is geïmplementeerd als een match
module, gedraagt het zich als een doelwit wanneer het trefwoord "set" wordt gebruikt.
<http://snowman.net/projects/ipt_recent/>
rt Zorg 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 SCTP (Stream Control Transmission Protocol)-specifieke kenmerken.
module wordt automatisch geladen wanneer u "protocol sctp" gebruikt.
proto sctp sport 1234 dport 2345 ACCEPTEREN;
alleen proto sctp chunk-types DATA:Wees ACCEPT;
proto sctp chunk-typen any (INIT INIT_ACK) ACCEPT;
proto sctp chunk-types !all (HARTSLAG) ACCEPT;
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 verbindingstrackingstatus.
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 ongedocumenteerd in de iptables(8) man-pagina.
mod statistische modus willekeurige waarschijnlijkheid 0.8 ACCEPTEREN;
mod statistiek modus nde elke 5 pakketten 0 DROP;
snaar Komt overeen met een tekenreeks.
mod string string "foo bar" ACCEPTEREN;
mod string algo kmp van 64 naar 128 hex-string "deadbeef" ACCEPT;
tcp Controleert TCP-specifieke kenmerken. Deze module wordt automatisch geladen wanneer u deze gebruikt.
"tcp-protocol".
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 ALLE (RST ACK);
proto tcp syn;
proto tcp tcp-optie 2;
proto tcp mss 512;
Typ "iptables -p tcp -h" voor meer informatie.
tcpmss Controleer het TCP MSS-veld van een SYN- of SYN/ACK-pakket.
mod tcpmss mss 123 ACCEPTEREN;
mod tcpmss mss 234:567 ACCEPTEREN;
Time to Controleren of de tijd waarop een pakket aankomt binnen het opgegeven bereik valt.
mod tijd tijdstart 12:00;
mod tijd tijdstop 13:30;
mod tijd dagen (ma wo vr);
mod tijd datum start 2005:01:01;
mod tijd datum start 2005:01:01:23:59:59;
mod tijd datum eind 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 Komt overeen met een pakket op de opgegeven TOS-waarde.
mod tos tos Minimaliseren-Kosten ACCEPTEREN;
mod tos tos !Normale-Service ACCEPT;
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 kleiner dan
u32 Vergelijkt ruwe gegevens van het pakket. U kunt meer dan één filter in een ferm opgeven.
lijst; deze worden niet uitgebreid tot meerdere regels.
mod u32 u32 '6&0xFF=1' ACCEPTEREN;
mod u32 u32 ('27&0x8f=7' '31=0x527c4833') DROP;
onrein Zoekt naar pakketten die misvormd of ongebruikelijk lijken. Deze match heeft geen verdere informatie.
parameters.
iptables doel modules
De volgende aanvullende doelen zijn beschikbaar in ferm, op voorwaarde dat u ze hebt ingeschakeld in
jouw kernel:
CLASSIFICEREN
Stel de CBQ-klasse in.
CLASSIFICATIE set-klasse 3:50;
CLUSTERIP
Configureer een eenvoudig cluster van knooppunten die een bepaald IP- en MAC-adres delen.
Verbindingen worden statisch verdeeld over 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 set-mark 42;
CONNMARK save-mark;
CONNMARK herstel-markering;
CONNMARK opslagmarkeringsmasker 0x7fff;
CONNMARK herstel-markeringsmasker 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). Wordt meestal gebruikt in
in combinatie met SECMARK is het alleen geldig in de mangle-tabel.
CONNSECMARK opslaan;
CONNSECMARK herstellen;
DTA naar [ip-adres|ip-bereik|ip-poortbereik]
Wijzig het bestemmingsadres van het pakket.
DNAT naar 10.0.0.4;
DNAT naar 10.0.0.4:80;
DNAT naar 10.0.0.4:1024-2048;
DNAT naar 10.0.1.1-10.0.1.20;
ECN Dit doelwit maakt het mogelijk om selectief te werken rond bekende ECN-zwarte gaten. Het kan alleen
worden gebruikt in de mangeltabel.
ECN ecn-tcp-verwijderen;
HL Wijzig het veld IPv6 Hop Limit (alleen ip6/mangle).
HL hl-set 5;
HL hl-dec 2;
HL hl-inc 1;
IPV4OPTSSTRIP
Verwijder alle IP-opties uit een pakket. Deze module accepteert geen opties.
IPV4OPTSSTRIP;
LOG Registreer alle pakketten die aan deze regel voldoen in het kernellogboek. Wees voorzichtig met loggen.
overstroming. Merk op dat dit een "niet-beëindigend doel" is, d.w.z. het doorkruisen van regels.
gaat verder bij de volgende regel.
LOG log-niveau waarschuwing log-prefix "Kijk hier eens naar: ";
LOG log-tcp-sequentie log-tcp-opties;
LOG log-ip-opties;
MARK Stelt het netfilter-markeringsveld in voor het pakket (een 32-bits geheel getal tussen 0 en
4294967295):
MARK set-mark 42;
MARK set-xmark 7/3;
MARK en-mark 31;
MARK of-markeer 1;
MARK xor-mark 12;
MASQUERADE
Maskerade overeenkomende pakketten. Optioneel 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 Een heel netwerk op een ander netwerk in kaart brengen nat tafel.
NETMAP naar 192.168.2.0/24;
NOTRACK Schakel het volgen van verbindingen uit voor alle pakketten die aan die regel voldoen.
proto tcp dport (135:139 445) NOTRACK;
NFLOG Logpakketten 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;
NFQUEUE Gebruikersruimtewachtrij, vereist nfnetlink_queue-kernelondersteuning.
proto tcp dport ftp NFQUEUE wachtrij-nummer 20;
WACHTRIJ Gebruikersruimte-wachtrij, de voorloper van NFQUEUEAlle pakketten gaan naar wachtrij 0.
proto tcp dport ftp WACHTRIJ;
REDIRECT naar-poorten [poorten]
Transparante proxying: wijzig het bestemmings-IP van het pakket naar de machine
zelf.
proto tcp dport http OMLEIDING naar-poorten 3128;
proto tcp dport http OMLEIDING naar-poorten 3128 willekeurig;
DEZELFDE Vergelijkbaar met SNAT, maar een client wordt voor al zijn verbindingen toegewezen aan hetzelfde bron-IP-adres.
verbindingen.
HETZELFDE als 1.2.3.4-1.2.3.7;
HETZELFDE als 1.2.3.8-1.2.3.15 nodst;
HETZELFDE als 1.2.3.16-1.2.3.31 willekeurig;
SECMARK Dit wordt gebruikt om de waarde van het beveiligingsmerk in te stellen die aan het pakket is gekoppeld voor gebruik door
Beveiligingssubsystemen zoals SELinux. Het is alleen geldig in de mangletabel.
SECMARK selctx "systeem_u:object_r:httpd_pakket_t:s0";
SET [add-set|del-set] [setnaam] [vlag(en)]
Voeg het IP-adres toe aan de opgegeven set. Ziehttp://ipset.netfilter.org/>
proto icmp icmp-type echo-request SET add-set badguys src;
SNAT naar [ip-adres|ip-bereik|ip-poortbereik]
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 set-tos [waarde]
Stel het TCP-pakkettype van de servicebit in op deze waarde. Dit wordt gebruikt door
welke verkeersplanner dan ook bereid is, meestal uw eigen Linux-machine, maar misschien
meer. De originele tos-bits worden gewist en overschreven door deze waarde.
TOS set-tos Maximaliseren-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-header veld.
TTL ttl-set 16;
TTL ttl-dec 1; # afname met 1
TTL ttl-inc 4; # toename met 4
ULOG Logpakketten 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, bestemmings-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.
keten INPUT h-lengte 64 ACCEPT;
opcode Operatiecode, voor details zie de iptables(8).
opcode 9 ACCEPTEREN;
h-type Hardwaretype.
h-type 1 ACCEPTEREN;
prototype
Protocoltype.
prototype 0x800 ACCEPTEREN;
Verminking
De sleutelwoorden mangle-ip-s, mangle-ip-d, mangle-mac-s, mangle-mac-d, verminkingsdoel
kan worden gebruikt voor ARP-mangling. Zie iptables(8) voor details.
ebtafels trefwoorden
daarom Komt overeen met het protocol dat het frame heeft gemaakt, bijvoorbeeld IPv4 or PPPVoor een lijst, zie
/etc/ethertypes.
interface, buitenkant
Fysieke invoer- en uitvoerinterface.
logisch-in, logisch-uit
De logische bruginterface.
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 aan de hand van de mark_m wedstrijdmodule
en -j MarkOmdat beide zouden worden geïmplementeerd met het trefwoord ferm Mark, wij
besloten dit op te lossen door de naam van het doelwit in hoofdletters te schrijven, zoals in de andere
domeinen. Het volgende voorbeeld herschrijft punt 1 naar 2:
cijfer 1 cijfer 2;
ADVANCED KENMERKEN
Variabelen
In complexe firewallbestanden is het handig om variabelen te gebruiken, bijvoorbeeld om een netwerk te geven
interface een betekenisvolle naam.
Om variabelen in te stellen, schrijft u:
@def $DEV_INTERNET = eth0;
@def $PORTS = (http ftp);
@def $MORE_PORTS = ($PORTS 8080);
In de echte ferm-code worden variabelen op dezelfde manier gebruikt als elke andere sleutelwoordparameter:
keten INPUT interface $DEV_INTERNET proto tcp dport $MORE_PORTS ACCEPT;
Houd er rekening mee dat variabelen alleen kunnen worden gebruikt in sleutelwoordparameters ("192.168.1.1", "http"); ze
mag geen ferm-trefwoorden bevatten zoals "proto" of "interface".
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 ACCEPT;
}
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 bovenliggende blok
weet nog steeds "set $DEV_INTERNET = eth1".
Include-bestanden zijn speciaal: variabelen die in een included bestand zijn gedeclareerd, zijn nog steeds beschikbaar in
Het aanroepende blok. Dit is handig wanneer u een bestand opneemt dat alleen variabelen declareert.
Automatisch variabelen
Sommige variabelen worden intern door ferm ingesteld. Ferm-scripts kunnen ze net als alle andere gebruiken.
variabel.
$BESTANDSNAAM
De naam van het configuratiebestand ten opzichte van de map waarin ferm is gestart.
$BESTANDSNAAM
De basisnaam van het configuratiebestand.
$DIRNAME
De map van het configuratiebestand.
$DOMEIN Het huidige domein. Een van ip, ip6, arp, eb.
$TABEL De huidige netfiltertabel.
$CHAIN De huidige netfilterketen.
$LIJN De regel van het huidige script. Deze kan als volgt worden gebruikt:
@def &log($msg) = {
LOG log-prefix "regel=$msg:$REGEL ";
}
.
.
.
&log("logbericht");
Functies
Functies lijken op variabelen, behalve dat ze parameters kunnen hebben en ze bieden
ferm-opdrachten, geen waarden.
@def &FOO() = proto (tcp udp) dport-domein;
&FOO() ACCEPTEREN;
@def &TCP_TUNNEL($poort, $bestemming) = {
tabelfilterketen FORWARD interface ppp0 proto tcp dport $port daddr $dest outerface 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 de laatste opdracht in een ferm zijn
regel, d.w.z. dat deze gevolgd moet worden door ';'. De '&FOO()' voorbeeld bevat geen blok, dus
U kunt 'ACCEPT' na de oproep schrijven. Om dit te omzeilen, kunt u de volgorde van de trefwoorden wijzigen:
@def &IPSEC() = { proto (in het bijzonder ah); proto udp dport 500; }
keten INPUT ACCEPT &IPSEC();
Terugslagen
Met backticks kunt u de uitvoer van een externe opdracht gebruiken:
@def $DNSSERVERS = `grep naamserver / Etc / resolv.conf | awk '{print $2}'`;
keten INPUT proto tcp saddr $DNSSERVERS ACCEPT;
De opdracht wordt uitgevoerd met de shell (/ Bin / sh), net als backticks in Perl. ferm doet dat
Voer hier geen variabele uitbreiding uit.
De uitvoer wordt vervolgens getokeniseerd en opgeslagen als een ferm-lijst (array). Regels beginnend met '#'
worden genegeerd; de overige regels kunnen een willekeurig aantal waarden bevatten, gescheiden door spaties.
Inclusief
De @erbij betrekken Met het trefwoord kunt u externe bestanden opnemen:
@include 'vars.ferm';
De bestandsnaam is relatief ten opzichte van het aanroepende bestand, bijvoorbeeld bij het opnemen van
/etc/ferm/ferm.confde bovenstaande verklaring omvat /etc/ferm/vars.ferm. Variabelen en
Functies die in een meegeleverd bestand zijn gedeclareerd, zijn nog steeds beschikbaar in het aanroepende bestand.
omvatten werkt binnen een blok:
keten INPUT {
@include 'input.ferm';
}
Als u een directory opgeeft (met een afsluitende '/'), worden alle bestanden in deze directory
inbegrepen, alfabetisch gesorteerd:
@include 'ferm.d/';
Met een achterliggend pijpsymbool, 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 expressie:
@if $condition DROP;
Een waarde wordt net als in Perl als true geëvalueerd: nul, lege lijst, lege string zijn false,
Al het andere is waar. Voorbeelden van ware waarden:
(ab); 1; 'foo'; (0 0)
Voorbeelden van valse waarden:
(); 0; '0'; ''
Er is ook @anders:
@if $condition DROP; @else REJECT;
Let op de puntkomma vóór de @anders.
Het is mogelijk om accolades te gebruiken na: @indien or @anders:
@als $voorwaarde {
MARK set-mark 2;
OPBRENGST;
} @anders {
MARK set-mark 3;
}
Omdat de afsluitende accolade ook het commando afsluit, is een puntkomma niet nodig.
Er is geen @elsif, Gebruik dan @anders @indien gebruiken.
Voorbeeld:
@def $have_ipv6 = `test -f /proc/net/ip6_tables_names && echo 1 || echo`;
@als $heb_ipv6 {
domein ip6 {
# ....
}
}
haken
Om aangepaste opdrachten uit te voeren, kunt u hooks installeren:
@hook pre "echo 0 >/proc/sys/net/ipv4/conf/eth0/doorsturen";
@hook bericht "echo 1 >/proc/sys/net/ipv4/conf/eth0/doorsturen";
@hook flush "echo 0 >/proc/sys/net/ipv4/conf/eth0/doorsturen";
De opgegeven opdracht wordt uitgevoerd met behulp van de shell. "pre" betekent dat de opdracht moet worden uitgevoerd voordat
het toepassen van de firewallregels, en "post" betekent dat de opdracht daarna moet worden uitgevoerd. "flush"-hooks
worden uitgevoerd nadat ferm de firewallregels heeft verwijderd (optie --flush). U kunt elke
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($DOMEIN, ip6) DROP;
@ne(a,b)
Vergelijkbaar met @eq test dit op ongelijkheid.
@niet(x)
Negeert een Booleaanse waarde.
@resolve((hostnaam1 hostnaam2 ...), [type])
Hostnamen worden meestal omgezet door iptables. Om ferm hostnamen te laten omzetten, gebruikt u de
functie @resolve:
saddr @resolve(my.host.foo) proto tcp dport ssh ACCEPT;
saddr @resolve((another.host.foo third.host.foo)) proto tcp dport openvpn ACCEPT;
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 ferm-lijst,
en het buitenste paar als functieparameter-afbakeningstekens.
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
firewall-configuratie lange tijd niet goed functioneert, waardoor de machine kwetsbaar wordt of kan uitvallen.
@cat(a, b, ...)
Voeg alle parameters samen tot één tekenreeks.
@substr(expressie, compensatie, lengte)
Haalt een substring uit de expressie en retourneert deze. Het eerste teken bevindt zich op offset 0. Als
OFFSET is negatief en begint zo ver vanaf het einde van de string.
@length(expressie)
Retourneert de lengte in tekens van de waarde van EXPR.
@basename(pad)
Retourneert de basisnaam van het bestand voor een bepaald pad (File::Spec::splitpath).
@dirname(pad)
Geef de naam terug van de laatste directory voor een bepaald pad, ervan uitgaande dat het laatste onderdeel een
Bestandsnaam (File::Spec::splitpath).
@ipfilter(lijst)
Filtert de IP-adressen die duidelijk niet overeenkomen met het huidige domein. Dat is
Handig om gemeenschappelijke variabelen en regels voor IPv4 en IPv6 te maken:
@def $TRUSTED_HOSTS = (192.168.0.40 2001:abcd:ef::40);
domein (ip ip6) keten INPUT {
saddr @ipfilter($TRUSTED_HOSTS) proto tcp dport ssh ACCEPT;
}
RECEPTEN
De ./voorbeelden/ directory bevat talrijke ferm-configuraties die kunnen worden gebruikt om te beginnen
Een nieuwe firewall. Deze sectie bevat meer voorbeelden, recepten en trucs.
Eenvoudig port expeditie
Met de Ferm-functie worden routinetaken snel en eenvoudig:
@def &FORWARD_TCP($proto, $poort, $bestemming) = {
tabelfilterketen FORWARD interface $DEV_WORLD outerface $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);
Remote ferm
Als de doelmachine niet kan draaien ferm om een of andere reden (misschien een ingebouwd apparaat
zonder Perl) kunt u de ferm configuratiebestand op een andere computer en laat ferm
Genereer daar een shellscript.
Voorbeeld voor OpenWRT:
ferm --remote --shell mijnwrt/ferm.conf >mijnwrt/firewall.gebruiker
chmod +x mijnwrt/firewall.gebruiker
scp mywrt/firewall.user mywrt.local.net:/enz/
ssh mywrt.local.net /etc/firewall.user
OPTIES
--noexec Voer de iptables(8) commando's, maar sla ze over. Op deze manier kun je
uw gegevens parseren, gebruiken --lijnen om de uitvoer te bekijken.
--doorspoelen Wist de firewallregels en stelt het beleid van alle ketens in op ACCEPT. ferm
heeft een configuratiebestand nodig om te bepalen welke domeinen en tabellen er zijn
getroffen.
--lijnen Toon de firewallregels die zijn gegenereerd op basis van de regels. Ze worden weergegeven.
vlak voordat ze worden uitgevoerd, dus als u foutmeldingen krijgt van iptables(8)
enz., kunt u zien welke regel de fout veroorzaakt.
--interactief
Pas de firewallregels toe en vraag de gebruiker om bevestiging. Keert terug naar de
vorige regelset als er binnen 30 seconden geen geldige gebruikersreactie is (zie
--time-out). Dit is handig voor het beheer van de firewall op afstand: u kunt testen
de regels zonder bang te zijn dat u zichzelf buitensluit.
--time-out S If --interactief wordt gebruikt, draai dan terug als er geen geldig gebruikersantwoord is
na dit aantal seconden. De standaardwaarde is 30.
--help Geef een korte lijst weer met beschikbare opdrachtregelopties.
--versie Geeft het versienummer van het programma weer.
--snel Snelle modus inschakelen: ferm genereert een iptables-opslaan(8) bestand en installeert het
with iptables-herstellen(8). Dit gaat veel sneller, omdat ferm roept iptables(8)
standaard eenmaal voor elke regel.
De snelle modus is standaard ingeschakeld sinds ferm 2.0, waardoor deze optie niet meer wordt ondersteund.
--traag Schakel de snelle modus uit, d.w.z. uitvoeren iptables(8) voor elke regel, en gebruik deze niet
iptables-herstellen(8).
--schelp Genereer een shellscript dat aanroept iptables-herstellen(8) en drukt het af.
Impliceert --snelle --lijnen.
--op afstand Genereer regels voor een externe machine. Impliceert --noexec en --lijnen. Kan zijn
gecombineerd met --schelp.
--domein {ip|ip6}
Alleen het opgegeven domein verwerken. ferm De uitvoer kan leeg zijn als het domein is
niet geconfigureerd in het invoerbestand.
--def '$naam=waarde'
Een variabele overschrijven die is gedefinieerd in het configuratiebestand.
Gebruik ferm online met behulp van onworks.net-services
