İngilizceFransızcaİspanyolca

Ad


OnWorks favicon'u

ferm - Bulutta Çevrimiçi

Ferm'i Ubuntu Online, Fedora Online, Windows çevrimiçi emülatörü veya MAC OS çevrimiçi emülatörü üzerinden OnWorks ücretsiz barındırma sağlayıcısında çalıştırın

Bu, Ubuntu Online, Fedora Online, Windows çevrimiçi emülatörü veya MAC OS çevrimiçi emülatörü gibi birden fazla ücretsiz çevrimiçi iş istasyonumuzdan birini kullanarak OnWorks ücretsiz barındırma sağlayıcısında çalıştırılabilen komut fermidir.

Program:

ADI


ferm - linux için bir güvenlik duvarı kuralı ayrıştırıcısı

SİNOPSİS


ferm seçenekleri giriş dosyası

TANIM


ferm için bir ön uç iptables. Yapılandırılmış bir yapılandırma dosyasından kuralları okur
ve aramalar iptables(8) onları çalışan çekirdeğe eklemek için.

ferm'in amacı, güvenlik duvarı kurallarının yazılmasını ve okunmasını kolay hale getirmektir. azaltmaya çalışır
güvenlik duvarı yöneticisinin harcama yapmasını sağlamak için kuralları yazmanın sıkıcı görevi
kuralın uygun şekilde uygulanmasından daha iyi kurallar geliştirmeye daha fazla zaman.

Bunu başarmak için, ferm sağlayan basit ama güçlü bir yapılandırma dili kullanır.
değişkenler, fonksiyonlar, diziler, bloklar. Ayrıca, diğer dosyaları eklemenize izin vererek
yaygın olarak kullanılan yapı ve işlevlerden oluşan kitaplıklar oluşturabilirsiniz.

ferm, "firma" olarak telaffuz edilir, "Kolay Kural Oluşturma" anlamına gelir.

DİKKAT


Bu kılavuz sayfası değil güvenlik duvarının nasıl çalıştığını ve nasıl iyi yazılacağını öğretmek için
tüzük. Bu konuyla ilgili zaten yeterince belge var.

TANITIM


Basit bir örnekle başlayalım:

zincir GİRİŞ {
proto tcp KABUL;
}

Bu, önceden tanımlanmış giriş zincirine tüm tcp'leri eşleştiren ve kabul eden bir kural ekleyecektir.
paketler. Tamam, daha karmaşık hale getirelim:

zincir (GİRİŞ ÇIKIŞ) {
proto (udp tcp) KABUL ET;
}

Bu, zincir girişinde 4 ve zincir çıkışında 2 olmak üzere 2 kural ekleyecektir, eşleştirme ve
hem udp hem de tcp paketlerini kabul etmek. Normalde şunu yazardınız:

iptables -A GİRDİ -p tcp -j KABUL
iptables -A ÇIKIŞ -p tcp -j KABUL
iptables -A GİRDİ -p udp -j KABUL
iptables -A ÇIKIŞ -p udp -j KABUL

Ne kadar daha az yazmamız gerektiğine dikkat edin? :-)

Temel olarak, hepsi bu kadar, ancak onu daha karmaşık hale getirebilirsiniz.
Bakılacak bir şey:

zincir GİRİŞ {
politika KABUL;
baba 10.0.0.0/8 proto tcp dport ! ftp atlama mychain spor :1023 TOS 4 settos 8 mark 2;
dadr 10.0.0.0/8 proto tcp dport ftp REDDET;
}

Buradaki amacım, *sizin* güzel kurallar koymanız, onları sizin için okunabilir tutmanız ve
diğerleri ve onu bir karmaşaya dönüştürmeyin.

Ortaya çıkan güvenlik duvarı kurallarının referans olarak buraya yerleştirilmesi okuyucuya yardımcı olacaktır.
Ayrıca, daha iyi okunabilirliğe sahip iç içe sürümü de dahil edebilirsiniz.

Ne yaptığınızı göstermek için yorumları kullanmayı deneyin:

# bu satır, dahili ağ için şeffaf http-proxy'yi etkinleştirir:
proto tcp ise eth0 dadr ! 192.168.0.0/255.255.255.0
dport http REDIRECT bağlantı noktaları 3128;

Daha sonra bunun için minnettar olacaksınız!

zincir GİRİŞ {
politika KABUL;
arayüz (eth0 ppp0) {
# ünlü bilgisayar korsanlarına erişimi engelle, eşleşme olmazsa buraya geri dön
# normal güvenlik duvarını sürdürmek için bulundu
atlamak kötü adamlar;

protokol tcp atlama fw_tcp;
protokol udp atlama fw_udp;
}
}

Ne kadar çok yuva yaparsanız, o kadar iyi görünür. Belirttiğiniz sıranın doğru olduğundan emin olun,
bunu yapmak istemezdim:

zincir İLERİ {
ön! udp DROP;
proto tcp dport ftp KABUL;
}

çünkü ikinci kural asla eşleşmeyecek. En iyi yol, ilk önce her şeyi belirtmektir.
izin verilir ve sonra diğer her şeyi inkar eder. Daha iyi anlık görüntüler için örneklere bakın.
Çoğu insan böyle bir şey yapar:

ön tcp {
bağlantı noktası (
ssh http ftp
) KABUL;
dport 1024:65535 ! syn KABUL;
DAMLA;
}

YAPI OF A GÜVENLİK DUVARI DOSYA


Uygun bir güvenlik duvarı dosyasının yapısı basitleştirilmiş C koduna benzer. Sadece birkaçı
ferm-yapılandırma dosyalarında sözdizimsel karakterler kullanılır. Bunların yanında özel
ferm 'anahtarlar' ve 'değerler' kullanır, bunları seçenekler ve parametreler olarak düşünün veya
değişkenler ve değerler, ne olursa olsun.

Bu kelimelerle güvenlik duvarınızın özelliklerini tanımlarsınız. Her güvenlik duvarı
iki şeyden oluşur: İlk olarak, ağ trafiğinin belirli koşullarla eşleşip eşleşmediğine bakın ve
ikincisi, bu trafikle ne yapmalı.

Kullanmakta olduğunuz çekirdek arayüz programı için geçerli olan koşulları belirtebilirsiniz,
muhtemelen iptables(8). Örneğin iptables'da tcp paketlerini eşleştirmeye çalıştığınızda,
şöyle derdin:

iptables --protokol tcp

Ferm'de, bu olacak:

protokol tcp;

Bunu ferm'e yazmanız hiçbir şey yapmaz, ferm'e söylemeniz gerekir (aslında, yapmanız gerekir)
söylemek iptables(8) ve çekirdek) bu koşulla eşleşen herhangi bir trafikle ne yapılacağı:

iptables --protocol tcp -j KABUL

Veya, çevrilmiş ferm:

protokol tcp KABUL;

The ; karakter her ferm kuralının sonundadır. Ferm satır sonlarını yok sayar, yani
yukarıdaki örnek aşağıdakiyle aynıdır:

protokol tcp
KABUL;

İşte özel karakterlerin bir listesi:

; Bu karakter bir kuralı kesinleştirir.

Noktalı virgülle ayırarak, bir satıra birden çok kural yazabilirsiniz, ancak bu
okunabilirliği azaltır:

protokol tcp KABUL; protokol udp DROP;

{} Yuvalama sembolü, bir kurallar bloğunu tanımlar.

Kıvrımlı parantezler, herhangi bir sayıda iç içe kural içerir. öncesi tüm maçlar
blok bunlara doğru taşınır.

