Администрирование
Руководство по использованию редактора vi
Написал Алхимик   
Среда, 20 Июль 2005

Руководство по использованию vi.


Часть 1.


в ОС Unix огромное количество текстовых редакторов, начиная от примитивных консольных, до многофункциональных и более предпочтительных новичкам графическим. Сегодня мы остановимся на таком известнейшем редакторе как Vi. Я не встречал таких unix-подобных систем, в которых бы не было по умолчанию этого редактора. Это замысловатый на первый взгляд редактор, с которым новички боятся знакомится из-за кажущейся сложности, но на самом деле в нём таится простота.
Рассмотрим 4 самые основные режимы редактора vi
- Командный режим
- Режим ввода
- Режим последней строки
- Режим выхода в оболочку
В дальнейшем мы рассмотрим эти режимы более подробно.
1. Командный режим. Это режим, в котором нажатие на ту или иную кнопку интерпретируется как команда. Тоесть в этом режиме можно например, сохранить файл, удалить текст, перейти в другой режим, etc. Для более конкретного примера рассмотрим команду i которая переводит редактор в режим ввода текста. Возврат в командный режим производится путём нажатия клавиши esc.
2. Режим ввода. Название режима говорит само за себя, то есть в этом режиме вы можете вводить любой текст, переход в этот режим осущесвляется командой i . Некоторые опытные пользователи говорят, что у этой команды есть ещё три подрежима: режим открытия, режим вставки и режим добавления. При переходе в режим открытия, текст вводится с начала новой строки. Режим вставки позволяет вставить текст в позиции курсвора. В режиме добавление, текст можно вводить как в позиции курсора так и в конце строки.
3. Режим последней строки. Все команды этого режима начинаются с (:), такими командами например могут быть: поиск, замена, управление файлом, управление редактором, etc. После ввода двоеточия, курсор перемещается на последнюю строку, где и придётся вам ввести остальную часть команды. Отсюда и пошло название режима последней строки.
4. Режим выхода в оболочку. Иногда вам может потребоваться при редактировании какого-либо файла, выполнить какую-либо команду в оболочке не завершая процесс редактирования, для этого и нужен этот режим. После выполнения этой команды вы можете вернуться к редактируемому файлу. Использование этого режима мы расмотрим в сл. части.
Основы работы с редактором vi:
Запуск редактора. Для запуска редактора, необходимо в командной строке набрать: vi имя_файла Если файл существовал ранее, то он откроется на редактирование, если его не было, то он создастся. После запуска редактора мы попадаем в командный режим.
Выход из редактора. Часто случается так, что новички не изучив основ vi запускают его, и после немогут из него выход, поэтому мы сразу рассморим пару способов выхода. Обычным способом для выхода из редактора является команда ZZ, чтобы её вполнить необходимо в командном режиме набрать две заглавных буквы "Z". После этого всё содержимое рабочего буфера будет записано на диск и копия файла будет обновлена, и вы вернётесь в оболочку системы. Ещё одним способом выхода, более привычным для меня (так уж исторически сложилось) является команда в режиме последней строки, для этого необходимо просто набрать следующее :q После этого редактор будет закрыт без сохранения изменений произведённых в файле. Для того, чтобы сохранить внесённые изменения в файл можно использовать следующую команду :wq
Теперь мы рассмотрим самые основные команды, с помощью которых вы сможете редактировать тот или иной файл. Этих команд вам будет достаточно для прмитивнх изменений, например для настройки какого-либо кофнигурационного файла, какого либо демона.
Управление курсором. В большинстве случаев, управление курсором осуществляется с помощью управляющих клавиш, таких как: вверз, вниз, вправо, влево соотвественно. Однако вы можете столкнуться с такими терминалами, которые не понимают эти клавиши не так как вам бы хотелось, и с помощью них вы не сможете передвигаться по документу. Для этого в редакторе vi предусмотрен другой способ передвижения по документу, с помощью специальных символьных клавиш. l - сдвиг курсора на одну позицию вправо. h - сдвиг курсора на одну позицию влево . k - сдвиг курсора на одну строку вверх. j - сдвиг курсора на вниз на одну строку. Это кажется неудобным, но стоит всего лишь расположить 4 пальца на эти клавиши, как это подозрение у вас отпадёт.
0 (нолик) - переместит курсор на начало строки. ^ - переместит курсор на первую из заполненнх позиций текущей строки.
$ - перенесёт курсор на конец текущей строки
Ctrl+f - перенесёт курсор на один экран вниз. ctrl+b - перенесёт курсор на один экран вверх. Так же есть возможность прокрутки экрана на пол экрана вниз и вверх с помощью: ctrl+d, ctrl+u соотвественно
Для перехода курсора на определённую строку используется следующая команда номер_строкиG, в результате курсор перейдёт на указанный номер строки. Очень удобно и неотъемлемая часть повседневной жизни.
H - перенесёт курсор на самую первую строку файла (hight)
M - перенесёт курсор на середину файлв (medium)
L - перенесёт курсор на последнюю строку файла (last)
w - перемешает курсор на одно слово вправо
b - перемещает курсор на одно слово влево
e - перемещает курсор в конец слова
Удаление символа. Для удаление символа, который ыделен курсором, необходимо дать команду: x Для удаление символа, слева от курсора необходимо дать команду: X Для удаление сразу нескольких символов справа от курсора (включая и тот символ, который выделен курсором) необходимо дать команду: число_символов x Например, вам необходимо удалить три символа справа от курсора, для этого необходимо ввести: 5x Аналогично используется команда для удаления указанного числа для удаления слева от курсора.
Удаление слова. Для удаление слова справа от курсора, необходимо, подвести курсор на первую букву, удаляемого слова и дать команду dw (произошло от delete word) . Для удаления слова, находящегося слева от курсора, необходимо, курсор поставить на последний символ удаляемого слова и дать команду db (заметте для удаления слова справа, мы устанавливали курсор перед словом) Также для удаления сразу нескольких слов, можно использовать формат комнды число_словdw или число_словdb
Удаление строк. Для удаление строк необходимо перейти курсором, на строку, которую мы хотим удалить, и нажать сочетание клавишь dd Аналогично можно удалить сразу нескольких строк, всего лишь указать количество строк перед dd
Этих команд, вполне достаточно для первого знакомства, с этим мощным редактором и вполне достаточно для того что бы вы смогли отредактировать файл, не прибегая к установке других редакторов, не входящих в установку по умолчанию.

