Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[SOLVED: не судьба]Не работает iptables -m owner --cmd-owner
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index Russian
View previous topic :: View next topic  
Author Message
neroot
n00b
n00b


Joined: 16 Mar 2007
Posts: 33
Location: Россия, Н.Новгород

PostPosted: Tue Aug 21, 2007 1:20 pm    Post subject: [SOLVED: не судьба]Не работает iptables -m Reply with quote

Добрый день!
Хотел добиться привязки файрволла к имени программы. Не получилось. :-(
Пример:
$IPT -N wget-allow
$IPT -F wget-allow
$IPT -A wget-allow -p tcp -m multiport --destination-port 20,21 -m owner --cmd-owner wget -j ACCEPT
$IPT -A wget-allow -p udp -m multiport --destination-port 20,21 -m owner --cmd-owner wget -j ACCEPT
Вывод:
iptables: Invalid argument
iptables: Invalid argument

Стоит:
% emerge -pav iptables gentoo-sources
[ebuild R ] net-firewall/iptables-1.3.8-r1 USE="extensions -imq -ipv6 -l7filter -static" 169 kB
[ebuild R ] sys-kernel/gentoo-sources-2.6.22-r4 USE="symlink -build" 0 kB
% gzcat /proc/config.gz | grep -i owner
CONFIG_IP_NF_MATCH_OWNER=y
CONFIG_IP6_NF_MATCH_OWNER=y

В чем я мог ошибиться?
_________________
Делай, что должен и будь, что будет.


Last edited by neroot on Wed Aug 22, 2007 11:41 am; edited 1 time in total
Back to top
View user's profile Send private message
calculator
Apprentice
Apprentice


Joined: 16 Oct 2006
Posts: 183
Location: Russia, Moscow

PostPosted: Tue Aug 21, 2007 5:26 pm    Post subject: Reply with quote

А оно в логи пишет :-)
Code:
ipt_owner: pid, sid and command matching not supported anymore
Back to top
View user's profile Send private message
neroot
n00b
n00b


Joined: 16 Mar 2007
Posts: 33
Location: Россия, Н.Новгород

PostPosted: Wed Aug 22, 2007 6:29 am    Post subject: Reply with quote

Сначала вопрос. Я что-то не нашел в своих логах такой строчки... Где нашли ее Вы?
По теме:
Я правильно понимаю, что не судьба получается?... Жаль.
С другой стороны, в моем затертом до дыр мане --owner присутствует во всех его расширениях и ни слова не увидел про то, что они это дело бросили...
И тогда другой вопрос. Чисто теоретический.
Каким механизмом связывается теперь процесс и разрешения? Чем это можно/модно делать? И где бы об этом почитать...
Заранее спасибо!
_________________
Делай, что должен и будь, что будет.
Back to top
View user's profile Send private message
calculator
Apprentice
Apprentice


Joined: 16 Oct 2006
Posts: 183
Location: Russia, Moscow

PostPosted: Wed Aug 22, 2007 8:42 am    Post subject: Reply with quote

Это сообщение сам модуль пишет - в dmesg видно.
В инете пишут что в 2.6.14 закрыли.
Back to top
View user's profile Send private message
neroot
n00b
n00b


Joined: 16 Mar 2007
Posts: 33
Location: Россия, Н.Новгород

PostPosted: Wed Aug 22, 2007 11:40 am    Post subject: Reply with quote

Ок, не судьба, так не судьба. Ладно.
Обидно, правда, такая хорошая опция - и брошена...
Жаль.
_________________
Делай, что должен и будь, что будет.
Back to top
View user's profile Send private message
calculator
Apprentice
Apprentice


Joined: 16 Oct 2006
Posts: 183
Location: Russia, Moscow

PostPosted: Tue May 06, 2008 9:30 am    Post subject: Reply with quote

Ну вот при обновлении на 2.6.25 наткрулся: "owner" match support (NETFILTER_XT_MATCH_OWNER) [N/m/?] (NEW)
Хотя нет, --cmd-owner так и не работает. --uid-owner, --gid-owner только
Back to top
View user's profile Send private message
neroot
n00b
n00b


Joined: 16 Mar 2007
Posts: 33
Location: Россия, Н.Новгород

PostPosted: Tue May 06, 2008 4:15 pm    Post subject: Reply with quote

Жаль, возможность-то, по идее, хорошая.
_________________
Делай, что должен и будь, что будет.
Back to top
View user's profile Send private message
ivan1986
n00b
n00b


Joined: 08 May 2008
Posts: 2

PostPosted: Thu May 08, 2008 8:24 pm    Post subject: Reply with quote

Вообще там довольно легко вернуть код из ядра 2.6.8 (че нашел, то и юзаю)
работало прекрастно в 18-24, сейчас скачал 25.2 - там модуль переехал в другую папку
/usr/src/linux-2.6.25.2/net/netfilter/xt_owner.c
раньше был в
/usr/src/linux-2.6.24/net/ipv4/netfilter/ipt_owner.c
и там все решалось таким патчем

Code:

--- ipt_owner.c.orig   2007-11-16 21:14:27.000000000 +0300
+++ ipt_owner.c   2007-11-18 15:40:34.000000000 +0300
@@ -21,6 +21,106 @@
 MODULE_AUTHOR("Marc Boucher <marc@mbsi.ca>");
 MODULE_DESCRIPTION("iptables owner match");
 