Kapanış küme parantezi, kural kümesini sonlandırır. ';' yazmamalısın sonrasında
çünkü bu boş bir kural olurdu.

Örnek:

zincir GİRİŞ proto icmp {
icmp türü yankı isteği KABUL;
DAMLA;
}

Bu blok, bir blok içinde, her ikisi de herhangi bir şeyle birleştirilecek olan iki kuralı gösterir.
önünde, böylece iki kural alacaksınız:

iptables -A INPUT -p icmp --icmp-type echo-request -j KABUL
iptables -A GİRİŞ -p icmp -j DAMLA

Birden çok yuvalama düzeyi olabilir:

zincir GİRİŞ {
ön icmp {
icmp türü yankı isteği KABUL;
DAMLA;
}
dadr 172.16.0.0/12 REDDET;
}

'REJECT' kuralının 'proto icmp' tarafından etkilenmediğini unutmayın, ancak
';' kapanış küme parantezinden sonra. iptables'a çevrildi:

iptables -A INPUT -p icmp --icmp-type echo-request -j KABUL
iptables -A GİRİŞ -p icmp -j DAMLA
iptables -A GİRDİ -d 172.16.0.0/12 -j REDDET

$ Değişken genişleme. '$FOO'yu değişkenin değeriyle değiştirir. bölüme bakın
DEĞİŞKENLER Ayrıntılar için.

& İşlev çağrısı. bölüme bakın FONKSİYONLAR Ayrıntılar için.

() Dizi sembolü. Parantezleri kullanarak, değerlerden oluşan bir 'liste' tanımlayabilirsiniz.
solundaki tuş için uygulanmalıdır.

Örnek:

protokol ( tcp udp icmp )

bu üç kuralla sonuçlanacaktır:

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

Yalnızca değerler 'listelenebilir', dolayısıyla böyle bir şey yapamazsınız:

proto tcp (GÜNLÜĞÜ KABUL ET);

ancak şunu yapabilirsiniz:

zincir (GİRİŞ ÇIKIŞ İLERİ) proto (icmp udp tcp) DROP;

(dokuz kuralla sonuçlanacak!)

Değerler boşluklarla ayrılır. Dizi sembolü hem sol hem de sağ-
ilişkisel, yalnızca sol ilişkisel olan yuvalama bloğunun aksine.

" # " Yorum sembolü. Bu sembolü satırın sonuna kadar takip eden her şey
görmezden geldi.

"'komut'"
Komutu bir kabukta yürütün ve işlem çıktısını ekleyin. bölüme bakın
ters vuruşlar Ayrıntılar için.

'sicim'
Boşluklar, dolar işareti vb. içerebilecek bir dize alıntılayın.

LOG log-prefix ' hey, bu benim log önekim!';

"sicim"
Bir dizeyi alıntılayın (yukarıya bakın), ancak dolar işaretli değişken referansları
değerlendirildi:

DNAT'dan "$myhost:$myport"a;

Anahtar Kelimeler
Önceki bölümde, "zincir" gibi bazı temel anahtar kelimeleri zaten tanıtmıştık,
"protokol" ve "KABUL". Doğalarını keşfedelim.

Üç tür anahtar kelime vardır:

· yer anahtar kelimeler, bir kuralın nerede oluşturulacağını tanımlar. Örnek: "masa", "zincir".

· maç anahtar kelimeler, geçen tüm paketler üzerinde bir test gerçekleştirir. Mevcut kural olmadan
maçlardan biri (veya daha fazlası) geçmezse geçerli olur. Örnek: "proto", "daddr".

Çoğu eşleşmeyi bir parametre takip eder: "proto tcp", "daddr 172.16.0.0/12".

· hedef anahtar kelimeler bir paketle ne yapılacağını belirtir. Örnek: "KABUL ET", "REDDET",
"zıplamak".

Bazı hedefler, ayrıntıları belirtmek için daha fazla anahtar sözcük tanımlar: "REJECT icmp- ile reddet-
ağ ulaşılamaz".

Her kural bir yer ve hedef, artı herhangi bir sayıda maçlar:

tablo filtresi # konum
proto tcp dport (http https) # eşleşme
KABUL; # hedef

Kesin konuşmak gerekirse, dördüncü bir tür vardır: ferm anahtar kelimeler (ferm'in dahili
davranış), ancak daha sonra açıklanacaktır.

parametreler
Birçok anahtar kelime parametre alır. Bunlar değişmez değerler, değişken referanslar veya
listeler (diziler):

proto udp
$TRUSTED_HOSTS;
protokol tcp dport (http https ssh);
LOG günlük öneki "korkak wardriver uyarısı:";

Bazıları reddedilebilir (listeler reddedilemez):

ön !esp;
protokol udp dport !domain;

Parametre almayan anahtar kelimeler, ön eki '!' ile reddedilir:

ön tcp !syn;

Okumak iptables(8) nerede olduğunu görmek için ! kullanılabilir.

KLASİK ANAHTAR KELİMELER


Lokasyon anahtar kelimeler
domain [ip|ip6]
Etki alanını ayarlayın. "ip" varsayılandır ve "IPv4" (iptables) anlamına gelir. "ip6" IPv6 içindir
"ip6tables" kullanarak destek.

tablo [filtre|nat|mangle]
Bu kuralın hangi netfilter tablosuna ekleneceğini belirtir: "filtre" (varsayılan),
"nat" veya "mangle".

zincir [zincir adı]
Netfilter zincirini belirtir (geçerli tablo içinde) bu kuralın uygulanacağı
için takılı. Ortak önceden tanımlanmış zincir adları "GİRİŞ", "ÇIKIŞ", "İLERİ",
"PREROUTING", "POSTROUTING", tabloya bağlı olarak. netfiltreye bakın
ayrıntılar için belgeler.

Burada var olmayan bir zincir belirtirseniz, ferm kuralı özel bir zincire ekler
bu isimle.

politika [KABUL|BIRAK|..]
Geçerli zincir için varsayılan ilkeyi belirtir (yalnızca yerleşik). biri olabilir
yerleşik hedefler (KABUL, DROP, REJECT, ...). Kurallarla eşleşmeyen bir paket
bir zincirde, politikada belirtildiği gibi işlem görecektir.

Belirsizliği önlemek için her zaman önceden tanımlanmış tüm zincirlerin politikalarını belirtin
açıkça.

@alt zincir ["ZİNCİR ADI"] { ... }
Normal blok operatörleri gibi çalışır (yani @alt zincir anahtar kelime), hariç
o ferm küme parantezleri içindeki kuralları yeni bir özel zincire taşır. İsim
bu zincir için ferm tarafından otomatik olarak seçilir.

Çoğu durumda, bu sadece bir bloktan daha hızlıdır, çünkü çekirdek bir blok atlayabilir.
bir önkoşul yanlış olduğunda büyük kurallar bloğu. Aşağıdaki örneği hayal edin:

tablo filtre zinciri GİRİŞ {
sadr (1.2.3.4 2.3.4.5 3.4.5.6 4.5.6.7 5.6.7.8) {
proto tcp dport (http https ssh) KABUL ET;
proto udp dport etki alanı KABUL;
}
}

Bu 20 kural oluşturur. Testi geçmeyen bir paket geldiğinde sadr
maç, yine de 20 kuralın tümünü kontrol eder. İle @alt zincir, bu kontrol yapılır
bir kez, daha hızlı ağ filtreleme ve daha az CPU yükü ile sonuçlanır:

tablo filtre zinciri GİRİŞ {
saddr (1.2.3.4 2.3.4.5 3.4.5.6 4.5.6.7 5.6.7.8) @alt zincir {
proto tcp dport (http https ssh) KABUL ET;
proto udp dport etki alanı KABUL;
}
}

