LINUX.ORG.RU
ФорумAdmin

ip_geoip в 2.6.18, iptables 1.4.3.2


0

0

Коллеги, прошу совета. Выполняю установку модуля ip_geoip без перекомпиляции ядра. В частности на машине с Centos 5.2 (Linux 2.6.18-92.el5 x86_64 GNU/Linux) пытаюсь скомпилировать модуль ip_geoip.

по аналогии с вот таким руководством (http://www1.opennet.ru/base/net/connlimit_fedora.txt.html) установил сорцы ядра, скачал установил сорцы iptables (из src.rpm). из patch-o-matic доложил файлов про geoip. Запинал его чтобы оно скомпилировалось. Модуль в ядро загрузил (insmod)

# lsmod|grep geoip
xt_geoip               36616  0
x_tables               50377  16 ipt_SET,ipt_set,xt_geoip,ipt_connlimit,ipt_REDIRECT,iptable_nat,ipt_recent,ipt_owner,xt_conntrack,ipt_LOG,xt_limit,xt_multiport,ipt_REJECT,xt_state,xt_tcpudp,ip_tables
, а модуль в iptables запускаться не хочет
# iptables -m geoip --help
/lib64/xtables/libxt_geoip.so: /lib64/xtables/libxt_geoip.so: undefined symbol: exit_error
iptables v1.4.3.2: Couldn't load match `geoip':/lib64/xtables/libipt_geoip.so: cannot open shared object file: No such file or directory

Вопросов два 1. Почему оно пытается найти libipt, если уже есть libxt? Правильно я понимаю, что это реакция на невозможность загрузки libxt?

2. Как подсунуть ему exit_error функцию? Судя по сорцам, эта функция определена в ipset (собственно, ради этого ipset и поставил)

[/usr/src/ipset-3.2]# grep -r exit_error *|grep void
ipset.c:void exit_error(int status, const char *msg, ...)
ipset.h:extern void exit_error(int status, const char *msg, ...);
Но почему-то оно это определение не подхватывает. Вызовы depmod -a, ldconfig не помогают.

ну и в догонку

[/usr/src/iptables/extensions]# make libxt_geoip.so
  CC       libxt_geoip.oo
libxt_geoip.c:70: предупреждение: прототип для 'get_country_subnets' не был предварительно определен
libxt_geoip.c: In function 'get_country_subnets':
libxt_geoip.c:73: предупреждение: декларация 'index' перекрывает глобальную декларирацию
/usr/include/string.h:304: предупреждение: перекрытая декларация находится здесь
libxt_geoip.c:84: предупреждение: implicit declaration of function 'exit_error'
libxt_geoip.c:92: предупреждение: результат 'fread', декларированной с атрибутом warn_unused_result, игнорируется
libxt_geoip.c:111: предупреждение: результат 'fread', декларированной с атрибутом warn_unused_result, игнорируется
libxt_geoip.c:118: предупреждение: результат 'fread', декларированной с атрибутом warn_unused_result, игнорируется
libxt_geoip.c:126: предупреждение: результат 'fread', декларированной с атрибутом warn_unused_result, игнорируется
  CCLD     libxt_geoip.so

iogan18tm
() автор топика

Я аналогично пытался скомпилировать на центосе 5.3 дополнительные критерии для iptables (уже не помню что мне точно было нужно, накатил весь patch-o-matic, кроме TARPIT, который там уже есть). Послали меня в тех же выражениях, что и вас :) С бубном прыгал долго. Не помогло.

В результате я еще более утвердился во мнении, что самый лучший iptables - в debian testing + xtables-addons.

Но если у вас все-таки что-то получится - поделитесь опытом плз.

nnz ★★★★
()
Ответ на: комментарий от nnz

В общем, заборолося. Нашел доп. ссылки в сети про это 1, 2, 3

После чего сделал patch к patchlet geoip в patch-o-matic-ng-20090827 (http://iogan18tm.pastebin.com/f112e6b29). В принципе, из него видно следующее

  • вместо exit_error в модулях xt надо юзать xtables_error
  • вместо IPTABLES_VERSION - юзать XTABLES_VERSION
  • ну и там по мелочи - вынес в заголовки функцию get_country_subnets
  • include stdarg - это лишнее. ненужно совсем.

После этого iptables скомпилился нормально, я его установил (на iptables-1.3.5 работать не будет ибо там xtables как бэ нет), ну и по крайней мере

iptables -m geoip --help
отработал без ошибок. Что там дальше - вопрос открытый. Посмотрю до выходных.

iogan18tm
() автор топика
Ответ на: комментарий от iogan18tm

Как оказалось, libipt_connlimit вообще перестал работать. Причем в самом неожиданном месте -

struct ipt_connlimit_info *liminfo = (struct ipt_connlimit_info*)(*match)->data;
Дает segmentation fault. Думаю как победить.

iogan18tm
() автор топика
Ответ на: комментарий от iogan18tm

В общем, все довольно просто оказалось - несоответствовали определения функций для вызова из xtables_match. Сделал патч для libipt_connlimit.c http://iogan18tm.pastebin.com/f81c63ba

iogan18tm
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.