Добавим маршрут к сети 192.168.0.0/24 через 192.168.1.1:
# ip route add 192.168.0.0/24 via 192.168.1.1
19.3.6. Динамическая маршрутизация
Команда ip route позволяет добавить динамический маршрут; шлюз будет выбираться в зависимости от текущей нагрузки на нега. Всегда будет выбираться шлюз с минимальной нагрузкой.
Пусть у нас есть два устройства — ppp0 и ppp1. Маршрут по умолчанию — через устройство ppp0, но если этот маршрут недоступен, будет использоваться ppp1:
# ip route add default scope global nexthop
dev ppp0 nexthop dev ppp1
Для удаления маршрута используйте команду ip route delete:
# ip route del default scope global nexthop
# dev ppp0 nexthop dev ppp1
19.3.7. Управление правилами маршрутизации
Для решения этой задачи предназначена команда ip rule. Маршрутизация производится в зависимости от:
♦ адреса получателя;
♦ адреса отправителя;
♦ IP-протокола;
♦ транспортного протокола.
По умолчанию используются три таблицы правил маршрутизации:
♦ Local — содержит таблицы для локальных и широковещательных адресов;
♦ Main — самая обыкновенная таблица маршрутизации;
♦ Default — пустая таблица по умолчанию.
Аргументы команды ip rule:
1. адрес отправителя;
2. адрес назначения;
3. имя интерфейса, с которого получен пакет;
4. метка пакета, которая устанавливается брандмауэром;
5. идентификатор таблицы маршрутизации: им может быть номер или строка из файла /etc/iproute2/rt_tables
;
6. приоритет таблицы (число).
Вот несколько примеров. Требование пересылать пакеты с сети 192.168.0.0/24 согласно таблице Main:
# ip rule add from 192.203.80.0/24 table main prio 100
Теперь допустим, что у нас есть два канала в Интернет (два провайдера): ppp1 с адресом 193.168.99.99, который связан с 193.168.99.100, и ppp2 с адресом 193.168.100.99, связанный с 195.1.1.1. Пользователь ivanov хочет, чтобы мы его пакеты отправляли через ppp2 (второго провайдера):
# echo 200 ivanov >> /etc/iproute2/rt_tables
# ip rule add from 192.168.0.10 table ivanov
# ip rule ls
0: from all lookup local
32765: from 192.168.0.10 lookup ivanov
32766: from all lookup main
32767: from all lookup default
Теперь для этого пользователя назначим маршрут по умолчанию и очистим кэш-таблицы маршрутизации, чтобы наши изменения вступили в силу:
# ip route add default via 195.1.1.1 dev ppp2 table ivanov
# ip route flush cache
Рассмотрим еще один практический пример. Направим весь трафик на порт 21 через устройство eth1:
# iptables -A PREROUTING -i eth0 -t mangle -p tcp --dport 21 -j MARK --set-mark 2
Теперь нужно создать правила для помеченных пакетов
# echo 202 21,tbl >> /etc/iproute2/rt_tables
# ip rule add fwmark 2 table 21.tbl
# ip route add default via 192.168.0.10 dev eth1 table 21.tbl
# ip route flush cache
19.4. Что такое брандмауэр
Брандмауэр (межсетевой экран, бастион, firewall) — это компонент системы, обеспечивающий защиту сети от несанкционированного доступа.
Как известно, весь трафик в сети состоит из пакетов. Каждый пакет состоит из двух частей: заголовка и тела. В заголовке пакета находится информация об источнике, адресате, типе пакета, а также прочая информация, которая характерна для пакетов определенных типов. В теле пакета находится собственно передаваемая информация. Так вот, брандмауэр представляет собой пакетный фильтр: он просматривает заголовок каждого проходящего через него пакета, а потом решает, что с этим пакетом делать: принять, игнорировать или отказать с уведомлением отправителя.
Обычно брандмауэр используется на шлюзах, соединяющих две сети. Например, на шлюзе между локальной сетью и Интернетом можно запретить передавать или принимать пакеты некоторых категорий, отграничив таким образом свою хорошо организованную сеть от всемирного хаоса.
Фильтрация пакетов встроена в ядро ОС Linux. В старых дистрибутивах (ядро 2.2 и ниже) стандартным брандмауэром служит IPChains, в новых (ядро 2.4 и выше) — IPTables. Оба они позволяют защититься от таких распространенных атак, как пинг смерти, атака на отказ, IP-спуфинг, фрагментация пакетов. Возможности пакетного фильтра IPTables значительно шире, чем у IPChains, но на практике дополнительные возможности используются редко — в основном применяются средства, присутствовавшие уже в IPChains. Поэтому я начну изложение принципов и приемов настройки брандмауэра с этого устаревшего фильтра.
19.5. Цепочки правил
Ядро стартует с тремя списками правил: input, forward, output. Эти правила называются firewall-цепочками или просто цепочками. Цепочка — это набор правил вида «заголовок пакета: действие». Если заголовок пакета соответствует заголовку, указанному в правиле, выполняется заданное в правиле действие. Если первое правило к этому пакету