Özet
pfctl [-AdeglhmNnOqRrvz] [-a anchor] [-D macro=value] [-F modifier] [-f file] [-i interface]
[-K host | network] [-k host | network] [-o level] [-p device] [-s modifier] [-t table
-T command [address ...]] [-x level]
Açıklama
pfctl aracı, paket filtresi aygıtı ile iletişim kurar. Paket filtresinden kural kümesi ve parametre yapılandırmasına ve durum bilgilerinin alınmasına olanak tanır.
Paket filtreleme, pf.conf(5) içinde açıklandığı gibi filtre kurallarına dayanarak ana bilgisayara giren veya çıkan ağ arayüzlerinden geçen paket türlerini kısıtlar. Paket filtresi, paketlerin adreslerini ve bağlantı noktalarını (port) da değiştirebilir. Giden paketlerin kaynak adreslerini ve bağlantı noktalarını değiştirmeye NAT (Ağ Adresi Çevirisi) denir ve tüm dış ana bilgisayarlara yapılan bağlantıların ağ geçidinden geliyormuş gibi görünmesini sağlayarak dahili bir ağı (genellikle ayrılmış adres alanı) harici bir ağa (İnternet) bağlamak için kullanılır. Gelen paketlerin hedef adreslerini ve bağlantı noktalarını değiştirmek, bağlantıları farklı ana bilgisayarlara ve/veya bağlantı noktalarına yönlendirmek için kullanılır. Her iki çevirinin birleşimi olan çift yönlü NAT da desteklenmektedir. Çeviri kuralları pf.conf(5) içinde açıklanmıştır.
Paket filtresi arayüzler arasında paketleri kendiliğinden iletmez. İletim, net.inet.ip.forwarding ve/veya net.inet6.ip6.forwarding sysctl(8) değişkenleri 1 olarak ayarlanarak etkinleştirilebilir. Bunları sysctl.conf(5) içinde kalıcı olarak ayarlayın.
pfctl aracı birkaç komut sağlar. Seçenekler aşağıdaki gibidir:
-A: Yalnızca kural dosyasında bulunan kuyruk (queue) kurallarını yükler. Diğer kurallar ve seçenekler yoksayılır.
-a anchor -f, -F ve -s bayraklarını yalnızca belirtilen anchor içindeki kurallara uygular. pfctl, ana kural kümesine ek olarak, anchor adı verilen ek kural kümelerini adlarına göre yükleyebilir ve işleyebilir. Ana kural kümesi varsayılan anchor'dır.
Anchor'lara adlarıyla başvurulur ve dosya sistemi hiyerarşilerinin düzenine benzer şekilde, anchor yolunun çeşitli bileşenleri ‘/’ karakterleriyle ayrılacak şekilde iç içe yerleştirilebilirler. Anchor yolunun son bileşeni, kural kümesi işlemlerinin gerçekleştirildiği yerdir.
Ana kural kümesinden anchor kurallarının değerlendirilmesi pf.conf(5) içinde açıklanmıştır.
Özel tablolar da, ya anchor içine yüklenen pf.conf(5) dosyasında tablo ifadeleri bulundurularak ya da aşağıdaki gibi normal tablo komutları kullanılarak anchor'ların içine yerleştirilebilir:
pfctl -a foo/bar -t mytable -T add 1.2.3.4 5.6.7.8
Bir tabloya başvuran bir kural bir anchor içine yüklendiğinde, kural eğer tanımlanmışsa özel tabloyu kullanır ve ardından eğer varsa ana kural kümesinde tanımlanan tabloya geri döner. Bu, değişken kapsamı için geçerli olan C kurallarına benzer. Genel (global) kural kümesinde ve bir anchor içinde aynı ada sahip farklı tablolar oluşturmak mümkündür, ancak bu genellikle kötü bir tasarımdır ve bu durumda bir uyarı verilir.
Varsayılan olarak, anchor'ların özyinelemeli (recursive) satır içi yazdırılması yalnızca kural kümesinde satır içi belirtilen adsız anchor'lar için geçerlidir. Anchor adı bir ‘*’ karakteri ile sonlandırılırsa, -s bayrağı süslü parantezlerle sınırlandırılmış bir bloktaki tüm anchor'ları özyinelemeli olarak yazdırır. Örneğin, aşağıdakiler “authpf” kural kümesini özyinelemeli olarak yazdıracaktır:
pfctl -a 'authpf/*' -sr
Ana kural kümesini özyinelemeli olarak yazdırmak için anchor adı olarak yalnızca ‘*’ belirtin:
pfctl -a '*' -sr
-D makro=değer Komut satırında değer atanacak makroyu tanımlar. Kural kümesindeki makro tanımını geçersiz kılar.
-d: Paket filtresini devre dışı bırakır.
-X belirteç Geçirilen belirteç tarafından temsil edilen pf etkinleştirme referansını serbest bırakır.
-e: Paket filtresini etkinleştirir.-E: Paket filtresini etkinleştirir ve pf etkinleştirme referans sayısını artırır.
-F değiştirici Değiştirici tarafından belirtilen filtre parametrelerini temizler (kısaltılabilir):
-F nat: NAT kurallarını temizler.-F queue: Kuyruk kurallarını temizler.-F rules: Filtre kurallarını temizler.-F states: Durum tablosunu (NAT ve filtre) temizler.-F Sources: Kaynak izleme tablosunu temizler.-F info: Filtre bilgilerini (kurallara bağlı olmayan istatistikler) temizler.-F Tables: Tabloları temizler.-F osfp: Pasif işletim sistemi parmak izlerini temizler.-F all: Yukarıdakilerin tümünü temizler.
-f dosya Dosyada bulunan kuralları yükler. Bu dosya makrolar, tablolar, seçenekler ve normalleştirme, kuyruğa alma, çeviri ve filtreleme kuralları içerebilir. Makrolar ve tablolar hariç olmak üzere, ifadeler bu sırayla görünmelidir. Bu seçeneğin kullanılması, başlangıçta sistem tarafından eklenen ana kural kümesinde bulunan kuralların temizlenmesine neden olabilir. Daha fazla ayrıntı için /etc/pf.conf dosyasına bakın.
-g: Hata ayıklama için yararlı çıktılar ekler.-h: Yardım.
-i arayüz İşlemi belirtilen arayüzle sınırlandırır.
-K ana_bilgisayar | ağ Belirtilen ana bilgisayardan veya ağdan kaynaklanan tüm kaynak izleme girişlerini sonlandırır. İkinci bir -K ana_bilgisayar veya -K ağ seçeneği belirtilebilir, bu da birinci ana bilgisayardan/ağdan ikinciye giden tüm kaynak izleme girişlerini sonlandırır.
-k ana_bilgisayar | ağ Belirtilen ana bilgisayardan veya ağdan kaynaklanan tüm durum girişlerini sonlandırır. İkinci bir -k ana_bilgisayar veya -k ağ seçeneği belirtilebilir, bu da birinci ana bilgisayardan/ağdan ikinciye giden tüm durum girişlerini sonlandırır. Örneğin, “host” kaynaklı tüm durum girişlerini sonlandırmak için:
pfctl -k host
“host1” bilgisayarından “host2” bilgisayarına giden tüm durum girişlerini sonlandırmak için:
pfctl -k host1 -k host2
192.168.1.0/24 ağından 172.16.0.0/16 ağına giden tüm durumları sonlandırmak için:
pfctl -k 192.168.1.0/24 -k 172.16.0.0/16
Joker karakter olarak 0 değerinde bir ağ öneki uzunluğu kullanılabilir. Hedefi “host2” olan tüm durumları sonlandırmak için:
pfctl -k 0.0.0.0/0 -k host2
-l: getprotobynumber(3) yerine yerel bir protokol veritabanı kullanır.-m: Atlananları sıfırlamadan açıkça verilen seçenekleri birleştirir. Diğerlerini bozmadan tekil seçeneklerin değiştirilmesine olanak tanır:
echo "set loginterface fxp0" | pfctl -mf -
-M: Kural görüntülenirken bağlantı noktasından (port) ada çeviriyi etkinleştirir.-N: Yalnızca kural dosyasında bulunan NAT kurallarını yükler. Diğer kurallar ve seçenekler yoksayılır.-n: Kuralları gerçekten yüklemez, sadece ayrıştırır.-O: Yalnızca kural dosyasında bulunan seçenekleri yükler. Diğer kurallar ve seçenekler yoksayılır.
-o seviye Kural dosyasındaki tüm ayarları geçersiz kılarak kural kümesi iyileştiricisini (optimizer) denetler.
-o none: Kural kümesi iyileştiricisini devre dışı bırakır.-o basic: Temel kural kümesi iyileştirmelerini etkinleştirir. Varsayılan davranış budur.-o profile: Profil oluşturma ile birlikte temel kural kümesi iyileştirmelerini etkinleştirir. Kural kümesi iyileştiricisi hakkında daha fazla bilgi için pf.conf(5) dosyasına bakın.
-p aygıt Varsayılan /dev/pf yerine belirtilen aygıt dosyasını kullanır.
-q: Yalnızca hataları ve uyarıları yazdırır.-R: Yalnızca kural dosyasında bulunan filtre kurallarını yükler. Diğer kurallar ve seçenekler yoksayılır.-r: Durumları görüntülerken bunlar üzerinde ters DNS aramaları gerçekleştirir.
-s değiştirici Değiştirici tarafından belirtilen filtre parametrelerini gösterir (kısaltılabilir):
-s nat: Şu anda yüklü olan NAT kurallarını gösterir.-s queue: Şu anda yüklü olan kuyruk kurallarını gösterir.-vile birlikte kullanıldığında, kuyruk başına istatistikler de gösterilir.-v -vile birlikte kullanıldığında,pfctldöngüye girer ve ölçülen bant genişliği ile saniyedeki paket sayısı dahil olmak üzere güncellenmiş kuyruk istatistiklerini her beş saniyede bir gösterir.-s rules: Şu anda yüklü olan filtre kurallarını gösterir.-vile birlikte kullanıldığında, kural başına istatistikler de (değerlendirme sayısı, paketler ve baytlar) gösterilir. Çekirdek (kernel) tarafından otomatik olarak gerçekleştirilen “skip step” (adımı atla) iyileştirmesinin, mümkün olan durumlarda kuralların değerlendirilmesini atlayacağını unutmayın. Durumsal (stateful) olarak geçirilen paketler, durumu oluşturan kuralda sayılır (tüm bağlantı için kural birden fazla kez değerlendirilmemiş olsa bile).-s Anchors: Doğrudan ana kural kümesine bağlı olan şu anda yüklü anchor'ları gösterir.-a anchorda belirtilmişse, bunun yerine verilen anchor'ın hemen altında yüklü olan anchor'lar gösterilir.-vbelirtilirse, hedef anchor'ın altına bağlı tüm anchor'lar özyinelemeli olarak görüntülenir.-s states: Durum tablosunun içeriğini gösterir.-s Sources: Kaynak izleme tablosunun içeriğini gösterir.-s info: Filtre bilgilerini (istatistikler ve sayaçlar) gösterir.-vile birlikte kullanıldığında, kaynak izleme istatistikleri de gösterilir.-s References: pf etkinleştirme referans istatistiklerini (etkinleştirenin pid/adı, belirteç, zaman damgası) gösterir.-s labels: Muhasebe (accounting) için yararlı olan, etiketli filtre kurallarının kural başına istatistiklerini (etiket, değerlendirmeler, toplam paket, toplam bayt, gelen paketler, gelen baytlar, giden paketler, giden baytlar) gösterir.-s timeouts: Mevcut genel zaman aşımlarını (timeouts) gösterir.-s memory: Mevcut havuz belleği sert sınırlarını (hard limits) gösterir.-s Tables: Tabloların listesini gösterir.-s osfp: İşletim sistemi parmak izlerinin listesini gösterir.-s Interfaces: PF için mevcut arayüzlerin ve arayüz sürücülerinin listesini gösterir.-vile birlikte kullanıldığında, ek olarak hangi arayüzlerde geçiş (skip) kurallarının etkinleştirildiğini listeler.-vvile birlikte kullanıldığında arayüz istatistikleri de gösterilir. Arayüz veya arayüz grubunu seçmek için-ikullanılabilir.-s all: Arayüz listeleri ve işletim sistemi parmak izleri hariç olmak üzere yukarıdakilerin tümünü gösterir.
-T komut [adres ...] Tabloya uygulanacak komutu (kısaltılabilir) belirtir. Komutlar şunları içerir:
-T kill: Bir tabloyu sonlandırır.-T flush: Bir tablonun tüm adreslerini temizler.-T add: Bir tabloya bir veya daha fazla adres ekler. Mevcut olmayan bir tabloyu otomatik olarak oluşturur.-T delete: Bir tablodan bir veya daha fazla adresi siler. -T expire sayı İstatistikleri sayı saniyeden daha uzun süre önce temizlenmiş olan adresleri siler. İstatistikleri hiç temizlenmemiş girişler için sayı, bu girişlerin tabloya eklendiği zamanı ifade eder.-T replace: Tablonun adreslerini değiştirir. Mevcut olmayan bir tabloyu otomatik olarak oluşturur.-T show: Bir tablonun içeriğini (adreslerini) gösterir.-T test: Verilen adreslerin bir tabloyla eşleşip eşleşmediğini test eder.-T zero: Bir tablonun tüm istatistiklerini temizler.-T load: Yalnızca pf.conf(5) dosyasındaki tablo tanımlarını yükler. Bu, aşağıdaki gibi-fbayrağı ile birlikte kullanılır:
pfctl -Tl -f pf.conf
add, delete, replace ve test komutları için adres listesi doğrudan komut satırında ve/veya -f bayrağı kullanılarak biçimlendirilmemiş bir metin dosyasında belirtilebilir. Metin dosyasında ‘#’ ile başlayan yorumlara izin verilir. Bu komutlarla birlikte -v bayrağı da bir veya iki kez kullanılabilir; bu durumda pfctl, her bir adres için işlemin ayrıntılı sonucunu aşağıdaki harflerden biriyle önekleyerek yazdırır:
A Adres/ağ eklendi. C Adres/ağ değiştirildi (tersine çevrildi). D Adres/ağ silindi. M Adres eşleşiyor (yalnızca test işlemi). X Adres/ağ yinelenmiş olduğundan yoksayıldı. Y Çelişen ‘!’ öznitelikleri nedeniyle adres/ağ eklenemez/silinemez. Z Adres/ağ temizlendi (istatistikler).
Her tablo, pfctl'nin -v bayrağı kullanılarak alınabilecek bir dizi sayaç barındırır. Örneğin, aşağıdaki komutlar OpenBSD FTP sunucusuna giden veya buradan gelen paketleri izleyecek geniş ölçüde açık bir güvenlik duvarı tanımlar. Aşağıdaki komutlar güvenlik duvarını yapılandırır ve FTP sunucusuna 10 ping gönderir:
printf "table { ftp.openbsd.org }\n \
pass out to
ping -qc10 ftp.openbsd.org
Artık her bir adres ve paket yönü için, tabloya başvuran kurallar tarafından geçirilen veya engellenen paket ve bayt sayısını çıktı olarak almak için tablo gösterme (show) komutunu kullanabiliriz. Mevcut muhasebenin (istatistik kaydının) başladığı zaman da “Cleared” satırında gösterilir.
pfctl -t test -vTshow
129.128.5.191 Cleared: Thu Feb 13 18:55:18 2003 In/Block: [ Packets: 0 Bytes: 0 ] In/Pass: [ Packets: 10 Bytes: 840 ] Out/Block: [ Packets: 0 Bytes: 0 ] Out/Pass: [ Packets: 10 Bytes: 840 ]
Benzer şekilde, -v değiştiricisini iki kez ve -s Tables komutunu kullanarak tablolar hakkında genel bilgileri görüntülemek mümkündür. Bu, her tablodaki adres sayısını, tabloya başvuran kural sayısını ve tüm tablo için genel paket istatistiklerini görüntüler:
pfctl -vvsTables
--a-r-: test Addresses: 1 Cleared: Thu Feb 13 18:55:18 2003 References: [ Anchors: 0 Rules: 1 ] Evaluations: [ NoMatch: 3496 Match: 1 ] In/Block: [ Packets: 0 Bytes: 0 ] In/Pass: [ Packets: 10 Bytes: 840 ] In/XPass: [ Packets: 0 Bytes: 0 ] Out/Block: [ Packets: 0 Bytes: 0 ] Out/Pass: [ Packets: 10 Bytes: 840 ] Out/XPass: [ Packets: 0 Bytes: 0 ]
Burada görebileceğimiz gibi, yalnızca bir paket (ilk ping isteği) tabloyla eşleşmiştir, ancak durumun (state) sonucu olarak geçen tüm paketler doğru bir şekilde hesaba katılmıştır (muhasebeleştirilmiştir). Tabloların veya kural kümesinin yeniden yüklenmesi paket muhasebesini hiçbir şekilde etkilemeyecektir. “Durumsal” (stateful) bir paket geçirildiğinde ancak artık tabloyla eşleşmediğinde “Pass” sayaçları yerine iki “XPass” sayacı artırılır. Bizim örneğimizde, ping(8) komutu çalışırken birisi tabloyu temizlerse (flush) bu durum gerçekleşir.
Tek bir -v ile kullanıldığında, pfctl yalnızca tablo bayraklarını ve adını içeren ilk satırı görüntüler. Bayraklar aşağıdaki gibi tanımlanır:
c pf.conf(5) dışında değiştirilemeyen sabit (constant) tablolar için.
p Hiçbir kural bunlara başvurmadığında otomatik olarak sonlandırılmayan kalıcı (persistent) tablolar için.
a Aktif tablo kümesinin bir parçası olan tablolar için. Bu bayrağa sahip olmayan tablolar aslında mevcut değildir, adres içeremezler ve yalnızca -g bayrağı verildiğinde listelenirler.
i Aktif olmayan tablo kümesinin bir parçası olan tablolar için. Bu bayrak yalnızca pf.conf(5) yüklenirken kısa bir süre görülebilir.
r Kurallar tarafından başvurulan (kullanılan) tablolar için.
h Ana kural kümesindeki bir tablo, altına bağlı anchor'lardaki aynı adlı bir veya daha fazla tablo tarafından gizlendiğinde bu bayrak ayarlanır.
-t tablo Tablonun adını belirtir.
-v: Daha ayrıntılı çıktı üretir. İkinci bir-vkullanımı, kural kümesi uyarıları da dahil olmak üzere daha da ayrıntılı çıktı üretecektir. Tablo komutları üzerindeki etkisi için önceki bölüme bakın. Üçüncü bir-vkullanımı, kuyruk istatistikleriyle ilgili ek bilgiler üretecektir.
-w bekleme Kuyruk istatistiklerini bekleme saniyelik aralıklarla gösterir.
-x seviye Hata ayıklama düzeyini (kısaltılabilir) aşağıdakilerden birine ayarlar:
-x none: Hata ayıklama iletileri oluşturmaz.-x urgent: Yalnızca ciddi hatalar için hata ayıklama iletileri oluşturur.-x misc: Çeşitli hatalar için hata ayıklama iletileri oluşturur.-x loud: Yaygın durumlar için hata ayıklama iletileri oluşturur.-z: Kural başına istatistikleri temizler.
Dosyalar
/etc/pf.conf Paket filtresi kuralları dosyası. /etc/pf.os Pasif işletim sistemi parmak izi veritabanı.
Ayrıca Bakınız
pf.conf(5), pf.os(5), sysctl.conf(5), ftp-proxy(8), sysctl(8)
Geçmiş
pfctl programı ve paket filtresi mekanizması ilk olarak OpenBSD 3.0'da ortaya çıktı.