(0 Комментарии)

 
Добавление дисковых квот в FreeBSD
Написал Алхимик   
Среда, 20 Июль 2005
*Перекомпилируйте ваше ядро с этой опцией:

options QUOTA

(Для получения справки относительно перекомпиляции вашего ядра,
смотрите другой документ в этой же базе данных)

*Добавьте к вашему файлу /etc/rc.conf:

enable_quotas="YES"

*Наконец вам необходимо отредактировать /etc/fstab для включения
дисковых квот на отдельную файловую систему.
Здесь же вы можете применить пользовательские или групповые квоты, или
и то и другое, ко всем вашим файловым системам.
Для включения квот на файловую систему для отдельного пользователя,
добавьте опцию userquota в поле options в файле /etc/fstab для той
файловой, к которой вы хотите применить квоты.
К примеру:

/dev/da1s2g /home ufs rw,userquota 1 2

*Аналогично, для включения групповых квот используйте опцию groupquota
вместо ключевого слова userquota. Для включения как пользовательских,
так и групповых квот, замените данные следующим образом:

/dev/da1s2g /home ufs rw,userquota,groupquota 1 2

*Перезагрузите вашу машину

*проверьте, работают ли квоты, при помощи
$ quota -v

*отредактируйте ваши квоты примерно так:
# edquota -u test

Quotas for user test:
/usr: blocks in use: 65, limits (soft = 50, hard = 75)
inodes in use: 7, limits (soft = 50, hard = 60)
/usr/var: blocks in use: 0, limits (soft = 50, hard = 75)
inodes in use: 0, limits (soft = 50, hard = 60)

(0 Комментарии)
 
Настройка Squid для начинающих (squid proxy acl)
Написал Алхимик   
Среда, 20 Июль 2005

Настройка Squid для чайников

ВСТУПЛЕНИЕ

Многие администраторы сталкиваются с проблемой разумного использования
времени и канала для выхода в сеть Интернет, задумываются о возможности
экономии времени и денег, об ограничении скорости для отдельных видов
файлов или личностей, в конце концов об экономии всего, что связано с
теми или иными аспектами выхода в глобальную сеть.

Я, с помощью этой статьи, попытаюсь наглядно и доходчиво объяснить о
настройках самого распространенного прокси сервера - прокси
сервера Squid.


НАЧАЛЬНЫЕ НАСТРОЙКИ SQUID ДЛЯ ДОСТУПА ПОЛЬЗОВАТЕЛЕЙ

Мы не будем вдаваться в процесс установки прокси сервера Squid, а
перейдем сразу к его настройке.

Самое элементарное, что нам после установки следует сделать, так это
разрешить доступ пользователям нашей локальной сети. Для этого служат
параметры http_port, http_access. Кроме этого, мы заведем acl (список
контроля доступа) для нашей локальной сети.

И так, http_port нам нужен постольку, поскольку наш прокси сервер Squid
должен обслуживать только компьютеры нашей локальной сети и быть
невидимым для внешнего мира, дабы исключить возможность "плохим
людям" внешней сети воспользоваться нашим каналом или трафиком, а
в случае, если будут обнаружены "дыры" в коде прокси сервера
Squid, воспользоваться ими.

Параметр http_access используется для разрешения или запрещения доступа
к определенным ресурсам, определенным адресам либо с определенных
адресов, к определенным сайтам, по определенным протоколам, портам и
всему тому, что непосредственно указано с помощью Acl (списков контроля
доступа).

Таблица N 1. Некоторые подсети.

|Диапазон адресов |Полная форма |Краткая форма
192.168.0.1-192.168.0.254 192.168.0.0/255.255.255.0 192.168.0.0/24
192.168.20.1-192.168.20.254 192.168.20.0/255.255.255.0 192.168.20.0/24
192.168.0.1-192.168.254.254 192.168.20.0/255.255.0.0 192.168.20.0/16
10.0.0.1-10.254.254.254 10.0.0.0/255.0.0.0 10.0.0.0/8


Предположим, что у Вас сеть с адресами от 192.168.0.1 до 192.168.0.254,
тогда добавим новый Acl (см. таблицу N1):

acl LocalNet src 192.168.0.0/24


Предположим, что у Вас прокси сервер Squid расположен по адресу
192.168.0.200 на порту 3128, тогда пишем в файле конфигурации:

http_port 192.168.0.200:3128


Следующим нашим действием будет запрет использования нашего прокси
сервера, кроме как пользователями нашей локальной сети:

http_access allow LocalNet
http_access deny all


В данном случае слово allow является разрешением, а слово deny
запрещением, то есть мы разрешаем доступ к прокси серверу Squid с
адресов нашей локальной сети и запрещаем доступ всем остальным.

Будьте внимательны, указывая http_access, так как Squid использует их в
порядке указания Вами.


ИЗУЧАЕМ ACL (СПИСКИ КОНТРОЛЯ ДОСТУПА)

Система управления доступом в прокси сервере Squid является очень гибкой
и обширной. Она состоит из элементов со значениями и списков доступа c
указанием allow (разрешение) или deny (запрещение).

Формат Acl следующий:

acl имя элемент список


