pfctl untuk menambahkan aturan saat runtime TANPA mengedit /etc/pf.conf?

2

Saya memiliki aplikasi yang (saat sedang berjalan dan hanya saat sedang berjalan) perlu membuat perubahan pada packet filter ( pf) sehingga ia memblokir atau memungkinkan lalu lintas tertentu. Aturan-aturan ini harus di samping aturan pengguna sendiri di /etc/pf.conf- tetapi saya tidak ingin mengedit secara langsung /etc/pf.confkarena ini sangat mengganggu.

Saya dapat melakukan ini dengan sepele di linux menggunakan iptablesdan bahkan di windows menggunakan wfptanpa mengubah file pada-disk, dapatkah saya melakukan hal yang sama di osx pf?

Solusi hanya bekerja di yosemite(10.10) dan di atas

horseyguy
sumber
Hai, saya ingin tahu apakah Anda telah menemukan cara untuk mencapai tujuan ini sekarang ... Saya sedang berjuang dengan skenario yang sama. jika Anda melakukannya, silakan bagikan :-) terima kasih
Zohar81
@ Zohar81sure saya pikir itu keluar, lakukan ini: cat /etc/pf.conf my_rules.conf | sudo /sbin/pfctl -Ef - The -arg untuk pfctlpenyebab untuk membaca dari stdin, jadi kami hanya concat pf.conf dengan aturan kita sendiri untuk mendapatkannya untuk membaca dari kedua, tetapi untuk memastikan aturan kami diutamakan (itu sebabnya kami aturan digabungkan terakhir)
horseyguy
@ Zohar81 juga lihat jawaban saya di bawah ini
horseyguy
Mungkin Anda juga mengetahui opsi untuk mendapatkan notifikasi jika beberapa proses root lainnya memanggil pfctldengan konfigurasi berbeda yang menimpa Anda? Saya dapat melakukan pemeriksaan berkala dengan aturan yang berlaku saat ini, tetapi saya berharap dapat memperoleh pemberitahuan saat itu berubah ... ada ide bagaimana?
Zohar81

Jawaban:

2

Saya memecahkan ini sendiri.

cat /etc/pf.conf my_rules.conf | sudo /sbin/pfctl -Ef -

Di mana my_rules.confberisi aturan kita sendiri, ini mendapatkan bersambung ke pf.confaturan tetapi diutamakan karena mereka sedang ditambahkan setelah pf.confdi catperintah.

Perhatikan juga kita gunakan pfctl -Ef - dengan -kekuatan pfctluntuk membaca dari stdin

Kita dapat mengambil solusi ini selangkah lebih maju dan memuat aturan kita sendiri dari stdin dengan menggunakan ini:

echo "block out all" | cat /etc/pf.conf - | sudo /sbin/pfctl -Ef -
horseyguy
sumber