Чтение онлайн

ЖАНРЫ

Linux глазами хакера

Флёнов Михаил Евгеньевич

Шрифт:

□ 

– j действие
— операция, которая должна быть выполнена над пакетом. В качестве аргумента можно указать
ACCEPT
,
REJECT
или
DENY
;

□ 

– s адрес порт
— характеристики отправителя пакета. Первый аргумент задает IP-адрес источника, а второй (не обязательный) — порт. Будьте внимательны, у протокола ICMP нет портов;

□ 

– d адрес порт
— атрибуты получателя пакета. Первый аргумент задает IP-адрес назначения, а второй (не обязательный) — порт.

4.11.1.

Фильтр по умолчанию

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

ipchains -L

В результате вы должны увидеть на экране примерно следующее:

Chain input (policy ACCEPT):

Chain forward (policy ACCEPT):

Chain output (policy ACCEPT):

Chain icmp (0 references) :

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

ipchains: Incompatible with this kernel (невозможно для этого ядра).

Такая фраза может появиться, если ipchains отсутствует или запущена неверно. Я уже не раз встречал это сообщение, потому что производители дистрибутивов неверно конфигурируют систему по умолчанию. А ведь лечится эта ошибка достаточно просто, и ядро тут ни при чем.

Просмотрите файл /etc/rc.d/init.d/ipchains с помощью текстового редактора программы МС или команды

cat
. Первое будет удобнее. Нужно найти в файле следующую строку:

IPCHAINS_CONFIG=/etс/sysconfig/ipchains

Путь к файлу в директиве

IPCHAINS_CONFIG
может быть другим. В современных дистрибутивах в директории /etc/sysconfig/ хранятся файлы конфигурации служб. Для сервиса ipchains это файл ipchains. Проверьте его существование следующей командой:

ls /etc/sysconfig/ipchains

Если файл не существует, то его следует создать. Для этого выполним следующую команду:

cat >> /etc/sysconfig/ipchains

Отныне все команды, вводимые в консоль, будут сохраняться в файле. Для того чтобы сервис ipchains заставить работать, достаточно ввести:

:input ACCEPT

Теперь нажмите клавиши <Ctrl>+<D> и перезапустите сервис ipchains следующей командой:

/etc/rc.d/init.d/ipchains restart

Обратите внимание, что нужно указать полный путь. Если этого не сделать, то будет запущена утилита ipchains, а не сценарий запуска из директории /etc/rc.d/init.d/.

Вот теперь команда должна выполниться успешно.

Для начала давайте запретим любой трафик. Но прежде, чем мы перейдем к созданию правил, сделаю еще одно замечание. Любую систему нужно начинать конфигурировать с чистого листа, потому что настройки по умолчанию могут оказаться не слишком эффективными и небезопасными. Выполните команду

ipchains -F
, чтобы обнулить текущие настройки. Сетевой экран — это сердце защиты, поэтому в данном случае очистка является наиболее важной.

Теперь зададим политику по умолчанию.

Для этого нужно выполнить команду
ipchains
с параметром
– P
для каждой цепочки и указать политику безопасности:

ipchains -Р input DENY

ipchains -Р output REJECT

ipchains -P forward DENY

Обратите внимание, что для входящих (input) и проходящих (forward) пакетов я установил полный запрет, поэтому они будут удаляться без каких-либо предупреждений. Для исходящей информации можно поставить в правило

REJECT
, чтобы внутренние клиенты при попытке подключения к серверу могли получить сообщение об ошибке.

Теперь ваш компьютер невиден и недоступен в сети. Попробуйте проскандировать порты или выполнить команду

ping
к серверу. Оба действия не дадут результата, как будто компьютера вообще не существует для окружающих.

4.11.2. Примеры добавления ipchains-правил

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

– I
и номер
1
).

Если вы добавляете общее правило запрета, то его следует поместить в самый конец. Когда правило касается конкретного действия, порта или адреса, то его место в начале цепочки. Таким образом, в вашем своде сначала будут идти специфические правила, а потом глобальные.

Допустим, что у нас используется публичный Web-сервер, и нужно разрешить всем пользователям работать с 80 портом (именно его используют Web-серверы по умолчанию). Для решения этой проблемы выполняем команды:

ipchains -I input 1 -р tcp -d 192.168.77.1 80 -j ACCEPT

ipchains -I output 1 -p tcp -s 192.168.77.1 80 -j ACCEPT

В качестве порта можно указывать как числовое значение, так и имя. Это значит, что приведенные выше команды можно записать таким образом:

ipchains -I input 1 -р tcp -d 192.168.77.1 web -j ACCEPT

ipchains -I output 1 -p tcp -s 192.168.77.1 web -j ACCEPT

Здесь вместо 80 порта указано его имя

web
, и программа ipchains корректно отработает с этим аргументом.

Рассмотрим каждый ключ первой строки в отдельности:

□ 

– I input 1
— ключ
– I
указывает на необходимость вставки правила под заданным номером. Потом показываем цепочку, в которую надо вставить правило, в данном случае это input. Цифра 1 обозначает номер, под которым вставляется правило, т.е. оно будет первым;

□ 

– р tcp
— Web-сервер работает по протоколу HTTP, который использует в качестве транспорта TCP. С помощью ключа
– р
мы в явном виде указываем протокол. Не забывайте делать это. В противном случае вы откроете одновременно доступ к сервисам на двух портах (TCP и UDP). Хорошо, если на 80 порту UDP в этот момент не будет работать какая-нибудь программа;

Поделиться с друзьями: