Михаил Фленов СанктПетербург бхвпетербург 2010 удк 681 06 ббк 32. 973. 26018. 2 Ф69
Скачать 3.69 Mb.
|
Глава 9 320 коскоростной канал связи. Нельзя повысить скорость одному человеку без ущерба остальным. Если кому-то требуется полоса гарантированной пропускной способности для работы с приложениями, требующими высокой скорости обмена (напри- мер , для проведения презентаций), вы должны зарезервировать для них более мощный , чем для остальных, канал. Ограничение внешнего канала достаточно легко выполнить с помощью squid. Директивы , которые нужно использовать, можно увидеть в следующем примере : delay_pools 3 delay_class 1 1 delay_class 2 2 delay_class 3 1 delay_parameters 1 256000/256000 delay_access 1 deny all delay_access 1 allow admins delay_parameters 2 256000/256000 4000/8000 delay_access 2 allow all delay_access 2 deny admins delay_parameters 3 64000/64000 delay_access 3 deny all delay_access 3 allow bigboss Этот код нужно добавить в файл конфигурации /etc/squid/squid.conf после комментария : # DELAY POOL PARAMETERS (all require DELAY_POOLS compilation option) # ------------------------------------------------------- Большинство параметров уже заданы по умолчанию, и их следует заменить. Давайте подробно рассмотрим конфигурацию. Для начала нужно определить, сколько у вас будет пулов (правил, описывающих скорость доступа). Для этого используется директива delay_pools n , где n — это количество пулов . По умолчанию n равно нулю, и нет никаких ограничений. Мы созда- дим три пула, поэтому в примере указано число 3. После этого нужно определить, к какому классу относится пул. Это делается с помощью директивы delay_class n c , где n — это порядковый номер, а c — номер класса. Каждая строка с директивой delay_class должна иметь свой порядковый номер, который начинается с 1. В нашем примере три стро- ки , поэтому в первой параметр n равен 1 , во второй — 2 , а в третьей — 3 Шлюз в Интернет 321 Номеров класса (второй параметр) может быть три: 1 — ограничение канала происходит для всей сети. Например, у вас внеш- ний канал 256 Кбит/с, вы можете его уменьшить для всех до 64 Кбит/с; 2 — сузить можно общий канал, а также для каждого пользователя инди- видуально . В этом случае можно понизить общий канал до 64 Кбит/с, а каждому пользователю — до 4 Кбит/с; 3 — ограничивать можно общий канал, индивидуально и для каждой сети в отдельности. Например, если скорость канала равна 256 Кбит/c, а в ва- шей сети работает 4 подсети, то каждой из них можно выделить по 64 Кбит/с, чтобы равномерно разделить нагрузку. В нашем примере мы используем пулы классов 1, 2 и снова 1. Я специально расположил их не последовательно, чтобы пример был более наглядным. Теперь описываем параметры скорости доступа. Это делается с помощью следующей директивы: delay_parameters пул скорость_канала скорость_сети индивидуально Здесь пул — это номер пула, скорость которого мы хотим описать. Так, в нашем примере следующая строка описывает скорость для первого пула: delay_parameters 1 256000/256000 Количество параметров зависит от класса используемого пула. Так как пул 1 имеет класс 1 ( delay_class 1 1 ), у которого можно ограничивать только канал полностью, в директиве используется единственный параметр — скорость_канала ( 256000/256000 ). Он формируется в виде двух чисел, разде- ленных знаком "/". До косой черты указывается скорость, с которой будут скачиваться данные из сети, а после — размер пула, то есть емкость, которую можно наполнить полученными из сети данными. Обратите внимание, что скорость указывается именно в байтах, а характери- стика модема задается в битах в секунду. Если в качестве скорости указать значение -1 , то никаких ограничений не будет. После определения параметров для первого пула нужно установить права доступа к нему. Это делается директивой delay_access , которая имеет сле- дующий вид: delay_access пул доступ acl Первый параметр — это снова номер пула. Потом указывается доступ allow или deny , и последним идет имя ACL-списка. В нашем примере для первого пула используется две строки: delay_access 1 deny all delay_access 1 allow admins Глава 9 322 Сначала мы запрещаем доступ для всех, а потом разрешаем работать на дан- ной скорости только ACL-списку admins . Подразумевается, что в этот список входят администраторы. Далее идет описание скорости и прав доступа для второго пула: delay_parameters 2 256000/256000 4000/8000 delay_access 2 allow all delay_access 2 deny admins Так как второй пул относится ко 2 классу, то здесь нужно указать общую скорость (256 000 байт в секунду) и скорость доступа каждого компьютера в отдельности — 4000 байт в секунду. На такой скорости будут работать все пользователи в сети, кроме администраторов. Если вы установите такие правила в какой-либо организации, то могут воз- никнуть проблемы с руководством, потому что директор тоже попадет в спи- сок all , и будет работать на скорости 4000 байт в секунду. Я думаю, что его это не устроит, и для него мы сделаем отдельную запись: delay_parameters 3 64000/64000 delay_access 3 deny all delay_access 3 allow bigboss С помощью ограничения пропускной способности канала можно запретить загрузку мультимедиа-файлов в рабочее время. В следующем примере мы разрешаем быстро читать WEB-странички, но уменьшаем скорость загрузки других медиа-файлов (см. листинг 9.4). Листинг 9.4. Ограничение скорости загрузки медиа - файлов в рабочее время # ACL-список, описывающий сеть acl fullspeed url_regex −i 192.168.1 # ACL-список, описывающий медиа-файлы, для которых необходимо # понизить скорость acl mediaspeed url_regex −i ftp .exe .mp3 .avi .mpeg .iso .wav # Время, которое будет действовать ограничение на скорость # загрузки медиа-файлов acl day time 08:00−18:59 # Нам нужно два пула второго класса delay_pools 2 delay_class 1 2 delay_class 2 2 Шлюз в Интернет 323 # Первый пул не имеет ограничений для всех delay_parameters 1 −1/−1 −1/−1 delay_access 1 allow fullspeed # Второй пул ограничивает доступ в дневное время delay_parameters 2 4000/100000 4000/100000 delay_access 2 allow day delay_access 2 deny !day delay_access 2 allow mediaspeed Я постарался снабдить листинг подробными комментариями, чтобы вы мог- ли с ним разобраться без дополнительных пояснений. Хочу только заметить, что скорость понижается для всех. Если вы хотите разрешить определенным пользователям работать на полной скорости, можно внести их в список (на- пример , allowfull ) и добавить в конец листинга следующую строку: delay_access 2 deny !allowfull 9.6. Кэширование браузером В заключение темы о прокси-серверах хочется сказать, что кэширование удобно , когда с сервером работает множество компьютеров. При этом эко- номнее используется канал связи, и с увеличением количества пользователей нагрузка на него увеличивается не пропорционально их числу, а медленнее. Помимо централизованного кэширования с помощью прокси-сервера может использоваться локальный кэш сетевых программ. Например, в браузере Mo- zilla прочитанные страницы могут сохраняться в кэше на локальном диске. При следующем их вызове не происходит обращения даже к прокси-серверу, а страничка загружается из локального кэша. На рис. 9.3 показано окно настройки кэша в браузере Mozilla. Как видите, Memory Cache по умолчанию составляет 4096 Кбайт — это максимальный размер оперативной памяти, используемой для хранения последних загру- женных страниц. Использование кэша в памяти увеличивает скорость, когда вы путешествуете по одному и тому же сайту, ведь при переходе от страницы к странице большинство графических образов сохраняется. Чтобы не делать даже лишних обращений к диску, последние загруженные файлы берутся прямо из оперативной памяти. Другой параметр отвечает за размер кэша на жестком диске (Disk Cache). Это максимальный размер директории, которая хранит загруженные из Ин- тернета файлы. В моей системе значение по умолчанию равно 50 000 Кбайт Глава 9 324 (около 50 Мбайт). Это очень мало, и при регулярной работе с WEB вы не за- метите , как израсходуется это пространство. Если позволяет свободное место на жестком диске, то я рекомендую увеличить это значение. Еще ниже есть поле Disk Cache Folder, в котором указывается папка для хранения кэша. Рис . 9.3. Настройка кэширования в браузере Mozilla И последнее, что можно настроить — условия, когда информация должна быть загружена с сервера, а не из кэша. Здесь можно выбрать одно из зна- чений : Every time I view the page — обновление будет происходить каждый раз, когда вы обращаетесь к странице, то есть локальный кэш использоваться не будет; When the page is out of date — когда страница устарела; Once per session — единожды за сессию, то есть только при первом заходе; Шлюз в Интернет 325 Never — никогда. Страница всегда будет загружаться из кэша, а для об- новления нужно нажать кнопку Reload (Обновить) на панели инструмен- тов браузера. При работе через прокси-сервер или с использованием локального кэширо- вания браузера или другой программы вы должны учитывать, что загружае- мые страницы могут содержать устаревшие данные. Для обновления нужно вручную нажать кнопку Reload. 9.7. squidGuard Использование прокси-сервера достаточно опасно, поэтому squid очень часто используют совместно с дополнительной защитой в виде программы squid- Guard. В качестве возможностей этого стражника можно выделить опознава- ние пользователей по имени или адресу, фильтрацию запросов, замену бан- неров и т. д. 9.7.1. Установка Установка программы достаточно интересна. Скачайте исходные коды с сай- та www.squidguard.org. Скачав исходники, разархивируйте их. Это можно сделать даже графической утилитой, которая работает в Ubuntu как файло- вый менеджер. Для простоты разархивируйте их в свою домашнюю директо- рию . Запустите терминал и перейдите внутрь созданной при разархивации директории с программой: cd /squidGuard-X.X В данном случае X.X — это номер версии squidGuard. Запустите отсюда команду конфигурации: ./configure По экрану побегут строки, сообщающие о ходе проверки и конфигурирова- ния программы. Если выполнение прервалось с ошибкой, то, вероятнее всего, в вашей системе отсутствует BerkeleyDB. У меня в Ubuntu так и было, поэто- му сразу расскажу, как станцевать танец с бубнами для установки этого зве- ря . При помощи поисковика находим архив BerkeleyDB, Скачиваем его и разархивируем. Лучше опять разархивировать в домашнюю папку, все рав- но потом все это можно будет удалить. Теперь переходим в папку: cd /db-X.X.X/build-unix Буквы в виде Х снова означают номер версии. Обратите внимание, что мы переходим в подкаталог build-unix. Это очень важно. Мы устанавливаем биб- лиотеку работы с базой в Linux, который относится к системам UNIX, поэтому Глава 9 326 компиляция и установка должна происходить именно отсюда. В этой дирек- тории выполняем три команды: ../dist/configure make sudo make install Первая команда конфигурирует программу, вторая ее компилирует, а тре- тья — устанавливает. Обратите внимание, что перед командой установки стоит sudo. Дело в том, что установка будет происходить в директорию /usr/local, к которой у простых смертных учетных записей доступа нет. Если не указать sudo, то установка завершится ошибкой прав доступа. Теперь , когда библиотека базы данных установлена, можно возвращаться в директорию squidGuard. Только не спешите запускать конфигурацию снова. С вероятностью 99% она не пройдет, потому что конфигуратор ищет библио- теку BerkeleyDB в папке /usr/local/BerkeleyDB, но она устанавливается в /usr/local/BerkeleyDB.X.X, то есть в конец имени папки добавляется номер версии . Выполните команду: ls /usr/local Это позволит увидеть содержимое папки /usr/local прямо из текущей папки стражника . Запомните имя и выполняйте команду конфигурации так: ./configure --with-db=/usr/local/BerkeleyDB.X.X В данном случае X.X на конце заменяем на свой номер версии. Теперь кон- фигурация должна пройти успешно. Если нет, то в этом случае все претензии к разработчикам, но я с другими проблемами не встречался. После конфигурации выполняем команды сборки и установки: make sudo make install Установка снова выполняется от имени администратора, потому что снова происходит копирование в защищенную область /usr/local. 9.7.2. Настройка Директория по умолчанию, в которой можно найти установленный нами стражник — /usr/local/squidGuard. Основные настройки находятся в файле squidGuard.conf, расположенном в этой же директории. Первое, что вы уви- дите в этом файле, это следующие две строки: dbhome /usr/local/squidGuard/db logdir /usr/local/squidGuard/logs Первый параметр ( dbhome ) задает путь к базам данных, где будут храниться списки доступа. Второй параметр ( logdir ) — это путь к журналу. На сайте Шлюз в Интернет 327 www.squidguard.org в разделе Blacklists можно скачать примеры списков доступа с вредными сайтами. Их нужно разархивировать в директорию баз данных , то есть ту, что указана в параметре dbhome Теперь мы можем в этом же файле задать права доступа. Причем права дос- тупа могут распределяться даже по времени и по пользователям. Отдельным пользователям можно дать возможность смотреть все, а кому-то (например, детям ) запретить смотреть сайты для взрослых. Для создания времени используется параметр time . Например, можно создать период , который будет отображать рабочее время. Для этого в файле squidGuard.conf пишем: time worktime { weekly * 9:00-17:00 # Рабочее время date 2010.02.27 9:00-17:00 # День, который случайно стал рабочим } После параметра time указывается имя периода. В фигурных скобках указы- ваем периоды времени. Параметр weekly со звездочкой означает любой день недели . Если нужно определиться только с рабочими днями недели, то их можно перечислить как MTWHF. После этого идет рабочее время, в которое и будет использоваться данное правило. Параметр date позволяет задать опре- деленную дату. В данном случае я выбрал для примера субботу, 27 февраля 2010 года, которая будет рабочим днем. Наше правило будет распростра- няться и на этот день. Для задания адресов, к которым будет разрешен или запрещен доступ, ис- пользуется директива dest , например: dest porn { domainlist porn/domains urllist porn/urls expressionlist porn/expressions } Как видно из примера, здесь указываются параметры domainlist , urllist и /или expressionlist , с помощью которых задаются имена файлов, содер- жащих списки доменов, URL или регулярных выражений. Пути задаются относительно директории, указанной в директиве dbhome. Например, файл /usr/local/squidGuard/db/porn/domains может содержать тысячи строк вроде sex.com sexygirls.com Регулярные выражения позволяют записывать множество сайтов в одну строку , но злоупотреблять ими не следует, так как проверка соответствия может занимать много времени. Глава 9 328 Теперь посмотрим, как можно написать правило, которое запретит в рабо- чее время смотреть сайты для взрослых ( porn ), рекламу ( adv ) для экономии трафика и сайты с нелегальными программами ( warez ) для защиты каналов от перегруза: acl { all within worktime { pass !adv !porn !warez all } else { pass all } default { pass none redirect http://localhost/block.html } } Это разрешающее правило acl (Access Control List). В нем три блока: all within worktime — для всех в рабочее время — разрешено все, кро- ме перечисленных трех запретов, о которых мы говорили выше. На то, что они запрещены, указывает восклицательный знак перед их названиями; else — все остальное время разрешено все; default — по умолчанию — вообще ничего ( none ) не разрешено, а проис- ходит переадресация на http://localhost/block.html. Разумеется , чтобы это правило работало, нужно еще описать списки адре- сов adv и warez при помощи директивы dest , подобно тому, как был опи- сан porn Таким образом мы написали правило, которое касается всех. А что, если вы хотите указать исключение для себя? Администраторы — привилегирован- ные люди, и глупо ограничивать самого себя. Для этого можно прописать группу , например admins , и прописать туда адреса компьютеров, которые должны быть привилегированными, и обрабатывать их отдельно: src admins { ip 192.168.1.1-192.168.1.3 } src others { ip 192.168.1.4-192.168.1.255 } Шлюз в Интернет 329 Теперь права доступа можно подкорректировать следующим образом: acl { admins within worktime { pass all } others within worktime { pass !adv !porn !warez all } else { pass all } default { pass none redirect http://localhost/block.html } } Теперь вы сможете обращаться к любым WEB-сайтам. Чтобы изменения вступили в силу, нужно выполнить следующую команду: squidGuard -C all Ее выполняем из директории /usr/local/bin. Глава 10 Передача файлов Были времена, когда построение сети было делом дорогим, а Интернет — еще дороже, и для обмена файлами приходилось бегать с дискетами 3,5 или 5,25 дюймов. Если кто-то застал те времена, наверное, он вспоминает их с ужасом. Дискеты постоянно портились, и данные периодически перестава- ли читаться. Благо, если расстояние было небольшое, и можно было повто- рить пробежку, но когда дистанция большая — потеря очень сильно отража- лась на эмоциональном состоянии. До сих пор в некоторые компьютеры вставляют дисководы для 3,5-дюймовых дискет , видимо, по привычке. Но уже трудно представить себе офис без пол- ноценной сети, и в фирмах, где мне приходилось настраивать серверы, все компьютеры обязательно подключены к локальной сети. В таких случаях уже нет надобности в дисководах, и администраторы их просто вынимают. Если у вас возник вопрос, зачем вытаскивать то, что может пригодиться, значит, вы забыли, что ничего лишнего в компьютере не должно быть. Это касается не только программ, но и компьютерного железа. Через дискеты хакеры легко могут унести секретную информацию, получив физический доступ к компьютеру. Да, много не унесешь, но все же. Мне из- вестна фирма, которая содержала локальную сеть, оторванную от внешнего мира , и считала себя неприступной. Но секретная информация утекла с по- мощью простых дискет через все охранные системы, потому что металло- искатели не срабатывали на 3,5-дюймовые дискеты, в силу чего были поте- ряны рынки сбыта, и только после этого все компьютеры лишились опасного устройства Сети позволяют избавиться от лишнего оборудования в компьютерах и сде- лать передачу данных быстрее и надежнее. Надо всего лишь настроить нуж- ные протоколы и использовать кабельную проводку на полную мощность. Глава 10 332 В настоящее время самым популярным протоколом обмена файлами является FTP (File Transfer Protocol, протокол передачи файлов). Он был разработан достаточно давно, но до сих пор не потерял своей актуальности, хотя некото- рые возможности оставляют желать лучшего. 10.1. Работа протокола FTP Как мы уже говорили в главе 6, для использования протокола FTP требуется две составляющие: клиент и сервер. В качестве клиента, в принципе, можно использовать любой Telnet-клиент, и, подключившись к 21 порту серве- ра , вручную передавать команды. Но во времена графического интерфейса нужно что-то более удобное. В ОС Windows мой любимый FTP-клиент — CyD FTP Client XP (www.cydsoft.com), главное окно которого можно уви- деть на рис. 10.1. Если у вас нет FTP-клиента, то для тестирования протокола можно использо- вать даже браузер, например, Internet Explorer или Firefox. Для этого в строке URL нужно набрать адрес в формате ftp://имя:пароль@адрес Рис . 10.1. Главное окно программы CyD FTP Client XP Передача файлов 333 Например : ftp://flenov:mypassword@ftp.my_server.com или ftp://flenov:mypassword@192.168.77.1 Протокол FTP работает сразу на двух портах: один используется для уп- равления (пересылка команд), а другой — для передачи данных (файлов). Программа -клиент соединяется с портом 21 и начинает передавать команды. С этим портом соединяются все пользователи, и сервис, который прослуши- вает этот канал, работает одновременно с несколькими соединениями. Когда клиент запрашивает данные, открывается еще одно соединение с кон- кретным пользователем, по которому передается файл. Это удобно с точки зрения программирования, но несподручно с точки зрения администрирова- ния , точнее сказать, конфигурирования сетевого экрана. Дело в том, что для передачи данных клиент может открыть абсолютно любой порт, и сервер не может предсказать его номер. Большинство команд, используемых в протоколе FTP, схожи с теми директи- вами , которые вы используете в Linux для управления файлами. Это связано с тем, что во время разработки протокола основной сетевой ОС являлись UNIX-системы. Это в наше время везде стоит Windows, а 30 лет назад все было иначе. 10.1.1. Команды протокола FTP Давайте рассмотрим листинг 10.1. В нем приведен пример общения клиент- ской программы с FTP-сервером. Строки, в начале которых стоит знак ">", были отправлены FTP-серверу, а остальные — это его ответы. Листинг 10.1. Пример работы протокола FTP < 220 Flenov Mikhail FTP Server > USER Anonymous < 331 Anonymous access allowed, send identity (e-mail name) as password. > PASS your@mail.com < 230 Anonymous user logged in. > PWD < 257 "/" is current directory. > TYPE A < 200 Type set to A. > PASV Глава 10 334 < 227 Entering Passive Mode (127,0,0,1,13,20). > LIST < 125 Data connection already open; Transfer starting. < 226 Transfer complete. Самой первой строкой идет приглашение сервера FTP. Его мы получаем сра- зу же в ответ на соединение с портом 21. В этой строке чаще всего находится текстовое описание сервера, с которым произошло соединение, и его версия. В данном случае здесь вместо конкретного названия мое имя, но в реальном сервере при настройках по умолчанию будет видна примерно следующая строка : 220 flenovm.ru FTP server (Version wu-2.6.2-5) ready. Для чего я изменил строку приветствия? Все очень просто, в ней по умолча- нию показывается имя домена, имя FTP-сервера, его версия и приветственное сообщение . Ничего страшного не видите? А я вижу — хакеру достаточно подключиться на порт 21, чтобы узнать, с каким FTP-сервером он имеет дело. Дальнейшие действия взломщика легко предсказать. Я бы на его месте поис- кал во всех базах уязвимостей информацию о дырах в данной версии wu-ftpd. А администратору остается молиться, чтобы я не нашел нужных сплоитов, или найденная дыра была незначительной и не позволила мне ничего сделать с его системой. После прочтения строки сообщения можно посылать команды FTP-серверу. Но ничего особого выполнить не удастся, пока вы не представитесь серверу. Для этого нужно выполнить команды FTP: USER с параметром имя пользова- теля , а затем PASS , указав пароль. Серверы FTP позволяют работать с тремя типами авторизации: действитель- ная , гостевая и анонимная. В первом случае вы должны передать серверу реальное имя и пароль пользователя, которому разрешен доступ к серверу. Тогда после выполнения команды USER вы увидите сообщение о необходи- мости ввести правильный пароль для указанного пользователя: 331 Password required for flenov В случае с анонимным доступом в качестве имени нужно указать Anonymous (команда USER Anonymous ). В ответ на это сервер вернет нам сообщение: 331 Anonymous access allowed, send identity (e-mail name) as password. Здесь говорится, что анонимный доступ разрешен, и вы должны передать в качестве пароля адрес E-mail. Честно говоря, можно ввести и чужой E-mail, например , адрес соседа. Это сервер проконтролировать не сможет. Некото- рые серверы вообще не проверяют корректность адреса даже по простым шаблонам , и можно передавать что угодно. Передача файлов 335 На практике анонимный доступ обладает минимальными возможностями чтения файлов и директорий и используется только в открытых файловых архивах . Имя Anonymous чаще всего используют для публикации открытых документов для всеобщего доступа через FTP. Например, разработчики про- грамм создают анонимные FTP-серверы для того, чтобы пользователи могли скачать с сервера последние версии программ или обновления для них. Реальный пользователь может путешествовать по всей файловой системе, и возможности ограничены только правами доступа используемой учетной записи Гостевой доступ по своим правам является чем-то промежуточным между анонимным и действительным. По сравнению с анонимным пользователем, гость обладает большими правами, и ему может выдаваться разрешение на закачку файлов на сервер, но в отличие от действительного, он работает только в своей директории. Например, если гостю назначен каталог /home/guest, то он сможет работать с файлами и подкаталогами этой директории, но выше нее подняться не сможет. Вы можете определить любое имя в качестве гостевого. Обратите внимание, что пароль в команде PASS передается абсолютно в от- крытом виде. Это серьезная проблема. В каждой главе, где мы рассматриваем какой -либо сервис, доводится сталкиваться с открытой передачей данных. Ну что поделаешь, на заре рождения Интернета никто не думал о хакерах. Теперь приходится выдумывать разные методы, чтобы спрятать пароль. Если ваш сервер обслуживает только анонимные соединения, то пароли мо- гут передаваться, как угодно. При такой аутентификации любой пользова- тель и так может подключиться к серверу, указав любой адрес E-mail в каче- стве пароля. Но подобные серверы используются только с общедоступными ресурсами /файлами. При наличии важной информации доступ происходит по паролю , и необходимо сделать так, чтобы он шифровался. Для этого можно использовать stunnel или уже готовый протокол SFTP, о котором мы говори- ли в разд. 5.3.8. Отличное решение я видел на одном из публичных WEB-серверов около 10 лет назад. Для того чтобы закачать данные на сервер, необходимо было зарегистрироваться , заполнив WEB-форму с личными данными. Затем вам выдается пароль на доступ, который действует только в течение одной сес- сии . После этого пароль уничтожается, и повторное подключение становится невозможным . Файлы закачиваются в специальную директорию, в которую разрешена только запись. Самим файлам устанавливаются права только для чтения и записи, а выполнение остается недоступным. Таким образом, паро- ли можно передавать в открытом виде. Даже если хакер увидит пароль, под- ключиться он не сможет. Глава 10 336 Реализовать одноразовые пароли достаточно просто, если ваш сервер ис- пользует подключаемые модули аутентификации PAM (см. разд. 3.3.3). После того как вы авторизовались на сервере, можно выполнять любые дру- гие команды FTP-сервера. Но тут есть одна проблема — список директив зависит от сервера. Конечно же, есть определенные требования, которых придерживаются все производители, — это основные команды, описанные в RFC (Requests for Comments, рабочие предложения). Однако возможности, предоставляемые стандартом, уже устарели, и разработчики WEB-серверов начали добавлять свои функции, которые могут отличаться в разных версиях программ . Так что, если клиентская программа в каких-то ситуациях ведет себя не совсем корректно, это еще не значит, что она плоха, просто она мо- жет быть несовместима с данным сервером. Основные команды протокола FTP можно увидеть в табл. 10.1. Они вам мо- гут пригодиться при работе через Telnet и для тестирования сервера. Более подробно они описаны в Приложении 1. Таблица 10.1. Команды протокола FTP Команда Описание USER имя Авторизоваться на сервере как пользователь с именем имя PASS пароль Указать пароль при авторизации SYST Вернуть тип системы HELP Предоставить список доступных для выполнения команд LIST Вывести список файлов и каталогов текущей директории PWD Возвратить текущую директорию CWD директория Сменить текущую директорию TYPE тип Указать тип передачи данных : A для ASCII, I — для бинарных файлов RETR параметр Скачать с сервера файл , указанный в качестве параметра STOR параметр Загрузить на сервер файл , указанный в качестве параметра ABOR Прервать последнюю команду или передачу данных QUIT Выйти из системы 10.1.2. Сообщения сервера В ответ на полученную команду сервер возвращает нам сообщения, по кото- рым можно оценить результат работы. Уведомления состоят из трехзначного числового кода и необязательной текстовой части. Если для ответа требуется Передача файлов 337 несколько строк, то в первой после кода стоит дефис, а в последней после кода идет пробел. Вы должны знать смысл числовых кодов, чтобы определить тип ошибки. Когда к вам за помощью обращается пользователь, зная значения кодов, вы можете быстро определить причину сбоя и решить проблему. Значения первой и второй цифр кода ответа FTP-сервера можно увидеть в табл. 10.2 и 10.3 соответственно. Таблица 10.2. Значения первой цифры в коде ответа FTP- сервера Код Описание 1 Команда удачно принята к выполнению , но еще не закончила свое выпол - нение , поэтому нужно дождаться ее окончания перед продолжением рабо - ты Такие сообщения приходят во время выполнения длительных операций ( например , запрос на передачу файлов ). После завершения работы коман - ды будет получено еще одно сообщение 2 Команда выполнена удачно , можно продолжать работу и посылать новые директивы Такие сообщения приходят в ответ на простые команды 3 Команда выполнена удачно , но для завершения работы требуется дополни - тельная директива Такие сообщения можно увидеть в ответ на операции , предусматривающие несколько действий , например , во время аутентифика - ции , которая требует двух команд Сообщения с кодом , начинающимся с цифры 3, появляются между отправкой команд USER и PASS 4 Команда выполнена неверно , но результат может быть положительным , если повторить попытку позже Сообщение может быть получено в случае , если сервер не в состоянии сейчас выполнить команду из - за выполнения другой операции 5 Команда выполнена неверно Это самый критичный ответ , который может быть при неверном синтаксисе директивы или неправильном задании па - раметров Таблица 10.3. Значения второй цифры в коде ответа FTP- сервера Код Описание 0 Синтаксическая ошибка , команда воспринята неверно 1 Информация 2 Установка соединения 3 Сообщение относится к аутентификации 4 Не определено 5 Сообщение файловой системы Глава 10 338 Рассмотрим пример. Допустим, пользователь увидел в своем FTP-клиенте следующее сообщение и не знает, что делать дальше: 331 Anonymous access allowed, send identity (e-mail name) as password. Вам достаточно только знать код 331. По первому числу 3 видно, что дирек- тива выполнена удачно, но требуется дополнительная команда. Вторая циф- ра — тоже 3, то есть сообщение появилось в ходе аутентификации. Когда может быть такой отклик? Конечно же, после ввода имени. Сервер FTP ожи- дает пароль, поэтому выдал сообщение с кодом 331. Как видите, минимальных знаний достаточно, чтобы увидеть, какая возникла проблема , и максимально быстро ее решить. 10.1.3. Передача файлов Так как протокол FTP предназначен для работы с разными системами, то для передачи файлов используются два основных режима — текстовый (ASCII) и бинарный. Допустим , что вы хотите переслать текстовый файл с компьютера UNIX на компьютер Windows. В UNIX для текстовых файлов в качестве идентифи- катора конца строки используется символ , код 13). В Windows то же самое обозначается двумя символами На рис. 10.2 показан файл sendmail.cf (используется для конфигурации Sendmail), скаченный с Linux-сервера в бинарном режиме и открытый в про- грамме Windows Notepad. Как видите, очень тяжело разобрать, что здесь и для чего, а вместо перехода на новую строку можно увидеть нечитаемый символ Чтобы решить проблему конца строки, необходимо скачивать файл с сервера в символьном (ASCII) режиме. В этом случае текст передается построчно, и ОС-получатель сама добавляет нужные символы перевода строки. На рис. 10.3 можно увидеть файл sendmail.cf, полученный с сервера в режиме ASCII. Теперь информация стала читабельной, и все символы перехода на новую строку расставлены самой ОС верно, в соответствии со своими внутренними правилами Двоичные файлы (например, картинки или музыку) необходимо передавать в бинарном режиме. Здесь нет различий, в какой ОС создан объект, и он будет правильно воспринят в любой ОС, умеющей работать с данным форматом Передача файлов 339 Рис . 10.2. Файл sendmail.cf, полученный с Linux- сервера в бинарном режиме Рис . 10.3. Файл sendmail.cf, полученный с Linux- сервера в ASCII- режиме Если передать двоичный файл из Linux в Windows в текстовом режиме, то любой символ Глава 10 340 10.1.4. Режим канала данных Мы уже говорили о том, что для работы с FTP-сервером необходимо два ка- нала . Порт 21 является управляющим, и по нему передаются только команды FTP. Для передачи файлов создается отдельное соединение. Этот процесс можно описать следующим образом: 1. Программа -клиент открывает порт на компьютере, куда сервер должен передать содержимое файла. 2. Серверу направляется запрос на скачивание файла и сообщается порт и IP- адрес клиентского компьютера, с которым он должен соединиться. 3. Сервер инициализирует соединение с компьютером клиента и начинает передачу данных. Такой режим называется активным, потому что соединение устанавливает сервер . Проблема кроется в последнем действии. Если у вас установлен сете- вой экран, то, скорей всего, любые подключения извне запрещены, чтобы хакер не смог подобраться к компьютерам вашей сети. Соединения должны инициализировать только ваши компьютеры, а не внешние. Таким образом, в активном режиме протокол FTP не будет работать через правильно настроенный сетевой экран. Если вы разрешите внешним про- граммам устанавливать соединения, то нужно отключить сетевой экран, и он уже ничего не защитит. Чтобы решить проблему работы через сетевой экран, был разработан пассив- ный режим. В большинстве серверов и клиентских программ именно его те- перь начинают устанавливать по умолчанию, потому что сетевые экраны в наше время уже встроены почти во все ОС. В пассивном режиме соединение происходит иначе: 1. Клиент запрашивает скачивание или просит принять файл. 2. Сервер осуществляет привязку к порту и сообщает клиенту номер канала, куда необходимо подключиться для получения или отправки данных. 3. Клиент устанавливает соединение с указанным портом, по которому про- исходит передача данных. Таким образом, сервер только открывает порт и подготавливается к обмену файлами , а все соединения происходят только со стороны клиента. Это уже не противоречит правилам сетевого экрана. 10.2. ProFTPd В последнее время все бóльшую популярность завоевывает сервер ProFTPd. Его мы не будем рассматривать подробно, но кратко о нем расскажем. Главный Передача файлов 341 конфигурационный файл для этого сервера — это /etc/proftpd.conf. Кроме того, к конфигурационным файлам данного сервера также относится файл ftpusers, где описываются пользователи, которым разрешена работа с FTP. При конфигурировании proftpd большинство действий описываются блока- ми . Например: DenyAll Allow from 127.0.0.1 Здесь описывается блок Limit , который позволяет задавать ограничение. Что именно ограничивается, указывается сразу после ключевого слова Limit . В дан- ном случае это операция SITE_CHMOD . Внутри блока идут операторы ограничения: DenyAll — запрещает доступ со всех компьютеров; Allow from — разрешить доступ только с указанного компьютера. Мы снова соблюдаем правило запрещения всего, что не разрешено явно. Можно также указывать следующие ограничения: AllowAll — разрешить доступ со всех компьютеров; AllowGroup группы — разрешить доступ с указанных групп; AllowUser — разрешить доступ указанным пользователям; AllowOverwrite значение — определяет, можно ли перезаписывать уже существующие файлы. В качестве значения можно указывать on или off Для всех пунктов, кроме последнего, есть аналогичные запреты: нужно толь- ко поменять Allow на Deny . Это операторы ограничения. В блоках могут быть и другие операторы, которые мы рассмотрим чуть позже, а сейчас давайте закончим знакомство с типами блоков. Чтобы создать сервер с анонимным доступом, нужно создать блок Anonymous Анонимным пользователям будет разрешен доступ только к директории путь и ничего более. Чтобы определить доступ к директории, можно использовать директиву Directory : DenyAll # для примера запретим доступ В этом блоке вы можете указывать директивы, которые относятся к данной директории . Если нужно указать глобальные параметры, то используйте блок Глава 10 342 Global . Глобальному блоку не нужно указывать директорию, ведь он дейст- вует на все. Еще один блок, который может присутствовать в конфигурации сервера — VirtualHost . В нем указывается адрес сервера. Теперь рассмотрим параметры, которые можно использовать внутри этих блоков : DefaultRoot — корень дерева директорий FTP, выше которого пользова- тель не может подняться. По умолчанию пользователь получает доступ к своему домашнему каталогу, а доступ выше запрещен; DefaultTransferMode — режим передачи данных. Их всего два — тексто- вый и бинарный, и в этом параметре можно указать соответственно ascii или binary ; DisplayConnect имяфайла — содержимое указанного файла будет показано в приветственном сообщении во время соединения клиента с сервером; DisplayLogin имяфайла — содержимое указанного в этом параметре фай- ла будет показано пользователю после успешной регистрации; MaxClients — максимальное количество одновременно подключающихся пользователей . Слишком маленькое число позволит хакеру с легкостью реализовать DoS-атаку, исчерпав все возможные соединения; Order — порядок, в котором сервер применяет разрешения. Если здесь указано allow, deny , то разрешающие записи имеют больший приоритет. Если ничего не указано, то доступ разрешается. Если же указано значение deny, allow , то больший приоритет имеет запрещение; RootLogin — разрешение администратору подключаться по FTP. Если здесь указано on , то такое действие разрешено, но лучше все его запре- тить , указав off . FTP — не лучшее решение для администрирования фай- лов . Если хакер каким-либо образом узнает или подберет пароль, то мо- жете попрощаться со своими данными; ServerName — имя сервера, которое будет показываться клиенту; SyslogLevel — уровень журналирования событий: • emerg — наиболее важные; • alert — события; • crit — критические сообщения; • error — ошибки; • warn — предупреждения; Передача файлов 343 • notice — сообщения; • info — информация; • debug — отладочная информация; umask маска_файла маска_каталога — маска файла для новых файлов и па- пок , работающая точно так же, как параметр umask системы. Маска ката- лога не является обязательной. Как видите, уже по параметрам понятно, что к чему, так что ничего сложного здесь нет. 10.3. Резюме Протокол FTP и серверы различных производителей за время своего сущест- вования имели множество проблем с безопасностью. Если сложить проблемы из -за ошибок FTP и программы Sendmail, то результат может затмить даже потери от внедрения вирусов. Главная проблема протокола FTP заключается в том, что он создавался как дружественный и удобный для пользователя. Вторая проблема — исполь- зование двух портов. Авторизация происходит только при подключении на 21 порт, а работа с каналом для передачи данных происходит без какого- либо подтверждения подлинности клиента. Если во времена создания FTP-протокола он был действительно необходим для обмена данными, то в настоящее время от него следует избавляться. Если вы хотите дать пользователям возможность только скачивать информацию, то обратите внимание на протокол HTTP. С его помощью можно даже орга- низовать загрузку файлов на сервер. Если необходим обмен данными в локальной сети, то можно использовать Samba-сервер или опять же HTTP. Многие администраторы не хотят на- страивать WEB-сервер только ради обмена данными и устанавливать на него потенциально опасные сценарии. Но нельзя забывать, что FTP также может оказать медвежью услугу. Из двух зол нужно выбирать меньшее. Если у вас уже работает WEB-сервер, то максимально используйте его возможности, и тогда можно будет закрыть 21 порт, тем самым оградив себя от вероятных ошибок , которые могут с ним прийти. Если вам лично необходим доступ к серверу для работы с файлами удаленно, то советую использовать пакет SSH и встроенный протокол SFTP, который шифрует данные, поскольку такое соединение перехватить намного сложнее. |