div.main {margin-left: 20pt; margin-right: 20pt} "СПАМ - трафик", или тонкости работы протокола FTP
BiBiGoN
Ни для кого не секрет, что в настоящее время Internet развивается особенно
бурно. Многие мелкие фирмы и организации уже не только размещают в сети свои странички,
но и строят свои Internet-сервера, благо что не менее быстро развиваются и технологии
обеспечения скоростного доступа, например xDSL. Как следствие этого появляется
значительное число людей не являющихся профессиональными администраторами. Данная
статья, я думаю будет полезна именно им - начинающим администраторам Internet-серверов,
и коснется организации такого, внешне безобидного сервиса, как служба FTP.
Все пользователи Intrnet наверняка, когда-либо в своей жизни сталкивались
с таким понятием как СПАМ. В моей "вольной трактовке" СПАМ можно определить как
генерирование никому не нужного почтового трафика. Трафик, однако может быть не
только почтовый. А сослужить добрую службу в деле "не почтового СПАМА" может такой
общеизвестный сервис как FTP.
Общеизвестно, что протокол FTP обеспечивает передачу двоичных и текстовых
файлов с FTP-сервера и на него. Причем FTP-сервером может служить как компьютер с
каким-либо клоном UNIX, так и компьютер под управлением Windows NT, на котором
работает FTP-сервер. Хочу сразу оговориться здесь не будет идти речь о взломе
FTP-серверов, все нижесказанное является лишь следствием работы малодокументированных
возможностей протокола FTP. В большинстве компьютерной литературы не указано, что FTP
обеспечивает также возможность передачи файлов напрямую между серверами.
Я понимаю, что на меня сейчас могут посыпаться шишки от опытных пользователей,
о том, что данный факт общеизвестен, однако, как я отметил выше, данная статья
написана специально для начинающих администраторов.
Коснемся именно их. Уж сколько раз твердили миру, что, давая анонимным
пользователям сервера право на запись, вы делаете свой сервер потенциально уязвимым.
И только все не в счет. А ведь в этой ситуации вполне возможно, что какой-нибудь
шутник в сети сгенерирует значительный трафик с какого-либо достаточно мощного сервера
на ваш злополучный FTP-сервер. И горе тогда организации (если у вас конечно не
неограниченный трафик :). Естественно - это не смертельно, но неприятно, ведь придется
платить за никому не нужный "СПАМ". А платить придется прилично - вот она оборотная
сторона скоростного доступа в Internet :(.
А для того, чтобы понять, как все это может быть осуществлено на практике
необходимо ближе рассмотреть работу FTP-протокола. Итак теория:
Когда клиент FTP соединяется с FTP-сервером создается так называемое управляющее
соединение. В сущности управляющее соединение - это обычный сеанс telnet в режиме NVT.
Клиент отправляет команду на сервер через управляющее соединение, а сервер возвращает
ответ по этому же соединению.
Когда пользователь запрашивает пересылку файла, открывается отдельное
соединение для передачи данных, и по нему посылается файл. Обычно сервер использует
порт 21 для управляющего соединения и порт 20 для соединения пересылки данных.
При открытии соединения для пересылки файлов клиент посылает команду PORT,
которая идентифицирует его IP-адрес (4 байта) и новый порт (2 байта), чтобы
использовать эти значения при пересылке данных. Байты преобразуются в десятичный
формат и разделяются запятыми. Например IP-адрес 128.36.4.22 будет записан как
128,36,4,22, а порт 2613 - как 10,53.
--> PORT 128,36,4,22,10,53
200 PORT command successful
Сервер откроет соединение по указанному адресу socket.
Сценарий для соединения такой:
1. Локальный клиент получает новый порт и использует управляющее соединение, чтобы
сообщить серверу FTP номер своего порта.
2. FTP-сервер связывается с новым портом данных клиента.
3. Данные передаются.
4. Соединение закрывается.
Можно использовать другой сценарий. Если клиент посылает PASV, сервер
возвращает номер порта и переходит к прослушиванию установки соединения данных от
клиента. Ранее преобладало использование команды PORT. Однако теперь клиент может
послать команду PASV для пересылки файлов через простую систему защиты (firewall).
Из сказанного выше понятно, что если создать соединение с одним сервером в
пассивном режиме, а с другим сервером в активном, причем передать второму серверу,
при открытии соединения для пересылки данных, вместо IP-адреса и порта FTP-клиента,
возвращаемый первым сервером IP-адрес и порт для инициализируемого клиентом
соединения, то образуется прямое соединение для пересылки данных между FTP-серверами.
1-й FTP-сервер:
--> PASV
227 Entering Passive (x,x,x,x,7,254)
2-й FTP-сервер:
--> PORT x,x,x,x,7,254
200 PORT Command successful.
FTP-протокол начал свою работу по генерированию "совершенно ненужного" для
получателя трафика и можно отключаться и идти спать :).
Необходимо добавить, что для работы вышесказанного, FTP-сервера должны
поддерживать работу в пассивном режиме, а также не проверять соответствие IP-адреса
FTP-клиента, инициировавшего соединение с IP-адресом, фактически передаваемым в
командной строке. Если первое условие сейчас выполняется практически повсеместно, то
со вторым существует некоторая напряженка. Однако, кто ищет - тот всегда найдет :).
|