İsteğe bağlı olarak alt zincirin adını tanımlayabilirsiniz:

saddr (1.2.3.4 2.3.4.5 3.4.5.6) @subchain "foobar" {
proto tcp dport (http https ssh) KABUL ET;
proto udp dport etki alanı KABUL;
}

Ad, alıntılanan bir dize değişmezi veya genişletilmiş bir ferm ifadesi olabilir.
@cat("interface_", $iface) veya @substr($var,0,20) gibi.

Aynısını, özel bir zincir bildirerek de başarabilirsiniz, ancak
kullanan @alt zincir daha az yazarak gerektirir.

Basic iptables maç anahtar kelimeler
arayüzey [arayüz adı]
Arayüz adını, eth0 gibi dış ağ kartınızı veya çevirmeli ağ kartını tanımlayın.
ppp1 veya paketleri geçmek için eşleştirmek istediğiniz cihaz. eşdeğerdir
"-i" anahtarına iptables(8).

dış yüzey [arayüz adı]
Arayüz ile aynı, sadece bir paket için giden arayüzü eşleştirmek için,
iptables(8).

protokol [protokol adı|protokol numarası]
Şu anda çekirdek tarafından desteklenenler tcp, udp ve icmp veya bunların ilgilileridir.
numaraları.

saddr|baba [adres-spec]
Belirtilen adresten (saddr) kaynaklanan veya hedeflenen paketlerdeki eşleşmeler
adres (daddr).

Örnekler:

saddr 192.168/8 KABUL; # (bir sonrakiyle aynı :)
saddr 192.168.0.0/255.255.255.0 KABUL;
dadr my.domain.com KABUL ET;

fragmentidir.
Yalnızca parçalanmış IP paketlerinin eşleşmesi gerektiğini belirtin. paketler olduğunda
sisteminizin kaldırabileceği maksimum paket boyutundan daha büyük (maksimum
İletim Birimi veya MTU) parçalara ayrılacak ve birer birer olarak gönderilecektir.
tek paketler. Görmek ifconfig(8) sisteminiz için MTU'yu bulmak istiyorsanız (
varsayılan genellikle 1500 bayttır).

Fragmanları bulmanın bir yolu olmadığı için DOS saldırılarında sıklıkla kullanılır.
bir parça paketinin orijini.

spor|port [bağlantı noktası özelliği]
Belirtilen TCP veya UDP bağlantı noktasındaki paketlerle eşleşir. "spor" kaynakla eşleşiyor
bağlantı noktası ve dport hedef bağlantı noktasıyla eşleşir.

Bu eşleşme ancak "protokol tcp" veya "protokol udp" belirttikten sonra kullanılabilir,
çünkü yalnızca bu iki protokolün aslında bağlantı noktaları vardır.

Ve bazı geçerli bağlantı noktaları/aralık örnekleri:

dport 80 KABUL;
dport http KABUL ET;
dport ssh:http KABUL ET;
dport 0:1023 KABUL; # eşdeğeri :1023
dport 1023:65535 KABUL;

syn için kullanılan bir tcp paketindeki SYN bayrağının eşleşmesi gerektiğini belirtin.
yeni tcp bağlantıları oluşturun. Bununla gelen bağlantıları tanımlayabilir ve
izin vermek isteyip istemediğinize karar verin. Bu bayrağa sahip olmayan paketler
muhtemelen önceden kurulmuş bir bağlantıdan, bu yüzden makul olarak kabul edilir
bunların geçmesine izin vermek güvenli.

modül [Modül Adı]
Bir iptables modülü yükleyin. Çoğu modül, daha fazla eşlemeli anahtar kelime sağlar. ulaşacağız
bu daha sonra.

Basic hedef anahtar kelimeler
atlama [özel zincir adı]
Özel bir zincire atlar. Özel zincirde hiçbir kural eşleşmezse, netfilter döner
önceki zincirdeki bir sonraki kurala.

gerçek [özel zincir adı]
Özel bir zincire gidin. aksine atlama seçeneği DÖNÜŞ işlemeye devam etmeyecek
bu zincirde ama bunun yerine bizi arayan zincirde atlama.

Anahtar kelime gerçek geçiş döneminde seçilmiştir, çünkü Goto
(zaten kullanımdan kaldırıldı) eskiden için bir takma addı atlama.

KABUL Eşleşen paketleri kabul eder.

DAMLA Daha fazla haber vermeden eşleşen paketleri bırakın.

REDDET Eşleşen paketleri reddeder, yani bağlantı noktası olan göndericiye bir ICMP paketi gönderir.
varsayılan olarak erişilemez. Başka bir ICMP türü belirtebilirsiniz.

REDDETMEK; # varsayılan olarak icmp-port-ulaşılamaz
REJECT reddetme - icmp-net ile ulaşılamaz;

Ayrıntılar için "iptables -j REJECT -h" yazın.

DÖNÜŞ Mevcut zinciri bitirin ve çağıran zincire dönün ("atla
[özel-zincir-adı]" kullanıldı).

NOP Eylem yok.

EK ANAHTAR KELİMELER


Netfilter modülerdir. Modüller ek hedefler sağlayabilir ve anahtar kelimelerle eşleşebilir. Liste
netfilter modüllerinin sayısı sürekli artıyor ve ferm onları desteklemeye devam etmeye çalışıyor
Tümü. Bu bölüm, şu anda desteklenen modülleri açıklar.

iptables maç modüller
hesap Tanımlanmış ağ/ağ maskesindeki tüm ana bilgisayarlar için hesap trafiği. Bu, onlardan biri
Hedef gibi davranan modülleri eşleştirin, yani çoğunlukla NOP
hedef.

mod hesabı aname mynetwork aaddr 192.168.1.0/24 kısa NOP;

adres türü
Adres türünü kontrol edin; ya kaynak adresi ya da hedef adresi.

mod addrtype kaynak türü YAYIN;
mod addrtype dst-type YEREL;

Ayrıntılar için "iptables -m addrtype -h" yazın.

ah Bir AH paketindeki SPI başlığını kontrol eder.

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

IPv6 için ek argümanlar:

mod ahlen 32 KABUL;
mod ah ahlen !32 KABUL;
mod ah ahres KABUL ET;

yorum Yap Efekt olmadan bir kurala 256 karaktere kadar yorum ekler. Bunu not et
ferm yorumlarından ('#') farklı olarak, bu "iptables -L" içinde görünecektir.

mod yorum yorumu "Bu benim yorumum." KABUL;

koşul
/proc/net/ipt_condition/NAME içindeki bir değer 1 ise (yol
ip6 etki alanı için /proc/net/ip6t_condition/NAME).

mod koşul koşulu (abc def) KABUL;
mod koşulu koşulu !foo KABUL;

bağlantı baytları
Bir bağlantının (veya iki akıştan birinin) kaç bayt veya pakete göre eşleştirin
bağlantıyı oluşturan) şimdiye kadar aktarılmış veya ortalama bayt başına
paket.

mod connbytes connbytes 65536: connbytes-dir her ikisi de connbytes-mode bayt KABUL;
mod connbytes connbytes !1024:2048 connbytes-dir yanıtı connbytes-mode paketleri KABUL;

için geçerli değerler bağlantı baytları-dir: orijinal, cevap, her ikisi de; için connbytes modu:
paketler, bayt, ortpkt.

sınırlamak
Sunucu başına paralel TCP bağlantılarının sayısını kısıtlamanıza izin verir.
istemci IP adresi (veya adres bloğu).

mod connlimit connlimit-üstü 4 REDDET;
mod connlimit connlimit-yukarıda !4 KABUL;
mod connlimit connlimit-üstü 4 connlimit-mask 24 REJECT;

bağlantı işareti
CONNMARK hedefi tarafından ayarlanan bağlantıyla ilişkili işaret alanını kontrol edin.

mod bağlantı işareti 64;
mod bağlantı işareti 6/7;

bağlantı
Bağlantı izleme bilgilerini kontrol edin.

mod conntrack ctstate (KURULAN İLGİLİ);
mod bağlantısı ctproto tcp;
mod bağlantısı ctorigsrc 192.168.0.2;
mod bağlantısı ctorigdst 1.2.3.0/24;
mod bağlantısı ctorigsrcport 67;
mod bağlantısı ctorigdstport 22;
mod bağlantısı ctreplsrc 2.3.4.5;
mod bağlantısı ctrepldst ! 3.4.5.6;
mod bağlantısı ctstatus GÜVENİLİR;
mod bağlantısı ctexpire 60;
mod bağlantısı ctexpire 180:240;

Ayrıntılar için "iptables -m conntrack -h" yazın.

dccp DCCP'ye (Datagram Tıkanıklığı Kontrol Protokolü) özgü öznitelikleri kontrol edin. Bu
"protokol dccp" kullandığınızda modül otomatik olarak yüklenir.

proto dccp spor 1234 dport 2345 KABUL;
proto dccp dccp türleri (SYNCACK ACK) KABUL;
proto dccp dccp türleri !REQUEST DROP;
proto dccp dccp-seçenek 2 KABUL;

dscp TOS alanındaki 6 bitlik DSCP alanını eşleştirin.

mod dscp dscp 11;
mod dscp dscp sınıfı AF41;

ekn Bir IPv4 TCP başlığının ECN bitlerini eşleştirin.

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

Ayrıntılar için "iptables -m ecn -h" yazın.

esp Bir ESP paketindeki SPI başlığını kontrol eder.

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

euı64 "Bu modül, durum bilgisi olmayan, otomatik olarak yapılandırılmış bir IPv64 adresinin EUI-6 kısmıyla eşleşir.
Ehternet çerçevesindeki kaynak MAC adresinden türetilen EUI-64 ile karşılaştırır.
IPv64 kaynak adresinin alt 6 biti. Ama "Evrensel/Yerel" bit değil
karşılaştırıldı. Bu modül, diğer bağlantı katmanı çerçevesiyle eşleşmez ve yalnızca şu durumlarda geçerlidir:
PREROUTING, INPUT ve FORWARD zincirleri."

mod eui64 KABUL;

belirsiz "Bu modül, bulanık mantık denetleyicisine [FLC] dayalı bir hız sınırıyla eşleşiyor."

mod bulanık alt limit 10 üst limit 20 KABUL;

ahh Hop-by-Hop Seçenekleri başlığıyla (ip6) eşleşir.

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

hl Atlama Sınırı alanıyla (ip6) eşleşir.

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

yardımcı Hangi bağlantı yardımcı modülünün bu bağlantıyı izlediğini kontrol eder. liman olabilir
"-portnr" ile belirtilir.

mod yardımcı yardımcısı irc KABUL;
mod yardımcı yardımcısı ftp-21 KABUL;

icmp ICMP'ye özgü nitelikleri kontrol edin. Bu modül, kullandığınızda otomatik olarak yüklenir.
"protokol icmp".

proto icmp icmp tipi yankı isteği KABUL;

Bu seçenek şu durumlarda da kullanılabilir: ip6 alan adı, buna rağmen icmpv6 in
ip6tables.

Geçerli ICMP türlerinin bir listesini elde etmek için "iptables -p icmp "-h" kullanın.

Ip aralığı Bir dizi IPv4 adresini eşleştirin.

mod iprange kaynak aralığı 192.168.2.0-192.168.3.255;
mod iprange dst aralığı ! 192.168.6.0-192.168.6.255;

ipv4 seçenekleri
Kaynak yönlendirme, kayıt yolu, zaman damgası ve
yönlendirici uyarısı.

mod ipv4options ssrr KABUL;
mod ipv4options lsrr KABUL;
mod ipv4options no-srr KABUL;
mod ipv4options !rr KABUL ET;
mod ipv4options !ts KABUL ET;
mod ipv4options !ra KABUL ET;
mod ipv4options !herhangi bir seçenek KABUL ET;

ipv6 başlığı
IPv6 uzantı başlığıyla (ip6) eşleşir.

mod ipv6header başlığı !(atlama parçası) KABUL ET;
mod ipv6header başlığı (auth dst) KABUL;

hash limiti
'Mod sınırına' benzer, ancak hedef başına veya bağlantı noktası başına ekleme yeteneği ekler
bir hash tablosunda yönetilen limitler.

mod hashlimit hashlimit 10/dakika hashlimit-burst 30/dakika
hashlimit-modu dstip hashlimit-name foobar KABUL;

hashlimit modu için olası değerler: dstip dstport srcip srcport (veya
bunlardan birden fazlası).

Daha olası ayarlar var, bunun için "iptables -m hashlimit -h" yazın.
dokümantasyon.

uzunluk Paket uzunluğunu kontrol edin.

mod uzunluğu uzunluğu 128; # tam olarak 128 bayt
mod uzunluğu uzunluğu 512:768; # Aralık
mod uzunluğu uzunluğu! 256; # reddedildi

sınır Paket hızını sınırlar.

mod limit limiti 1/saniye;
mod limit limiti 15/dakika limit patlaması 10;

Ayrıntılar için "iptables -m limit -h" yazın.

mac Kaynak MAC adresini eşleştirin.

mod mac mac kaynağı 01:23:45:67:89;

işaret Paketleri netfilter işaret alanına göre eşleştirir. Bu 32 bitlik bir tam sayı olabilir
0 ve 4294967295 arasında.

mod işareti 42;

mh Hareketlilik başlığıyla eşleşir (etki alanı ip6).

proto mh mh tipi bağlama-güncelleme KABUL;

çoklu bağlantı noktası
Bir dizi kaynak veya hedef bağlantı noktasını eşleştirin (yalnızca UDP ve TCP).

mod çoklu bağlantı noktası kaynak bağlantı noktaları (https ftp);
mod çoklu bağlantı noktası hedef bağlantı noktaları (mysql etki alanı);

Bu kuralın "dport" ve "spor"a göre büyük bir avantajı vardır: yalnızca bir kural oluşturur
her bağlantı noktası için bir kural yerine 15 bağlantı noktasına kadar.

n'inci Her 'n' paketi eşleştirin.

mod nth her 3;
mod nth sayaç 5 her 2'de bir;
mod nth start 2 her 3'te bir;
mod nth 5 paket 2'yi her 6'da başlat;

Ayrıntılar için "iptables -m nth -h" yazın.

osf Gönderenin işletim sistemine bağlı olarak paketleri eşleştirin.

mod osf türü Linux;
mod osf! tür FreeBSD ttl 1 günlük 1;

Ayrıntılar için "iptables -m osf -h" yazın.

sahip Paket oluşturucuyla ilgili bilgileri kontrol edin, yani kullanıcı kimliği, grup kimliği, işlem kimliği,
oturum kimliği ve komut adı.

mod sahibi kullanıcı kimliği sahibi 0;
mod sahibi gid-sahibi 1000;
mod sahibi pid sahibi 5432;
mod sahibi yan sahibi 6543;
mod sahibi cmd sahibi "sendmail";

("cmd-owner", "pid-owner" ve "sid-owner", özel çekirdek yamaları gerektirir.
vanilya Linux çekirdeğine dahil)