+static int
+match_comm(const struct sk_buff *skb, const char *comm)
+{
+   struct task_struct *g, *p;
+   struct files_struct *files;
+   int i;
+
+   read_lock(&tasklist_lock);
+   do_each_thread(g, p) {
+      if(strncmp(p->comm, comm, sizeof(p->comm)))
+         continue;
+
+      task_lock(p);
+      files = p->files;
+      if(files) {
+         spin_lock(&files->file_lock);
+         for (i=0; i < files->fdt->max_fds; i++) {
+            if (fcheck_files(files, i) ==
+                skb->sk->sk_socket->file) {
+               spin_unlock(&files->file_lock);
+               task_unlock(p);
+               read_unlock(&tasklist_lock);
+               return 1;
+            }
+         }
+         spin_unlock(&files->file_lock);
+      }
+      task_unlock(p);
+   } while_each_thread(g, p);
+   read_unlock(&tasklist_lock);
+   return 0;
+}
+
+static int
+match_pid(const struct sk_buff *skb, pid_t pid)
+{
+   struct task_struct *p;
+   struct files_struct *files;
+   int i;
+
+   read_lock(&tasklist_lock);
+   p = find_task_by_pid(pid);
+   if (!p)
+      goto out;
+   task_lock(p);
+   files = p->files;
+   if(files) {
+      spin_lock(&files->file_lock);
+      for (i=0; i < files->fdt->max_fds; i++) {
+         if (fcheck_files(files, i) ==
+             skb->sk->sk_socket->file) {
+            spin_unlock(&files->file_lock);
+            task_unlock(p);
+            read_unlock(&tasklist_lock);
+            return 1;
+         }
+      }
+      spin_unlock(&files->file_lock);
+   }
+   task_unlock(p);
+out:
+   read_unlock(&tasklist_lock);
+   return 0;
+}
+
+static int
+match_sid(const struct sk_buff *skb, pid_t sid)
+{
+   struct task_struct *g, *p;
+   struct file *file = skb->sk->sk_socket->file;
+   int i, found=0;
+
+   read_lock(&tasklist_lock);
+   do_each_thread(g, p) {
+      struct files_struct *files;
+      if (p->signal->session != sid)
+         continue;
+
+      task_lock(p);
+      files = p->files;
+      if (files) {
+         spin_lock(&files->file_lock);
+         for (i=0; i < files->fdt->max_fds; i++) {
+            if (fcheck_files(files, i) == file) {
+               found = 1;
+               break;
+            }
+         }
+         spin_unlock(&files->file_lock);
+      }
+      task_unlock(p);
+      if (found)
+         goto out;
+   } while_each_thread(g, p);
+out:
+   read_unlock(&tasklist_lock);
+
+   return found;
+}
+
 static bool
 match(const struct sk_buff *skb,
       const struct net_device *in,
@@ -48,6 +148,24 @@
          return false;
    }
 
+   if(info->match & IPT_OWNER_PID) {
+      if (!match_pid(skb, info->pid) ^
+          !!(info->invert & IPT_OWNER_PID))
+         return false;
+   }
+
+   if(info->match & IPT_OWNER_SID) {
+      if (!match_sid(skb, info->sid) ^
+          !!(info->invert & IPT_OWNER_SID))
+         return false;
+   }
+
+   if(info->match & IPT_OWNER_COMM) {
+      if (!match_comm(skb, info->comm) ^
+          !!(info->invert & IPT_OWNER_COMM))
+         return false;
+   }
+
    return true;
 }
 
@@ -60,11 +178,21 @@
 {
    const struct ipt_owner_info *info = matchinfo;
 
+   if (hook_mask
+       & ~((1 << NF_IP_LOCAL_OUT) | (1 << NF_IP_POST_ROUTING))) {
+      printk("ipt_owner: only valid for LOCAL_OUT or POST_ROUTING.\n");
+      return false;
+   }
+
+#ifdef CONFIG_SMP
+   /* files->file_lock can not be used in a BH */
    if (info->match & (IPT_OWNER_PID|IPT_OWNER_SID|IPT_OWNER_COMM)) {
-      printk("ipt_owner: pid, sid and command matching "
-             "not supported anymore\n");
+      printk("ipt_owner: pid, sid and command matching is broken "
+             "on SMP.\n");
       return false;
    }
+#endif
+
    return true;
 }
 


Сейчас конечно попробую собрать новое ядро после шаманств с новым файлом.
Такой вопрос, как мне пнуть разработчика по этому вопросу.
Хелп мне плиз с этим - а то как-то не хочется с каждым новым изменением плясать с бубном, тем более не понятно, чего они функционал выкинули - все пашет... У меня это правило юзается для торрентов - хоть бы один глюк...
Back to top
View user's profile Send private message
ivan1986
n00b
n00b


Joined: 08 May 2008
Posts: 2

PostPosted: Thu May 08, 2008 8:27 pm    Post subject: Reply with quote

Новое соберу без #ifdef CONFIG_SMP - так как потестить бы...
Back to top
View user's profile Send private message
_Sir_
Guru
Guru


Joined: 17 Jan 2005
Posts: 337
Location: Russia, Togliatti

PostPosted: Wed May 21, 2008 11:20 am    Post subject: Reply with quote

ivan1986 wrote:
тем более не понятно, чего они функционал выкинули
Вот об этом и спроси в рассылке по netfilter
_________________
(Sir) * Life is placeholder for Love *
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Russian All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum