Страница 1 из 1

Не работает mod_geoip в proftpd на FreeBSD

Добавлено: 2015-09-04 11:18:51
igyrus
Помогите пожалуйста найти проблему.
Имеется FreeBSD 10.1 и работающий proftpd (установлен из портов). Решил прикрутить mod_geoip для фильтрации доступа по странам.
Установил порт proftpd-mod_geoip. В папку /usr/local/share/GeoIP скачал и распаковал GeoIP.dat с maxmind.com.
В proftpd.conf написал

Код: Выделить всё

LoadModule mod_geoip.c
...
<Global>
...
  <IfModule mod_geoip.c>
   GeoIPEngine on
   GeoIPPolicy "deny,allow"
   GeoIPTable /usr/local/share/GeoIP/GeoIP.dat MemoryCache
   GeoIPLog /var/log/proftpd-geoip.log
   GeoIPAllowFilter CountryCode RU
  </IfModule>
<Global> block.
</Global>
Перезапустил proftpd... доступа к серверу нет.
Меняю на GeoIPEngine off - доступ есть.
Файл /var/log/proftpd-geoip.log создаётся, но ни строчки в нём не появляется.
В логах /var/log/proftpd.log и /var/log/messages ни каких ошибок proftpd и ни слова про geoip.
Пробовал вместо бинарного GeoIP.dat текстовый GeoIPCountryWhois.csv.
Пробовал оставить только
GeoIPEngine on
GeoIPPolicy "allow,deny"
и разное прочее шаманство вроде снести порты proftpd и proftpd-mod_geoip и установить proftpd-mod_geoip заново.
Результат один - доступа у ftp нет, и про geoip в логах ни слова.
Подскажите пожалуйста в какую сторону копать.
Может модуль какой ещё нужен?
Proftpd собран с

Код: Выделить всё

'--with-shared=mod_ban:mod_copy:mod_ctrls_admin:mod_deflate:mod_dnsbl:mod_dynmasq:mod_exec:mod_ifsession:mod_ifversion:mod_qos:mod_quotatab:mod_quotatab_file:mod_quotatab_radius:mod_quotatab_sql:mod_radius:mod_ratio:mod_readme:mod_rewrite:mod_sftp:mod_sftp_pam:mod_sftp_sql:mod_shaper:mod_site_misc:mod_snmp:mod_sql:mod_sql_passwd:mod_tls:mod_tls_shmcache:mod_unique_id:mod_wrap2:mod_wrap2_file:mod_wrap2_sql'
в proftpd.conf

Код: Выделить всё

LoadModule mod_sql.c
LoadModule mod_sql_mysql.c
LoadModule mod_ifsession.c
LoadModule mod_geoip.c

Не работает mod_geoip в proftpd на FreeBSD

Добавлено: 2015-09-13 17:44:37
Alex Keda
Что значит - нет доступа?
Порт не слушается, не удаётся авторизоваться? Или что?

Не работает mod_geoip в proftpd на FreeBSD

Добавлено: 2015-09-17 20:05:58
igyrus
Посмотрел повнимательнее в логах proftpd и заметил что при входящем подключении процесс форкается, начинает использовать модуль geoip, база загружается (по Trace geoip:20 пишет в лог <geoip:15>: loaded GeoIP table '/usr/local/share/GeoIP/GeoIP.dat': GEO-106FREE 20150901 Build 1 Copyright (c) 2015 MaxMind Inc All Rights Reserved (type 1) ), а затем процесс для этого соединения завершается (SIGNAL 11).

Не работает mod_geoip в proftpd на FreeBSD

Добавлено: 2015-11-05 23:00:50
igyrus
Починил.
У меня ipv6 не используется и, соответственно, proftpd был собран без его поддержки.
Я пересобрал его с поддержкой ipv6, а протокол отключил UseIPv6 off.
Помогло http://bugs.proftpd.org/show_bug.cgi?id=3976

Не работает mod_geoip в proftpd на FreeBSD

Добавлено: 2015-11-07 0:37:26
igyrus
Ещё в одну засаду влетел.
Мне понадобилось отключить проверку geoip для адресов из локалки.
Делаю всё по ProFTPD mini-HOWTO. Класс, описывающий внутреннюю сетку у меня уже был и прекрасно работал. В базу пишутся логи действий только внешних пользователей.
Пишу:

Код: Выделить всё

<Class ExtAddr>
    From !192.168.0.0/24
    From !172.22.22.0/24
    Satisfy all
</Class>

<IfClass !ExtAddr>
  GeoIPEngine off
</IfClass>

<IfClass ExtAddr>
  GeoIPEngine on
</IfClass>

<IfModule mod_geoip.c>
  GeoIPPolicy "deny,allow"
  GeoIPTable /usr/local/share/GeoIP/GeoIP.dat IndexCache UTF8
  GeoIPLog /var/log/proftpd-geoip.log
  GeoIPAllowFilter CountryCode RU
</IfModule>
Geoip перестаёт работать. Пропускаются любые адреса, в proftpd-geoip.log тишина.
Комментирую условие

Код: Выделить всё

#<IfClass ExtAddr>
  GeoIPEngine on
#</IfClass>
- geoip работает, страны фильтруются, локалка заблокирована.
Что только куда не переставлял, пока, на авось, не переставил порядок загрузки модулей.
Казалось бы вполне логично добавить новый модуль в конец списка:

Код: Выделить всё

LoadModule mod_sql.c
LoadModule mod_sql_mysql.c
LoadModule mod_ifsession.c
LoadModule mod_geoip.c
Но пока не переставил mod_geoip выше mod_ifsession, условие не работало.

Код: Выделить всё

LoadModule mod_geoip.c
LoadModule mod_sql.c
LoadModule mod_sql_mysql.c
LoadModule mod_ifsession.c
Возможно это где-то и описано, но мне не попадалось.