fizik dev Bir paketin girdiği veya çıkmak üzere olduğu fiziksel cihazla eşleşir.
makine. Bu, köprülü arayüzler için kullanışlıdır.

mod physdev physdev-in ppp1;
mod physdev physdev-out eth2;
mod physdev physdev-içinde;
mod physdev physdev çıktı;
mod physdev physdev köprülüdür;

pkt türü Bağlantı katmanı paket türünü kontrol edin.

mod pkttype pkt tipi tek noktaya yayın;
mod pkttype pkt tipi geniş kasa;
mod pkttype pkt tipi çok noktaya yayın;

politika Bu pakete uygulanan IPsec ilkesiyle eşleşir.

mod politikası dir çıkışı pol ipsec KABUL;
mod politikası sıkı zorunlu 23 spi 0x10 proto ah KABUL;
mod ilke modu tünel tüneli-src 192.168.1.2 KABUL;
mod ilke modu tünel tüneli-dst 192.168.2.1 KABUL;
mod politikası sıkı sonraki reqid 24 spi 0x11 KABUL;

Anahtar kelimenin bu nedenle kısa bir versiyonu olarak da kullanılır protokol
(dahili eşleşme modülü). Bu çakışmayı her zaman uzun kullanarak düzeltebilirsiniz.
Anahtar kelime protokol.

psd TCP/UDP bağlantı noktası taramalarını algılayın.

mod psd psd ağırlık eşiği 21 psd gecikme eşiği 300
psd-lo-port-ağırlığı 3 psd-hi-ports-ağırlığı 1 DROP;

kota Her pakette bir bayt sayacını azaltarak ağ kotalarını uygular.

mod kotası 65536 KABUL;

rasgele Tüm paketlerin rastgele bir yüzdesini eşleştirin.

mod rastgele ortalama 70;

alan Yönlendirme bölgesini eşleştirin. BGP kullanan ortamlarda kullanışlıdır.

mod bölgesi bölge 3;

son Kaynak IP adreslerini geçici olarak işaretleyin.

mod son set;
mod son rcheck saniye 60;
mod son ayar kaynak adı "badguy";
mod son set rdest;
mod son rcheck kaynak adı "badguy" saniye 60;
mod son güncelleme saniye 120 hitcount 3 rttl;

Bu netfilter modülünün bir tasarım kusuru var: bir eşleşme olarak uygulanmasına rağmen
modül, "set" anahtar sözcüğünü kullanırken hedef benzeri davranışa sahiptir.

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

rt IPv6 yönlendirme başlığını eşleştirin (yalnızca ip6).

mod rt rt-type 2 rt-len 20 KABUL;
mod rt rt tipi !2 rt-len !20 KABUL;
mod rt rt-segsleft 2:3 KABUL;
mod rt rt-segsleft !4:5 KABUL;
mod rt rt-0-res rt-0-addrs (::1 ::2) rt-0-katı değil KABUL;

sctp SCTP'ye (Akış Denetimi İletim Protokolü) özgü öznitelikleri denetleyin. Bu
"protocol sctp" kullandığınızda modül otomatik olarak yüklenir.

proto sctp sport 1234 dport 2345 KABUL;
yalnızca proto sctp yığın türleri VERİ: KABUL EDİN;
proto sctp yığın türleri herhangi biri (INIT INIT_ACK) KABUL;
proto sctp yığın türleri !all (HEARTBEAT) KABUL;

Geçerli yığın türlerinin bir listesini elde etmek için "iptables -p sctp "-h" kullanın.

set Bir kümeye karşı kaynak veya hedef IP/Port/MAC'yi kontrol eder.

mod seti badguys kaynağı DROP;

Görmekhttp://ipset.netfilter.org/> daha fazla bilgi için.

belirtmek, bildirmek Bağlantı izleme durumunu kontrol eder.

mod durumu durumu GEÇERSİZ DROP;
mod durumu durumu (KURULAN İLGİLİ) KABUL;

Ayrıntılar için "iptables -m state -h" yazın.

istatistik
Ardıl n'inci ve rasgele, şu anda belgelenmemiş iptables(8) adam sayfası.

mod istatistik modu rastgele olasılık 0.8 KABUL;
mod istatistik modu her 5 pakette bir 0 DROP;

dizi Bir dizeyle eşleşir.

mod string string "foo bar" KABUL;
mod string algo kmp 64'ten 128'e hex-string "deadbeef" KABUL;

tcp TCP'ye özgü nitelikleri kontrol eder. Bu modül, kullandığınızda otomatik olarak yüklenir.
"protokol tcp".

proto tcp spor 1234;
protokol tcp dport 2345;
proto tcp tcp-bayrakları (SYN ACK) SYN;
proto tcp tcp bayrakları ! (SYN ACK) SYN;
proto tcp tcp bayrakları TÜMÜ (RST ACK);
proto tcp senkronizasyonu;
proto tcp tcp seçeneği 2;
protokol tcp mss 512;

Ayrıntılar için "iptables -p tcp -h" yazın.

tcpms'ler Bir SYN veya SYN/ACK paketinin TCP MSS alanını kontrol edin.

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

zaman Bir paketin ulaştığı zamanın verilen aralıkta olup olmadığını kontrol edin.

mod zamanı başlangıç ​​saati 12:00;
mod zamanı zaman durdurma 13:30;
mod zamanı günleri (Pzt Çar Cum);
mod saat tarihbaşlangıç ​​2005:01:01;
mod saat tarihbaşlangıç ​​2005:01:01:23:59:59;
mod zaman tarihdurdur 2005:04:01;
mod zamanı aygün (30 31);
mod zamanı hafta içi (Çar Per);
mod zamanı başlangıç ​​saati 12:00 utc;
mod zamanı timestart 12:00 localtz;

Ayrıntılar için "iptables -m time -h" yazın.

tos Belirtilen TOS değerindeki bir paketle eşleşir.

mod tos için Maliyeti Azalt - KABUL ET;
modlar arasında !Normal-Hizmet KABUL ET;

Ayrıntılar için "iptables -m tos -h" yazın.

ttl IP başlığındaki ttl (yaşam süresi) alanıyla eşleşir.

mod ttl ttl-eq 12; # ttl eşittir
mod ttl ttl-gt 10; # ttl daha büyük
mod ttl ttl-lt 16; # ttl daha az

u32 Paketteki ham verileri karşılaştırır. Bir ferm içinde birden fazla filtre belirtebilirsiniz.
liste; bunlar birden fazla kurala genişletilmez.

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

kirli Bozuk veya olağandışı görünen paketleri eşleştirir. Bu maçın devamı yok
parametreleri.

iptables hedef modüller
Aşağıdaki ek hedefler, bunları etkinleştirmiş olmanız koşuluyla, ferm'de mevcuttur:
senin çekirdeğin:

SINIFLANDIRMAK
CBQ sınıfını ayarlayın.

CLASSIFY set sınıfı 3:50;

KÜMELER
Belirli bir IP ve MAC adresini paylaşan basit bir düğüm kümesi yapılandırın.
Bağlantılar, düğümler arasında statik olarak dağıtılır.

CLUSTERIP yeni hashmode sourceip clustermac 00:12:34:45:67:89
toplam düğüm 4 yerel düğüm 2 karma başlatma 12345;

ONAYLAMA
Bir bağlantıyla ilişkili netfilter işaret değerini ayarlar.

CONNMARK ayar işareti 42;
CONNMARK kaydetme işareti;
CONNMARK geri yükleme işareti;
CONNMARK kaydetme işareti maskesi 0x7fff;
CONNMARK geri yükleme işareti maskesi 0x8000;

BAĞLANTI MARKI
Bu modül, güvenlik işaretlerini paketlerden bağlantılara (etiketlenmemişse) kopyalar.
ve bağlantılardan paketlere geri döner (yalnızca etiketlenmemişse de). Tipik olarak kullanılan
SECMARK ile birlikte, sadece mengene tablosunda geçerlidir.

CONNSECMARK kaydet;
CONNSECMARK geri yükleme;

DTA için [ip-adresi|ip-aralığı|ip-port-aralığı]
Paketin hedef adresini değiştirin.

DNAT ila 10.0.0.4;
10.0.0.4:80'e kadar DNAT;
10.0.0.4:1024-2048'e kadar DNAT;
DNAT ila 10.0.1.1-10.0.1.20;

ECN Bu hedef, bilinen ECN karadeliklerinin etrafında seçici bir şekilde çalışmayı sağlar. sadece
mengene tablosunda kullanılabilir.

ECN ecn-tcp-kaldır;

HL IPv6 Atlama Sınırı alanını değiştirin (yalnızca ip6/mangle).

HL hl-set 5;
HL hl-aralık 2;
HL hl-inc 1;

IPV4OPTSŞERİDİ
Bir paketteki tüm IP seçeneklerini soyun. Bu modül herhangi bir seçenek almaz.

IPV4OPTSŞERİDİ;

LOG Bu kuralla eşleşen tüm paketleri çekirdek günlüğüne kaydedin. Günlük ile dikkatli olun
su baskını. Bunun "sonlanmayan bir hedef" olduğuna dikkat edin, yani kural geçişi
sonraki kuralda devam eder.

LOG günlük düzeyi uyarı günlük öneki "Şuna bakın: ";
LOG log-tcp-dizisi log-tcp-seçenekleri;
LOG log-ip-seçenekleri;

MARK Paket için netfilter işaret alanını ayarlar (32 ile 0 arasında bir XNUMX bit tam sayı
4294967295):

MARK ayar işareti 42;
MARK seti-xmark 7/3;
MARK ve işaret 31;
MARK veya işareti 1;
MARK xor işareti 12;

maskeli balo
Eşleşen paketleri maskeler. İsteğe bağlı olarak, ardından bir bağlantı noktası veya bağlantı noktası aralığı için
iptables. "123", "123-456" veya "123:456" olarak belirtin. Bağlantı noktası aralığı parametresi
maskelenmiş bağlantıların hangi yerel bağlantı noktalarından kaynaklanması gerektiğini belirtir.

maskeli balo;
MASQUERADE bağlantı noktalarına 1234:2345;
MASQUERADE to-ports 1234:2345 rastgele;

AYNA Kaynak ve hedef alanlarını tersine çeviren deneysel gösterim hedefi
IP başlığında.

AYNA;

NETMAP Tüm bir ağı başka bir ağla eşleyin. nat tablo.

NETMAP'den 192.168.2.0/24'e;

NOTRAK Bu kuralla eşleşen tüm paketler için bağlantı izlemeyi devre dışı bırakın.

protokol tcp dport (135:139 445) NOTRACK;

NFLOG Paketleri netlink üzerinden günlüğe kaydedin; bu halefi ULOG.

NFLOG nflog-group 5 nflog-prefix "Şuna bakın: ";
NFLOG nflog aralığı 256;
NFLOG nflog eşiği 10;

NF SIRASI Kullanıcı alanı sıraya alma, nfnetlink_queue çekirdek desteği gerektirir.

proto tcp dport ftp NFQUEUE kuyruk numarası 20;

KUYRUK Kullanıcı alanı kuyruğa alma, öncel NF SIRASI. Tüm paketler sıra 0'a gider.

proto tcp dport ftp SIRRI;

YÖNLENDİRME limanlara [bağlantı noktaları]
Şeffaf proxy: paketin hedef IP'sini makineye değiştirin
kendisi.

protokol tcp dport http REDIRECT'i bağlantı noktaları 3128'e;
proto tcp dport http REDIRECT to-ports 3128 rastgele;

AYNI SNAT'a benzer, ancak bir istemci, tüm özellikleri için aynı kaynak IP'ye eşlenir.
bağlantıları.

1.2.3.4-1.2.3.7 ile AYNI;
AYNI - 1.2.3.8-1.2.3.15 baş sallama;
AYNI ila 1.2.3.16-1.2.3.31 rastgele;

SEÇMARK Bu, tarafından kullanılmak üzere paketle ilişkili güvenlik işareti değerini ayarlamak için kullanılır.
SELinux gibi güvenlik alt sistemleri. Yalnızca mengene tablosunda geçerlidir.

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

SET [ek-set|del-set] [ayar adı] [bayrak(lar)]
IP'yi belirtilen kümeye ekleyin. Görmekhttp://ipset.netfilter.org/>

proto icmp icmp-tipi eko-isteği SET eklenti seti badguys src;

Snat için [ip-adresi|ip-aralığı|ip-port-aralığı]
Paketin kaynak adresini değiştirin.

SNAT'tan 1.2.3.4'e;
SNAT'tan 1.2.3.4:20000-30000'e;
SNAT'tan 1.2.3.4'e rastgele;

TCPMSS TCP SYN paketlerinin MSS değerini değiştirin.

TCPMSS seti-mss 1400;
TCPMSS kelepçe-mss-pmtu;

Hizmet Şartları ayarlar [değer]
tcp paketi Type Of Service bitini bu değere ayarlayın. Bu tarafından kullanılacak
trafik zamanlayıcı ne olursa olsun, çoğunlukla kendi linux makineniz, ama belki
daha fazla. Orijinal tos-bitleri boş bırakılır ve bu değerin üzerine yazılır.

TOS set-to'ları Maksimize Etme-Verim;
TOS ve-tos 7;
TOS veya-tos 1;
TOS xor-tos 4;

Ayrıntılar için "iptables -j TOS -h" yazın.

TTL TTL başlık alanını değiştirin.

TTL ttl-set 16;
TTL ttl-aralık 1; # 1 azalt
TTL ttl-inc 4; # 4 artış

ULOG Paketleri bir kullanıcı alanı programına günlüğe kaydedin.

ULOG ulog-nlgroup 5 ulog-prefix "Şuna bakın: ";
ULOG ulog-cprange 256;
ULOG ulog-q eşik 10;

DİĞER ALANLAR


versiyon 2.0 yana, ferm sadece desteklemekle kalmaz ip ve ip6, Aynı zamanda arp (ARP tabloları) ve eb
(ethernet köprüleme tabloları). Kavramlar birbirine benziyor iptables.

arptable'lar anahtar kelimeler
Kaynak IP, Hedef IP
Kaynak veya hedef IPv4 adresiyle eşleşir. İle aynı sadr ve baba içinde ip
etki.

kaynak-mac, hedef-mac
Kaynak veya hedef MAC adresiyle eşleşir.

arayüzey, dış yüzey
Giriş ve çıkış arayüzü.

h-uzunluk
Paketin donanım uzunluğu.

zincir GİRİŞ h-uzunluk 64 KABUL;

işlemkodu İşlem kodu, ayrıntılar için bkz. iptables(8).

işlem kodu 9 KABUL;

h tipi Donanım türü.

h-tipi 1 KABUL;

prototip
Protokol türü.

proto-tip 0x800 KABUL;

parçalamak
anahtar kelimeler mangle-ip-s, mangle-ip-d, mangle-mac-s, mangle-mac-d, ezmek-hedef
ARP yönetimi için kullanılabilir. Görmek iptables(8) ayrıntılar için.

