| |||||||||||||||||||||
Ключевые слова: ftp, access, limit, (найти похожие документы)
From: Sergey Velikanov Newsgroups: email Date: Mon, 15 Jul 2004 18:21:07 +0000 (UTC) Subject: Ограничение доступа на сервере proftpd при помощи mod_wrap Помощь по установке модуля mod_wrap для ftp сервера proftpd для FreeBSD Модуль mod_wrap позволяет гибко ограничивать доступ клиентов к ftp серверу в зависимости от их ip адреса или имени хоста. Правила могут храниться как в файлах (mod_wrap_file) так и в базе данных. (mod_wrap_sql) Передо мной стояла следующая задача, ограничить доступ клиентов только с ip адресов провайдера, в тоже время в зависимости от логина пускать некоторых клиентов с произвольных ip адресов Установка: ---------- Скачиваем модуль mod_wrap (http://www.castaglia.org/proftpd/modules/proftpd-mod-wrap-2.0.2.tar.gz) После распаковки, необходимо запустить cd mod_wrap-2.0rc1 ./configure После этого копируем mod_wrap.h и все файлы с расширением .c в папку proftpd-dir/contrib/ ( по умолчанию во freebsd это будет /usr/ports/ftp/proftpd/work/proftpd-1.2.9/contrib если не переопределена переменная окружения WRKDIRPREFIX) После этого переходим в директорию /usr/ports/ftp/proftpd и собираем proftpd c поддержкой mod_wrap и SQL make -DWITH_MYSQL --with-modules=mod_wrap:mod_wrap_file:mod_wrap_sql install Проверяем что proftpd собрался с поддержкой mod_wrap /usr/local/libexec/proftpd -l Compiled-in modules: mod_core.c mod_xfer.c mod_auth_unix.c mod_auth_file.c mod_auth.c mod_ls.c mod_log.c mod_site.c mod_auth_pam.c mod_ratio.c mod_readme.c mod_wrap.c mod_wrap_sql.c mod_wrap_file.c mod_ifsession.c mod_sql.c mod_sql_mysql.c После этого добавляем след строчки в конфиг (/usr/local/etc/proftpd.conf) ------------------------------------ #Настройка подключения к sql базе SQLConnectInfo proftpd@localhost:3306 xxx xxx #Настройка mod_wrap WrapEngine on WrapAllowMsg "User '%u' allowed by access rules" WrapDenyMsg "User '%u' denied by access rules" WrapLog /var/log/proftpd.wrap.log #Описания запросов к sql базе SQLNamedQuery get-allowed-clients SELECT "allowed FROM wrapallow WHERE name = '%{0}'" SQLNamedQuery get-denied-clients SELECT "denied FROM wrapdeny WHERE name = '%{0}' or name = 'ALL'" #Директива WrapUserTables предназначена для ограничений по пользователям, существуют также #директивы WrapGroupTables и WrapTables соответственно для ограничений по группам и ограничений для всех. #Хотя в документации и показано что можно опускать имя пользователя в директиве WrapUserTables на #самом деле это не так, поэтому я добавил !unknown что означает применять данные ограничения для всех пользователей #кроме пользователя unknown которого не существует на самом деле :) WrapUserTables !unknown sql:/get-allowed-clients sql:/get-denied-clients ------------------------------------ После этого создаем две таблицы в SQL базе Allow table: CREATE TABLE wrapallow ( name VARCHAR(30), allowed VARCHAR(255) NOT NULL ); Deny table: CREATE TABLE wrapdeny ( name VARCHAR(30), denied VARCHAR(255) NOT NULL ); Добавляем записи в таблицы INSERT INTO `wrapdeny` ( `name` , `denied` ) VALUES ('ALL', 'ALL EXCEPT 10.0.'); # Слово ALL означает что это выражения для всех пользователей, # ALL EXCEPT 10.0. означает что запретить доступ для всех кроме клиентов # с ip адресом 10.0.*.* INSERT INTO `wrapallow` ( `name` , `allowed` ) VALUES ('vgray', '172.16.102.'); #Разрешить пользователю vgray доступ с сети 10.0.102.* Более подробно о выражениях которые могут стоять в полях denied и allowed можно прочитать на http://www.castaglia.org/proftpd/modules/mod_wrap-2.0.html
| |||||||||||||||||||||
|
|
|