Формат списка доступа:

http_access указание имя_acl


Мы рассмотрим некоторые элементы, которые позволяет использовать прокси
сервер Squid, конечно же с примерами:


* acl имя src список


С помощью этого элемента (src) мы указываем IP-адрес источника, то есть
клиента от которого пришел запрос к нашему прокси серверу.

В следующем примере мы разрешим Васе Пупкину (Pupkin) и отделу
программирования (Progs) доступ к нашему прокси серверу, а всем
остальным запретим:

acl Progs src 192.168.0.1-192.168.0.9
acl Pupkin src 192.168.0.10
http_access allow Progs
http_access allow Pupkin
http_access deny all


* acl имя dst список


Данный элемент (dst) указывает IP-адрес назначения, то есть IP-адрес
того сервера, доступ к которому желает получить клиент прокси сервера.

В следующем примере мы запретим Васе доступ к подсети 194.67.0.0/16 (к
примеру, в ней находится тот же aport.ru):

acl Net194 dst 194.67.0.0/16
http_access deny Pupkin Net194


* acl имя dstdomain список


С помощью этого элемента (dstdomain) мы указываем домен, доступ к
которому желает получить клиент прокси сервера.

В следующем примере мы запретим Васе доступ к варезным сайтам nnm.ru и
kpnemo.ru:

acl SitesWarez dstdomain .nnm.ru .kpnemo.ru
http_access deny Pupkin SitesWarez


В случае, если будет необходимо указать домен источника, то используйте
srcdomain.


* acl имя [-i] srcdom_regex список
* acl имя [-i] dstdom_regex список


Данные элементы отличаются от srcdomain и dstdomain лишь тем, что в них
используются регулярные выражения, которые в данной статье мы не
рассматриваем, но пример всё-таки приведём:

Acl SitesRegexSex dstdom_regex sex
Acl SitesRegexComNet dstdom_regex \.com$ \.net$
http_access deny Pupkin SitesRegexSex
http_access deny Pupkin SitesRegexComNet


В данном примере мы запретили доступ Пупкину Василию на все домены,
содержащие слово sex и на все домены в зонах .com и .net.

Ключ -i призван игнорировать регистр символов в регулярных выражениях.


* acl имя [-i] url_regex список


С помощью этого элемента (url_regex) мы указываем шаблон регулярного
выражения для URL.

Пример указания файлов с расширением avi, начинающихся на слово sex:

acl NoAviFromSex url_regex -i sex.*\.avi$


В случае, если Вы желаете указать шаблон только для пути URL, то есть
исключая протокол и имя хоста (домена), то используйте urlpath_regex.

Пример для указания музыкальных файлов:

acl media urlpath_regex -i \.mp3$ \.asf$ \.wma$


* acl имя_acl port список


Указание номера порта назначения, то есть порта, к которому желает
подключится клиент нашего прокси сервера.

Как пример, запретим всем использование программы Mirc через наш прокси
сервер:

Acl Mirc port 6667-6669 7770-7776
http_access deny all Mirc


* acl имя_acl proto список


Указание протокола передачи.

Как пример, запретим вышеупомянутому Васе использование протокола FTP
через наш прокси сервер:

acl ftpproto proto ftp
http_access deny Pupkin ftpproto


* acl имя_acl method список


Указание метода http запроса клиентом (GET, POST).

Возьмем ситуацию, когда следует запретить Васе Пупкину просматривать его
почту на сайте mail.ru, но при этом разрешить прогуливаться по сайту без
запретов, то есть запретить Васе возможность войти в свой почтовый ящик
через форму входа на сайте:

acl SiteMailRu dstdomain .mail.ru
acl methodpost method POST
http_access deny Pupkin methodpost SiteMailRu


ОГРАНИЧЕНИЯ ПОЛЬЗОВАТЕЛЕЙ

Достаточно часто в нашей стране возникает ситуация, что канала доступа в
глобальную сеть Интернет на всех пользователей не хватает и возникает
желание дать каждому по максимуму, но при этом не дать каналу
"загнуться" из-за любителей позагружать файлы.

Средства прокси-сервера Squid позволяют этого добится несколькими путями:

- первый путь это оптимизация кеширования объектов;


- второй - это ограничение по времени определенных пользователей, что не
совсем корректно;


- третий путь заключается в ограничении скорости для определенных типов
файлов, пользователей и всего того, что определено нами через Acl.



ОГРАНИЧЕНИЯ ПО ВРЕМЕНИ

Ограничить пользователей по времени можно следующим образом:

acl имя time дни чч:мм-ЧЧ:ММ


Где день: M - Понедельник, T - Вторник, W - Среда, H - Четверг, F -
Пятница, A - Суббота, S - Воскресенье.

При этом чч:мм должно быть меньше чем ЧЧ:ММ, то есть можно указать с
00:00-23:59, но нельзя указать 20:00-09:00.

Давайте запретим всё тому же Васе иметь доступ в сеть Интернет с 10 до
15 часов каждый день:

acl TimePupkin time 10:00-15:00
http_access deny Pupkin TimePupkin


Если хочется разрешить Васе пользоваться программой Mirc с 13 до 14
часов, то пишем:

acl TimePupkin time 13:00-14:00
http_access allow Pupkin TimePupkin Mirc
http_access deny Pupkin Mirc


А что делать, если необходимо запретить или разрешить в определенные дни
недели? Squid также позволяет это сделать, к примеру с 13 до 14 в
понедельник и в воскресенье:

acl TimePupkin time MS 13:00-14:00


Как видите, ничего сложного в этом нет.


ОГРАНИЧЕНИЯ ПО СКОРОСТИ