yemek masaları anahtar kelimeler
bu nedenle Çerçeveyi oluşturan protokolle eşleşir, örn. IPv4 or PPP. Bir liste için bkz.
/etc/eter türleri.

arayüzey, dış yüzey
Fiziksel giriş ve çıkış arayüzü.

mantıksal giriş, mantıksal çıkış
Mantıksal köprü arayüzü.

sadr, baba
Kaynak veya hedef MAC adresiyle eşleşir.

Maç modüller
Aşağıdaki eşleşme modülleri desteklenir: 802.3, arp, ip, mark_m, pkttype, stp,
vlan, günlük.

Hedef uzantıları
Aşağıdaki hedef uzantılar desteklenir: arpreply, dnat, mark, yönlendirme,
snat.

arasında bir çakışma olduğunu lütfen unutmayın. --işaret itibaren mark_m maç modülü
ve -j işaret. Her ikisi de ferm anahtar sözcüğüyle uygulanacağından işaret, Biz
bunu, diğerinde olduğu gibi hedefin adını büyük harfle yazarak çözmeye karar verdi.
etki alanları. Aşağıdaki örnek, işaret 1 ila 2'yi yeniden yazar:

1 İŞARET 2'yi işaretleyin;

İLERİ ÖZELLİKLER


Değişkenler
Karmaşık güvenlik duvarı dosyalarında, örneğin bir ağ vermek için değişkenleri kullanmak yararlıdır.
arayüz anlamlı bir isim.

Değişkenleri ayarlamak için şunu yazın:

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

Gerçek ferm kodunda, değişkenler diğer herhangi bir anahtar kelime parametresi gibi kullanılır:

zincir GİRİŞ arabirimi $DEV_INTERNET proto tcp dport $MORE_PORTS KABUL;

Değişkenlerin yalnızca anahtar kelime parametrelerinde ("192.168.1.1", "http"); onlar
"proto" veya "arayüz" gibi ferm anahtar sözcükleri içeremez.

Değişkenler yalnızca geçerli blokta geçerlidir:

@def $DEV_INTERNET = eth1;
zincir GİRİŞ {
ön tcp {
@def $DEV_INTERNET = ppp0;
arayüz $DEV_INTERNET dport http KABUL;
}
arayüz $DEV_INTERNET DROP;
}

genişletilecektir:

zincir GİRİŞ {
ön tcp {
arayüz ppp0 dport http KABUL;
}
arayüz eth1 DROP;
}

"def $DEV_INTERNET = ppp0" yalnızca "proto tcp" bloğunda geçerlidir; ana blok
hala "set $DEV_INTERNET = eth1" biliyor.

Dahil edilen dosyalar özeldir - dahil edilen bir dosyada bildirilen değişkenler hala şurada mevcuttur:
arama bloğu. Bu, yalnızca değişkenleri bildiren bir dosya eklediğinizde kullanışlıdır.

Otomatik değişkenler
Bazı değişkenler dahili olarak ferm tarafından ayarlanır. Ferm komut dosyaları, bunları tıpkı diğerleri gibi kullanabilir
değişkeni.

$DOSYAADI
Ferm dizinine göre yapılandırma dosyasının adı başlatıldı.

$FILEBNAME
Yapılandırma dosyasının temel adı.

$DIRNAME
Yapılandırma dosyasının dizini.

$DOMAIN Geçerli etki alanı. Biri ip, ip6, arp, eb.

$TABLO Geçerli netfilter tablosu.

$ZİNCİR Geçerli netfilter zinciri.

$LINE Geçerli betiğin satırı. Şu şekilde kullanılabilir:

@def &log($msg) = {
LOG günlük öneki "kural=$msg:$LINE";
}
.
.
.
&log("kayıt mesajı");

fonksiyonlar
Fonksiyonlar, parametrelere sahip olmaları dışında değişkenlere benzerler ve
ferm komutları, değerler değil.

@def &FOO() = proto (tcp udp) dport etki alanı;
&FOO() KABUL;

@def &TCP_TUNNEL($port, $hedef) = {
tablo filtre zinciri İLERİ arabirim ppp0 proto tcp dport $bağlantı noktası dadr $hedef dış yüz eth0 KABUL;
tablo nat zincir ÖN ROUTING arabirimi ppp0 proto tcp dport $bağlantı noktası dadr 1.2.3.4 DNAT to $hedef;
}

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

Bir blok içeren bir işlev çağrısı ('{...}' gibi) bir fermdeki son komut olmalıdır.
kuralı, yani ';' ile takip edilmelidir. '&FOO()' örnek bir blok içermiyor, bu nedenle
aramadan sonra 'KABUL' yazabilirsiniz. Bunu atlatmak için anahtar kelimeleri yeniden sıralayabilirsiniz:

@def &IPSEC() = { ön (özellikle ah); proto udp dport 500; }
zincir INPUT ACCEPT &IPSEC();

geri tepmeler
Backticks ile harici bir komutun çıktısını kullanabilirsiniz:

