Об ограничении доступа к ресурсам сети

Мясищев А.А.

 В больших организациях, университетах компьютерная сеть часто разрастается до размеров, которые обычно занимают несколько зданий и, следовательно проследить за тем, к каким серверам  подключаются сотрудники, какую информацию они получают, как часто и сколько информации они берут с внешней сети (Internet) довольно затруднительно. Поэтому  возникает задача ограничения и контроля доступа к ресурсам сети.
 Предположим, что некая организация (университет) имеет свой собственный Web-сервер с различной информацией и выход в Internet через наземный канал связи.  Причем Web-сервер, прокси-сервер  и маршрутизатор построены на базе  достаточно мощного компьютера с операционной системой (ОС) Unix FreeBSD , например, версии 4.2. Небходимо сконфигурировать  ОС таким образом , чтобы привязать IP-адреса к MAC-адресам сетевых адаптеров компьютеров для локальной сети Ethernet(FastEthernet). Такая привязка необходимо для того, чтобы не дать возможность нечистоплотным клиентам сети менять свои IP-адреса на адреса владельца другого компьютера, который может находиться, например в командировке и все шишки соответственно упадут на него. Правда это не спасет от сотрудников, которае на своих машинах перепрошивают MAC-адреса (для некоторых типов плат это возможно). Далее рассмотрим, как сконфигурировать Web- сервер Apache для организации доступа к заданным HTML-документам только компьютеров с определенными IP-адресами причем для клиентов с заданными username и password.
 Первая задача решается следующим образом. Заходим в каталог /sys/netinet и  редактируем файл ядра ОС Unix if_ether.c ( добавляем в него строки, помеченные знаком +) :

                itaddr = myaddr;
                goto reply;
        }
+/*stattable*/ if (!(ac->ac_if.if_flags & IFF_NOARP)) {
        la = arplookup(isaddr.s_addr, itaddr.s_addr == myaddr.s_addr, 0);
        if (la && (rt = la->la_rt) && (sdl = SDL(rt->rt_gateway))) {
                if (sdl->sdl_alen &&

la->la_hold = 0;
                }
        }
+/*stattable*/ }
 reply:
        if (op != ARPOP_REQUEST) {
                m_freem(m);

Генерируем  ядро. После этого флаг NOARP на интерфейсе полностью замораживает  ARP-таблицу, созданную с помощью команды /usr/sbin/arp -f  arp_list. Здесь arp_list файл, в котором установлено соответствие между MAC-адресом и IP-адресом ( см. man arp). Содержимое ARP-таблицы может быть изменено с помощью команды /usr/sbin/arp –f arp_list, где arp_list отредактированное значение этого же файла. Флаг NOARP на интерфейсе, например ed0, можно установить по команде:
ifconfig ed0 –arp
Можно сделать еще проще без установки флага NOARP(добавляется только одна строка!):

                itaddr = myaddr;
                goto reply;
        }
