EnglezăFrancezăSpaniolă

Ad


Favicon OnWorks

ferm - Online în cloud

Rulați ferm în furnizorul de găzduire gratuit OnWorks prin Ubuntu Online, Fedora Online, emulator online Windows sau emulator online MAC OS

Aceasta este comanda ferm care poate fi rulată în furnizorul de găzduire gratuit OnWorks folosind una dintre multiplele noastre stații de lucru online gratuite, cum ar fi Ubuntu Online, Fedora Online, emulator online Windows sau emulator online MAC OS

PROGRAM:

NUME


ferm - un parser de reguli de firewall pentru Linux

REZUMAT


ferm Opțiuni fișier de intrare

DESCRIERE


ferm este un frontend pentru iptables. Citește regulile dintr-un fișier de configurare structurat
și apeluri iptables(8) pentru a le introduce în nucleul care rulează.

fermScopul lui este de a face regulile de firewall ușor de scris și ușor de citit. Încearcă să reducă
sarcina obositoare de a scrie regulile, permițând astfel administratorului firewall să cheltuiască
mai mult timp pentru elaborarea unor reguli bune decât pentru implementarea corectă a regulii.

Pentru a realiza acest lucru, ferm folosește un limbaj de configurare simplu, dar puternic, care permite
variabile, funcții, matrice, blocuri. De asemenea, vă permite să includeți și alte fișiere, permițând
pentru a crea biblioteci de structuri și funcții utilizate în mod obișnuit.

ferm, pronunțat „firm”, înseamnă „For Easy Rule Making”.

ATENȚIE


Această pagină de manual face nu să vă învețe cum funcționează firewall-ul și cum să scrieți bine
reguli. Există deja suficientă documentație pe această temă.

INTRODUCERE


Să începem cu un exemplu simplu:

lanț INPUT {
proto tcp ACCEPT;
}

Aceasta va adăuga o regulă la lanțul de intrare predefinit, potrivirea și acceptarea tuturor tcp
pachete. Ok, hai să facem totul mai complicat:

lanț (INPUT OUTPUT) {
proto (udp tcp) ACCEPT;
}

Aceasta va insera 4 reguli, și anume 2 în intrarea în lanț și 2 în ieșirea în lanț, potrivire și
acceptând ambele pachete udp și tcp. În mod normal, ați introduce acest lucru:

iptables -A INTRARE -p tcp -j ACCEPT
iptables -A IEȘIRE -p tcp -j ACCEPT
iptables -A INTRARE -p udp -j ACCEPT
iptables -A IEȘIRE -p udp -j ACCEPT

Rețineți cât de mult mai puține tastări trebuie să facem? :-)

Practic, asta este tot ce există, deși îl puteți face destul de complex.
Ceva de privit:

lanț INPUT {
politica ACCEPTĂ;
daddr 10.0.0.0/8 proto tcp dport ! ftp jump mychain sport :1023 TOS 4 setti 8 nota 2;
daddr 10.0.0.0/8 proto tcp dport ftp REJECT;
}

Ideea mea aici este că * trebuie să faci reguli frumoase, să le păstrezi lizibile pentru tine și
alții, și să nu transforme asta într-o mizerie.

Ar ajuta cititorul dacă regulile de firewall rezultate ar fi plasate aici pentru referință.
De asemenea, puteți include versiunea imbricată cu o mai bună lizibilitate.

Încearcă să folosești comentarii pentru a arăta ce faci:

# această linie permite HTTP-proxying transparent pentru rețeaua internă:
proto tcp if eth0 daddr ! 192.168.0.0/255.255.255.0
dport http REDIRECT către porturi 3128;

Veți fi recunoscători pentru asta mai târziu!

lanț INPUT {
politica ACCEPTĂ;
interfață (eth0 ppp0) {
# interzice accesul hackerilor notorius, reveniți aici dacă nu se potrivește
S-a găsit că # reia firewall-ul normal
sări răi;

protocol tcp jump fw_tcp;
protocol udp jump fw_udp;
}
}

Cu cât cuibăreşti mai mult, cu atât arată mai bine. Asigurați-vă că ordinea pe care o specificați este corectă
nu as vrea sa fac asta:

lant FORWARD {
proto ! udp DROP;
proto tcp dport ftp ACCEPT;
}

pentru că a doua regulă nu se va potrivi niciodată. Cel mai bun mod este să specificați mai întâi tot ceea ce este
permis și apoi respinge orice altceva. Uită-te la exemple pentru mai multe instantanee bune.
Majoritatea oamenilor fac așa ceva:

proto tcp {
dport (
ssh http ftp
) ACCEPT;
dport 1024:65535 ! syn ACCEPT;
CĂDERE BRUSCA;
}

STRUCTURA OF A PARET DE FOC FILE


Structura unui fișier firewall adecvat arată ca codul C simplificat. Doar câteva
caracterele sintactice sunt folosite în fișierele de configurare ferm. Pe lângă acestea speciale
caractere, ferm folosește „chei” și „valori”, gândiți-vă la ele ca opțiuni și parametri sau ca
variabile și valori, oricare ar fi.

Cu aceste cuvinte, definiți caracteristicile firewall-ului dumneavoastră. Fiecare firewall
constă din două lucruri: În primul rând, uitați-vă dacă traficul de rețea se potrivește cu anumite condiții și
în al doilea rând, ce să faci cu acel trafic.

Puteți specifica condiții care sunt valabile pentru programul de interfață kernel pe care îl utilizați,
probabil iptables(8). De exemplu, în iptables, când încercați să potriviți pachetele tcp,
ai spune:

iptables --protocol tcp

În ferm, aceasta va deveni:

protocol tcp;

Doar tastarea asta în ferm nu face nimic, trebuie să-i spui lui ferm (de fapt, trebuie
spune iptables(8) și nucleul) ce să faceți cu orice trafic care îndeplinește această condiție:

iptables --protocol tcp -j ACCEPT

Sau, tradus în ferm:

protocol tcp ACCEPT;

; caracterul se află la sfârșitul fiecărei reguli ferm. Ferm ignoră rupturile de linie, adică
exemplul de mai sus este identic cu următorul:

protocol tcp
ACCEPT;

Iată o listă cu personajele speciale:

; Acest personaj finalizează o regulă.

Separate prin punct și virgulă, puteți scrie mai multe reguli într-o singură linie, deși aceasta
scade lizibilitatea:

protocol tcp ACCEPT; protocol udp DROP;

{} Simbolul de imbricare definește un „bloc” de reguli.

