Вобщем наконец-то мне удалось реализовать давнишнюю мечту.
Насколько я помню на форуме этот вопрос обсуждался, но решения не было. Приведу подробно.
Условия:
Роутер Premium.
Прошивка от Олега последняя.
Подключённый диск с смотрированными разделами.
Интернет через vpn.
Очень много пиринговых ресурсов (чтобы были доступны прописываются маршруты).
Задача.
Установить FTP сервер с так называемой per-IP конфигурацией.
То есть чтобы из пиринга и внутренней подсети был анонимный доступ, а из интернета доступ только по логину и паролю.
Решение.
В силу того что с линуксом познакомился только благодаря этой белой коробочки покидала меня судьба по документациям нехило. Дошло аж дело до сборки xinetd с tcp_wrappers. Но как оказалось всё намнооого проще
В качестве ftp сервера я выбрал vsftpd (не знаю почему).
Чтобы реализовать заданную задачу необходимо, чтобы данный демон работал через супер демон xinetd - то есть по сути устанавиливаем и его.
Смысл в следующем.
Доступ из пиринга и локалки будет по стандартному 21 порту, соответственно xinetd мониторит 21 порт и если кто-нить ломится по нему то запускает vsftpd со специальным конфигурационным файлом для анонимного доступа.
Доступ из интернета идёт по 2120 порту, xinetd делает всё тоже самое, но только используется другой конфигуационный файлик для запуска svftpd.
Теперь по конфигурациям.
xinetd
/opt/etc/xinetd.conf - тут представлена только дефолтная конфигурация:
Code:
defaults
{
#only_from = localhost 192.168.1.0/24
instances = 20
log_type = FILE /tmp/harddisk/allinone/logs/xinetd.log
log_on_success = PID HOST EXIT DURATION
log_on_failure = HOST
cps = 25 30
}
includedir /opt/etc/xinetd.d #в данную папку xinetd будет смотреть на предмет конфигураций сервисов
Далее в дирректории /opt/etc/xinetd.d лежит 2 файла, которые описывают конфигуарацию запуска сервиса ftp в зависимости от интерфейса, по которому происходит коннект:
/opt/etc/xinetd.d/ftp-from-local
Code:
service ftp
{
id = vsftpd_local #идентификатор данного сервиса - отображается в логах и если xinetd запущен в режиме дебагинга xinetd -d
disable = no
socket_type = stream
user = root #замените на своего пользователя
server = /opt/sbin/vsftpd
server_args = /opt/etc/vsftpd_from_local.conf #конфиг файл для запуска vsftpd с настройками для пользователей из локальной сети и пиринга (анонимный ftp сервер)
wait = no
nice = 15
instances = 5
interface = 172.26.14.47 #ip адрес интерфеса с которого идёт коннект
}
Далее поинтереснее, конфигуация для интернета
/opt/etc/xinetd.d/ftp-from-inet
Когда в конфигурационный файлах описывается сервис xinetd автоматом смотрит в файлик /etc/services на наличие этого сервиса в списке зарегистрированных, и автоматом берёт указанный там, соответственно если мы сделаем ещё один сервис ftp и укажем другой порт, xinetd будет ругаться. Обойдём этот момент следующим образом.
Code:
service vsftp
{
id = vsftpd_inet
type = unlisted #указывает что сервис незарегистрированный (или что-то типа этого)
protocol = tcp
port = 2120
disable = no
socket_type = stream
user = grendaizer
server = /opt/sbin/vsftpd
server_args = /opt/etc/vsftpd_from_inet.conf # конфигурация для запуска vsftpd с настройками для коннекта из интернета
wait = no
nice = 10
instances = 5
interface = 89.111.111.111 #ip адрес интерфейса, в моём случае ppp0.
}
Ну и соответственно обязательно снаружи открыть порт 21 и 2120 в post-firewall.
Code:
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 2120 -j ACCEPT
Ну вот в принципе и всё.
Каким образом установить и настроить vsftpd на форуме описано довольно развёрнуто. Только на формуе соответственно написано как его настроить в standalone конфигурации.
Буду рад если данная информация будет кому-то полезна, так как по себе знаю, что начинать разбираться с незнакомой системой очень сложно и требует очень много сил и времени.