Регулировка скорости в прокси сервере Squid осуществляется с помощью
пулов. Пул - это своего рода бочонок с пивом, в который пиво постоянно
заливают до краёв, а клиенты наливают в свои стаканы или иные ёмкости
для дальнейшего внутреннего потребления по мере надобности через свои
персональные краны.

Пулы регулируются с помощью трех параметров: delay_class,
delay_parameters, delay_access. Количество пулов указывается с помощью
параметра delay_pools.

Пулы могут быть трёх классов:

1. Весь поток пива ограничен одним краном (на всю сеть).


2. Весь поток пива ограничен одним краном, но при этом кран делится
на подкранчики (на каждый IP).
3. Весь поток пива ограничен одним краном, но кран делится на
подкранчики (на подсети), которые также делятся на мини кранчики (на
каждый IP).


Форматы:

delay_pools количество_объявленных_пулов
delay_access номер_пула действие имя_acl


действие может быть allow (разрешить) и deny (запретить). При этом,
данный пул действует на тех, кому он разрешен и не действует на тех,
кому он запрещен. В случае, если указано allow all, а затем deny Pupkin,
то на Пупкина данный класс всё-равно подействует, т.к. IP-адрес Пупкина
объявленный в acl Pupkin, входит в список адресов acl all. Имейте это
ввиду.

delay_class номер_пула класс_пула
delay_parameters номер_пула параметры


параметры отличаются в зависимости от класса пула:

для первого класса:

delay_parameters 1 байт_на_всю_сеть


для второго класса:

delay_parameters 1 на_всю_сеть на_клиента


для третьего класса:

delay_parameters 1 на_всю_сеть на_подсеть на_клиента


Для примера, у нас канал на 128 Кбит (в среднем 15 Кбайт в секунду) и мы
желаем Васе (Pupkin) дать всего 4 Кбайта/сек (на все про всё один
маленький бокальчик), отделу программирования (Prog) дать всего 10
Кбайт/сек и на каждого всего по 5 Кб/сек (всего два бокальчика), всех
остальных ограничить в 2 Кбайта/сек на каждого и 10 Кб/сек на всех, а
файлы mp3 (media) ограничить в 3 Кбайта в секунду на всех (на всю бочку
пива такой маленький кран). Тогда пишем:

acl Prog src 192.168.0.1-192.168.0.9
acl Pupkin src 192.168.0.10
acl LocalNet src 192.168.0.0/255.255.255.0
acl media urlpath_regex -i \.mp3$ \.asf$ \.wma$

delay_pools 4
# сначала ограничим mp3
delay_class 1 1
delay_parameters 1 3000/3000
delay_access 1 allow media
delay_access 1 deny all
# ограничим бедного Васю
delay_class 2 1
delay_parameters 2 4000/4000
delay_access 2 allow Pupkin
delay_access 2 deny all
# ограничим отдел программирования
delay_class 3 2
delay_parameters 3 10000/10000 5000/5000
delay_access 3 allow Prog
delay_access 3 deny all
# а теперь ограничим остальных (второй класс пула)
delay_class 4 2
delay_parameters 4 10000/10000 2000/2000
delay_access 4 deny media
delay_access 4 deny Pupkin
delay_access 4 deny Prog
delay_access 4 allow LocalNet
delay_access 4 deny all


Часто возникает вопрос, а как лучше всего использовать столь малый
канал, чтобы он автоматически делился между всеми теми, кто в данный
момент что-либо загружает? На этот вопрос имеется однозначный ответ -
средствами прокси сервера Squid этого сделать не возможно, но всё-таки
кое-что предпринять можно:

delay_class 1 2
delay_parameters 1 -1/-1 5000/15000
delay_access 1 allow LocalNet
delay_access 1 deny all


Таким образом мы выделяем на всю нашу сеть и на подсети максимальный
канал (-1 означает неограниченность), а каждому пользователю даем
скорость максимум в 5 Кб/сек после того, как он скачает на максимальной
скорости первые 15 Кбайт документа.

Таким образом клиент не съест весь канал, но достаточно быстро получит
первые 15 Кбайт.


ОПТИМИЗИРУЕМ КЕШИРОВАНИЕ ОБЪЕКТОВ В SQUID
-----------------------------------------

Существует множество типов файлов, которые обновляются не достаточно
часто, чтобы позволить прокси серверу реагировать на заголовки от
вебсерверов о том, что данный объект не подлежит кешированию либо он был
на удивление только что изменён. Это довольно частая ситуация.

Для разрешения таких ситуаций призван параметр refresh_pattern в файле
настроек прокси-сервера Squid, но полностью с формулами и т.п. мы его
рассматривать не будем.

Формат:

refresh_pattern [-i] строка МИНВ процент МАКСВ параметры


Данный параметр используется для того, чтобы определить возраст объекта
(считайте файла) в кеше, следует ли его обновлять или нет.

МИНВ (минимальное время) - время в минутах, когда объект, имеющийся в
кеше считается свежим.

МАКСВ (максимальное время) - максимальное время в минутах, когда объект
считается свежим.

Параметры - это один или несколько следующих параметров:

- override-expire - игнорировать информацию об истечении свежести объекта
и использовать МИНВ.


- override-lastmod - игнорировать информацию о дате изменения файла и
использовать МИНВ.


- reload-into-ims - вместо запроса клиентского запроса "не кешировать
документы" (no-cache) посылать запрос "Если изменен с"
(If-Modified-Since)


- ignore-reload - игнорировать запросы клиентов "не кешировать документы"
(no-cache) или "перезагрузить документ" (reload).


И так, мы подошли к самом главному. Ну, так какие же типы файлов реже
всех обновляются? Как правило, это разнообразные музыкальные файлы и
картинки.

Установим свежесть объектов, для этого для картинок и музыкальных файлов
укажем, скажем так для примера, целых 30 дней (43200 минут):

