Самоучитель системного администратора. 5-е изд



Pdf көрінісі
бет54/141
Дата18.12.2023
өлшемі20,51 Mb.
#197526
1   ...   50   51   52   53   54   55   56   57   ...   141
Байланысты:
Cамоучитель системного администратора книга


Глава 5 
Таблица 5.5
(окончание) 
Параметр
Описание 
--source-port 
(или 
--sport

Определяет порт отправителя. Эта опция может использоваться 
только вместе с параметром 
-p

Например: 
iptables -A FORWARD -p tcp -source-port 23 ... 
--destination-port
(или 
--dport

Задает порт-назначение. Опция возможна только с параметром 
-p

Синтаксис такой же, как и в случае с 
-source-port
-state
Позволяет отфильтровать пакеты по состоянию. Параметр 
-state
доступен только при загрузке модуля state с помощью другого
параметра: 
-m state
. Состояния пакета: 

NEW
— новое соединение (еще неустановленное); 

ESTABLISHED
— установленное соединение; 

RELATED
— пакеты, которые не принадлежат соединению,
но связаны с ним; 

INVALID
— неопознанные пакеты. 
Пример: 
iptables -A FORWARD -m state -state RELATED,INVALID 
-in-interface 
(или 
-i

Определяет интерфейс, по которому прибыл пакет. 
Пример: 
iptables -A FORWARD -i eth1 
-out-interface 
(или 
-o

Определяет интерфейс, по которому будет отправлен пакет: 
iptables -A FORWARD -o ppp0 
-tcp-flags
Производит фильтрацию по TCP-флагам (см. man iptables) 
Ранее мы познакомились с основными действиями iptables. В табл. 5.6 представле-
ны все действия iptables (цели iptables). Действие задается параметром 
-j

Таблица 5.6.
Цели iptables 
Действие Описание 
ACCEPT 
Принять пакет. При этом пакет уходит из этой цепочки и передается дальше 
DROP 
Уничтожить пакет 
REJECT 
Уничтожает пакет и сообщает об этом отправителю с помощью
ICMP-сообщения. Параметр 
-reject-with
позволяет уточнить тип
ICMP-сообщения: 

icmp-host-unreachable — узел недоступен; 

icmp-net-unreachable — сеть недоступна; 

icmp-port-unreachable — порт недоступен; 

icmp-proto-unreachable — протокол недоступен. 


Работа в глобальной сети 
211 
Таблица 5.6
(окончание) 
Действие Описание 
По умолчанию отправляет сообщение о недоступности порта. Но, используя 
сообщение icmp-host-unreachable, можно сбить злоумышленника с толку. 
Предположим, что вы просто решили отбрасывать неугодные вам пакеты 
(действие 
DROP
). Но злоумышленник будет посылать и посылать вам эти па-
кеты, чтобы брандмауэр только бы и делал, что занимался фильтрацией и 
удалением этих пакетов (один из видов атаки на отказ). А если вы ответите 
сообщением icmp-host-unreachable, то злоумышленник будет думать, что узел 
недоступен, т. е. компьютер выключен, либо он уже достиг своей цели — до-
бился отказа компьютера. С другой стороны, помните, что это действие поро-
ждает ответный ICMP-пакет, нагружающий исходящий канал, который в неко-
торых случаях (например, одностороннее спутниковое соединение) очень 
«узкий». Если злоумышленник пришлет вам 1 миллион пакетов, то вы должны 
будете отправить 1 миллион сообщений в ответ. Подумайте, готовы ли вы 
к такой нагрузке на исходящий канал
LOG 
Заносит информацию о пакете в протокол. Полезно использовать для прото-
колирования возможных атак — если вы подозреваете, что ваш узел кем-то 
атакуется. Также полезно при отладке настроек брандмауэра 
RETURN 
Возвращает пакет в цепочку, откуда он прибыл. Действие возможно, но лучше 
его не использовать, т. к. легко ошибиться и создать непрерывный цикл:
вы отправляете пакет обратно, а он опять следует на правило, содержащее 
цель 
RETURN
SNAT 
Выполняет подмену IP-адреса отправителя (Source NAT). Используется
в цепочках 
POSTROUTING
и 
OUTPUT
таблицы 
nat
(см. рис. 5.10) 
DNAT 
Выполняет подмену адреса получателя (Destination NAT). Используется 
только в цепочке 
POSTROUTING
таблицы 
nat
MASQUERADE 
Похож на 
SNAT
, но «забывает» про все активные соединения при потере
интерфейса. Используется при работе с динамическими IP-адресами, когда 
происходит потеря интерфейса при изменении IP-адреса. Применяется
в цепочке 
POSTROUTING
таблицы 
nat
Пример настройки брандмауэра 
Создать шлюз в Linux очень просто, и сейчас вы сами в этом убедитесь. Гораздо 
сложнее правильно его настроить — чтобы шлюз не только выполнял свою непо-
средственную функцию (т. е. передачу пакетов из локальной сети в Интернет и об-
ратно), но и защищал сеть. 
В последнее время очень популярны DSL-соединения, поэтому будем считать, что 
для подключения к Интернету используется именно оно. Хотя вся разница только
в названии интерфейса — ppp0. Вполне может быть, что у вас иная конфигурация. 
Например, у вас может быть два сетевых интерфейса: eth0 и eth1. Первый «смот-
рит» в локальную сеть, а второй — подключен к Интернету. Тогда и правила вы 
будете формировать исходя из того, что соединение с Интернетом происходит по 
интерфейсу eth1. 
При DSL-соединении у нас тоже будет два сетевых адаптера: первый (eth0) соеди-
нен с локальной сетью, а к второму (eth1) подключен DSL-модем. Перед настрой-


212 
Глава 5 
кой шлюза проверьте, действительно ли это так. Вполне может оказаться, что сете-
вая плата, к которой подключен DSL-модем, — это интерфейс eth0, а не eth1. Тогда 
вам придется или изменить названия интерфейсов при формировании правил, или 
просто подключить модем к другому сетевому адаптеру. 
IP-адрес DSL-соединения будет динамическим (обычно так оно и есть), а вот
IP-адрес сетевого адаптера, обращенного к локальной сети, назначим такой: 
192.168.1.1. Вы можете использовать и другой адрес (адрес должен быть локаль-
ным, если только у вас нет подсети с реальными IP-адресами). 
Итак, мы настроили локальную сеть, узнали имена сетевых адаптеров, включили 
IP-переадресацию. Осталось только ввести команду: 
sudo iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE 
Установите на всех компьютерах вашей сети IP-адрес 192.168.1.1 в качестве шлюза 
по умолчанию (можно настроить DHCP-сервер, чтобы не настраивать все компью-
теры вручную) и попробуйте пропинговать с любого узла какой-нибудь сайт. 
Оказывается, вы прочитали всю эту главу ради одной строчки. Так и есть. Но, сами 
понимаете, на этом настройка шлюза не заканчивается. Надо еще защитить вашу 
сеть. Как минимум, требуется установить следующие действия по умолчанию: 
sudo iptables -P INPUT DROP 
sudo iptables -P FORWARD ACCEPT 
sudo iptables -P OUTPUT DROP 
Разрешим входящие соединения на шлюз только от узлов нашей внутренней сети 
192.168.1.0: 
sudo iptables –A INPUT –i 
eth0
–-source 
192.168.1.0/24
–-match state –-state 
NEW,ESTABLISHED –j ACCEPT 
Надо также установить правило для цепочки 
OUTPUT
— оно разрешает шлюзу отве-
чать компьютерам нашей локальной сети: 
sudo iptables –A OUTPUT –o 
eth0
–-destination 
192.168.1.0/24
–-match state –-
state NEW,ESTABLISHED –j ACCEPT 
Будьте внимательны при указании имен интерфейсов и IP-адресов. Очень легко 
запутаться, а потом полчаса разбираться, почему шлюз не работает. 
Нам осталось только запретить соединения из Интернета (компьютеры нашей сети 
смогут устанавливать соединения с серверами Интернета, зато внешние интернет-
пользователи не смогут установить соединения с компьютерами нашей сети): 
sudo iptables –A FORWARD –i 
eth0
–-destination 
192.168.1.0/24
–-match state –-
state ESTABLISHED –j ACCEPT 
У нас получилась вполне приличная конфигурация: компьютеры нашей сети могут 
выступать инициаторами соединения, а интернет-узлы могут передавать данные
в нашу сеть только в том случае, если инициатором соединения выступил локаль-
ный компьютер. 
Но и это еще не все. Как вы уже догадались, поскольку мы не сохранили правила 
брандмауэра, при перезагрузке компьютера его придется настраивать заново. Нам 


Работа в глобальной сети 
213 
нет резона описывать настройку брандмауэра (сохранение и восстановление пра-
вил) в каждом дистрибутиве (пусть это будет вашим домашним заданием), так что 
рассмотрим универсальный способ. Он заключается в создании bash-сценария, вы-
зывающего необходимые нам команды настройки iptables. Такой сценарий вам ос-
танется только вызывать при загрузке системы. А для этого придется изучить 
строение системы инициализации в вашем дистрибутиве. 
Вместо того чтобы объяснять вам, как вызвать сценарий, загружающий правила 
брандмауэра (с этим вы и сами разберетесь), мы лучше приведем здесь сценарий 
(понятно, с комментариями), реализующий более сложную конфигурацию iptables. 
Этот сценарий (листинг 5.1) будет не только выполнять все функции шлюза, но и 
защищать сеть от разного рода атак. Сценарий лучше сразу поместить в каталог 
/etc/init.d
(это наша вам подсказка) и сделать исполняемым: 
# touch /etc/init.d/firewall_start 
# chmod +x /etc/init.d/firewall_start 
Листинг 5.1. Сценарий firewall_start 
# Путь к iptables 
IPT="/sbin/iptables" 
# Сетевой интерфейс, подключенный к Интернету 
INET="ppp0" 
# Номера непривилегированных портов 
UPORTS="1024:65535" 
# Включаем IPv4-forwarding (чтобы не думать, почему шлюз не работает) 
echo 1 > /proc/sys/net/ipv4/ip_forward 
# Удаляем все цепочки и правила 
$IPT -F 
$IPT -X 
# Действия по умолчанию. 
$IPT -P INPUT DROP 
$IPT -P FORWARD ACCEPT 
$IPT -P OUTPUT DROP 
# Разрешаем все пакеты по интерфейсу lo (обратная петля) 
$IPT -A INPUT -i lo -j ACCEPT 
$IPT -A OUTPUT -o lo -j ACCEPT 
# Запрещаем любые новые соединения с любых интерфейсов, кроме lo, 
# с нашим компьютером 
$IPT -A INPUT -m state ! -i lo --state NEW -j DROP 
$IPT -A INPUT -s 127.0.0.1/255.0.0.0 ! -i lo -j DROP 


214 

Достарыңызбен бөлісу:
1   ...   50   51   52   53   54   55   56   57   ...   141




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет