Я настраиваю новый сервер debian, и мне не нужен FTP, поэтому я хочу его удалить. Согласно netstat -tap, ftp ничего не слушает. Однако, когда я выполняю сканирование портов (nmap) извне, он говорит, что порт ftp открыт (21). inetd ничего не запускает, xinetd отсутствует в системе.
Что я должен делать?
результат нажатия netstat
obu1:/etc/pam.d# netstat -tap Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 *:225 *:* LISTEN 2237/sbadm tcp6 0 0 *:ssh *:* LISTEN 2399/sshd tcp6 0 448 obu1.hostname.:ssh rrcs-XXX-XXX-XXX-XXX:56721 ESTABLISHED 16639/sshd: username
NMap из нелокального
Starting Nmap 4.90RC1 ( http://nmap.org ) at 2009-07-13 10:47 Eastern Daylight Time Interesting ports on obu1.hostname (ipaddress): Not shown: 972 closed ports, 26 filtered ports PORT STATE SERVICE 21/tcp open ftp 22/tcp open ssh Nmap done: 1 IP address (1 host up) scanned in 3.60 seconds
Вы должны знать, что Windows XP (и, возможно, другие версии) имеет внутреннюю оболочку для FTP-соединений (цель этого - попытаться разрешить успешное выполнение команды PORT даже за брандмауэром или маршрутизатором).
Эта оболочка перехватывает любое соединение с любым хостом на порту 21, поэтому она может отслеживать его и пытаться открыть входящий порт команды PORT, выданной клиентом.
Эта оболочка также имеет побочный эффект: поскольку она перехватывает любое соединение с портом 21, она отправляет сигнал о том, что соединение установлено, программному обеспечению, которое будет видеть соединение как установленное, но на самом деле соединение установлено только с внутренним интерфейсом Windows. обертка.
Затем оболочка пытается открыть соединение с реальным хостом и, если истекает время ожидания, посылает программе сигнал о том, что соединение было потеряно. Программа увидит, что соединение потеряно.
Подводя итог, программное обеспечение считает, что соединение было успешно установлено, а затем потеряно, но реального соединения не установлено.
Итак, в вашем случае, что происходит: вы запускаете nmap. Nmap пытается подключиться к вашему серверу через порт 21. Оболочка Windows перехватывает соединение. Nmap «думает», что он подключен к вашему серверу (но он подключен только к оболочке), и сообщает порт как открытый.
Вы можете подтвердить это, набрав в командной строке:
ftp 4.3.2.1
Вы увидите: C:> ftp 4.3.2.1.
Подключен к 4.3.2.1.
Соединение прервано внешним хостом.
Вы можете попробовать любой действующий IP-адрес, ftp всегда будет подключаться и отключаться вскоре после этого, тогда как он должен сообщать «Время ожидания соединения истекло».
Я никогда не видел документации по этому поводу. После многих исследований я обнаружил это странное поведение, а после дополнительных исследований выяснил, почему оно здесь.
Что ж, вывод из этого (большого) ответа таков: порт 21 вашего сервера определенно закрыт, как сообщает netstat, и такое поведение вводит Nmap в заблуждение.
Используйте одну из следующих команд, чтобы узнать, какая программа на самом деле прослушивает порт 21.
netstat -lp
lsof -i :21
Это должно помочь вам выяснить, какой именно пакет нужно удалить или перенастроить.
apt-get remove --purge ftp
Замените ftp тем, что называется пакетом. Я не совсем уверен, что это такое, но насколько мне известно, эта команда должна работать.
apt-get clean
Это очистит ваш каталог var после удаления.
В зависимости от того, что inetd
и стиль конфигурации, который вы используете, найдите определение службы ftp в /etc/inetd.conf
, /etc/xinetd.d
и / или /etc/xinetd.conf
. Если найдешь, уничтожь.
Вы уверены, что сканируете правильный IP-адрес? netstat показывает порты 225 и 22, nmap показывает 21 и 22 ... либо вы сканируете неправильный IP-адрес, либо брандмауэр между ними выполняет какие-то действия, либо, возможно, некоторые правила iptables на вашем сервере перенаправляют пакеты. Я бы сказал, проверьте 'iptables -L -n', чтобы убедиться, что там нет ничего, связанного с FTP.
Внешний nmap вы делаете для IP-адреса сервера? Возможно, проходит через брандмауэр или маршрутизатор. Что происходит, когда вы делаете nmap с localhost?
Проверьте правила брандмауэра на хосте
Попробуйте использовать nmap с разных хостов, все ли они видят, что порт 21 открыт.
Убедитесь, что вы запускаете все команды как root.
Используйте кросс-кабель для подключения к вашему серверу. Переключите брандмауэр на сервере и на машине, к которой вы подключились с помощью кросс-кабеля, и снова выполните nmap.
Telnet с какого-либо хоста на порт 21. Не нажимайте клавишу, когда приходит сообщение «Нажмите любую клавишу, чтобы продолжить ...». Затем от имени пользователя root попробуйте эти команды
netstat -lp lsof -i: 21
Если все равно не повезет. Остановите брандмауэр. Запустите новую службу на хосте (скажем, httpd) и снова выполните сканирование портов из разных мест. Вы видите, что дополнительный порт http открыт?
Если localhost не видит процесс, прослушивающий порт 21, то есть что-то между хостом, с которого вы выполняете nmap, и сервером. Вот почему пункт 4 касается прямого подключения хоста к Nmap и серверу.
Вы обязательно должны убедиться, что ваш роутер НЕ пересылка любой 21 порт на ваш сервер, даже если у вас нет FTP-сервисов, NMAP перечислит порты как открыто если маршрутизатор выполняет свою работу по пересылке.