Jest to polecenie, które można uruchomić u dostawcy bezpłatnego hostingu OnWorks przy użyciu jednej z wielu naszych bezpłatnych stacji roboczych online, takich jak Ubuntu Online, Fedora Online, emulator online systemu Windows lub emulator online MAC OS
PROGRAM:
IMIĘ
ferm - parser reguł firewalla dla Linuksa
STRESZCZENIE
ferm Opcje plik wejściowy
OPIS
ferm jest frontendem dla iptables. Odczytuje reguły z ustrukturyzowanego pliku konfiguracyjnego
i dzwoni iptables(8), aby wstawić je do działającego jądra.
fermCelem programu jest uczynienie reguł zapory sieciowej łatwymi do napisania i odczytania. Stara się redukować
żmudne zadanie spisywania reguł, umożliwiając w ten sposób administratorowi zapory wydatki
więcej czasu na opracowanie dobrych zasad niż na właściwe wdrożenie zasady.
Osiągnąć to, ferm używa prostego, ale potężnego języka konfiguracji, który pozwala
zmienne, funkcje, tablice, bloki. Pozwala także na dołączanie innych plików, pozwalając
do tworzenia bibliotek najczęściej używanych struktur i funkcji.
ferm, wymawiane jako „twarde”, oznacza „dla łatwego tworzenia reguł”.
UWAGA
Ta strona podręcznika tak nie Mam zamiar nauczyć cię, jak działa zapora ogniowa i jak dobrze pisać
zasady. Jest już wystarczająco dużo dokumentacji na ten temat.
WPROWADZENIE
Zacznijmy od prostego przykładu:
łańcuch WEJŚCIE {
proto tcp AKCEPTUJ;
}
Spowoduje to dodanie reguły do predefiniowanego łańcucha wejściowego, dopasowując i akceptując wszystkie tcp
pakiety. Ok, skomplikujmy to:
łańcuch (WEJŚCIE WYJŚCIE) {
proto (udp tcp) AKCEPTUJ;
}
Spowoduje to wstawienie 4 reguł, a mianowicie 2 w łańcuchu wejściowym i 2 w łańcuchu wyjściowym, dopasowanie i
akceptowanie zarówno pakietów udp, jak i tcp. Normalnie napisałbyś to:
iptables -A WEJŚCIE -p tcp -j AKCEPTUJ
iptables -A WYJŚCIE -p tcp -j AKCEPTUJ
iptables -A WEJŚCIE -p udp -j AKCEPTUJ
iptables -A WYJŚCIE -p udp -j AKCEPTUJ
Zauważ, o ile mniej pisania musimy zrobić? :-)
Zasadniczo to wszystko, co do tego należy, chociaż można to uczynić bardziej złożonym.
Coś do obejrzenia:
łańcuch WEJŚCIE {
polityka AKCEPTUJĘ;
Daddr 10.0.0.0/8 proto tcp dport! ftp jump mychain sport :1023 TOS 4 settos 8 mark 2;
daddr 10.0.0.0/8 proto tcp dport ftp ODRZUĆ;
}
Chodzi mi o to, że *ty* musisz stworzyć ładne zasady, aby były dla ciebie czytelne i
innych i nie robić z tego bałaganu.
Byłoby pomocne dla czytelnika, gdyby wynikowe reguły zapory zostały umieszczone tutaj w celach informacyjnych.
Możesz także dołączyć wersję zagnieżdżoną z lepszą czytelnością.
Spróbuj użyć komentarzy, aby pokazać, co robisz:
# ta linia umożliwia przezroczyste proxy HTTP dla sieci wewnętrznej:
proto tcp, jeśli eth0 tatadr! 192.168.0.0/255.255.255.0
dport http REDIRECT do portów 3128;
Podziękujesz za to później!
łańcuch WEJŚCIE {
polityka AKCEPTUJĘ;
interfejs (eth0 ppp0) {
# odmów dostępu hakerom notorius, wróć tutaj, jeśli nie pasuje
Stwierdzono, że # wznawia normalną zaporę ogniową
skakać złoczyńców;
protokół tcp skok fw_tcp;
skok protokołu udp fw_udp;
}
}
Im więcej gniazd, tym lepiej wygląda. Upewnij się, że określona przez Ciebie kolejność jest poprawna
nie chce tego zrobić:
łańcuch DO PRZODU {
proto! UPUSZCZENIE udp;
proto tcp dport ftp AKCEPTUJ;
}
ponieważ druga reguła nigdy nie będzie pasować. Najlepszym sposobem jest określenie wszystkiego, co jest
dozwolone, a następnie zaprzeczać wszystkiemu innemu. Spójrz na przykłady, aby uzyskać więcej dobrych migawek.
Większość ludzi robi coś takiego:
proto TCP {
dport (
ssh httpftp
) ZAAKCEPTOWAĆ;
dport 1024:65535! syn AKCEPTUJĘ;
UPUSZCZAĆ;
}
STRUKTURA OF A FIREWALL FILE
Struktura właściwego pliku firewalla wygląda jak uproszczony kod C. Tylko kilka
w plikach konfiguracyjnych ferm używane są znaki składniowe. Oprócz tych specjalnych
znaki, ferm używa „kluczy” i „wartości”, myśl o nich jako o opcjach i parametrach lub jako
zmienne i wartości, cokolwiek.
Tymi słowami określasz charakterystykę swojego firewalla. Każda zapora sieciowa
składa się z dwóch rzeczy: po pierwsze, sprawdź, czy ruch sieciowy spełnia określone warunki, oraz
po drugie, co zrobić z tym ruchem.
Możesz określić warunki, które są ważne dla używanego programu interfejsu jądra,
prawdopodobnie iptables(8). Na przykład w iptables, gdy próbujesz dopasować pakiety tcp,
powiedziałbyś:
iptables -- protokół tcp
W fermie stanie się to:
protokół TCP;
Samo wpisanie tego w ferm nic nie robi, musisz powiedzieć ferm (właściwie musisz
powiedzieć iptables(8) i jądro), co zrobić z każdym ruchem spełniającym ten warunek:
iptables --protocol tcp -j AKCEPTUJ
Lub przetłumaczone na ferm:
protokół tcp AKCEPTUJ;
; Znak znajduje się na końcu każdej reguły ferm. Ferm ignoruje podziały linii, co oznacza, że
powyższy przykład jest identyczny z następującym:
protokół tcp
ZAAKCEPTOWAĆ;
Oto lista znaków specjalnych:
; Ta postać kończy regułę.
Oddzielone średnikami, możesz napisać wiele reguł w jednym wierszu, chociaż this
zmniejsza czytelność:
protokół tcp AKCEPTUJ; protokół udp DROP;
{} Symbol zagnieżdżenia definiuje „blok” reguł.
Nawiasy klamrowe zawierają dowolną liczbę zagnieżdżonych reguł. Wszystkie mecze przed
bloki są przenoszone do nich.
Zamykający nawias klamrowy zamyka zestaw reguł. Nie powinieneś pisać „;” Po
ponieważ byłaby to pusta reguła.
Przykład:
łańcuch INPUT proto icmp {
żądanie echa typu icmp AKCEPTUJ;
UPUSZCZAĆ;
}
Ten blok pokazuje dwie reguły wewnątrz bloku, które zostaną połączone z czymkolwiek
przed nim, więc otrzymasz dwie zasady:
iptables -A INPUT -p icmp --icmp-type echo-request -j AKCEPTUJ
iptables -A WEJŚCIE -p icmp -j DROP
Może istnieć wiele poziomów zagnieżdżenia:
łańcuch WEJŚCIE {
proto icmp {
żądanie echa typu icmp AKCEPTUJ;
UPUSZCZAĆ;
}
daddr 172.16.0.0/12 ODRZUĆ;
}
Zauważ, że reguła „REJECT” nie ma wpływu na „proto icmp”, chociaż nie ma
';' po zamykającym nawiasie klamrowym. Przetłumaczone na iptables:
iptables -A INPUT -p icmp --icmp-type echo-request -j AKCEPTUJ
iptables -A WEJŚCIE -p icmp -j DROP
iptables -A WEJŚCIE -d 172.16.0.0/12 -j ODRZUĆ
$ Zmienna ekspansja. Zastępuje „$FOO” wartością zmiennej. Zobacz sekcję
ZMIENNE .
& Wywołanie funkcji. Zobacz sekcję FUNKCJE .
() Symbol tablicy. Używając nawiasów, możesz zdefiniować „listę” wartości, które
należy zastosować dla klucza po lewej stronie.
Przykład:
protokół ( tcp udp icmp )
spowoduje to trzy reguły:
... -p TCP ...
... -p udp ...
... -p icmp ...
Tylko wartości mogą być „wymienione”, więc nie możesz zrobić czegoś takiego:
proto tcp (ZAAKCEPTUJ DZIENNIK);
ale możesz to zrobić:
łańcuch (WEJŚCIE WYJŚCIE DO PRZODU) proto (icmp udp tcp) DROP;
(co zaowocuje dziewięcioma regułami!)
Wartości są oddzielone spacjami. Symbol tablicy jest zarówno lewy, jak i prawy-
asocjacyjny, w przeciwieństwie do bloku zagnieżdżonego, który jest tylko lewostronny.
" # " Symbol komentarza. Wszystko, co następuje po tym symbolu aż do końca wiersza, jest
ignorowane.
"`komenda`"
Wykonaj polecenie w powłoce i wstaw dane wyjściowe procesu. Zobacz sekcję
kleszcze .
'strunowy'
Cytuj ciąg znaków, który może zawierać spacje, znak dolara itp.
LOG przedrostek-dziennika ' hej, to jest mój przedrostek dziennika!';
"strunowy"
Cytuj ciąg znaków (patrz wyżej), ale odwołania do zmiennych ze znakiem dolara są
oceniane:
DNAT do „$myhost:$myport”;
Słowa kluczowe
W poprzedniej sekcji wprowadziliśmy już kilka podstawowych słów kluczowych, takich jak „łańcuch”,
„protokół” i „AKCEPTUJĘ”. Poznajmy ich naturę.
Istnieją trzy rodzaje słów kluczowych:
· lokalizacja słowa kluczowe określają, gdzie zostanie utworzona reguła. Przykład: „stół”, „łańcuch”.
· mecz słowa kluczowe przeprowadzają test na wszystkich przechodzących pakietach. Obecna zasada jest bez
efekt, jeśli jeden (lub więcej) meczów się nie powiedzie. Przykład: „proto”, „tata”.
Po większości dopasowań występuje parametr: „proto tcp”, „daddr 172.16.0.0/12”.
· cel słowa kluczowe określają, co zrobić z pakietem. Przykład: „AKCEPTUJE”, „ODRZUCA”,
"skok".
Niektóre cele definiują więcej słów kluczowych, aby określić szczegóły: „ODRZUC odrzuć-z icmp-
sieć nieosiągalna".
Każda reguła składa się z lokalizacja oraz cel, plus dowolna liczba zapałki:
filtr tabeli # lokalizacja
proto tcp dport (http https) # dopasowanie
ZAAKCEPTOWAĆ; # cel
Ściśle mówiąc, istnieje czwarty rodzaj: ferm słowa kluczowe (które kontrolują wewnętrzne
zachowanie), ale zostaną one wyjaśnione później.
Parametry
Wiele słów kluczowych przyjmuje parametry. Można je określić jako literały, odniesienia do zmiennych lub
listy (tablice):
proto udp
saddr $TRUSTED_HOSTS;
port proto tcp (http https ssh);
LOG przedrostek dziennika "funky wardriver alert: ";
Niektóre z nich można zanegować (list nie można zanegować):
proto!esp;
proto udp dport !domena;
Słowa kluczowe, które nie przyjmują żadnych parametrów, są negowane przez poprzedzony prefiksem „!”:
proto tcp !syn;
Czytaj iptables(8), aby zobaczyć, gdzie ! może być użyty.
BASIC SŁOWA KLUCZOWE
Lokalizacja słowa kluczowe
domena [ip|ip6]
Ustaw domenę. „ip” jest domyślne i oznacza „IPv4” (iptables). „ip6” dotyczy IPv6
wsparcie, używając „ip6tables”.
stół [filtr|nat|mangle]
Określa, do której tabeli netfilter zostanie wstawiona ta reguła: „filter” (domyślnie),
„nat” lub „mangle”.
łańcuch [nazwa-łańcucha]
Określa łańcuch netfilter (w bieżącej tabeli), w którym będzie ta reguła
wstawiony do. Typowe predefiniowane nazwy łańcuchów to „INPUT”, „OUTPUT”, „FORWARD”,
„PREROUTING”, „POSTROUTING”, w zależności od tabeli. Zobacz filtr sieciowy
dokumentacja, aby uzyskać szczegółowe informacje.
Jeśli określisz tutaj nieistniejący łańcuch, ferm doda regułę do niestandardowego łańcucha
o tej nazwie.
polityka [ZAAKCEPTUJ|ODPUŚĆ|..]
Określa domyślną politykę dla bieżącego łańcucha (tylko wbudowane). Może być jednym z
wbudowane cele (AKCEPTUJ, ODRZUC, ODRZUC, ...). Pakiet, który nie pasuje do żadnych zasad
w łańcuchu będą traktowane zgodnie z polityką.
Aby uniknąć niejasności, zawsze określaj zasady wszystkich predefiniowanych łańcuchów
jawnie.
@podłańcuch ["NAZWA-ŁAŃCUCHA"] { ... }
Działa jak normalni operatorzy bloków (tj. bez rozszerzenia @podłańcuch słowo kluczowe), z wyjątkiem
że ferm przenosi reguły w nawiasach klamrowych do nowego niestandardowego łańcucha. Imię
dla tego łańcucha jest wybierany automatycznie przez ferm.
W wielu przypadkach jest to szybsze niż zwykły blok, ponieważ jądro może pominąć a
ogromny blok reguł, gdy warunek wstępny jest fałszywy. Wyobraź sobie następujący przykład:
łańcuch filtrów tabeli 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) AKCEPTUJ;
proto udp dport domena AKCEPTUJ;
}
}
To generuje 20 reguł. Gdy nadejdzie pakiet, który nie przejdzie przez saddr
pasuje, mimo to sprawdza wszystkie 20 reguł. Z @podłańcuch, ta kontrola jest zakończona
raz, co skutkuje szybszym filtrowaniem sieci i mniejszym obciążeniem procesora:
łańcuch filtrów tabeli INPUT {
saddr (1.2.3.4 2.3.4.5 3.4.5.6 4.5.6.7 5.6.7.8) @podłańcuch {
proto tcp dport (http https ssh) AKCEPTUJ;
proto udp dport domena AKCEPTUJ;
}
}
Opcjonalnie możesz zdefiniować nazwę podłańcucha:
saddr (1.2.3.4 2.3.4.5 3.4.5.6) @subchain "foobar" {
proto tcp dport (http https ssh) AKCEPTUJ;
proto udp dport domena AKCEPTUJ;
}
Nazwa może być literałem łańcuchowym ujętym w cudzysłów lub rozszerzonym wyrażeniem typu ferm
na przykład @cat("interfejs_", $iface) lub @substr($zmienna,0,20).
Możesz osiągnąć to samo, jawnie deklarując niestandardowy łańcuch, ale możesz czuć
że używanie @podłańcuch wymaga mniej pisania.
Basic iptables mecz słowa kluczowe
Interfejs [nazwa-interfejsu]
Zdefiniuj nazwę interfejsu, zewnętrzną kartę sieciową, np. eth0 lub dialup
ppp1 lub dowolne urządzenie, które chcesz dopasować do przekazywania pakietów. To jest równoważne
do przełącznika „-i”. iptables(8).
zewnętrzna strona [nazwa-interfejsu]
To samo co interfejs, tylko do dopasowania interfejsu wychodzącego dla pakietu, jak w
iptables(8).
protokół [nazwa-protokołu|numer-protokołu]
Obecnie obsługiwane przez jądro są tcp, udp i icmp lub ich odpowiedniki
numery.
saddr|tata [specyfikacja adresu]
Dopasowuje pakiety pochodzące z określonego adresu (saddr) lub adresowane do
adres (tata).
Przykłady:
saddr 192.168/8 AKCEPTUJ; # (identyczne z następnym :)
saddr 192.168.0.0/255.255.255.0 AKCEPTUJ;
daddr moja.domena.com AKCEPTUJ;
fragment
Określ, że mają być dopasowywane tylko pofragmentowane pakiety IP. Kiedy pakiety są
większy niż maksymalny rozmiar pakietu, jaki może obsłużyć twój system (tzw. Maximum
Transmission Unit lub MTU) zostaną pocięte na bity i wysłane jeden po drugim jako
pojedyncze paczki. Widzieć ifconfig(8) jeśli chcesz znaleźć MTU dla swojego systemu (tzw
domyślna to zwykle 1500 bajtów).
Fragmenty są często używane w atakach DOS, ponieważ nie ma możliwości ich znalezienia
na zewnątrz pochodzenia pakietu fragmentów.
sport|port [specyfikacja portu]
Dopasowuje pakiety na określonym porcie TCP lub UDP. „sport” pasuje do źródła
port, a dport odpowiada portowi docelowemu.
To dopasowanie może być użyte tylko po określeniu „protocol tcp” lub „protocol udp”,
ponieważ tylko te dwa protokoły faktycznie mają porty.
I kilka przykładów prawidłowych portów/zakresów:
dport 80 AKCEPTUJ;
dport http AKCEPTUJ;
dport ssh:http AKCEPTUJ;
dport 0:1023 AKCEPTUJ; # odpowiednik :1023
dport 1023:65535 AKCEPTUJ;
syn Określ, że flaga SYN w pakiecie tcp powinna być dopasowana, do czego jest przyzwyczajona
zbudować nowe połączenia tcp. Za pomocą tego możesz identyfikować połączenia przychodzące i
zdecydować, czy chcesz na to pozwolić, czy nie. Pakiety, które nie mają tej flagi, są
prawdopodobnie z już nawiązanego połączenia, więc jest to rozważane rozsądnie
bezpiecznie je przepuścić.
moduł [Nazwa modułu]
Załaduj moduł iptables. Większość modułów zapewnia więcej dopasowanych słów kluczowych. Dotrzemy do
to później.
Basic cel słowa kluczowe
skok [nazwa-łańcucha-niestandardowego]
Przeskakuje do niestandardowego łańcucha. Jeśli żadna reguła w niestandardowym łańcuchu nie pasuje, netfilter zwraca
do następnej reguły w poprzednim łańcuchu.
realgoto [nazwa-łańcucha-niestandardowego]
Przejdź do niestandardowego łańcucha. w przeciwieństwie do skok opcja, POWRÓT nie będzie kontynuować przetwarzania
w tym łańcuchu, ale zamiast tego w łańcuchu, który wezwał nas przez skok.
Słowo kluczowe realgoto został wybrany w okresie przejściowym, ponieważ goto
(już przestarzały) był kiedyś aliasem dla skok.
AKCEPTUJĘ Akceptuje pasujące pakiety.
DROP Odrzucaj pasujące pakiety bez powiadomienia.
ODRZUCAĆ Odrzuca pasujące pakiety, tj. wysyła pakiet ICMP do nadawcy, którym jest port
domyślnie nieosiągalny. Możesz określić inny typ ICMP.
ODRZUCIĆ; # domyślnie icmp-port-unreachable
ODRZUĆ odrzuć-z icmp-net-nieosiągalny;
Wpisz „iptables -j REJECT -h”, aby uzyskać szczegółowe informacje.
POWRÓT Zakończ bieżący łańcuch i wróć do łańcucha wywołującego (jeśli „jump
[nazwa-łańcucha-niestandardowego]” została użyta).
NOP Żadnej akcji.
DODATKOWY SŁOWA KLUCZOWE
Netfilter jest modułowy. Moduły mogą zapewniać dodatkowe cele i dopasowywać słowa kluczowe. Lista
Liczba modułów netfilter stale rośnie, a ferm stara się nadążać za ich obsługą
Wszystko. W tym rozdziale opisano moduły, które są obecnie obsługiwane.
iptables mecz Moduły
konto Ruch konta dla wszystkich hostów w zdefiniowanej sieci/masce sieci. To jest jeden z
dopasuj moduły, które zachowują się jak cel, tzn. najczęściej będziesz musiał użyć NOP
target.
mod nazwa konta mynetwork aaddr 192.168.1.0/24 asshort NOP;
typ adresu
Sprawdź typ adresu; adres źródłowy lub adres docelowy.
mod adresowy typ src ROZSYŁANIE;
mod addrtype typu dst LOKALNY;
Wpisz „iptables -m addrtype -h”, aby uzyskać szczegółowe informacje.
ah Sprawdza nagłówek SPI w pakiecie AH.
mod ahspi 0x101;
mod ahspi! 0x200:0x2ff;
Dodatkowe argumenty za IPv6:
mod ah ahlen 32 AKCEPTUJ;
mod ah ahlen !32 AKCEPTUJ;
mod ahres AKCEPTUJ;
komentarz Dodaje komentarz o długości do 256 znaków do reguły bez efektu. Zauważ to
w przeciwieństwie do komentarzy ferm („#”), ten pojawi się w „iptables -L”.
mod komentarz komentarz „To jest mój komentarz”. ZAAKCEPTOWAĆ;
warunek
Pasuje, jeśli wartość w /proc/net/ipt_condition/NAME wynosi 1 (ścieżka to
/proc/net/ip6t_condition/NAME dla domeny ip6).
mod warunek warunek (abc def) AKCEPTUJ;
mod warunek warunek !foo AKCEPTUJ;
konnbajty
Dopasuj według liczby bajtów lub pakietów połączenia (lub jednego z dwóch przepływów
stanowiących połączenie) przesłanych do tej pory lub o średnią liczbę bajtów na
paczka.
mod connbytes connbytes 65536: connbytes-dir oba connbytes-mode bytes ACCEPT;
mod connbytes connbytes !1024:2048 connbytes-dir odpowiedź connbytes-mode pakiety ACCEPT;
Prawidłowe wartości dla connbytes-reż: oryginalny, odpowiadać, obie; dla tryb connbytes:
Pakiety, bajtów, śr.pkt.
ogranicz
Pozwala ograniczyć liczbę równoległych połączeń TCP do serwera na
adres IP klienta (lub blok adresów).
mod connlimit connlimit-powyżej 4 ODRZUĆ;
mod connlimit connlimit-above !4 AKCEPTUJ;
mod connlimit connlimit-above 4 connlimit-mask 24 ODRZUĆ;
znak rozpoznawczy
Sprawdź pole znaku powiązane z połączeniem, ustawione przez cel CONNMARK.
mod Connmark Mark 64;
mod Connmark Mark 6/7;
contrack
Sprawdź informacje o śledzeniu połączenia.
mod conntrack ctstate (USTANOWIONE POWIĄZANE);
mod conntrack ctproto tcp;
mod conntrack crigsrc 192.168.0.2;
mod conntrack crigdst 1.2.3.0/24;
mod conntrack crigsrcport 67;
mod conntrack crigdstport 22;
mod conntrack ctreplsrc 2.3.4.5;
mod conntrack ctrepldst! 3.4.5.6;
mod conntrack ctstatus ZAPEWNIONY;
mod Conntrack Ctexpire 60;
mod conntrack ctexpire 180:240;
Wpisz „iptables -m conntrack -h”, aby uzyskać szczegółowe informacje.
dccp Sprawdź atrybuty specyficzne dla DCCP (Datagram Congestion Control Protocol). Ten
moduł jest automatycznie ładowany, gdy używasz „protocol dccp”.
proto dccp sport 1234 dport 2345 AKCEPTUJ;
proto dccp dccp-types (SYNCACK ACK) AKCEPTUJ;
proto dccp dccp-types! ŻĄDANIE USUNIĘCIA;
proto dccp dccp-opcja 2 AKCEPTUJ;
dscp Dopasuj 6-bitowe pole DSCP w polu TOS.
mod dscp dscp 11;
mod dscp dscp-klasa AF41;
ecn Dopasuj bity ECN nagłówka TCP IPv4.
mod ecn ecn-tcp-cwr;
mod ecn ecn-tcp-ece;
mod ecn ecn-ip-ect 2;
Wpisz „iptables -m ecn -h”, aby uzyskać szczegółowe informacje.
esp Sprawdza nagłówek SPI w pakiecie ESP.
mod esp espspi 0x101;
mod esp espspi! 0x200:0x2ff;
eui64 „Ten moduł pasuje do części EUI-64 bezstanowego, automatycznie konfigurowanego adresu IPv6.
Porównuje EUI-64 uzyskany ze źródłowego adresu MAC w ramce Ethernet z
dolne 64 bity adresu źródłowego IPv6. Ale bit „Universal/Local” nie jest
w porównaniu. Ten moduł nie pasuje do innej ramki warstwy łącza i jest ważny tylko w
łańcuchy PREROUTING, INPUT i FORWARD”.
mod eui64 AKCEPTUJ;
zamazany „Ten moduł dopasowuje limit szybkości oparty na kontrolerze logiki rozmytej [FLC]”.
mod fuzzy dolna granica 10 górna granica 20 AKCEPTUJ;
hbh Pasuje do nagłówka Hop-by-Hop Options (ip6).
mod hbh hbh-len 8 AKCEPTUJ;
mod hbh hbh-len !8 AKCEPTUJ;
mod hbh hbh-opts (1:4 2:8) AKCEPTUJ;
hl Pasuje do pola Limit przeskoków (ip6).
mod hl hl-eq (8 10) AKCEPTUJ;
mod hl hl-eq !5 AKCEPTUJ;
mod hl hl-gt 15 AKCEPTUJ;
mod hl hl-lt 2 AKCEPTUJ;
pomocnik Sprawdza, który moduł pomocniczy conntrack śledzi to połączenie. Port może być
określony za pomocą „-portnr”.
mod pomocnik pomocnik irc AKCEPTUJ;
mod helper helper ftp-21 AKCEPTUJ;
icmp Sprawdź atrybuty specyficzne dla ICMP. Ten moduł jest automatycznie ładowany podczas używania
„protokół icmp”.
proto icmp żądanie echa typu icmp AKCEPTUJ;
Tej opcji można również użyć w be ip6 domena, chociaż nazywa się to icmpv6 in
ip6tables.
Użyj „iptables -p icmp „-h””, aby uzyskać listę prawidłowych typów ICMP.
Zakres ip Dopasuj zakres adresów IPv4.
mod iprange src-zakres 192.168.2.0-192.168.3.255;
mod iprange dst-range! 192.168.6.0-192.168.6.255;
opcje ipv4
Dopasuj opcje nagłówka IPv4, takie jak routing źródłowy, trasa zapisu, znacznik czasu i
alert routera.
mod ipv4options ssrr AKCEPTUJ;
mod ipv4options lsrr AKCEPTUJ;
mod ipv4options no-srr AKCEPTUJ;
mod ipv4options !rr AKCEPTUJ;
mod ipv4options !ts AKCEPTUJ;
mod ipv4options !ra AKCEPTUJ;
mod ipv4options !any-opt AKCEPTUJ;
nagłówek ipv6
Pasuje do nagłówka rozszerzenia IPv6 (ip6).
mod ipv6header header !(frag hop) AKCEPTUJ;
mod ipv6header header (auth dst) AKCEPTUJ;
limit haszowania
Podobny do „limitu modów”, ale dodaje możliwość dodawania na miejsce docelowe lub na port
limity zarządzane w tabeli skrótów.
mod hashlimit hashlimit 10/minutę hashlimit-burst 30/minutę
hashlimit-mode dstip hashlimit-name foobar AKCEPTUJ;
Możliwe wartości trybu hashlimit: dstip dstport srcip srcport (lub lista z
więcej niż jeden z nich).
Istnieje więcej możliwych ustawień, wpisz „iptables -m hashlimit -h” dla
dokumentacja.
długość Sprawdź długość paczki.
długość modu długość 128; # dokładnie 128 bajtów
długość modu długość 512:768; # zakres
długość moda długość! 256; # zanegowane
ograniczenie Ogranicza szybkość pakietów.
limit modów limit 1/sekundę;
mod limit limit 15/minuta limit-burst 10;
Wpisz „iptables -m limit -h”, aby uzyskać szczegółowe informacje.
mac Dopasuj źródłowy adres MAC.
mod mac mac-źródło 01:23:45:67:89;
znak Dopasowuje pakiety na podstawie ich pola znaku netfilter. Może to być 32-bitowa liczba całkowita
między 0 a 4294967295.
znak modowy 42;
mh Pasuje do nagłówka mobilności (domain ip6).
proto mh aktualizacja powiązania typu mh AKCEPTUJ;
wieloportowy
Dopasuj zestaw portów źródłowych lub docelowych (tylko UDP i TCP).
mod wieloportowe porty źródłowe (https ftp);
mod wieloportowe porty docelowe (domena mysql);
Ta reguła ma dużą przewagę nad "dport" i "sport": generuje tylko jedną regułę
dla maksymalnie 15 portów zamiast jednej reguły dla każdego portu.
n-ty Dopasuj co n-ty pakiet.
mod n-ty co 3;
mod n-ty licznik 5 co 2;
mod n-ty start 2 co 3;
mod n-ty start 5 pakiet 2 co 6;
Wpisz „iptables -m nth -h”, aby uzyskać szczegółowe informacje.
Osf Dopasuj pakiety w zależności od systemu operacyjnego nadawcy.
mod osf gatunek Linux;
mod osf! gatunek FreeBSD ttl 1 log 1;
Wpisz „iptables -m osf -h”, aby uzyskać szczegółowe informacje.
właściciel Sprawdź informacje o twórcy pakietu, a mianowicie id użytkownika, id grupy, id procesu,
identyfikator sesji i nazwa polecenia.
właściciel moda uid-właściciel 0;
właściciel modu gid-właściciel 1000;
właściciel modu pid-właściciel 5432;
właściciel moda sid-właściciel 6543;
właściciel modu cmd-owner „sendmail”;
(„cmd-owner”, „pid-owner” i „sid-owner” nie wymagają specjalnych poprawek jądra
zawarte w podstawowym jądrze Linuksa)
physdev Dopasowuje urządzenie fizyczne, na które pakiet wszedł lub ma go opuścić
maszyna. Jest to przydatne w przypadku interfejsów zmostkowanych.
mod physdev physdev w ppp1;
mod physdev physdev-out eth2;
mod physdev physdev-jest-w;
mod physdev physdev-nie ma;
mod physdev physdev-jest-zmostkowany;
typ pkt Sprawdź typ pakietu warstwy łącza.
mod pkttype typ-punkt emisji pojedynczej;
mod pkttype typu pkt broadcase;
mod pkttype typu pkt multiemisja;
polityka Pasuje do zasad IPsec zastosowanych do tego pakietu.
mod policy dir out pol ipsec AKCEPTUJ;
mod policy strict reqid 23 spi 0x10 proto ah AKCEPTUJ;
mod tryb polityki tunel tunel-src 192.168.1.2 AKCEPTUJ;
tryb polityki mod tunel tunel-dst 192.168.2.1 AKCEPTUJ;
mod policy strict next reqid 24 spi 0x11 AKCEPTUJ;
Zwróć uwagę, że słowo kluczowe proto jest również używany jako skrócona wersja protokół
(wbudowany moduł dopasowania). Możesz rozwiązać ten konflikt, zawsze używając metody long
keyword protokół.
psd Wykryj skanowanie portów TCP/UDP.
mod psd próg wagi psd 21 próg opóźnienia psd 300
psd-lo-ports-waga 3 psd-hi-ports-waga 1 KROPLA;
udział Implementuje przydziały sieciowe, zmniejszając licznik bajtów z każdym pakietem.
limit przydziału modów 65536 AKCEPTUJ;
przypadkowy Dopasuj losowy procent wszystkich pakietów.
mod losowa średnia 70;
królestwo Dopasuj dziedzinę routingu. Przydatne w środowiskach korzystających z BGP.
mod Realm Realm 3;
niedawny Tymczasowo zaznacz źródłowe adresy IP.
najnowszy zestaw modów;
mod ostatnie rcheck sekundy 60;
mod ostatnio ustawił nazwę rsource „badguy”;
mod ostatni zestaw;
mod ostatni rcheck nazwa źródła „badguy” sekundy 60;
mod ostatnia aktualizacja sekundy 120 hitcount 3 rttl;
Ten moduł netfilter ma wadę konstrukcyjną: chociaż jest zaimplementowany jako dopasowanie
module, ma zachowanie podobne do celu, gdy używa się słowa kluczowego „set”.
<http://snowman.net/projects/ipt_recent/>
rt Dopasuj nagłówek routingu IPv6 (tylko ip6).
mod rt rt-type 2 rt-len 20 AKCEPTUJ;
mod rt rt-type !2 rt-len !20 AKCEPTUJ;
mod rt rt-segsleft 2:3 AKCEPTUJ;
mod rt rt-segsleft !4:5 AKCEPTUJ;
mod rt rt-0-res rt-0-addrs (::1 ::2) rt-0-not-strict AKCEPTUJ;
scp Sprawdź specyficzne atrybuty protokołu SCTP (Stream Control Transmission Protocol). Ten
moduł jest automatycznie ładowany, gdy używasz „protocol sctp”.
proto sctp sport 1234 dport 2345 AKCEPTUJ;
proto sctp tylko typy porcji DATA:Be ACCEPT;
proto sctp typy porcji dowolne (INIT INIT_ACK) AKCEPTUJ;
proto sctp typy porcji!all (BICIE SERCA) AKCEPTUJ;
Użyj „iptables -p sctp „-h””, aby uzyskać listę prawidłowych typów porcji.
zestaw Sprawdza źródłowy lub docelowy adres IP/port/MAC w zestawie.
zestaw modów zestaw badguys src DROP;
Widziećhttp://ipset.netfilter.org/> więcej informacji.
były Sprawdza stan śledzenia połączenia.
stan modów INVALID DROP;
stan modu (ESTABLISHED RELATED) ACCEPT;
Wpisz „iptables -m stan -h”, aby uzyskać szczegółowe informacje.
statystyczny
Następca n-ty oraz przypadkowy, obecnie nieudokumentowany w iptables(8) strona podręcznika.
mod tryb statystyczny prawdopodobieństwo losowe 0.8 AKCEPTUJ;
mod tryb statystyki n-ty co 5 pakietów 0 DROP;
ciąg Pasuje do ciągu.
mod string string "foo bar" AKCEPTUJ;
mod string algo kmp od 64 do 128 hex-string "deadbeef" AKCEPTUJ;
tcp Sprawdza atrybuty specyficzne dla protokołu TCP. Ten moduł jest automatycznie ładowany podczas używania
„protokół tcp”.
proto tcp sport 1234;
proto TCP dport 2345;
proto tcp flagi tcp (SYN ACK) SYN;
proto tcp tcp-flagi! (SYN ACK) SYN;
proto tcp tcp-flags WSZYSTKIE (RST ACK);
proto tcp syn;
proto tcp tcp-opcja 2;
proto TCP mss 512;
Wpisz „iptables -p tcp -h”, aby uzyskać szczegółowe informacje.
tcpmss Sprawdź pole TCP MSS pakietu SYN lub SYN/ACK.
mod tcpmss mss 123 AKCEPTUJ;
mod tcpmss mss 234:567 AKCEPTUJ;
czas Sprawdź, czy czas nadejścia pakietu mieści się w podanym zakresie.
początek czasu modyfikacji 12:00;
mod timestop 13:30;
dni modowe (pon. śr. pt.);
mod data rozpoczęcia 2005:01:01;
mod data start 2005:01:01:23:59:59;
mod datastop 2005:04:01;
mod czas dzień miesiąca (30 31);
dni powszednie w czasie modów (środa czw);
czas modu timestart 12:00 utc;
mod time start 12:00 lokalny;
Wpisz „iptables -m time -h”, aby uzyskać szczegółowe informacje.
tos Dopasowuje pakiet do określonej wartości TOS.
mod tos tos Minimize-Cost AKCEPTUJ;
mod tos tos! Normal-Service AKCEPTUJ;
Wpisz „iptables -m tos -h”, aby uzyskać szczegółowe informacje.
TTL Dopasowuje pole ttl (czas życia) w nagłówku IP.
mod ttl ttl-eq 12; # ttl równa się
mod ttl ttl-gt 10; # ttl większy niż
mod ttl ttl-lt 16; # ttl mniej niż
u32 Porównuje surowe dane z pakietu. W fermie można określić więcej niż jeden filtr
lista; nie są one rozszerzone na wiele reguł.
mod u32 u32 '6&0xFF=1' AKCEPTUJ;
mod u32 u32 ('27&0x8f=7' '31=0x527c4833') DROP;
nieczysty Dopasowuje pakiety, które wydają się zniekształcone lub nietypowe. Ten mecz nie ma więcej
parametry.
iptables cel Moduły
Następujące dodatkowe cele są dostępne w ferm, pod warunkiem, że je włączyłeś
twoje jądro:
KLASYFIKOWAĆ
Ustaw klasę CBQ.
KLASYFIKACJA set-klasa 3:50;
CLUSTERIP
Skonfiguruj prosty klaster węzłów, które współużytkują określony adres IP i MAC.
Połączenia są statycznie rozdzielane między węzłami.
CLUSTERIP nowy tryb mieszania sourceip clustermac 00:12:34:45:67:89
łącznie węzły 4 węzeł lokalny 2 hash-init 12345;
CONNMARK
Ustawia wartość znaku netfilter skojarzoną z połączeniem.
Znak rozpoznawczy CONNMARK 42;
znak zapisu CONNMARK;
znak przywrócenia CONNMARK;
CONNMARK maska znaku zapisu 0x7fff;
CONNMARK maska znaku przywracania 0x8000;
ZNAK POŁĄCZENIA
Ten moduł kopiuje oznaczenia bezpieczeństwa z pakietów do połączeń (jeśli nie są oznaczone),
oraz z połączeń z powrotem do pakietów (również tylko wtedy, gdy nie są oznaczone). Zwykle używany w
w połączeniu z SECMARK, obowiązuje tylko w tabeli mangle.
CONNSECMARK zapisz;
CONNSECMARK przywróć;
DNAT do [adres-ip|zakres-ip-ip|zakres-ip-portów]
Zmień adres docelowy pakietu.
DNAT do 10.0.0.4;
DNAT do 10.0.0.4:80;
DNAT do 10.0.0.4:1024-2048;
DNAT do 10.0.1.1-10.0.1.20;
ECN Ten cel pozwala na selektywną pracę wokół znanych czarnych dziur ECN. Może tylko
być używany w stole magle.
ECN ecn-tcp-usuń;
HL Zmodyfikuj pole Limit przeskoków IPv6 (tylko ip6/mangle).
HL hl-zestaw 5;
HL hl-dec 2;
HL hl-inc 1;
IPV4OPTSSTRIP
Usuń wszystkie opcje IP z pakietu. Ten moduł nie przyjmuje żadnych opcji.
IPV4OPTSSTRIP;
LOG Zapisz wszystkie pakiety pasujące do tej reguły w dzienniku jądra. Uważaj na dziennik
powódź. Zauważ, że jest to „niekończący się cel”, tj. przechodzenie przez regułę
kontynuuje przy następnej regule.
LOG ostrzeżenie na poziomie dziennika przedrostek dziennika "Spójrz na to: ";
LOG log-tcp-sekwencja log-tcp-opcje;
LOG opcje ip dziennika;
ZNAK Ustawia pole znacznika netfilter dla pakietu (32-bitowa liczba całkowita z przedziału od 0 do
4294967295):
MARK ustawiony znacznik 42;
zestaw MARK-xmark 7/3;
ZNAK i znak 31;
ZNAK lub-znak 1;
ZNAK xor-znak 12;
MASKARADA
Maskarady pasujące pakiety. Opcjonalnie następuje port lub zakres portów dla
iptables. Określ jako „123”, „123-456” lub „123:456”. Parametr zakresu portów
określa, z jakich lokalnych portów powinny pochodzić zamaskowane połączenia.
MASKARADA;
MASQUERADE do portów 1234:2345;
MASQUERADE do portów 1234:2345 losowo;
MIRROR Eksperymentalny cel demonstracyjny, który odwraca pola źródłowe i docelowe
w nagłówku IP.
LUSTRO;
MAPA SIECI Mapuj całą sieć na inną sieć w nat tabela.
NETMAP do 192.168.2.0/24;
NIE MA ŚLADU Wyłącz śledzenie połączeń dla wszystkich pakietów pasujących do tej reguły.
port proto tcp (135:139 445) NOTRACK;
NFLOG Loguj pakiety przez netlink; to jest następca ULOG.
NFLOG nflog-group 5 nflog-prefix "Spójrz na to: ";
NFLOG nflog-zakres 256;
NFLOG próg nflog 10;
NFKOLEJKA Kolejkowanie w przestrzeni użytkownika, wymaga obsługi jądra nfnetlink_queue.
proto tcp dport ftp NFQUEUE numer kolejki 20;
KOLEJKA Kolejkowanie w przestrzeni użytkownika, poprzednik NFKOLEJKA. Wszystkie pakiety trafiają do kolejki 0.
proto tcp dport ftp KOLEJKA;
PRZEADRESOWAĆ do portów [porty]
Przezroczyste proxy: zmień docelowy adres IP pakietu do maszyny
sama.
proto tcp dport http REDIRECT do portów 3128;
proto tcp dport http REDIRECT do portów 3128 losowo;
PODOBNIE Podobny do SNAT, ale klient jest mapowany na ten sam źródłowy adres IP dla wszystkich swoich
połączeń.
TO SAMO do 1.2.3.4-1.2.3.7;
SAMO do 1.2.3.8-1.2.3.15 nodst;
SAME do 1.2.3.16-1.2.3.31 losowo;
ZNAK SECMARK Służy do ustawiania wartości znaku bezpieczeństwa powiązanego z pakietem do użytku przez
podsystemy bezpieczeństwa, takie jak SELinux. Jest ważny tylko w tabeli mangle.
SECMARK selctx "system_u:object_r:httpd_packet_t:s0";
SET [dodaj-ustaw|usuń-ustaw] [nazwa zestawu] [flaga(y)]
Dodaj adres IP do określonego zestawu. Widziećhttp://ipset.netfilter.org/>
proto icmp typ icmp żądanie echa SET add-set badguys src;
SNAT do [adres-ip|zakres-ip-ip|zakres-ip-portów]
Zmień adres źródłowy pakietu.
SNAT do 1.2.3.4;
SNAT do 1.2.3.4:20000-30000;
SNAT do 1.2.3.4 losowo;
TCPMSS Zmień wartość MSS pakietów TCP SYN.
TCPMSS zestaw-mss 1400;
TCPMSS zacisk-mss-do-pmtu;
KASZEL ustawienia [wartość]
Ustaw bit typu usługi pakietu tcp na tę wartość. Będzie to wykorzystywane przez
cokolwiek zechce planista ruchu, głównie twoja własna maszyna z Linuksem, ale może
więcej. Oryginalne tos-bity są wygaszane i nadpisywane przez tę wartość.
ustawienia TOS Maksymalizacja przepustowości;
TOS i-tos 7;
TOS lub-tos 1;
TOS xor-tos 4;
Wpisz „iptables -j TOS -h”, aby uzyskać szczegółowe informacje.
TTL Zmodyfikuj pole nagłówka TTL.
zestaw TTL ttl 16;
TTL ttl-dec 1; # zmniejsz o 1
TTL ttl-inc 4; # wzrost o 4
ULOG Rejestruj pakiety w programie przestrzeni użytkownika.
ULOG ulog-nlgroup 5 ulog-prefix "Spójrz na to: ";
ULOG ulog-cprange 256;
ULOG ulog-qthreshold 10;
INNE DOMENY
Od wersji 2.0, ferm obsługuje nie tylko ip oraz ip6, Ale ARP (tabele ARP) i eb
(tablice mostkowania ethernetowego). Pojęcia są podobne do iptables.
arttables słowa kluczowe
źródło-ip, Docelowy adres IP
Dopasowuje źródłowy lub docelowy adres IPv4. Taki sam jak saddr oraz tatadr ip
domeny.
źródło-mac, docelowy mac
Dopasowuje źródłowy lub docelowy adres MAC.
Interfejs, zewnętrzna strona
Interfejs wejścia i wyjścia.
h-długość
Długość sprzętowa pakietu.
łańcuch WEJŚCIE h-długość 64 AKCEPTUJ;
opcode Kod operacji, szczegóły patrz iptables(8).
kod operacji 9 AKCEPTUJ;
typu h Typ sprzętu.
h-typ 1 AKCEPTUJ;
prototyp
Typ protokołu.
prototyp typu 0x800 AKCEPTUJ;
zniekształcenie
Słowa kluczowe magl-ip-s, magl-ip-d, magle-mac-s, magle-mac-d, magle-cel
może być używany do zniekształcania ARP. Widzieć iptables(8) szczegóły.
ebtables słowa kluczowe
proto Pasuje do protokołu, który utworzył ramkę, np IPv4 or PPP. Aby zobaczyć listę, zobacz
/etc/ethertypes.
Interfejs, zewnętrzna strona
Fizyczny interfejs wejścia i wyjścia.
wejście logiczne, wyjście logiczne
Interfejs mostka logicznego.
saddr, tatadr
Dopasowuje źródłowy lub docelowy adres MAC.
Mecz Moduły
Obsługiwane są następujące moduły dopasowania: 802.3, arp, ip, mark_m, pkttype, stp,
vlan, zaloguj się.
cel rozszerzenia
Obsługiwane są następujące rozszerzenia docelowe: arpreply, dnat, mark, redirect,
srać.
Należy pamiętać, że istnieje konflikt między --ocena z znak_m moduł dopasowania
oraz -j znak. Ponieważ oba zostałyby zaimplementowane za pomocą słowa kluczowego ferm znak, mamy
postanowił rozwiązać ten problem, pisząc imię celu wielkimi literami, tak jak w drugim
domeny. Poniższy przykład przepisuje znak 1 na 2:
znak 1 ZNAK 2;
ADVANCED ROZWIĄZANIA
Zmienne
W rozbudowanych plikach firewalla pomocne jest stosowanie zmiennych np. do podania sieci
nadać interfejsowi znaczącą nazwę.
Aby ustawić zmienne, napisz:
@def $DEV_INTERNET = eth0;
@def $PORTY = (http ftp);
@def $WIĘCEJ_PORTÓW = ($PORTY 8080);
W prawdziwym kodzie fermowym zmienne są używane jak każdy inny parametr słowa kluczowego:
łańcuch interfejsu INPUT $DEV_INTERNET proto tcp dport $MORE_PORTS ACCEPT;
Należy pamiętać, że zmiennych można używać tylko w parametrach słów kluczowych („192.168.1.1”, „http”); Oni
nie może zawierać fermowych słów kluczowych, takich jak „proto” lub „interfejs”.
Zmienne są ważne tylko w bieżącym bloku:
@def $DEV_INTERNET = eth1;
łańcuch WEJŚCIE {
proto TCP {
@def $DEV_INTERNET = ppp0;
interfejs $DEV_INTERNET dport http AKCEPTUJ;
}
interfejs $DEV_INTERNET DROP;
}
zostanie rozszerzony o:
łańcuch WEJŚCIE {
proto TCP {
interfejs ppp0 dport http AKCEPTUJ;
}
interfejs eth1 DROP;
}
„def $DEV_INTERNET = ppp0” obowiązuje tylko w bloku „proto tcp”; blok macierzysty
nadal wie „ustaw $ DEV_INTERNET = eth1”.
Pliki dołączane są specjalne - zmienne zadeklarowane w dołączonym pliku są nadal dostępne w
blok wywołujący. Jest to przydatne, gdy dołączasz plik, który deklaruje tylko zmienne.
automatycznie zmienne
Niektóre zmienne są ustawiane wewnętrznie przez ferm. Skrypty Ferma mogą ich używać tak samo jak innych
zmienna.
$NAZWAPLIKU
Nazwa pliku konfiguracyjnego odnosząca się do katalogu ferm, w którym została uruchomiona.
$NAZWAPLIKU
Podstawowa nazwa pliku konfiguracyjnego.
$NAZWAKATALOGU
Katalog pliku konfiguracyjnego.
$DOMENA Bieżąca domena. Jeden z ip, ip6, ARP, eb.
$TABELA Bieżąca tabela netfilter.
$ŁAŃCUCH Bieżący łańcuch netfilter.
$LINE Linia bieżącego skryptu. Można go użyć w następujący sposób:
@def &log($msg) = {
LOG log-prefix "rule=$msg:$LINE";
}
.
.
.
&log("wiadomość dziennika");
Funkcje
Funkcje są podobne do zmiennych, z tą różnicą, że mogą mieć parametry i dostarczają
polecenia ferm, a nie wartości.
@def &FOO() = proto (tcp udp) domena dport;
&FOO() AKCEPTUJ;
@def &TCP_TUNNEL($port, $docelowy) = {
łańcuch filtrów tabeli FORWARD interfejs ppp0 proto tcp dport $port daddr $dest zewnętrzna powierzchnia eth0 AKCEPTUJ;
table nat chain PREROUTING interfejs ppp0 proto tcp dport $port daddr 1.2.3.4 DNAT do $dest;
}
&TCP_TUNNEL(http, 192.168.1.33);
&TCP_TUNNEL(ftp, 192.168.1.30);
&TCP_TUNNEL((ssh smtp), 192.168.1.2);
Wywołanie funkcji, które zawiera blok (jak '{...}') musi być ostatnim poleceniem w fermie
reguły, tzn. musi następować po niej znak „;”. „&BLA()' przykład nie zawiera bloku, dlatego
po rozmowie możesz napisać „AKCEPTUJĘ”. Aby to obejść, możesz zmienić kolejność słów kluczowych:
@def &IPSEC() = { proto (esp ah); proto udp dport 500; }
łańcuch INPUT AKCEPTUJ &IPSEC();
Tyczki
Za pomocą backticków możesz użyć danych wyjściowych zewnętrznego polecenia:
@def $DNSSERVERS = `serwer nazw grep / Etc / resolv.conf | awk '{drukuj $2}'`;
łańcuch INPUT proto tcp saddr $DNSSERVERS ACCEPT;
Polecenie jest wykonywane z powłoką (/ Bin / sh), podobnie jak backticks w Perlu. Ferma tak
nie rób tutaj żadnego rozwinięcia zmiennej.
Dane wyjściowe są następnie tokenizowane i zapisywane jako lista ferm (tablica). Linie zaczynające się od „#”
są ignorowane; pozostałe wiersze mogą zawierać dowolną liczbę wartości oddzielonych białymi znakami.
zawiera
@włączać słowo kluczowe pozwala dołączyć pliki zewnętrzne:
@include 'vars.ferm';
Nazwa pliku jest względna w stosunku do pliku wywołującego, np. w przypadku dołączania from
/etc/ferm/ferm.conf, powyższe oświadczenie zawiera /etc/ferm/vars.ferm. Zmienne i
funkcje zadeklarowane w dołączonym pliku są nadal dostępne w pliku wywołującym.
zawierać działa w bloku:
łańcuch WEJŚCIE {
@include 'input.ferm';
}
Jeśli określisz katalog (z końcowym „/”), wszystkie pliki w tym katalogu są
w zestawie, posortowane alfabetycznie:
@include 'ferm.d/';
Z końcowym symbolem rury, ferm wykonuje polecenie powłoki i analizuje jego dane wyjściowe:
@include '/root/generate_ferm_rules.sh $NAZWAHOSTA|'
Warunki
Słowo kluczowe @Jeśli wprowadza wyrażenie warunkowe:
@if $warunek DROP;
Wartość jest oceniana jako prawda, tak jak w Perlu: zero, pusta lista, pusty łańcuch to fałsz,
wszystko inne jest prawdą. Przykłady prawdziwych wartości:
(ab); 1; 'bla'; (0 0)
Przykłady fałszywych wartości:
(); 0; „0”; ''
Jest również @w przeciwnym razie:
@if $warunek DROP; @else ODRZUĆ;
Zwróć uwagę na średnik przed @w przeciwnym razie.
Możliwe jest użycie nawiasów klamrowych po każdym z nich @Jeśli or @w przeciwnym razie:
@if $warunek {
MARK ustawiony znacznik 2;
POWRÓT;
} @w przeciwnym razie {
MARK ustawiony znacznik 3;
}
Ponieważ zamykający nawias klamrowy również kończy polecenie, średnik nie jest potrzebny.
Nie ma @elsif, Stosowanie @w przeciwnym razie @Jeśli zamiast.
Przykład:
@def $have_ipv6 = `test -f /proc/net/ip6_tables_names && echo 1 || echo`;
@if $have_ipv6 {
domena ip6 {
#....
}
}
Haczyki
Aby uruchomić niestandardowe polecenia, możesz zainstalować hooki:
@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";
Określone polecenie jest wykonywane przy użyciu powłoki. „pre” oznacza uruchomienie polecenia przed
zastosowanie reguł zapory, a „post” oznacza późniejsze uruchomienie polecenia. haczyki „płaskie”.
są uruchamiane po tym, jak ferm wyczyści reguły firewalla (opcja --flush). Możesz zainstalować dowolne
liczba haczyków.
WBUDOWANE FUNKCJE
Istnieje kilka wbudowanych funkcji, które mogą okazać się przydatne.
@równ.(a,b)
Testuje dwie wartości pod kątem równości. Przykład:
@if @eq($DOMENA, ip6) DROP;
@ne(a,b)
Podobnie jak @eq, sprawdza to brak równości.
@nie(x)
Neguje wartość logiczną.
@resolve((nazwa_hosta1 nazwa hosta2 ...), [typ])
Zwykle nazwy hostów są rozpoznawane przez iptables. Aby ferm mógł rozwiązywać nazwy hostów, użyj metody
funkcja @resolve:
saddr @resolve(my.host.foo) proto tcp dport ssh AKCEPTUJ;
saddr @resolve((inny.host.foo trzeci.host.foo)) proto tcp dport openvpn AKCEPTUJ;
daddr @resolve(ipv6.google.com, AAAA) proto tcp dport http AKCEPTUJ;
Zwróć uwagę na podwójne nawiasy w drugim wierszu: wewnętrzna para do tworzenia listy ferm,
a zewnętrzna para jako ograniczniki parametrów funkcji.
Drugi parametr jest opcjonalny i określa typ rekordu DNS. Wartość domyślna to „A”.
Uważaj na rozwiązane nazwy hostów w konfiguracji zapory. Żądania DNS mogą blokować
konfiguracji firewalla przez długi czas, narażając maszynę na niebezpieczeństwo lub mogą ulec awarii.
@kot(a, b, ...)
Połącz wszystkie parametry w jeden ciąg.
@substr(wyrażenie, offsetowy, długość)
Wyodrębnia podłańcuch z wyrażenia i zwraca go. Pierwszy znak ma przesunięcie 0. Jeśli
PRZESUNIĘCIE jest ujemne, zaczyna się tak daleko od końca łańcucha.
@długość(wyrażenie)
Zwraca długość w znakach wartości WYRAŻ.
@basename(ścieżka)
Zwraca podstawową nazwę pliku dla danej ścieżki (File::Spec::splitpath).
@nazwakatalogu(ścieżka)
Zwróć nazwę ostatniego katalogu dla danej ścieżki, zakładając, że ostatnim komponentem jest a
nazwa pliku (File::Spec::splitpath).
@ipfilter(lista)
Odfiltrowuje adresy IP, które oczywiście nie pasują do bieżącej domeny. To jest
przydatne do tworzenia wspólnych zmiennych i reguł dla IPv4 i IPv6:
@def $TRUSTED_HOSTS = (192.168.0.40 2001:abcd:ef::40);
domena (ip ip6) łańcuch INPUT {
saddr @ipfilter($TRUSTED_HOSTS) proto tcp dport ssh AKCEPTUJ;
}
PRZEPISY
./przykłady/ katalog zawiera liczne konfiguracje ferm, których można użyć do rozpoczęcia
nowy firewall. Ta sekcja zawiera więcej próbek, przepisów i sztuczek.
Łatwo Port przekierowanie
Funkcja Ferm sprawia, że rutynowe zadania są szybkie i łatwe:
@def &FORWARD_TCP($proto, $port, $cel) = {
łańcuch filtrów tabeli FORWARD interfejs $DEV_WORLD powierzchnia zewnętrzna $DEV_DMZ daddr $dest proto $proto dport $port ACCEPT;
tabela nat łańcuch PREROUTING interfejs $DEV_WORLD daddr $HOST_STATIC proto $proto dport $port DNAT do $dest;
}
&FORWARD_TCP(tcp, http, 192.168.1.2);
&FORWARD_TCP(tcp, smtp, 192.168.1.3);
&FORWARD_TCP((tcp udp), domena, 192.168.1.4);
Zdalny ferm
Jeśli maszyna docelowa nie może działać ferm z jakiegoś powodu (być może wbudowanego urządzenia
bez Perla), możesz edytować plik ferm plik konfiguracyjny na innym komputerze i pozwól ferm
wygeneruj tam skrypt powłoki.
Przykład dla OpenWRT:
ferm --remote --shell mywrt/ferm.conf > mywrt/firewall.user
chmod +x mywrt/firewall.user
scp mywrt/firewall.user mywrt.local.net:/itp/
ssh mywrt.local.net /etc/firewall.user
OPCJE
--noexec Nie wykonuj iptables(8) poleceń, ale zamiast tego pomiń. W ten sposób możesz
przeanalizuj swoje dane, użyj --linie aby wyświetlić dane wyjściowe.
--spłukać Czyści reguły zapory i ustawia zasady wszystkich łańcuchów na AKCEPTUJ. ferm
potrzebuje do tego pliku konfiguracyjnego, aby określić, które domeny i tabele są
afektowany.
--linie Pokaż linie zapory, które zostały wygenerowane na podstawie reguł. Zostaną pokazane
tuż przed ich wykonaniem, więc jeśli otrzymasz komunikaty o błędach z iptables(8)
itp., możesz zobaczyć, która reguła spowodowała błąd.
--interaktywny
Zastosuj reguły zapory i poproś użytkownika o potwierdzenie. Powraca do
poprzedni zestaw reguł, jeśli nie ma prawidłowej odpowiedzi użytkownika w ciągu 30 sekund (patrz
--koniec czasu). Jest to przydatne do zdalnego administrowania zaporą ogniową: możesz przetestować
zasad bez obawy, że się zamkniesz.
--koniec czasu S If --interaktywny jest używany, a następnie cofnij, jeśli nie ma prawidłowej odpowiedzi użytkownika
po tej liczbie sekund. Wartość domyślna to 30.
--help Pokaż krótką listę dostępnych opcji wiersza poleceń.
--wersja Pokazuje numer wersji programu.
--szybki Włącz tryb szybki: ferm generuje plik iptables-zapisz(8) i instaluje go
w iptables-restore(8). Jest to znacznie szybsze, ponieważ wywołania ferm iptables(8)
domyślnie raz dla każdej reguły.
Od tego czasu tryb szybki jest domyślnie włączony ferm 2.0, rezygnując z tej opcji.
--powolny Wyłącz tryb szybki, czyli uruchom iptables(8) dla każdej reguły i nie używaj
iptables-restore(8).
--powłoka Wygeneruj skrypt powłoki, który wywołuje iptables-restore(8) i drukuje go.
Implikuje --szybkie -- linie.
--zdalny Wygeneruj reguły dla zdalnej maszyny. implikuje --noexec oraz --linie. Może być
w połączeniu --powłoka.
--domena {ip|ip6}
Obsługuj tylko określoną domenę. ferm dane wyjściowe mogą być puste, jeśli domena jest
nie skonfigurowano w pliku wejściowym.
--pok „$nazwa=wartość”
Zastąp zmienną zdefiniowaną w pliku konfiguracyjnym.
Korzystaj z ferm online korzystając z usług onworks.net