refresh_pattern -i \.gif$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.png$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.jpg$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.jpeg$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.pdf$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.zip$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.tar$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.gz$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.tgz$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.exe$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.prz$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.ppt$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.inf$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.swf$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.mid$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.wav$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.mp3$ 43200 100% 43200 override-lastmod override-expire


Показанные Выше настройки лишь пример, для того, чтобы была понятна
суть.

Теперь можете проверить эффективность своего прокси сервера, она уж
точно возрастет.


ЗАКЛЮЧЕНИЕ

Прокси сервер Squid не является одним лишь распространенным прокси
сервером, существуют и другие. Но как показывает статистика, большинство
используют именно этот прокси сервер, но при этом всё равно у многих
начинающих возникают проблемы с настройкой.

С помощью этой статьи я попытался хоть немного раскрыть для обширных
масс некоторые функции прокси сервера Squid.

(0 Комментарии)
 
Делаем FreeBSD безопасной
Написал Алхимик   
Среда, 20 Июль 2005

FreeBSD: Top Security

Итак, ты решил построить сервер на базе FreeBSD. Хороший выбор. Однако любой сервер является лакомым кусочком для хакера, и даже не стоит сомневаться в том, что рано или поздно он подвергнется атаке. Поэтому в первую очередь стоит заняться не настройкой различных сервисов, а защитой системы от взлома. Конечно, в системе, установленной с настройками по умолчанию, защита находится на достаточном уровне. Однако мы можем сделать наш сервер настоящим крепким орешком. Ну что, начнем строить защиту своей FreeBSD-системы?

Консольные твики

Как известно, загрузившись в однопользовательском режиме, можно изменить пароль суперпользователя. Нам следует устранить эту досадную недоработку. Отредактируем файл /etc/ttys таким образом, чтобы при загрузке с опцией boot -s система запрашивала пароль

console none unknown off insecure

Также следует запретить прямой вход с консоли пользователя root. Для этого в том же файле нужно сменить статус консоли на insecure. Вот пример для нулевой консоли:

ttyv0 "/usr/libexec/getty Pc" cons25 on insecure

Для того чтобы только пользователь root мог видеть все запущенные процессы, добавь в /etc/sysctl.conf следующую запись:

kern.ps_showallprocs=0

Ваши права?

Права доступа к файлам - одна из отличительных особенностей UNIX-систем. Давай назначим эти права как следует. На некоторые системные файлы стоит установить такие флаги доступа, чтобы они были доступны только суперпользователю. Вот примерный список:

# chmod 700 /root

# cd /etc

# chmod 600 syslog.conf rc.conf newsyslog.conf hosts.allow login.conf

Некоторые системные файлы стоит защитить даже от суперпользователя. Для этого существуют модификационные флаги, установить которые можно командой chflags. К ним относятся флаг appnd, который переводит файл в режим добавления данных, и флаг chg, делающий файл изменяемым только для пользователя root. Подробности по использованию этой команды можно прочесть на странице руководства, посвященного chflags (man chflags).

Файловую систему с пользовательскими каталогами лучше смонтировать с параметром -nosuid, который игнорирует suid-биты на файлах. Вот пример строчки из /etc/fstab, монтирующий /usr/home с флагом nosuid (nodev здесь также не помешает - прим.ред.):

/dev/ad0s1h /usr/home ufs rw,nosuid 2 2

Утилита suidcontrol (www.watson.org/fbsd-hardening/suidcontrol.html) поможет установить правильную политику в отношении suid/sgid-файлов в системе.

Чтобы при загрузке удалялось содержимое каталога /tmp, добавляем в /etc/rc.conf строку

clear_tmp_enable="YES"

Уровни защиты ядра

Ядро FreeBSD может работать на нескольких уровнях защиты (securelevel). Значение этого уровня варьируется от -1 до 3. Для нас интересны последние три режима. В режиме 1 (безопасный режим) нельзя снимать модификационные флаги с файлов, а смонтированные дисковые устройства и файлы устройств /dev/mem, /dev/kmem не могут быть открыты для записи. В режиме 2 (режим повышенной безопасности), в дополнение к предыдущему, запрещена прямая запись на диски, независимо от того, смонтированы они или нет. В режиме 3 (режим безопасности сети), кроме ограничений второго режима, запрещено изменение правил файрволов и ограничений скорости канала. Для включения уровней защиты следует добавить в /etc/rc.conf строки :

kern_securelevel_enable="YES"

kern_securelevel="2"

Текущий уровень защиты можно посмотреть командой

$ sysctl kern.securelevel

А повысить его без перезагрузки -

# sysctl -w kern.securelevel=2

Отмечу, что при уровне защиты 1 или выше пересобрать userland и ядро тебе не удастся, поскольку на важных системных файлах стоят модификационные флаги.

Меняем алгоритм шифрования

Заменим алгоритм шифрования паролей с md5 на еще более надежный Blowfish. Делаем исправления в файле /etc/login.conf в секции default:

// заменяем алгоритм шифрования на Blowfish

:passwd_format=blf:\

// устанавливаем период устаревания паролей

:passwordtime=52d:\

// предупреждаем о том, что пароли должны содержать разные символы

:mixpasswordcase=true:\

// задаем минимальную длину пароля

:minpasswordlen=9:\

Теперь обновляем базу (login.conf.db):

# cap_mkdb /etc/login.conf

Проверим, получилось ли у нас. Посмотри содержимое /etc/master.passwd. Если зашифрованный пароль теперь начинается с "$2", все ОК. Осталось сделать так, чтобы пароли новых пользователей шифровались алгоритмом Blowfish. Редактируем файл /etc/auth.conf:

crypt_default=blf

Шифруем файловую систему

