ситуация следующая.
есть linux-машина, на ней крутиться proftpd только для внутренней сети. Эта машина подключена к миру.
возникла необходимость:
поднять на этой машине виртуальный интерфейс, и разрешить вход по фтп на этот интерфейс, только пользователю dead не только с внутреней сети, но и ИЗ МИРА.
172.23.1.x - внутренняя сетка.
62.76.70.х - внещние (белые) ип-адреса.
62.76.70.1 - адресс физической сетевой карты в машине. (eth0)
62.76.70.210 - виртуальный ип-адресс машины, весящий на той же сетевой карте.(eth0:1)
мои действия:
делаю интерфейс:
/sbin/ifconfig eth0:1 62.76.70.210 netmask 255.255.255.252 up
вот конфиг iptables, который фильтрует, так что бы на этот фтп был доступ только своим (ДО):
-A INPUT -s 172.23.1.0/255.255.255.0 -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -s 62.76.70.0/255.255.255.0 -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -j DROPВот после, для пользователя dead:
-A INPUT -s 62.76.70.0/255.255.255.0 -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -s 62.76.70.0/255.255.255.0 -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp -d 62.76.70.210 --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -j DROPвот конфиг ProFTPd до:
ServerName "WarFTPd"
ServerType standalone
DefaultServer on
ServerIdent off
RootLogin on
Port 21
AllowForeignAddress on
Umask 022
MaxInstances 30
User ftp
Group ftp
MaxClients 30 "Too many connection"
#MaxClientsPerHosts 4 "%m clients already connect from your host, more clients can't connect!!!"
MaxLoginAttempts 3 "Too many tries to connect"
DisplayConnect /etc/proftpd/ftp_connect.msg
AllowOverride on
AllowOverwrite on
AccessDenyMsg "ATTENTION!!! ALL CONNECTIONS LOGED"
AccessGrantMsg "Now apload/download files"
DisplayGoAway "Good bye!!!"
TimeoutIdle 180
TimeoutLogin 120
TimeoutNoTransfer 360
TimeoutStalled 640
DefaultRoot / root
DefaultRoot ~
UseReverseDNS off
IdentLookups off
DenyFilter \*.*/
PathDenyFilter "(^|/)[-]"
TransferLog /var/log/proftpd/proftpd-transfer.log
SystemLog /var/log/proftpd/proftpd-error.log
ExtendedLog /var/log/proftpd/proftpd-extended.log read,write###########################################
<Directory /home/ftp>
<Limit READ WRITE>
Order allow,deny
</Limit>
</Directory>
<Directory ~/*>
AllowOverwrite on
<Limit SITE_CHGRP SITE_CHMOD>
IgnoreHidden off
Order deny,allow
................
................
</Limit>
</Directory>
<Anonymous /home/ftp>
User ftp
Group ftp
UserAlias anonymous ftp
RequireValidShell no
PathDenyFilter "(^|/)[-.]"
<Directory /home/ftp>
<Limit WRITE>
Order allow,deny
DenyAll
</Limit>
</Directory>
<Directory /home/ftp/incoming>
<Limit READ>
Order allow,deny
Allow from 62.76.70.,172.23.1.
Deny from all
</Limit>
<Limit WRITE MKD DELE RMD>
Order allow,deny
Allow from 62.76.70.,172.23.1.
Deny from all
</Limit>
</Directory>
</Anonymous>#############################################
<Global>
<Limit LOGIN>
IgnoreHidden off
Order Allow,Deny
Allow from 62.76.70.,172.23.1.
Deny from all
</Limit>
<Limit SITE_CHGRP SITE_CHMOD>
Order deny,allow
................
................
</Limit>
</Global>
вот после:<Directory /home/ftp>
<Limit READ WRITE>
Order allow,deny
</Limit>
</Directory>
<Directory ~/*>
AllowOverwrite on
<Limit SITE_CHGRP SITE_CHMOD>
IgnoreHidden off
Order deny,allow
................
AllowUser dead
................
</Limit>
</Directory>
<Anonymous /home/ftp>
User ftp
Group ftp
UserAlias anonymous ftp
RequireValidShell no
PathDenyFilter "(^|/)[-.]"
<Directory /home/ftp>
<Limit WRITE>
Order allow,deny
DenyAll
</Limit>
</Directory>
<Directory /home/ftp/incoming>
<Limit READ>
Order allow,deny
Allow from 62.76.70.,172.23.1.
Deny from all
</Limit>
<Limit WRITE MKD DELE RMD>
Order allow,deny
Allow from 62.76.70.,172.23.1.
Deny from all
</Limit>
</Directory>
</Anonymous>#############################################
<Global>
<Limit LOGIN>
IgnoreHidden off
Order Allow,Deny
Allow from 62.76.70.,172.23.1.
AllowUser dead
Deny from all
</Limit>
<Limit SITE_CHGRP SITE_CHMOD>
Order deny,allow
................
AllowUser dead
................
</Limit>
</Global>
все запускаем:
и проверяем из мира:
$ftp
$ftp> open ftp.myhost.ru (этому домену соответ)
user:dead
password:xxxxxxxxx
login OK!
ftp>ls -l
и все... и так висит намерово.
В логах вот что :
Jul 06 13:57:16 ftp.myhost.ru proftpd[9283] myhost.ru (172.23.1.99[172.23.1.99]): USER dead: Login successful.
Jul 06 13:58:17 ftp.myhost.ru proftpd[9267] myhost.ru (172.23.1.16[172.23.1.16]): FTP session closed.
то есть .. никакой ругани.
Пробовал зайти через тотал командер из мира, он висит на этапе "ENTER TO PASV MODE"
что делать ? может быть фтп сервер + виртуальный интерфейс недопустимая ситуация ?
натолкните.
заранее спасибо
1. Добавьте перед правилами
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT2. Проверьте наличие модуля
ip_conntrack_ftp
Естественно в OUTPUT тоже должны быть разрешены исходящие пакеты.
>1. Добавьте перед правилами
>iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
>
>2. Проверьте наличие модуля
>ip_conntrack_ftp
простите, не очень селен в юникс, только начинаю.
добавил "iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT" перед правилами, касающимися фтп,вот что получилось:
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -s 172.23.1.0/255.255.255.0 -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -s 62.76.70.0/255.255.255.0 -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -d 62.76.70.210 -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -j DROP
сделал iptables -F
iptables-restore /root/iptables.save
не помогло, таже картина:
# ftp ftp.myhost.ru
Connected to ftp.myhost.ru
220 ftp.myhost.ru FTP server ready
Name (ftp.myhost.ru:dead): dead
331 Password required for dead.
Password:
230 Now apload/download files
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls -al
тут висим намертво.
Как проверить наличие модуля ?
вот что мне показал lsmod:
#lsmod
Module Size Used by Not tainted
ipt_state 1304 2 (autoclean)
ip_conntrack 28776 1 (autoclean) [ipt_state]
ide-cd 32320 0 (autoclean)
cdrom 32512 0 (autoclean) [ide-cd]
iptable_filter 2504 1 (autoclean)
ip_tables 14584 2 [ipt_state iptable_filter]
iscsi_module 146668 0
autofs 12244 0 (autoclean) (unused)
eepro100 21556 2
mii 4108 0 [eepro100]
appletalk 28292 0 (autoclean)
ipx 23844 0 (autoclean)
microcode 4864 0 (autoclean)
nls_iso8859-1 3484 1 (autoclean)
nls_cp437 5116 1 (autoclean)
vfat 12268 1 (autoclean)
fat 38456 0 (autoclean) [vfat]
usb-ohci 21896 0 (unused)
usbcore 77440 1 [usb-ohci]
ext3 68832 4
jbd 51592 4 [ext3]
raid1 15660 3
aic7xxx 134868 9
sd_mod 12812 18
scsi_mod 112796 3 [iscsi_module aic7xxx sd_mod]
я так понял, что этого модуля среди них нет.Тогда можно ссылку на доку, о том, как его вкомпилить?
на оутпут стоит ACCEPT по дефолту.
>сделал iptables -F
Этим Вы удалили все правила. Покажите iptables -nvL>я так понял, что этого модуля среди них нет.Тогда можно ссылку на
>доку, о том, как его вкомпилить?
modprobe ip_conntrack_ftp
>>сделал iptables -F
>Этим Вы удалили все правила. Покажите iptables -nvL
>
>>я так понял, что этого модуля среди них нет.Тогда можно ссылку на
>>доку, о том, как его вкомпилить?
>modprobe ip_conntrack_ftp
я знаю что ключиком -F я снес правила.
я не на лету их конфигурю, я правлю /root/iptables.save - конфих сохраненных правил.
а потом перезапускаю сам сервис iptables -F(сбрасываю) и iptables-restore /root/iptables - восстанавливаю.
похоже вопрос снимается, я пассивный режим убрал при заходе по фтп на виртуальный интерфейс .. и меня пустило.э-э-э-э-э ..
а почему тогда у меня они наглухо закрыты, а юзеры из интранет, и из интернет по крайней мере на физический(не виртульный) интерфейс нормально ходят по 21 порту ?
>похоже вопрос снимается, я пассивный режим убрал при заходе по фтп на
>виртуальный интерфейс .. и меня пустило.
Разберитесь, как работаю активный и пассивным режимы ftp. Все проблемы от незнания протокола.>э-э-э-э-э ..
>а почему тогда у меня они наглухо закрыты, а юзеры из интранет,
>и из интернет по крайней мере на физический(не виртульный) интерфейс нормально
>ходят по 21 порту ?
Скорее всего используют активный режим или для внутренних клиентов разрешены все соединения.
А кто за вас будет открывать эти порты?
ftp-data 20/tcp # File Transfer [Default Data]
ftp-data 20/udp # File Transfer [Default Data]Они нужны для передачи данных
Достаточно того, что я написал. Тем более, что коносльный ftp по-умолчанию работает в пассивном режиме и 20-й порт не используется.