[BSD] pf tabla modositasa on-the-fly2

Tátrai József tatrai at mail.vhf.hu
2004. Aug. 11., Sze, 16:19:29 CEST


Udv Mindenkinek!

Julisuban volt egy kerdesem,
(http://www.hu.freebsd.org/hu/arch/2004/Jul/1748.html)
hogy hogyan lehet a pf tablaiba elemet beszurni/torolni securelvele 2-n
vagy 3-on, mer ta doksi azt irja, hogy lehet, ugyanakkor megsem muxik
nalam.

Namost akkor le lettem hurrogva, hogy miert akarok en securelevel alatt
barmit tenni, mikor a securelevel man-ban szerepel, hogy:

pfctl(8) may no longer alter filter or nat rules

Namost mivel azert engem kicsit meg foglalkoztatott a dolog, ugy
dontottem, hogy teszek meg egy probat a fejlesztoknel is, ha mar itt ilyen
nagy sikerrel jartam...

Mar az elso levelvaltasbol kiderult, hogy ez egy sima bug, amit ki akartak
javitani, de aztan megis bentfelejtettek veletlenul. Szo szot kovetett,
mire vegul is megjott ket patch, amit rahuzva a
http://pf4freebsd.love2party.net/ cimrol letoltheto pf 2.03 source-ra,
tokeletesen megoldodik ez a problema: securelevel2-n es 3-on is _lehet_ uj
Ip cimet bevinni es torolni, de _nem_ lehet uj tablat letrehozni, tehat
ebbol nem lehet biztonsagi problema. (csak felelevenites gyanant:
securelevel _nelkul_ ugy mukodne a dolog, hogyha nincs letrehozva a tabla,
es ugy akarnank bele "uj" ip cimet beleirni, akkor letre is hozna. Ezzel
szepen tul lehetne terhelni a gepet, de szerencsere securelevel alatt ez
nem megy, csak a letezo tablaba az add).

Bevagom ide a patch-eket, hasznalja, akinek szuksege van ra mar most
esetleg, de a kovetkezo uj verzioban ugyis benne lesz mar.

eFeS

--------------------------------------------------------------
1. pfctl.patch

--- pfctl/pfctl_table.c.orig    Thu Jun 17 08:39:31 2004
+++ pfctl/pfctl_table.c Wed Aug 11 11:53:27 2004
@@ -88,7 +88,13 @@

 #define CREATE_TABLE do {                                              \
                table.pfrt_flags |= PFR_TFLAG_PERSIST;                  \
-               RVTEST(pfr_add_tables(&table, 1, &nadd, flags));        \
+               if ((!(opts & PF_OPT_NOACTION) ||                       \
+                   (opts & PF_OPT_DUMMYACTION)) &&                     \
+                   (pfr_add_tables(&table, 1, &nadd, flags)) &&        \
+                   (errno != EPERM)) {                                 \
+                       radix_perror();                                 \
+                       goto _error;                                    \
+               }                                                       \
                if (nadd) {                                             \
                        warn_namespace_collision(table.pfrt_name);      \
                        xprintf(opts, "%d table created", nadd);        \




2. pf_ioctl.patch

--- pf/pf_ioctl.c.orig  Fri Jun 18 01:59:47 2004
+++ pf/pf_ioctl.c       Wed Aug 11 12:00:41 2004
@@ -66,6 +66,7 @@
 #ifdef __FreeBSD__
 #include <sys/module.h>
 #include <sys/conf.h>
+#include <sys/proc.h>
 #else
 #include <sys/timeout.h>
 #include <sys/pool.h>
@@ -979,7 +980,11 @@
        int                      error = 0;

        /* XXX keep in sync with switch() below */
+#ifdef __FreeBSD__
+       if (securelevel_gt(td->td_ucred, 1))
+#else
        if (securelevel > 1)
+#endif
                switch (cmd) {
                case DIOCGETRULES:
                case DIOCGETRULE:
@@ -1503,7 +1508,8 @@







További információk a(z) BSD levelezőlistáról