Parantezele conțin orice număr de reguli imbricate. Toate meciurile înainte de
bloc sunt reportate la acestea.

Paranteza de închidere finalizează setul de reguli. Nu ar trebui să scrieți un „;” după
asta, pentru că ar fi o regulă goală.

Exemplu:

lanț INPUT proto icmp {
icmp-type echo-request ACCEPT;
CĂDERE BRUSCA;
}

Acest bloc arată două reguli în interiorul unui bloc, care ambele vor fi îmbinate cu orice
în fața acestuia, astfel încât veți obține două reguli:

iptables -A INTRARE -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp -j DROP

Pot exista mai multe niveluri de imbricare:

lanț INPUT {
proto icmp {
icmp-type echo-request ACCEPT;
CĂDERE BRUSCA;
}
daddr 172.16.0.0/12 RESPING;
}

Rețineți că regula „RESPINGERE” nu este afectată de „proto icmp”, deși nu există
';' după bretele de închidere. Tradus în iptables:

iptables -A INTRARE -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

$ Expansiune variabilă. Înlocuiește „$FOO” cu valoarea variabilei. Vezi secțiunea
VARIABILE pentru detalii.

& Apel de funcție. Vezi secțiunea FUNCȚII pentru detalii.

() Simbolul matricei. Folosind parantezele, puteți defini o „listă” de valori care
ar trebui aplicat pentru cheia din stânga acesteia.

Exemplu:

protocol (tcp udp icmp)

aceasta va avea ca rezultat trei reguli:

... -p tcp ...
... -p udp ...
... -p icmp ...

Numai valorile pot fi „listate”, deci nu puteți face așa ceva:

proto tcp ( ACCEPT Jurnal );

dar poți face asta:

lanț (INPUT OUTPUT FORWARD) proto (icmp udp tcp) DROP;

(care va avea ca rezultat nouă reguli!)

Valorile sunt separate prin spații. Simbolul matricei este atât stânga cât și dreapta-
asociativ, spre deosebire de blocul de cuibărit, care este doar asociativ stâng.

" # " Simbolul comentariului. Tot ceea ce urmează acest simbol până la sfârșitul rândului este
ignorat.

"`comanda`"
Executați comanda într-un shell și introduceți rezultatul procesului. Vezi secțiunea
backticks pentru detalii.

'şir'
Citați un șir care poate conține spații albe, semnul dolar etc.

LOG jurnal-prefix ' hei, acesta este prefixul meu de jurnal!';

"şir"
Citați un șir (vezi mai sus), dar referințele variabile cu semnul dolar sunt
evaluat:

DNAT la „$myhost:$myport”;

Cuvinte cheie
În secțiunea anterioară, am introdus deja câteva cuvinte cheie de bază, cum ar fi „lanț”,
„protocol” și „ACCEPT”. Să le explorăm natura.

Există trei tipuri de cuvinte cheie:

· locaţie cuvintele cheie definesc unde va fi creată o regulă. Exemplu: „masă”, „lanț”.

· Meci cuvintele cheie efectuează un test pe toate pachetele care trec. Regula actuală este fără
efect dacă unul (sau mai multe) meciuri nu trece. Exemplu: „proto”, „daddr”.

Cele mai multe meciuri sunt urmate de un parametru: „proto tcp”, „daddr 172.16.0.0/12”.

· ţintă cuvintele cheie indică ce trebuie făcut cu un pachet. Exemplu: „ACCEPT”, „RESPING”,
"a sari".

Unele obiective definesc mai multe cuvinte cheie pentru a specifica detalii: „RESPING REJECT-cu icmp-
net-inaccesibil”.

Fiecare regulă constă din a locaţie și ţintă, plus orice număr de meciuri:

filtru tabel # locație
proto tcp dport (http https) # potrivire
ACCEPT; # țintă

Strict vorbind, există un al patrulea fel: ferm cuvinte cheie (care controlează elementele interne ale ferm
comportament), dar vor fi explicate mai târziu.

parametrii
Multe cuvinte cheie preiau parametri. Acestea pot fi specificate ca literale, referințe variabile sau
liste (matrice):

proto udp
saddr $TRUSTED_HOSTS;
proto tcp dport (http https ssh);
LOG prefix de jurnal „alerta funky wardriver:”;

Unele dintre ele pot fi negate (listele nu pot fi negate):

proto !esp;
proto udp dport !domain;

Cuvintele cheie care nu acceptă parametri sunt anulate de un prefix „!”:

proto tcp !syn;

Citeste iptables(8) pentru a vedea unde ! poate fi utilizat.

BASIC CUVINTE CHEIE


Locație Cuvinte cheie
domeniu [ip|ip6]
Setați domeniul. „ip” este implicit și înseamnă „IPv4” (iptables). „ip6” este pentru IPv6
suport, folosind „ip6tables”.

tabel [filtru|nat|mangle]
Specifică în ce tabel netfilter va fi inserată această regulă: „filtru” (implicit),
„nat” sau „mangle”.

lanţ [numele lanțului]
Specifică lanțul netfilter (în tabelul curent) va fi această regulă
introdus la. Numele obișnuite ale lanțurilor predefinite sunt „INPUT”, „OUTPUT”, „FOWARD”,
„PREROUTING”, „POSTROUTING”, în funcție de tabel. Vezi netfilter
documentatie pentru detalii.

Dacă specificați un lanț inexistent aici, ferm va adăuga regula la un lanț personalizat
cu acel nume.

Politica [ACCEPT|DROP|..]
Specifică politica implicită pentru lanțul curent (numai încorporat). Poate fi unul dintre
țintele încorporate (ACCEPT, DROP, REJECT, ...). Un pachet care nu corespunde regulilor
într-un lanț vor fi tratate așa cum este specificat de politică.

Pentru a evita ambiguitatea, specificați întotdeauna politicile tuturor lanțurilor predefinite
explicit.

@sublanț [„CHAIN-NAME”] { ... }
Funcționează ca operatorii de bloc obișnuiți (adică fără @sublanț cuvânt cheie), cu excepția
acea ferm mută regulile din acolade într-un nou lanț personalizat. Numele
căci acest lanț este ales automat de ferm.

În multe cazuri, acest lucru este mai rapid decât un bloc, deoarece nucleul poate sări peste a
bloc uriaș de reguli atunci când o condiție prealabilă este falsă. Imaginează-ți următorul exemplu:

lanț de filtru de masă 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) ACCEPT;
domeniul proto udp dport ACCEPT;
}
}