Файлы, которые могут представлять интерес для взломщиков, надежнее всего зашифровать. Нет, не думай, что я опять буду рассказывать про PGP. Для создания зашифрованных дисков можно обойтись стандартными средствами FreeBSD - GEOM и BDE. Что такое GEOM? Это новая система работы с дисками, появившаяся в 5-й ветке FreeBSD. Благодаря своей модульной структуре, она позволяет делать с файловой системой все что угодно. Нас интересует один из ее модулей - BDE (block device encryption) - поддержка шифрования файловой системы. Для начала добавим в ядро опцию

options GEOM_BDE

Создадим новый каталог, в котором будут лежать конфиги GBDE:

# mkdir /etc/gbde

Инициализируем зашифрованный диск:

# gbde init /dev/ad4s1c -i -L /etc/gbde/ad4s1c

Откроется редактор, в котором можно указать различные настройки. Для файловых систем UFS1 и UFS2, используемых в FreeBSD, следует указать значение переменной sector_size равным 2048. Не забудь выбрать хороший пароль для доступа к диску. Подключаем диск:

# gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c

Система попросит ввести ключевую фразу для доступа к зашифрованному диску. Теперь содержимое этого диска доступно при обращении к файлу устройства /dev/ad4s1c.bde. Создадим на нем новую файловую систему и монтируем его:

# newfs -U -O2 /dev/ad4s1c.bde

# mount /dev/ad4s1c.bde /mnt

Теперь можно работать с содержимым зашифрованного диска. Обрати внимание, что скорость файловых операций с зашифрованными разделами почти в 4 раза ниже, чем при работе с обычными дисками. Если ты пользуешься утилитой sysinstall, имей в виду, что она несовместима с зашифрованными разделами и их нужно отключать перед запуском этой утилиты. Также заметь, что зашифрованные диски невозможно подключать автоматически из /etc/fstab, потому не стоит применять шифрование к системным разделам (/, /usr, /var).

По окончании работы с зашифрованным разделом размонтируем устройство и отключим шифрованный диск:

# umount /dev/ad4s1c.bde

# gbde detach /dev/ad4s1c

IP-протоколы

Теперь займемся защитой от атак, связанных с недостатками протокола TCP/IP. Начнем с фильтрации SYNFIN-пакетов. Это TCP-пакеты с одновременно установленными флагами начала и завершения соединения, пользы от них практически никакой, зато они часто используются при хакерских атаках. Одновременно займемся ICMP-протоколом и включим в ядро еще парочку полезных опций:

// ох уж эти SYNFIN-пакеты

options TCP_DROP_SYNFIN

// ограничиваем количество ICMP-ответов, что помогает при защите от DoS атак

options ICMP_BANDLIM

// генерируем случайный идентификатор IP-пакетов

options RANDOM_IP_ID

// блокируем RST-пакеты

options TCP_RESTRICT_RST

Но этого еще недостаточно, добавляем в /etc/rc.conf:

// отбрасываем SYNFIN-пакеты

tcp_drop_synfin="YES"

// отключаем прием и отправку переадресовывающих ICMP-пакетов

icmp_drop_redirect="YES"

// в системном журнале регистрируем переадресовывающие ICMP-пакеты

icmp_log_redirect="YES"

// предотвращаем springboarding и smurf-атаки

icmp_bmcastecho="NO"

Далее прописываем в /etc/sysctl.conf строчки

net.inet.tcp.blackhole=2

net.inet.udp.blackhole=1

С помощью этих переменных мы превращаем нашу систему в так называемую "черную дыру". Отныне она не будет реагировать на пакеты, поступающие на закрытые порты, и они будут просто пропадать. Этот прием позволяет защититься от флуда и от скрытого сканирования портов.

Огненная стена

Естественно, без фильтрации сетевого трафика нам не обойтись. Встроенный файрвол ipfw позволит нам фильтровать пакеты по заданным критериям и вести учет. Для того чтобы включить файрвол, нужно добавить в ядро вот эти опции:

options IPFIREWALL

options IPFIREWALL_VERBOSE

После чего добавить в /etc/rc.conf строки

firewall_enable="YES"

firewall_type="open"

Однако тип файрвола "open" подходит для чего угодно, но только не для защищенного сервера. Поэтому для более надежной защиты можно выбрать одну из стандартных конфигураций:

// защита только сервера

firewall_type="client"

// защита сервера и локальной сети

firewall_type="simple"

или же написать свой файл с правилами файрвола. Немного разберемся с созданием правил. Общий формат правила ipfw такой:

from to

В качестве выполняемого действия файрвол может разрешить (allow, pass, accept, permit) прохождение пакета или запретить (deny, drop, reject) его, а также посчитать (count), перенаправить по нужному адресу (fwd, forward) или другой программе (divert). Протоколы могут быть ip или all (для всех протоколов стека TCP/IP), а также tcp, udp, icmp и т.п.

Формат поля источника (from) и приемника (to) пакета может быть записан в различных формах: доменное имя, ip-адрес, подсеть в формате IP:MASK (192.168.1.0:255.255.255.0) или IP/LENGTH (192.168.1.0/24), а также в виде специального слова any (любой адрес) или me (все адреса локальной машины). Для tcp и udp протокола после адреса источника или приемника можно через пробел указать еще и порт. И, наконец, из дополнительных условий самыми полезными являются направление пакета (in или out - входящий и исходящий соответственно), интерфейс, через который будет проходить пакет (например, via fxp0), и даже идентификатор пользователя (uid) или группы (gid), для которых это правило будет работать. Теперь не составит труда разобраться, что правило deny tcp from any to 192.168.1.0/24 in via fxp0

запрещает прохождение любых входящих tcp-пакетов через интерфейс fxp0 к сети 192.168.1.0/24, а правило

count ip from 192.168.1.0/24 to me uid 1001

будет вести учет трафика, который получит из сети 192.168.1.0/24 пользователь с UID, равным 1001.

