Категории
Самые читаемые
Лучшие книги » Компьютеры и Интернет » Программное обеспечение » Linux глазами хакера - Михаил Флёнов

Linux глазами хакера - Михаил Флёнов

Читать онлайн Linux глазами хакера - Михаил Флёнов

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 38 39 40 41 42 43 44 45 46 ... 120
Перейти на страницу:

Выполните команду ipchains -L, и в результате вы должны увидеть следующее содержимое всех ваших цепочек:

Chain input (policy DENY):

target prot  opt  source   destination ports

ACCEPT tcp ------ anywhere flenovm.ru  any -> http

Chain forward (policy DENY):

Chain output (policy DENY):

target prot  opt  source     destination ports

ACCEPT tcp ------ flenovm.ru anywhere    http -> any

Chain icmp (0 references):

В цепочках input и output появилось по одной строке. Обратите внимание, что в колонках source и destination обеих цепочек IP-адрес заменился на доменное имя моего компьютера flenovm.ru. Если сервер может определить имя, то он делает такую подмену. Посмотрите на колонку ports, здесь номер порта 80 заменен на http.

Я советую вам внимательно проанализировать созданный нами список фильтров, чтобы вы четко понимали каждую его колонку. Рассмотрим структуру строк на примере цепочки input:

target prot opt source destination ports

ACCEPT tcp ------ anywhere flenottro.ru any -> http

Первая строка — имена столбцов, а вторая — это фильтр, содержащий реальные значения. Здесь у нас 6 колонок:

□ target — действие, которое будет выполняться, если пакет удовлетворяет фильтру. В нашем случае стоит ACCEPT, т.е. пропустить дальше, в противном случае пакет уничтожается;

□ prot — протокол, в данном случае tcp;

□ opt — дополнительные опции. Мы их не указывали, поэтому здесь стоят прочерки;

□ source — источник пакета. Слово "anywhere" указывает на то, что посылка может быть от любого компьютера;

□ destination — адресат. Здесь может быть имя компьютера или его IP-адрес;

□ ports — порт, указывается в виде источник -> назначение. В данном случае у источника может быть любой порт (используется слово any), а пункт назначения должен работать только через http (80 порт).

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

ipchains -I input 1 -р tcp -d 192.168.77.1 21

 -s 192.168.77.10 -j ACCEPT

ipchains -I output 1 -p tcp -s 192.168.77.1 21

 -d 192.168.77.10 -j ACCEPT

В данном примере пропускаются пакеты, входящие на 21 порт сервера с адресом 192.168.77.1 с любого порта компьютера 192.168.77.10. Вторая строка разрешает исходящие пакеты с 21 порта сервера 192.168.77.1 на компьютер клиента с адресом 192.168.77.10.

Если у вас настроен FTP-сервер и вы сейчас к нему подключитесь, то не увидите файлов и не сможете работать. В отличие от Web-сервера протокол FTP требует для работы два порта: 21 (ftp-порт для передачи команд) и 20 (ftp-data порт для обмена данными). Поэтому нужно открыть доступ и к 20 порту:

ipchains -I input 1 -р tcp -d 192.168.77.1 20

 -s 192.168.77.10 -j ACCEPT

ipchains -I output 1 -p tcp -s 192.168.77.1 20

 -d 192.168.77.10 -j ACCEPT

Теперь компьютер с адресом 192.168.77.10 имеет полноценный доступ к FTP-сервису, а для всех остальных он недоступен. Сканирование сервера с любого компьютера вашей сети покажет открытым только 80 порт, и лишь с компьютера с IP 192.168.77.10 можно будет увидеть 21 и 80 порты.

Выполните команду ipchains -L, чтобы просмотреть текущее состояние ваших цепочек. Вы должны увидеть примерно следующий результат:

Chain input (policy DENY):

target prot opt   source        Destination ports

ACCEPT tcp ------ 192.168.77.10 flenovm.ru  any -> ftp-data

ACCEPT tcp ------ 192.168.77.10 flenovm.ru  any -> ftp

ACCEPT tcp ------ anywhere      flenovm.ru  any -> http

Chain forward (policy DENY):

Chain output (policy DENY):

target prot  opt  source     destination   ports

ACCEPT tcp ------ flenovm.ru 192.168.77.10 ftp-data -> any

ACCEPT tcp ------ flenovm.ru 192.168.77.10 ftp -> any

ACCEPT tcp ------ flenovm.ru anywhere      http -> any

Chain icmp (0 references):