Aceasta generează 20 de reguli. Când sosește un pachet care nu trece de saddr
meci, totuși verifică toate cele 20 de reguli. Cu @sublanț, această verificare este făcută
o dată, rezultând o filtrare mai rapidă a rețelei și o sarcină mai mică a procesorului:

lanț de filtru de masă 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) ACCEPT;
domeniul proto udp dport ACCEPT;
}
}

Opțional, puteți defini numele sub-lanțului:

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

Numele poate fi fie un șir literal între ghilimele, fie o expresie fermă extinsă
cum ar fi @cat("interfață_", $iface) sau @substr($var,0,20).

Puteți realiza același lucru declarând în mod explicit un lanț personalizat, dar este posibil să simțiți
că folosind @sublanț necesită mai puțină tastare.

pachet de bază iptables Meci Cuvinte cheie
interfață [nume-interfață]
Definiți numele interfeței, placa de rețea exterioară, cum ar fi eth0, sau dialup
ppp1 sau orice dispozitiv pe care doriți să îl potriviți pentru transmiterea pachetelor. Este echivalent
la comutatorul „-i”. iptables(8).

suprafața exterioară [nume-interfață]
La fel ca interfața, numai pentru potrivirea interfeței de ieșire pentru un pachet, ca în
iptables(8).

protocol [nume-protocol|număr-protocol]
În prezent, suportate de kernel sunt tcp, udp și icmp sau aferente acestora
numere.

saddr|daddr [specificație-adresă]
Potriviri pe pachete care provin de la adresa specificată (saddr) sau vizate
adresa (daddr).

Exemple:

saddr 192.168/8 ACCEPT; # (identic cu următorul:)
saddr 192.168.0.0/255.255.255.0 ACCEPT;
daddr my.domain.com ACCEPT;

fragment
Specificați că numai pachetele IP fragmentate ar trebui să fie potrivite. Când pachetele sunt
mai mare decât dimensiunea maximă a pachetului pe care sistemul dumneavoastră o poate gestiona (numită Maximum
Transmission Unit sau MTU) vor fi tăiate în bucăți și trimise unul câte unul ca
pachete unice. Vedea ifconfig(8) dacă doriți să găsiți MTU-ul pentru sistemul dvs. (the
implicit este de obicei 1500 de octeți).

Fragmentele sunt folosite frecvent în atacurile DOS, deoarece nu există nicio modalitate de a găsi
a afla originea unui pachet fragment.

sport|dport [port-spec]
Potriviri pentru pachetele de pe portul TCP sau UDP specificat. „sport” se potrivește cu sursa
port și dport se potrivește cu portul de destinație.

Această potrivire poate fi folosită numai după ce ați specificat „protocol tcp” sau „protocol udp”,
pentru că doar aceste două protocoale au de fapt porturi.

Și câteva exemple de porturi/domeni valide:

dport 80 ACCEPT;
dport http ACCEPT;
dport ssh:http ACCEPT;
dport 0:1023 ACCEPT; # echivalent cu :1023
dport 1023:65535 ACCEPT;

fiu Specificați că indicatorul SYN dintr-un pachet tcp ar trebui să fie potrivit, care sunt obișnuiți
construiți noi conexiuni tcp. Puteți identifica conexiunile de intrare cu aceasta și
decideți dacă doriți să permiteți sau nu. Pachetele care nu au acest steag sunt
probabil de la o conexiune deja stabilită, deci este considerat rezonabil
sigur să le lași pe acestea să treacă.

modul [nume-modul]
Încărcați un modul iptables. Majoritatea modulelor oferă mai multe cuvinte cheie de potrivire. Vom ajunge la
că mai târziu.

pachet de bază ţintă Cuvinte cheie
a sari [nume-lanț-personalizat]
Salt la un lanț personalizat. Dacă nu se potrivește nicio regulă din lanțul personalizat, netfilter revine
la următoarea regulă din lanțul precedent.

realgoto [nume-lanț-personalizat]
Accesați un lanț personalizat. spre deosebire de a sari opțiune, A REVENI nu va continua procesarea
în acest lanț ci în schimb în lanțul care ne-a chemat via a sari.

Cuvântul cheie realgoto a fost ales în perioada de tranziţie, deoarece goto
(deja depreciat) a fost un alias pentru a sari.

ACCEPT Acceptă pachete potrivite.

CĂDERE BRUSCA Aruncă pachetele care se potrivesc fără o notificare ulterioară.

RESPINGE Respinge pachetele care se potrivesc, adică trimite un pachet ICMP către expeditor, care este port-
inaccesibil implicit. Puteți specifica un alt tip ICMP.

RESPINGE; # implicit la icmp-port-unreachable
REJECT respinge-cu icmp-net-inaccesibil;

Tastați „iptables -j REJECT -h” pentru detalii.

