Документация по ОС FreeBSD Пятница, 03.05.2024, 15:08
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Apache [58]
DNS [25]
FTP [27]
Mail [74]
Samba [24]
Squid [46]
SSH [23]
VPN [35]
РРР [20]
Net [173]

Главная » Статьи » Сеть » FTP

Ограничение доступа на сервере proftpd при помощи mod_wrap
Модуль 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 можно прочитать на
Категория: FTP | Добавил: oleg (13.11.2007)
Просмотров: 1261 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2024