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/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
1160 Прочтений • [Ограничение доступа на сервере proftpd при помощи mod_wrap (ftp access limit)] [08.05.2012] [Комментариев: 0]