Каждое правило файрвола должно иметь свой уникальный номер. Правила проверяются в порядке возрастания своих номеров. Для управления файрволом существует команда ipfw. Чтобы добавить правило, воспользуйся командой

# ipfw add

а чтобы его удалить:

# ipfw delete

Для просмотра списка правил есть команда ipfw list, а ipfw show покажет трафик и количество пакетов, обработанных каждым из правил. В качестве примера для настройки файрвола можно посмотреть файл /etc/rc.firewall, а также ознакомиться с руководством по ipfw. Напоследок добавим в /etc/rc.conf строчку

log_in_vain="YES"

Теперь все попытки подключения к закрытым портам твоего сервера будут занесены в логи.

Демонов - под контроль

Не ко всем службам, запущенным на твоем сервере, стоит давать доступ. Если заблокировать доступ к отдельным портам можно с помощью правильной настройки файрвола, то доступ к службам проще ограничить с помощью файла /etc/hosts.allow. Для примера ограничим доступ по ssh только несколькими сетями:

# vi /etc/hosts.allow

sshd : localhost : allow

sshd : 192.168.1. : allow

sshd : 10.1.1.0/255.255.255.240 : allow

sshd : ALL : deny

Формат файла, как видишь, достаточно простой. Сначала мы указываем имя службы, затем имя или адрес хоста или сети, затем действие. Правило ALL указывает, как поступать в случаях, не предусмотренных предыдущими правилами.

Теперь займемся демоном inetd, который играет весьма важную роль в обеспечении безопасности системы. Через него работают telnetd, ftpd, talk и прочие службы. Если никакие из демонов, запускаемых из inetd, тебе не нужны, отключи его. Для этого надо указать в /etc/rc.conf:

inetd_enable="NO"

Если тебе все же нужен inetd и службы, которые запускаются из него, то стоит включить протоколирование событий и при большой нагрузке увеличить количество одновременных обращений к inetd (по умолчанию это число равно 256). Для этого добавь в /etc/rc.conf строчку

inetd_flags="-l -R 1024"

Последние штрихи

Вот мы и закончили, все изменения в конфигурационные файлы внесены, настройки сделаны. Осталось пересобрать ядро и перезагрузить систему. Посмотрим, чего мы добились.

$ netstat -na | grep LISTEN

Эта команда покажет нам, на каких портах висят сервисы. Чем их меньше, тем лучше. Также попробуй просканить свою машину nmap'ом. Итак, теперь твоя система намного более защищена, чем раньше. Не забывай регулярно обновлять ее и следить за логами. Удачи!

Система безопасности TrustedBSD MAC

В FreeBSD 5 появилась новая система безопасности ядра, TrustedBSD MAC Framework. MAC расшифровывается как Mandatory Access Control - принудительный контроль доступа. Система MAC с помощью установки так называемых меток на различные компоненты системы ограничивает доступ к ним на основе созданных администратором политик. Например, с помощью MAC вполне реально создать систему контроля доступа к файловой системе, аналогичной файрволу ipfw, разграничить видимость процессов и многое другое. Если тебя заинтересовала эта тема, обратись к соответствующему разделу FreeBSD HandBook, а также страницам руководства (man 4 mac).

DANGER

Используй SSH для удаленного управления сервером, иначе никакие рекомендации по безопасности тебе не помогут. Никогда не пользуйся telnet для удаленного доступа.

(0 Комментарии)

 
Настройка FreeBSD для подключения к серверу Novell NetWare
Написал Алхимик   
Среда, 20 Июль 2005

Файл-серверы под управлением Novell NetWare до сих пор широко используются, несмотря на значительное уменьшение интереса к ним. Они довольно неприхотливы к железу и их производительность и надежность на сегодняшний день остаются на высоте.

Часто возникает необходимость в рамках одной локальной сети «подружить» сервер под управлением FreeBSD и сервер под управлением Novell NetWare, который работает по протоколу IPX (конечно версии NetWare начиная с четвертой поддерживают и TCP/IP, но большинство системных администраторов предпочитают использовать «родной» для NetWare IPX).

Для того чтобы из FreeBSD получить доступ к ресурсам сервера NetWare необходимы следующие элементы:

Поддержка протокола IPX в ядре FreeBSD
Поддержка формата пакетов Ethernet 802.3 и/или 802.2
Клиент для Novell Directory Services – для доступа к файлам на сервере NetWare
Добавление поддержки IPX в ядро
Добавьте строчку option IPX в ваш файл конфигурации ядра, затем скомпилируйте новое ядро и установите его.

Добавление поддержки формата пакетов Ethernet 802.3 и 802.2
Пакеты, передаваемые, по сети в среде Ethernet могут иметь несколько различных форматов заголовка пакета. Для реализации протоколов TCP/IP используются пакеты формата EtherNet_II, а для IPX в Novell NetWare используются форматы Ethernet 802.3 и/или 802.2.

Для поддержки этих типов пакетов во FreeBSD существует специальный модуль ядра – if_ef.ko (справку по нему можно посмотреть с помощью команды man ef). Написал этот модуль наш соотечественник – Борис Попов и начиная с версии FreeBSD 4.0 он включен в дистрибутив системы. По адресу: http://people.freebsd.org/~bp/ можно найти его описание процесса установки IPX на FreeBSD.

При загрузке этот модуль создает несколько виртуальных сетевых интерфейсов, каждый из которых отвечает за свой формат пакета. Для примера, предположим, что у вас в системе установлен один сетевой адаптер и во FreeBSD соответствующий ему драйвер назвается rl0 (у меня карточка на чипе RealTek 8039)

Выведем с помошью команды ifconfig –a список всех сетевых адаптеров в системе и их настройки.

rl0: flags=8843 mtu 1500
inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
ether 00:30:4f:0a:f4:b4
lo0: flags=8049 mtu 16384
inet 127.0.0.1 netmask 0xff000000