A REVENI Terminați lanțul curent și reveniți la lanțul de apelare (dacă „sări
[Custom-chain-name]" a fost folosit).

NOP Nicio acțiune.

ADIŢIONAL CUVINTE CHEIE


Netfilter este modular. Modulele pot oferi ținte suplimentare și potriviți cuvinte cheie. Lista
de module netfilter este în continuă creștere, iar ferm încearcă să țină pasul cu sprijinirea acestora
toate. Acest capitol descrie modulele care sunt suportate în prezent.

iptables Meci module
cont Trafic de cont pentru toate gazdele din rețea/mască de rețea definită. Acesta este unul dintre
potriviți modulele care se comportă ca o țintă, adică va trebui să utilizați în mare parte NOP
țintă.

cont mod aname mynetwork aaddr 192.168.1.0/24 scurt NOP;

addrtype
Verificați tipul adresei; fie adresa sursă, fie adresa de destinație.

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

Tastați „iptables -m addrtype -h” pentru detalii.

ah Verifică antetul SPI într-un pachet AH.

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

Argumente suplimentare pentru IPv6:

mod ah ahlen 32 ACCEPT;
mod ah ahlen !32 ACCEPT;
mod ah ahres ACCEPT;

comentariu Adaugă un comentariu de până la 256 de caractere la o regulă, fără efect. Rețineți că
spre deosebire de comentariile ferm ('#'), acesta va apărea în „iptables -L”.

mod comment comment "Acesta este comentariul meu." ACCEPT;

condiție
Se potrivește dacă o valoare din /proc/net/ipt_condition/NAME este 1 (calea este
/proc/net/ip6t_condition/NAME pentru domeniul ip6).

condiție mod condiție (abc def) ACCEPT;
stare mod stare !foo ACCEPT;

connbytes
Potriviți după câți octeți sau pachete o conexiune (sau unul dintre cele două fluxuri
care constituie conexiunea) au fost transferate până acum, sau cu o medie de octeți per
pachet.

mod connbytes connbytes 65536: connbytes-dir ambii connbytes-mode bytes ACCEPT;
mod connbytes connbytes !1024:2048 connbytes-dir răspuns pachete connbytes-mode ACCEPT;

Valori valabile pentru connbytes-dir: original, răspuns, atât; pentru connbytes-mode:
pachete, bytes, avgpkt.

connlimit
Vă permite să restricționați numărul de conexiuni TCP paralele la un server per
adresa IP a clientului (sau blocul de adrese).

mod connlimit connlimit-above 4 REJECT;
mod connlimit connlimit-above !4 ACCEPT;
mod connlimit connlimit-above 4 connlimit-mask 24 REJECT;

connmark
Verificați câmpul de marcare asociat conexiunii, stabilit de ținta CONNMARK.

mod connmark marca 64;
mod connmark marca 6/7;

contratrack
Verificați informațiile de urmărire a conexiunii.

mod conntrack ctstate (STABILIT RELATAT);
mod conntrack ctproto tcp;
mod conttrack ctorigsrc 192.168.0.2;
mod conntrack ctorigdst 1.2.3.0/24;
mod conttrack ctorigsrcport 67;
mod conntrack ctorigdstport 22;
mod conntrack ctreplsrc 2.3.4.5;
mod conntrack ctrepldst ! 3.4.5.6;
mod conntrack ctstatus ASIGURAT;
mod conttrack ctexpire 60;
mod conttrack ctexpire 180:240;

Tastați „iptables -m conntrack -h” pentru detalii.

dccp Verificați atributele specifice DCCP (Datagram Congestion Control Protocol). Acest
modulul este încărcat automat când utilizați „protocol dccp”.

proto dccp sport 1234 dport 2345 ACCEPT;
proto dccp dccp-types (SYNCACK ACK) ACCEPT;
proto dccp dccp-types !REQUEST DROP;
proto dccp dccp-opțiunea 2 ACCEPT;

dscp Potriviți câmpul DSCP pe 6 biți din câmpul TOS.

mod dscp dscp 11;
mod dscp dscp-clasa AF41;

ect Potriviți biții ECN ai unui antet TCP IPv4.

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

Tastați „iptables -m ecn -h” pentru detalii.

esp Verifică antetul SPI dintr-un pachet ESP.

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

eui64 „Acest modul se potrivește cu partea EUI-64 a unei adrese IPv6 autoconfigurate fără stat.
Compară EUI-64 derivat din adresa MAC sursă în cadrul Ethernet cu
cei 64 de biți inferiori ai adresei sursei IPv6. Dar bitul „Universal/Local” nu este
comparat. Acest modul nu se potrivește cu alt cadru de strat de legătură și este valabil numai în
lanțurile PREROUTING, INPUT și FORWARD."

mod eui64 ACCEPT;

pufos „Acest modul se potrivește cu o limită de viteză bazată pe un controler cu logică neclară [FLC].”

mod fuzzy low-limit 10 upper-limit 20 ACCEPT;

hbh Se potrivește cu antetul Opțiuni Hop-by-Hop (ip6).

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

hl Se potrivește cu câmpul Hop Limit (ip6).

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

ajutor Verifică modul de ajutor conttrack care urmărește această conexiune. Portul poate fi
specificat cu „-portnr”.

mod helper helper irc ACCEPT;
mod helper helper ftp-21 ACCEPT;

icmp Verificați atributele specifice ICMP. Acest modul se încarcă automat când îl utilizați
„protocol icmp”.

proto icmp icmp-type echo-request ACCEPT;

Această opțiune poate fi folosită și în be ip6 domeniu, deși acesta se numește icmpv6 in
ip6tables.

Utilizați „iptables -p icmp „-h”” pentru a obține o listă de tipuri de ICMP valide.

iprange Potriviți o serie de adrese IPv4.

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

ipv4options
Potriviți opțiunile de antet IPv4, cum ar fi rutarea sursei, ruta de înregistrare, marcajul de timp și
router-alerta.

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

ipv6header
Se potrivește cu antetul extensiei IPv6 (ip6).

mod ipv6header antet !(hop frag) ACCEPT;
mod ipv6header antet (auth dst) ACCEPT;

hashlimit
Similar cu „mod limit”, dar adaugă posibilitatea de a adăuga per-destinație sau per-port
limite gestionate într-un tabel hash.

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

Valori posibile pentru hashlimit-mode: dstip dstport srcip srcport (sau o listă cu
mai mult de unul dintre acestea).

Există mai multe setări posibile, tastați „iptables -m hashlimit -h” pentru
documentație.

lungime Verificați lungimea pachetului.

lungime mod lungime 128; # exact 128 de octeți
lungimea modului 512:768; # gamă
lungimea modului! 256; # negat

limita Limitează rata de pachete.

limita mod limită 1/secundă;
limit limit mod 15/minut limit-burst 10;

Tastați „iptables -m limit -h” pentru detalii.

mac Potriviți adresa MAC sursă.

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

marca Potrivește pachetele pe baza câmpului de marcaj netfilter. Acesta poate fi un număr întreg de 32 de biți
între 0 și 4294967295.

marcajul mod marca 42;

mh Se potrivește cu antetul de mobilitate (domeniu ip6).

proto mh mh-type binding-update ACCEPT;

multiport
Potriviți un set de porturi sursă sau destinație (numai UDP și TCP).

mod multiport sursă-porturi (https ftp);
mod multiport destinație-porturi (domeniu mysql);

Această regulă are un mare avantaj față de „dport” și „sport”: generează o singură regulă
pentru până la 15 porturi în loc de o regulă pentru fiecare port.

a n- Potriviți fiecare al n-lea pachet.

mod nth la fiecare 3;
mod nth counter 5 la fiecare 2;
mod nth start 2 la fiecare 3;
mod nth start 5 pachete 2 la fiecare 6;

Tastați „iptables -m nth -h” pentru detalii.

osf Potriviți pachetele în funcție de sistemul de operare al expeditorului.

mod osf gen Linux;
mod osf! gen FreeBSD ttl 1 log 1;

Tastați „iptables -m osf -h” pentru detalii.

proprietar Verificați informații despre creator de pachete, și anume ID utilizator, ID grup, ID proces,
ID-ul sesiunii și numele comenzii.

proprietarul mod uid-owner 0;
proprietar mod gid-proprietar 1000;
proprietar mod pid-owner 5432;
proprietar mod sid-proprietar 6543;
proprietarul mod cmd-owner „sendmail”;

("cmd-owner", "pid-owner" și "sid-owner" necesită patch-uri speciale pentru kernel, nu
incluse în nucleul vanilla Linux)

physdev Se potrivește cu dispozitivul fizic pe care un pachet a intrat sau este pe cale să părăsească
mașinărie. Acest lucru este util pentru interfețele cu punte.

mod physdev physdev-in ppp1;
mod physdev physdev-out eth2;
mod physdev physdev-is-in;
mod physdev physdev-is-out;
mod physdev physdev-is-bridged;

pkttype Verificați tipul de pachet din stratul de legătură.

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

Politica Se potrivește cu politica IPsec aplicată acestui pachet.

mod policy dir out pol ipsec ACCEPT;
politica mod strict reqid 23 spi 0x10 proto ah ACCEPT;
mod politică mod tunnel tunnel-src 192.168.1.2 ACCEPT;
mod politică mod tunnel tunnel-dst 192.168.2.1 ACCEPT;
politica mod strict next reqid 24 spi 0x11 ACCEPT;

Rețineți că cuvântul cheie proto este, de asemenea, folosit ca o versiune scurtă a protocol
(modul de potrivire încorporat). Puteți remedia acest conflict folosind întotdeauna lung
cuvinte cheie protocol.

PSD Detectează scanările de porturi TCP/UDP.

mod psd psd-weight-threshold 21 psd-delay-threshold 300
psd-lo-porturi-greutate 3 psd-hi-porturi-greutate 1 DROP;

cotă Implementează cotele de rețea prin decrementarea unui contor de octeți cu fiecare pachet.

cota mod 65536 ACCEPT;

aleator Potriviți un procent aleatoriu din toate pachetele.

medie aleatorie mod 70;

tărâm Potriviți domeniul de rutare. Util în medii care utilizează BGP.

tărâmul mod tărâmul 3;

recent Marcați temporar adresele IP sursă.

mod recent set;
mod recent rcheck secunde 60;
mod recent set rsource name "badguy";
mod recent set rdest;
mod recent rcheck rsource name "badguy" secunde 60;
mod actualizare recentă secunde 120 hitcount 3 rttl;

Acest modul netfilter are un defect de design: deși este implementat ca o potrivire
modul, are un comportament asemănător țintei atunci când se utilizează cuvântul cheie „set”.

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

rt Potriviți antetul de rutare IPv6 (doar ip6).

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

sctp Verificați atributele specifice SCTP (Stream Control Transmission Protocol). Acest
modulul este încărcat automat când utilizați „protocol sctp”.

proto sctp sport 1234 dport 2345 ACCEPT;
proto sctp numai tipuri de bucăți DATE: Fii ACCEPT;
proto sctp chunk-types orice (INIT INIT_ACK) ACCEPT;
proto sctp chunk-types !all (HEARTBEAT) ACCEPT;

Utilizați „iptables -p sctp „-h”” pentru a obține o listă de tipuri de chunk valide.

set Verifică sursa sau destinația IP/Port/MAC cu un set.

set de mod set badguys src DROP;

Vedeahttp://ipset.netfilter.org/> pentru mai multe informații.

de stat Verifică starea de urmărire a conexiunii.

stare mod stare INVALID DROP;
mod state state ACCEPTATE;

Tastați „iptables -m state -h” pentru detalii.

statistic
Succesor al a n- și aleator, în prezent nedocumentat în iptables(8) pagina de manual.

mod statistic mod probabilitate aleatoare 0.8 ACCEPT;
mod statistic mod nth la fiecare 5 pachete 0 DROP;

şir Se potrivește cu un șir.

mod șir șir „foo bar” ACCEPT;
mod string algo kmp de la 64 la 128 hex-string "deadbeef" ACCEPT;

tcp Verifică atributele specifice TCP. Acest modul se încarcă automat când îl utilizați
„protocol tcp”.

proto tcp sport 1234;
proto tcp dport 2345;
proto tcp tcp-flags (SYN ACK) SYN;
proto tcp tcp-flags! (SYN ACK) SYN;
proto tcp tcp-flags ALL (RST ACK);
proto tcp syn;
proto tcp tcp-opțiunea 2;
proto tcp mss 512;

Tastați „iptables -p tcp -h” pentru detalii.

tcpmss Verificați câmpul TCP MSS al unui pachet SYN sau SYN/ACK.

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

timp Verificați dacă ora la care sosește un pachet este în intervalul dat.

oră mod timestart 12:00;
Mod time timestop 13:30;
mod timp zile (luni miercuri vineri);
oră mod datestart 2005:01:01;
oră mod datestart 2005:01:01:23:59:59;
mod time datestop 2005:04:01;
mod timp ziua lunară (30 31);
mod timp zilele lucrătoare (miercuri joi);
oră mod timestart 12:00 utc;
oră mod timestart 12:00 localtz;

Tastați „iptables -m time -h” pentru detalii.

tuse Se potrivește unui pachet cu valoarea specificată a TOS.

mod tos tos Minimizare-Cost ACCEPT;
mod tos tos !Normal-Service ACCEPT;

Tastați „iptables -m tos -h” pentru detalii.

ttl Se potrivește cu câmpul ttl (time to live) din antetul IP.

mod ttl ttl-eq 12; # ttl este egal
mod ttl ttl-gt 10; # ttl mai mare decât
mod ttl ttl-lt 16; # ttl mai puțin decât

u32 Compară datele brute din pachet. Puteți specifica mai mult de un filtru într-un ferm
listă; acestea nu sunt extinse în mai multe reguli.

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

necurat Se potrivește cu pachetele care par neformate sau neobișnuite. Acest meci nu mai are
parametri.

iptables ţintă module
Următoarele ținte suplimentare sunt disponibile în ferm, cu condiția să le fi activat
nucleul tau:

CLASIFICA
Setați clasa CBQ.

CLASIFICARE set-clasa 3:50;

CLUSTERIP
Configurați un grup simplu de noduri care partajează o anumită adresă IP și MAC.
Conexiunile sunt distribuite static între noduri.

CLUSTERIP nou mod hash sourceip clustermac 00:12:34:45:67:89
total-noduri 4 local-node 2 hash-init 12345;

CONNMARK
Setează valoarea marcajului netfilter asociată unei conexiuni.

CONNMARK set-mark 42;
CONNMARK salvare-mark;
CONNMARK restaurare-marca;
CONNMARK salva-mark masca 0x7fff;
CONNMARK masca de restaurare a marcajului 0x8000;

CONNSECMARK
Acest modul copiază marcajele de securitate de la pachete la conexiuni (dacă nu este etichetat),
și de la conexiuni înapoi la pachete (tot doar dacă nu sunt etichetate). Folosit de obicei în
împreună cu SECMARK, este valabil doar în tabelul Mangle.

CONNSECMARK salvare;
CONNSECMARK restaurare;

DNAT la [adresa-ip|gama-ip|gama-port-ip]
Schimbați adresa de destinație a pachetului.

DNAT la 10.0.0.4;
DNAT la 10.0.0.4:80;
DNAT până la 10.0.0.4:1024-2048;
DNAT la 10.0.1.1-10.0.1.20;

ECN Această țintă permite să se lucreze selectiv în jurul găurilor negre ECN cunoscute. Se poate doar
să fie folosit în masa mangle.

ECN ecn-tcp-remove;

HL Modificați câmpul IPv6 Hop Limit (doar ip6/mangle).

HL hl-set 5;
HL hl-dec 2;
HL hl-inc 1;

IPV4OPTSSTRIP
Eliminați toate opțiunile IP dintr-un pachet. Acest modul nu acceptă nicio opțiune.

IPV4OPTSSTRIP;

LOG Înregistrați toate pachetele care se potrivesc cu această regulă în jurnalul kernelului. Fii atent cu jurnalul
inundare. Rețineți că aceasta este o „țintă care nu se încheie”, adică traversarea regulilor
continuă la următoarea regulă.

Jurnal de avertizare la nivel de jurnal prefix de jurnal „Uită-te la asta: „;
LOG log-tcp-secvență log-tcp-opțiuni;
LOG log-ip-opțiuni;

MARCĂ Setează câmpul netfilter mark pentru pachet (un întreg de 32 de biți între 0 și
4294967295):

MARK set-mark 42;
MARK set-xmark 7/3;
MARC și-marca 31;
MARK sau-marca 1;
MARK xor-mark 12;

MASCARADĂ
Mascarade pachete potrivite. Urmat opțional de un port sau port-range pentru
iptables. Specificați ca „123”, „123-456” sau „123:456”. Parametrul intervalului de porturi
specifică din ce porturi locale ar trebui să provină conexiunile mascate.

MASCARADĂ;
MASQUERADE la-porturi 1234:2345;
MASQUERADE la-porturi 1234:2345 aleatoriu;

MIRROR Țintă demonstrativă experimentală care inversează câmpurile sursă și destinație
în antetul IP.

OGLINDĂ;

NETMAP Hartați o întreagă rețea pe o altă rețea din nat tabel.

NETMAP la 192.168.2.0/24;

FĂRĂ URMĂ Dezactivează urmărirea conexiunii pentru toate pachetele care se potrivesc cu regula respectivă.

proto tcp dport (135:139 445) NOTRACK;

NFLOG Pachete de jurnal prin netlink; acesta este succesorul lui ULOG.

NFLOG nflog-group 5 nflog-prefix „Uită-te la asta:”;
NFLOG nflog-range 256;
NFLOG nflog-threshold 10;

NFQUEUE Coadă de așteptare în spațiul utilizatorului, necesită suport pentru kernel nfnetlink_queue.

proto tcp dport ftp NFQUEUE coada-num 20;

COADĂ Cozi de așteptare în spațiul utilizatorului, predecesorul NFQUEUE. Toate pachetele merg la coada 0.

proto tcp dport ftp QUEUE;

REDIRECŢIONA la-porturi [porturi]
Proxy transparent: modificați IP-ul de destinație al pachetului către mașină
însăși.

proto tcp dport http REDIRECT către porturi 3128;
proto tcp dport http REDIRECT către porturi 3128 aleatoriu;

LA FEL Similar cu SNAT, dar un client este mapat la aceeași sursă IP pentru toate acestea
conexiunile.

ACEȘI la 1.2.3.4-1.2.3.7;
SAME la 1.2.3.8-1.2.3.15 nodst;
SAME la 1.2.3.16-1.2.3.31 aleatoriu;

SECMARK Acesta este folosit pentru a seta valoarea marcajului de securitate asociată pachetului pentru a fi utilizată de
subsisteme de securitate precum SELinux. Este valabil doar în tabelul Mangle.

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

SET [add-set|del-set] [Pune un nume] [steagul(e)]
Adăugați IP-ul la setul specificat. Vedeahttp://ipset.netfilter.org/>

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

SNAT la [adresa-ip|gama-ip|gama-port-ip]
Schimbați adresa sursă a pachetului.

SNAT la 1.2.3.4;
SNAT la 1.2.3.4:20000-30000;
SNAT la 1.2.3.4 aleatoriu;

TCPMSS Modificați valoarea MSS a pachetelor TCP SYN.

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

TUSE set-tos [valoare]
Setați bitul tip de serviciu al pachetului tcp la această valoare. Acesta va fi folosit de
indiferent de ce dorește planificatorul de trafic, mai ales propria ta mașină Linux, dar poate
Mai Mult. Tos-bit-urile originale sunt golite și suprascrise de această valoare.

TOS set-to Maximize-Throughput;
TOS și-tos 7;
TOS or-tos 1;
TOS xor-tos 4;

Tastați „iptables -j TOS -h” pentru detalii.

TTL Modificați câmpul antet TTL.

TTL ttl-set 16;
TTL ttl-dec 1; # scade cu 1
TTL ttl-inc 4; # crește cu 4

ULOG Înregistrați pachetele într-un program de spațiu utilizator.

ULOG ulog-nlgroup 5 ulog-prefix „Uită-te la asta: „;
ULOG ulog-cprange 256;
ULOG ulog-qthreshold 10;

ALTE DOMENII


Din versiunea 2.0, ferm sprijină nu numai ip și ip6, Dar, de asemenea, arp (tabelele ARP) și eb
(tabele de legătură Ethernet). Conceptele sunt similare cu iptables.

arptables Cuvinte cheie
sursă-ip, destinație-ip
Se potrivește cu adresa IPv4 sursă sau destinație. La fel ca saddr și daddr în ip
domeniu.

sursă-mac, destinație-mac
Se potrivește cu adresa MAC sursă sau destinație.

interfață, suprafața exterioară
Interfață de intrare și ieșire.

lungimea h
Lungimea hardware a pachetului.

lanț INTRARE lungime h 64 ACCEPT;

opcode Cod de operare, pentru detalii vezi iptables(8).

opcode 9 ACCEPT;

de tip h Tip hardware.

h-tip 1 ACCEPT;

prototip
Tip de protocol.

prototip 0x800 ACCEPT;

Mângling
Cuvintele cheie mangle-ip-s, mangle-ip-d, mangle-mac-s, mangle-mac-d, mangle-tinta
poate fi folosit pentru deformarea ARP. Vedea iptables(8) pentru detalii.

ebtables Cuvinte cheie
proto Se potrivește cu protocolul care a creat cadrul, de ex IPv4 or PPP. Pentru o listă, vezi
/etc/ethertypes.

interfață, suprafața exterioară
Interfață fizică de intrare și ieșire.

logic-in, logic-out
Interfața puntea logică.

saddr, daddr
Se potrivește cu adresa MAC sursă sau destinație.

Meci module
Sunt acceptate următoarele module de potrivire: 802.3, arp, ip, mark_m, pkttype, stp,
vlan, log.

Ţintă extensii
Sunt acceptate următoarele extensii țintă: arpreply, dnat, mark, redirect,
snat.

Vă rugăm să rețineți că există un conflict între --marcă de la mark_m modul de potrivire
și -j marca. Deoarece ambele ar fi implementate cu cuvântul cheie ferm marca, Ne-
a decis să rezolve acest lucru scriind numele țintei cu majuscule, ca în cealaltă
domenii. Următorul exemplu rescrie marcajul de la 1 la 2:

nota 1 NOTĂ 2;

ADVANCED CARACTERISTICI


Variabile
În fișierele firewall complexe, este util să folosiți variabile, de exemplu pentru a oferi o rețea
interfață un nume semnificativ.

Pentru a seta variabile, scrieți:

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

În codul ferm real, variabilele sunt folosite ca orice alt parametru al cuvântului cheie:

interfață INPUT în lanț $DEV_INTERNET proto tcp dport $MORE_PORTS ACCEPT;

Rețineți că variabilele pot fi utilizate numai în parametrii cuvintelor cheie ("192.168.1.1", "http"); ei
nu poate conține cuvinte cheie ferm precum „proto” sau „interfață”.

Variabilele sunt valabile numai în blocul curent:

@def $DEV_INTERNET = eth1;
lanț INPUT {
proto tcp {
@def $DEV_INTERNET = ppp0;
interfață $DEV_INTERNET dport http ACCEPT;
}
interfață $DEV_INTERNET DROP;
}

va fi extins la:

lanț INPUT {
proto tcp {
interfață ppp0 dport http ACCEPT;
}
interfață eth1 DROP;
}

„Def $DEV_INTERNET = ppp0” este valabil doar în blocul „proto tcp”; blocul părinte
încă știe „set $DEV_INTERNET = eth1”.

Fișierele Include sunt speciale - variabilele declarate într-un fișier inclus sunt încă disponibile în
blocul de apelare. Acest lucru este util atunci când includeți un fișier care declară doar variabile.

Automat variabile
Unele variabile sunt setate intern de ferm. Scripturile Ferm le pot folosi la fel ca oricare altul
variabilă.

$FILENAME
Numele fișierului de configurare relativ la directorul în care a fost pornit ferm.

$FILEBNAME
Numele de bază al fișierului de configurare.

$DIRNAME
Directorul fișierului de configurare.

$DOMAIN Domeniul actual. Unul dintre ip, ip6, arp, eb.

$TABLE Tabelul netfilter actual.

$CHAIN Actualul lanț netfilter.

$LINE Linia scriptului curent. Poate fi folosit astfel:

@def &log($msg) = {
LOG prefix de jurnal „regulă=$msg:$LINE”;
}
.
.
.
&log(„mesaj de jurnal”);

funcţii
Funcțiile sunt similare cu variabilele, cu excepția faptului că pot avea parametri și oferă
comenzi ferm, nu valori.

@def &FOO() = domeniu dport proto (tcp udp);
&FOO() ACCEPT;

@def &TCP_TUNNEL($port, $dest) = {
tabel filter chain FORWARD interfață ppp0 proto tcp dport $port daddr $dest outerface eth0 ACCEPT;
table nat chain PREROUTING interfață ppp0 proto tcp dport $port daddr 1.2.3.4 DNAT la $dest;
}

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

Un apel de funcție care conține un bloc (cum ar fi „{...}”) trebuie să fie ultima comandă dintr-un ferm
regula, adică trebuie urmată de „;”. „&FOO()' exemplul nu conține un bloc, așadar
puteți scrie „ACCEPT” după apel. Pentru a evita acest lucru, puteți reordona cuvintele cheie:

@def &IPSEC() = { proto (în special ah); proto udp dport 500; }
lanț INPUT ACCEPT &IPSEC();

Backticks
Cu backtick-uri, puteți utiliza rezultatul unei comenzi externe:

@def $DNSSERVERS = `server de nume grep /etc/resolv.conf | awk '{print $2}'';
chain INPUT proto tcp saddr $DNSSERVERS ACCEPT;

Comanda este executată cu shell-ul (/ Bin / sh), la fel ca backticks în perl. ferm face
nu faceți nicio extindere variabilă aici.

Ieșirea este apoi tokenizată și salvată ca o listă fermă (matrice). Linii care încep cu „#”
sunt ignorate; celelalte linii pot conține orice număr de valori, separate prin spații albe.

Include
@include cuvântul cheie vă permite să includeți fișiere externe:

@include 'vars.ferm';

Numele fișierului este relativ la fișierul care apelează, de exemplu, când include din
/etc/ferm/ferm.conf, afirmația de mai sus include /etc/ferm/vars.ferm. Variabile și
funcțiile declarate într-un fișier inclus sunt încă disponibile în fișierul de apelare.

include functioneaza intr-un bloc:

lanț INPUT {
@include 'input.ferm';
}

Dacă specificați un director (cu un „/”) în urmă, toate fișierele din acest director sunt
incluse, sortate alfabetic:

@include 'ferm.d/';

Cu un simbol al țevii de evacuare, ferm execută o comandă shell și analizează rezultatul acesteia:

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

Condiționalele
Cuvântul cheie @dacă introduce o expresie condiționată:

@if $condiție DROP;

O valoare este evaluată adevărată la fel ca în Perl: zero, listă goală, șirul gol sunt false,
totul este adevărat. Exemple pentru valori adevărate:

(ab); 1; „foo”; (0 0)

Exemple pentru valori false:

(); 0; „0”; ''

Există, de asemenea, @altfel:

@if $condiție DROP; @else RESPING;

Notați punctul și virgulă înainte de @altfel.

Este posibil să folosiți bretele după oricare @dacă or @altfel:

@dacă $condiție {
MARK set-mark 2;
RETURN;
} @else {
MARK set-mark 3;
}

Deoarece acolada de închidere termină și comanda, nu este nevoie de punct și virgulă.

Nu este @elsif, Utilizare @altfel @dacă in schimb.

Exemplu:

@def $have_ipv6 = `test -f /proc/net/ip6_tables_names && echo 1 || ecou`;
@dacă $have_ipv6 {
domeniu ip6 {
# ....
}
}

cârlige
Pentru a rula comenzi personalizate, puteți instala cârlige:

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

Comanda specificată este executată folosind shell-ul. „pre” înseamnă rulați comanda înainte
aplicarea regulilor paravanului de protecție, iar „post” înseamnă a rula comanda ulterior. cârlige „încărcate”.
sunt rulate după ce ferm a șters regulile firewall (opțiunea --flush). Puteți instala orice
numărul de cârlige.

ÎNCORPORAT FUNCȚII


Există mai multe funcții încorporate pe care le puteți găsi utile.

@eq(a,b)
Testează două valori pentru egalitate. Exemplu:

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

@ne(a,b)
Similar cu @eq, aceasta testează neegalitatea.

@nu(x)
Infirmă o valoare booleană.

@resolve((nume gazdă1 numele gazdă2 ...), [tip])
De obicei, numele gazdelor sunt rezolvate de iptables. Pentru a lăsa ferm să rezolve numele de gazdă, utilizați
funcția @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 ACCEPT;

Observați parantezele duble din a doua linie: perechea interioară pentru crearea unei liste ferm,
și perechea exterioară ca delimitatori ai parametrilor funcției.

Al doilea parametru este opțional și specifică tipul de înregistrare DNS. Valoarea implicită este „A”.

Fiți atenți la numele de gazdă rezolvate în configurația firewall. Solicitările DNS pot bloca
configurarea firewall-ului pentru o lungă perioadă de timp, lăsând mașina vulnerabilă sau pot eșua.

@cata, b, ...)
Concatenează toți parametrii într-un singur șir.

@substr(expresie, decalaj, lungime)
Extrage un subșir din expresie și îl returnează. Primul caracter este la offset 0. Dacă
OFFSET este negativ, începe atât de departe de sfârșitul șirului.

@lungime(expresie)
Returnează lungimea în caractere a valorii EXPR.

@basename(cale)
Returnează numele de bază al fișierului pentru o anumită cale (File::Spec::splitpath).

@dirname(cale)
Returnează numele ultimului director pentru o cale dată, presupunând că ultima componentă este a
numele fișierului (File::Spec::splitpath).

@ipfilter(lista)
Filtrează adresele IP care, evident, nu se potrivesc cu domeniul curent. Acesta este
util pentru a crea variabile și reguli comune pentru IPv4 și IPv6:

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

domeniu (ip ip6) lanț INPUT {
saddr @ipfilter($TRUSTED_HOSTS) proto tcp dport ssh ACCEPT;
}

REȚETE


./exemple/ directorul conține numeroase configurații ferm care pot fi folosite pentru a începe
un nou firewall. Această secțiune conține mai multe mostre, rețete și trucuri.

Uşor port transmiterea
Funcția Ferm face sarcinile de rutină rapide și ușoare:

@def &FORWARD_TCP($proto, $port, $dest) = {
tabel filter chain FORWARD interfață $DEV_WORLD outerface $DEV_DMZ daddr $dest proto $proto dport $port ACCEPT;
tabel nat chain PREROUTING interfață $DEV_WORLD daddr $HOST_STATIC proto $proto dport $port DNAT la $dest;
}

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

Îndepărtat ferm
Dacă mașina țintă nu poate rula ferm dintr-un motiv oarecare (poate un dispozitiv încorporat
fără Perl), puteți edita fișierul ferm fișier de configurare pe alt computer și lăsați ferm
generați un script shell acolo.

Exemplu pentru OpenWRT:

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

OPŢIUNI


--noexec Nu executați iptables(8) comenzi, dar săriți în schimb. În felul acesta poți
analizați datele dvs., utilizați --linii pentru a vizualiza ieșirea.

--culoare Șterge regulile firewall și setează politica tuturor lanțurilor la ACCEPT. ferm
are nevoie de un fișier de configurare pentru a determina ce domenii și tabele sunt
afectat.

--linii Afișați liniile de firewall care au fost generate din reguli. Vor fi afișate
chiar înainte de a fi executate, deci dacă primiți mesaje de eroare de la iptables(8)
etc., puteți vedea ce regulă a cauzat eroarea.

--interactiv
Aplicați regulile firewall și cereți confirmarea utilizatorului. Revine la
setul de reguli anterior dacă nu există un răspuns valid al utilizatorului în 30 de secunde (vezi
--pauză). Acest lucru este util pentru administrarea firewall de la distanță: puteți testa
regulile fără a te teme să te închizi.

--pauză S If --interactiv este utilizat, apoi derulați înapoi dacă nu există niciun răspuns valid de utilizator
după acest număr de secunde. Valoarea implicită este 30.

--Ajutor Afișați o listă scurtă de opțiuni disponibile pentru linia de comandă.

--versiune Afișează numărul versiunii programului.

--rapid Activați modul rapid: ferm generează un iptables-salvare(8) și îl instalează
cu iptables-restore(8). Acest lucru este mult mai rapid, pentru că ferm sună iptables(8)
implicit o dată pentru fiecare regulă.

Modul rapid este activat implicit de atunci ferm 2.0, depreciind această opțiune.

--încet Dezactivați modul rapid, adică rulați iptables(8) pentru fiecare regulă și nu utilizați
iptables-restore(8).

--coajă Generați un script shell care apelează iptables-restore(8) și îl imprimă.
Implica --rapid --linii.

--la distanta Generați reguli pentru o mașină de la distanță. implică --noexec și --linii. Poate fi
combinate cu --coajă.

--domeniu {ip|ip6}
Gestionați numai domeniul specificat. ferm ieșirea poate fi goală dacă domeniul este
nu este configurat în fișierul de intrare.

--def „$nume=valoare”
Ignorați o variabilă definită în fișierul de configurare.

Utilizați ferm online folosind serviciile onworks.net


Servere și stații de lucru gratuite

Descărcați aplicații Windows și Linux

Comenzi Linux

Ad