+  goto reply;
        la = arplookup(isaddr.s_addr, itaddr.s_addr == myaddr.s_addr, 0);
        if (la && (rt = la->la_rt) && (sdl = SDL(rt->rt_gateway))) {
                if (sdl->sdl_alen &&

la->la_hold = 0;
                }
        }
 reply:
        if (op != ARPOP_REQUEST) {
                m_freem(m);

Управлять доступом к подкаталогам можно с помощью конфигурационного файла сервера Apache - httpd.conf. Однако бывает необходимо предоставить право частичного управления конфигурацией пользователям, не имеющим полномочия  перезапускать сервер (например, владельцам начальных страниц). Для этих целей в файле httpd.conf служит директива AccessFileName. По умолчанию параметр AccessFileName имеет значение .htaccess. Предположим, что директивой AccessFileName выбран файл .htaccess. Ниже представлены аргументы директивы AllowOverride(httpd.conf), управляющие директивами  файла  .htaccess:
1. None. Сервер игнорирует файлы .htaccess в этом каталоге. Если нет необходимости использовать для каталога файлы .htaccess,  следует явно установить эту опцию, поскольку это повысит  производительность сервера.
2. Options. Разрешает использование директивы Options. По умолчанию используются все аргументы.
3. Filelnfo. Разрешает использование в файлах .htaccess директив AddТуре и AddEncoding.
4. AuthConfig. Разрешает использование директив AuthName, AuthType, AuthUserFile и AuthGroupFile, необходимых для защиты каталогов паролями.
5. Limit. Разрешает использование директив, ограничивающих доступ на основе имени или IP-адреса узла(allow, deny, order).
6. Indexes. Разрешает локальный контроль индексов каталогов в файлах .htaccess с помощью директив FancyIndexing, AddIcon.
7. All. Разрешает использование всех вышеперечисленных директив.
Контроль доступа к серверу, отдельным его подкаталогам выполняется на основе имени, домена и IP-адреса компьютера клиента. Это достигается путем применения директив allow, deny, которые используются совместно с директивой order. Аргументами директив могут быть несколько имен узлов.
В директиве order задается порядок, в котором сервер Apache рассматривает директивы deny и allow.Существуют три допустимых значения:
1. deny,allow. Сначала сервер рассматривает директиву deny, а затем — allow.
2. allow,deny. Сначала сервер рассматривает директиву allow, а затем — deny.
3. mutual-failure. Сервер отказывает в доступе всем компьютерам, явно не указанным в списке allow.
Следующий пример запрещает доступ в каталог /www/htdocs/private всем узлам, кроме тех, которые  имеют в IP-адресе строку 204.62.129(файл httpd.conf):

<Directory /www/htdocs/private>
Options Includes
AllowOverride None
<Limit GET POST>
order deny,allow
deny from all
allow from 204.62.129
</Limit>
</Directory>

Если для доступа к ресурсу требуется ввод имени и пароля, то такой ресурс называется защищенным с помощью процедуры аутентификации. Имя и пароль хранятся в базе данных сервера.  Директива AuthName устанавливает соглашение об аутентификации для страниц, защищенных паролями. Под соглашением подразумевается набор сообщений, посылаемых клиенту для запроса на ввод имени и пароля.  Директива AuthType устанавливает тип аунтификации. В протоколе HTTP/1.0 только Basic. В директиве AuthUserFile указывает файл, содержащий имена и пароли. Пароли шифруются с помощью
функции crypt():

alex: D.aBXz13.5
mark: 21slfoUYG1

В директиве AuthGroup указывается файл, содержащий список групп и участников групп:

managers: alex mark
production: mark paul shelly

В директиве require указывается, какие условия должны выполняться для разрешения доступа. Ее аргументами могут быть список отдельных пользователей, список групп пользователей или разрешение на доступ всем пользователям из базы данных сервера.

require alex mark                              -> Для пользователей
require manager production               -> Для групп
require valid-user                               -> Всем пользователям из AuthUserFile

Например, разрешить доступ всем пользователям из AuthUserFile(httpd.conf):

<Directory /www/htdocs/protected>
AuthName Protected
AuthType basic
AuthUserFile /usr/local/etc/conf/users
<Limit GET POST>
require valid-user
</Limit>
</Directory>

Для создания файла паролей применяется программа htpasswd, которую можно найти в каталоге /usr/local/apache/bin/. Например, новый файл паролей users для пользователя ismm25 создается при помощи следующей команды:

ismm25> /usr/local/apache/bin/htpasswd -c users ismm25
New password:
Re-type new password:
Adding password for users ismm25

Опция -с указывает программе htpasswd, что следует создать новый файл паролей. Если эта опция опущена, программа пытается отредактировать существующий файл паролей (добавить новую запись).
 Ниже представлен пример файла .htaccess, расположенный в каталоге  /disk1/m/ismm25/public_html/lab1 для ограничения доступа к HTML документам этого каталога:

AuthName Protected
AuthType basic
AuthUserFile /disk1/m/ismm25/public_html/users
<Limit GET POST>
order deny,allow
allow from 212.109.57.236 195.230.134.73 195.230.134.97
deny from all
require valid-user
</Limit>

Файл  имен и паролей users находится  в каталоге /disk1/m/ismm25/public_html:

al:iv195lHJAtk/k
al1:2hBAjRckpc/D6

Вход доступен только с компьютеров 212.109.57.236, 195.230.134.73, 195.230.134.97  для пользователей al и al1.