Через фильтры, описанные в этом разделе, пропускаются любые пакеты, вне зависимости от интерфейса. В большинстве случаев это оправдано, но петля (loopback, всегда указывает на вашу машину), чаще всего, не нуждается в защите. Ее можно использовать только локально, и ни один хакер не сможет подключиться через этот виртуальный интерфейс удаленно. Вполне логичным будет разрешить все пакеты через loopback:

ipchains -A input -i lo -j ACCEPT

ipchains -A output -i lo -j ACCEPT

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

4.11.3. Примеры удаления ipchains-правил

Попробуем отменить доступ к FTP на примере удаления записей из цепочки input. Я специально выбрал в качестве образца FTP-сервис, потому что он требует две строки описания, и при совершении операции нужно быть очень внимательным. На вскидку нужно выполнить следующие команды:

ipchains -D input 1

ipchains -D input 2

Пока не спешите это делать. Ключ -D свидетельствует о необходимости удаления правила. После него указана цепочка, с которой надо произвести операцию, и номер записи. Обратите внимание на последовательность удаления в данном примере (сначала 1, а потом 2 запись). Ничего не заметили?

Если выполнить первую строку и потом просмотреть содержимое цепочки input, то в результате мы получим:

Chain input (policy DENY):

target prot  opt  source        Destination ports

ACCEPT tcp ------ 192.168.77.10 flenovm.ru  any -> ftp

ACCEPT tcp ------ anywhere      flenovm.ru  any -> http

Строка для порта ftp-data отсутствует, но остальные записи сместились, и при выполнении команды ipchains -D input 2 мы удалим разрешение для http-сервера, а доступ к ftp-порту останется. Это можно пережить, когда записей только три, а что если их будет сотня? Вспомнить, какая строка была удалена, очень сложно.

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

ipchains -D input 2

ipchains -D input 1

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

ipchains -A forward -р icmp -j DENY

В этой строке мы используем ключ -A, который добавляет строку в конец цепочки (в нашем случае была пустая).

Внимание!

Если в вашей системе запрещена переадресация (forward), то запись будет добавлена, но на экране может появиться предупреждение. Чуть позже в разд. 4.11.7 мы поговорим о перенаправлении более подробно.

Рассмотрим, что делает это правило. Оно сработает, если пакет требует перенаправления и при этом использует ICMP-протокол. Мы установили фильтр DENY, а значит, пакет будет просто удален. Таким образом, мы заблокировали ICMP-трафик для перенаправления. Чтобы запретить ICMP-пакеты вообще, нужно добавить еще правило:

ipchains -A input -р icmp -j DENY

Теперь попробуем удалить запись. Для этого наберите команду, которую вы выполняли для добавления правила, но замените ключ -A (или -I, если вы использовали вставку) на -D. В результате должна получиться команда:

ipchains -D forward -р icmp -j DENY

Выполните ее и убедитесь, что запись удалена успешно.

4.11.4. Правила "все кроме"

Очень часто приходится задавать правила в виде "все кроме". Например, нужно запретить доступ к порту telnet всем пользователям, кроме компьютера с адресом 192.168.77.10. Лучше поступить следующим образом: сначала разрешить доступ для компьютера 192.168.77.10, а потом запретить всем. Тогда в цепочке input будет две записи:

□ разрешить подключение к telnet с адреса 192.168.77.10;

□ запретить подключение к telnet.

Мы исходили из того, что по умолчанию разрешено все. Тогда, как и положено, все входящие пакеты будут сверяться с первой строкой, и если пакет пришел не с адреса 192.168.77.10, то вторая запись удалит его.

А ведь можно проблему решить одной строкой. Для этого нужно использовать следующее правило:

ipchains -I input 1 -р tcp -s ! 192.168.77.10 telnet -j DENY

В данной команде мы запрещаем (ключ -j DENY) подключение по протоколу TCP (-p tcp) всем пакетам, у которых адрес источника (ключ -s) не равен 192.168.77.10. Символ "!" выступает как знак неравенства, т.е. фильтру будут соответствовать все пакеты, в которых источник не равен указанному.

Такая запись эффективна, если по умолчанию все разрешено. В противном случае пакет от компьютера 192.168.77.10 будет все равно удален.

Знак "!" можно использовать и перед указанием номера порта. Например, нужно разрешить с адреса 192.168.77.12 полный доступ к серверу, .кроме порта telnet. Тогда по умолчанию делаем запрет всего и открываем доступ только компьютеру 192.168.77.12:

1 ... 38 39 40 41 42 43 44 45 46 ... 120
Перейти на страницу:
На этой странице вы можете бесплатно скачать Linux глазами хакера - Михаил Флёнов торрент бесплатно.
Комментарии