После того как вы загрузите драйвер if_ef с помошью команды kldload if_ef.ko результат вывода ifconfig –a изменится:

rl0: flags=8843 mtu 1500
inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
ether 00:30:4f:0a:f4:b4
rl0f0: flags=8842 mtu 1500
ether 00:30:4f:0a:f4:b4
rl0f1: flags=8843 mtu 1500
ether 00:30:4f:0a:f4:b4
rl0f2: flags=8843 mtu 1500
ether 00:30:4f:0a:f4:b4
rl0f3: flags=8842 mtu 1500
ether 00:30:4f:0a:f4:b4
lo0: flags=8049 mtu 16384
inet 127.0.0.1 netmask 0xff000000

Модуль if_ef добавляет «виртуальные» сетевые карты соответствующие разным форматам кадра:

rl0f0 - соответствует Ethernet_II
rl0f1 - Novell Ethernet_802.3
rl0f2 - Ethernet_802.2
rl0f3 - Ethernet_802.2/SNAP

Чтобы эти «виртуальные» адаптеры появлялись в системе при каждой загрузке добавьте в файл /boot/loader.conf строчку if_ef_load="YES".

Конфигурирование протокола IPX
До этого момента в моей системе был установлен только протокол TCP/IP и строчки файла /etc/rc.conf отвечающие за конфигурирование сетевых протоколов выглядели следующим образом:

network_interfaces="lo0 rl0"
ifconfig_rl0="inet 192.168.0.1 netmask 255.255.255.0"

Необходимо добавить в него инструкции для настройки протокола IPX

network_interfaces="lo0 rl0 rl0f1 rl0f2"
ifconfig_rl0="inet 192.168.0.1 netmask 255.255.255.0"
ifconfig_rl0f1_ipx="ipx 0x96CB468C"
ifconfig_rl0f2_ipx="ipx 0xB1AFF7EE"
ipxrouted_enable="YES"

Обратите внимание на формат команд:

ifconfig_rl0f1_ipx="ipx 0x96CB468C" – означает, что мы конфигурируем протокол IPX на «виртуальном» сетевом адаптере rl0f1, который передает пакеты в формате Novell Ethernet_802.3 и для этого адаптера необходимо использовать номер сети 0x96CB468C (номера сетей устанавливаются администратором при настройке Novell NetWare).

ipxrouted_enable="YES" – команда загрузки демона IPX Routed, который отвечает за построение таблицы маршрутиризации пакетов IPX.

Также важно не забыть добавить в список network_interfaces имена двух новых адаптеров.

Для того чтобы наши изменения вступили в силу, нужно находясь в каталоге /etc дать команду: netstart.

Установка клиента Novell NetWare для FreeBSD
Клиент для Novell NetWare – это библиотека NCPLIB. Ее можно загрузить с сайта автора (ее тоже написал Борис Попов) по адресу http://people.freebsd.org/~bp/ncpl.html

Последняя версия этой библиотеки – 1.3.4, ее то мы и используем.

Распакуем исходные тексты библиотеки: tar –zxvf ncplib-1.3.4.tar.gz. Далее войдем в каталог ncplib-1.3.4, скомпилируем: (командой make) и установим ее (командой make install).

Библиотека NCPLIB содержит в себе специальный модуль ядра для доступа к томам NetWare через сеть – nwfs.ko. Его нужно загрузить командой kldload nwfs.ko. Также, чтобы он автоматически загружался при старте системы нужно добавить в файл /boot/loader.conf строку nwfs_load="YES".

Сейчас все готово к проверке соединения с сервером NetWare:

Дайте команду: ipxping –с 4 NW_SERVER, где NW_SERVER имя Вашего сервера NetWare. Вы должны увидеть что-то похожее на следующее:

Ping NW_SERVER (338b7777.1H.9086H): 8 data bytes
8 bytes received: seq=0 time=0.231 ms
8 bytes received: seq=1 time=0.211 ms
8 bytes received: seq=2 time=0.216 ms
8 bytes received: seq=3 time=0.202 ms

--- NW_SERVER ping statistics ---
4 packets sent, 4 received, 0% packets loss
round-trip min/avg/max = 0.202/0.215/0.231

Эта команда – ping по протоколу IPX.

В данный момент у нас уже есть практически все необходимое для доступа к NetWare из FreeBSD, осталось только сконфигурировать клиента.

Конфигурирование клиента
Создайте на сервере NetWare пользователя и задайте ему пароль, к примеру пользователя FREEBSD с паролем 123.

Создайте в Вашем домашнем каталоге файл .nwfsrc (первый символ его имени - точка), следующего содержания:

[NW_SERVER:FREEBSD]
password=123
retry_count=10
timeout=5
access_mode=0700
sig_level=0
bindery=no

Теперь при каждом подключении к серверу NetWare будут использоваться данные из этого файла.

Монтирование томов NetWare под FreeBSD
Создайте в своем домашнем каталоге пустой каталог –точку монтирования, к примеру nw.

Дайте команду mount_nwfs /NW_SERVER:FREEBSD/VOL nw

По этой команде том VOL на сервере NW_SERVER будет смонтирован в каталог nw, причем для входа на сервер NetWare будет использован пользователь FREEBSD, пароль которого хранится в файле .nwfsrc. Конечно, при этом том VOL должен существовать.

После этого вы сможете выполнять операции над файлами находящимися сервере NetWare стандартными для FreeBSD способами.

В конце работы с файлами на сервере дайте команду umount nw, чтобы отключится от него.

(0 Комментарии)

 
<< В начало < Предыдущая 1 2 3 4 5 6 7 8 9 10 Следующая > В конец >>

Всего 55 - 63 из 128

 


Реклама | Контакты | ©2005-2013 Алхимик