@def $DNSSERVERS = `grep ad sunucusu / Etc / resolv.conf | awk '{print $2}'';
zincir GİRİŞ proto tcp saddr $DNSSERVERS KABUL;

Komut kabuk ile yürütülür (/ Bin / sh), tıpkı perl'deki geri tepmeler gibi. ferm yapar
burada herhangi bir değişken genişletme yapmayın.

Çıktı daha sonra tokenleştirilir ve bir ferm listesi (dizi) olarak kaydedilir. '#' ile başlayan satırlar
göz ardı edilir; diğer satırlar, boşlukla ayrılmış herhangi bir sayıda değer içerebilir.

Kapsar
The @Dahil etmek anahtar kelime, harici dosyaları eklemenize izin verir:

@include 'vars.ferm';

Dosya adı, çağıran dosyaya göredir, örn.
/etc/ferm/ferm.conf, yukarıdaki ifade şunları içerir: /etc/ferm/vars.ferm. Değişkenler ve
dahil edilen bir dosyada bildirilen işlevler, çağıran dosyada hala mevcuttur.

dahil bir blok içinde çalışır:

zincir GİRİŞ {
@input.ferm'i dahil et;
}

Bir dizin belirtirseniz (sonunda '/' olan), bu dizindeki tüm dosyalar
dahil, alfabetik olarak sıralanmış:

@include 'ferm.d/';

Sondaki boru sembolü ile, ferm bir kabuk komutu yürütür ve çıktısını ayrıştırır:

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

Şartlılar
Anahtar kelime @Eğer koşullu bir ifade sunar:

@if $durum DROP;

Bir değer, tıpkı Perl'deki gibi doğru olarak değerlendirilir: sıfır, boş liste, boş dize yanlıştır,
diğer her şey doğrudur. Gerçek değerler için örnekler:

(ab); 1; 'foo'; (0 0)

Yanlış değerlere örnekler:

(); 0; '0'; ''

Orada da @Başka:

@if $durum DROP; @else REDDET;

önce noktalı virgül dikkat edin @Başka.

Her ikisinden sonra kaşlı ayraçlar kullanmak mümkündür @Eğer or @Başka:

@if $koşul {
MARK ayar işareti 2;
DÖNÜŞ;
} @Başka {
MARK ayar işareti 3;
}

Kapanış kaşlı ayracı da komutu bitirdiği için noktalı virgüle gerek yoktur.

Yok @elsifKullanmak @Başka @Eğer yerine.

Örnek:

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

Çengeller
Özel komutları çalıştırmak için kancalar yükleyebilirsiniz:

@hook pre "echo 0 >/proc/sys/net/ipv4/conf/eth0/yönlendirme";
@hook gönderisi "eko 1 >/proc/sys/net/ipv4/conf/eth0/yönlendirme";
@hook floş "echo 0 >/proc/sys/net/ipv4/conf/eth0/yönlendirme";

Belirtilen komut kabuk kullanılarak yürütülür. "pre", komutu daha önce çalıştırmak anlamına gelir
güvenlik duvarı kurallarını uygulamak ve "post", komutu daha sonra çalıştırmak anlamına gelir. "gömme" kancalar
ferm güvenlik duvarı kurallarını temizledikten sonra çalıştırılır (opsiyon --flush). herhangi birini yükleyebilirsiniz
kanca sayısı.

ANKASTRE FONKSİYONLAR


Yararlı bulabileceğiniz birkaç yerleşik işlev vardır.

@eq(a,b)
Eşitlik için iki değeri test eder. Örnek:

@if @eq($DOMAIN, ip6) DÜŞÜR;

@ne(a,b)
@eq'e benzer şekilde, bu eşitlik dışılığı test eder.

@değil(x)
Bir boole değerini olumsuzlar.

@resolve((ana bilgisayar adı1 ana bilgisayar adı2 ...), [tip])
Genellikle, ana bilgisayar adları iptables tarafından çözülür. ferm'in ana bilgisayar adlarını çözmesine izin vermek için
@resolve işlevi:

saddr @resolve(my.host.foo) proto tcp dport ssh KABUL;
saddr @resolve((another.host.foo üçüncü.host.foo)) protokol tcp dport openvpn KABUL;
dadr @resolve(ipv6.google.com, AAAA) proto tcp dport http KABUL;

İkinci satırdaki çift parantezlere dikkat edin: ferm listesi oluşturmak için iç çift,
ve fonksiyon parametre sınırlayıcıları olarak dış çift.

İkinci parametre isteğe bağlıdır ve DNS kayıt türünü belirtir. Varsayılan "A"dır.

Güvenlik duvarı yapılandırmasında çözümlenen ana bilgisayar adlarına dikkat edin. DNS istekleri engelleyebilir
güvenlik duvarı yapılandırmasını uzun süre sürdürebilir, makineyi savunmasız bırakabilir veya başarısız olabilirler.

@kedi(a, b, ...)
Tüm parametreleri tek bir dizgede birleştirin.

@substr(ifade, ofset uzunluk)
Bir alt dizeyi ifadeden çıkarır ve döndürür. İlk karakter ofset 0'dadır.
OFFSET negatiftir, dizenin sonundan o kadar uzakta başlar.

@uzunluk(ifade)
EXPR değerinin karakter cinsinden uzunluğunu döndürür.

@basename(yol)
Belirli bir yol için dosyanın temel adını döndürün (File::Spec::splitpath).

@dirname(yol)
Son bileşenin bir dizin olduğunu varsayarak, belirli bir yol için son dizinin adını döndür
dosya adı (Dosya::Spec::splitpath).

@ipfilter(liste)
Geçerli etki alanıyla açıkça eşleşmeyen IP adreslerini filtreler. Yani
IPv4 ve IPv6 için ortak değişkenler ve kurallar oluşturmak için kullanışlıdır:

@def $GÜVENİLİR_HOSTS = (192.168.0.40 2001:abcd:ef::40);

etki alanı (ip ip6) zinciri GİRİŞ {
saddr @ipfilter($TRUSTED_HOSTS) proto tcp dport ssh KABUL;
}

TARİFLER


The ./örnekler/ dizin başlatmak için kullanılabilecek çok sayıda ferm yapılandırması içerir
yeni bir güvenlik duvarı. Bu bölüm daha fazla örnek, tarif ve püf noktası içerir.

Kolay Liman nakliye
Ferm işlevi, rutin görevleri hızlı ve kolay hale getirir:

@def &FORWARD_TCP($proto, $port, $hedef) = {
tablo filtre zinciri İLERİ arabirim $DEV_WORLD dış yüzey $DEV_DMZ daddr $hedef protokol $proto dport $bağlantı noktası KABUL;
tablo nat zinciri PREROUTING arabirimi $DEV_WORLD dadr $HOST_STATIC proto $proto dport $bağlantı noktası DNAT to $hedef;
}

&FORWARD_TCP(tcp, http, 192.168.1.2);
&FORWARD_TCP(tcp, smtp, 192.168.1.3);
&FORWARD_TCP((tcp udp), etki alanı, 192.168.1.4);

uzak ferm
Hedef makine çalışamıyorsa ferm herhangi bir nedenle (belki gömülü bir cihaz
Perl olmadan), düzenleyebilirsiniz. ferm başka bir bilgisayarda yapılandırma dosyası ve izin ferm
orada bir kabuk betiği oluşturun.

OpenWRT için örnek:

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

SEÇENEKLER


--noexec yürütme iptables(8) komutları, ancak bunun yerine atlayın. Bu şekilde yapabilirsiniz
verilerinizi ayrıştırın, kullanın --çizgiler çıktısını görüntülemek için

--floş Güvenlik duvarı kurallarını temizler ve tüm zincirlerin politikasını KABUL olarak ayarlar. ferm
hangi etki alanlarının ve tabloların olduğunu belirlemek için bir yapılandırma dosyasına ihtiyaç duyar
etkiledi.

--çizgiler Kurallardan oluşturulan güvenlik duvarı satırlarını gösterin. gösterilecekler
yürütülmelerinden hemen önce, bu nedenle hata mesajları alırsanız iptables(8)
vb., hangi kuralın hataya neden olduğunu görebilirsiniz.

--interaktif
Güvenlik duvarı kurallarını uygulayın ve kullanıcıdan onay isteyin. Şuna geri döner:
30 saniye içinde geçerli bir kullanıcı yanıtı yoksa önceki kural kümesi (bkz.
--zaman aşımı). Bu, uzaktan güvenlik duvarı yönetimi için kullanışlıdır: test edebilirsiniz
Kendinizi kilitlemekten korkmadan kuralları.

--zaman aşımı S If --interaktif kullanılır, ardından geçerli bir kullanıcı yanıtı yoksa geri alın
bu saniye sayısından sonra. Varsayılan 30'dur.

--yardım et Kullanılabilir komut satırı seçeneklerinin kısa bir listesini gösterin.

--versiyon Programın sürüm numarasını gösterir.

--hızlı Hızlı modu etkinleştir: ferm bir iptables-kaydet(8) dosya ve onu yükler
ile iptables-geri yükleme(8). Bu çok daha hızlıdır, çünkü ferm çağrıları iptables(8)
varsayılan olarak her kural için bir kez.

Hızlı mod varsayılan olarak etkindir çünkü ferm 2.0, bu seçeneği kullanımdan kaldırıyor.

--yavaş Hızlı modu devre dışı bırakın, yani çalıştırın iptables(8) her kural için ve kullanmayın
iptables-geri yükleme(8).

--kabuk Çağıran bir kabuk betiği oluşturun iptables-geri yükleme(8) ve yazdırır.
--fast --lines anlamına gelir.

--uzak Uzak bir makine için kurallar oluşturun. ima --noexec ve --çizgiler. Olabilir
ile birlikte --kabuk.

--ihtisas {ip|ip6}
Yalnızca belirtilen etki alanını işleyin. ferm etki alanı ise çıktı boş olabilir
giriş dosyasında yapılandırılmamış.

--def '$isim=değer'
Yapılandırma dosyasında tanımlanan bir değişkeni geçersiz kılın.

onworks.net hizmetlerini kullanarak ferm'i çevrimiçi kullanın


Ücretsiz Sunucular ve İş İstasyonları

Windows ve Linux uygulamalarını indirin

Linux komutları

Ad