Отслеживание соединений#
Описание#
Одной из важных функций, построенных на основе фреймворка Netfilter, является отслеживание соединений (conntrack-sync). Отслеживание соединений позволяет ядру отслеживать все логические сетевые соединения или сеансы и, таким образом, соотносить все пакеты, которые могут составлять это соединение. NAT опирается на эту информацию, чтобы переводить все связанные пакеты одинаковым образом, а iptables может использовать эту информацию для работы в качестве межсетевого экрана с контролем состояния.
Однако состояние соединения совершенно не зависит от состояния верхнего уровня, например, от состояния TCP или SCTP. Отчасти это объясняется тем, что при простой пересылке пакетов, т.е. без локальной доставки, механизм TCP может быть вообще не задействован. Эвристика для таких протоколов часто основана на заданном значении тайм-аута бездействия, по истечении которого соединение Netfilter разрывается.
Каждое соединение Netfilter однозначно идентифицируется кортежем (протокол третьего уровня, адрес источника, адрес назначения, протокол четвертого уровня, ключ четвертого уровня). Ключ уровня-4 зависит от транспортного протокола; для TCP/UDP это номера портов, для туннелей это может быть их туннельный идентификатор, но в остальных случаях он равен нулю, как если бы он не был частью кортежа. Для того чтобы во всех случаях можно было проверить TCP-порт, пакеты будут в обязательном порядке подвергаться дефрагментации.
Для синхронизации трафика можно использовать как Многоадресную (Multicast), так и Одноадресную (Unicast) рассылки. В большинстве приведенных ниже примеров используется Multicast, но можно указать и unicast, используя ключ pee
после конкретного интерфейса, как в следующем примере:
set service conntrack-sync interface eth0 peer 192.168.0.250
Настройка#
Пример настройки#
Следующий пример представляет собой простую настройку службы отслеживания состояния между двумя маршрутизаторами.
Вставка картинки
Список команд для настройки службы отслеживания состояния на 1-ом и 2-ом маршрутизаторах:
.. option:: • set high-availablilty vrrp group internal virtual-address ... etc ...
.. option:: • set high-availability vrrp sync-group syncgrp member 'internal'
.. option:: • set service conntrack-sync accept-protocol 'tcp'
.. option:: • set service conntrack-sync accept-protocol 'udp'
.. option:: • set service conntrack-sync accept-protocol 'icmp'
.. option:: • set service conntrack-sync failover-mechanism vrrp sync-group 'syncgrp'
.. option:: • set service conntrack-sync interface 'eth0'
.. option:: • set service conntrack-sync mcast-group '225.0.0.50'
На основном маршрутизаторе информация о состоянии активных соединений представлена во внутреннем кэше таблицы conntrack-sync. Такое же количество активных соединений должно присутствовать во внешнем кэше таблицы conntrack-sync резервного маршрутизатора. Для получения информации о количестве активных соединений используется команда show conntrack-sync statistics
.
Проверка состояния активных соединений на основном маршрутизаторе:
$ show conntrack-sync statistics
Main Table Statistics:
cache internal:
current active connections: 10
connections created: 8517 failed: 0
connections updated: 127 failed: 0
connections destroyed: 8507 failed: 0
cache external:
current active connections: 0
connections created: 0 failed: 0
connections updated: 0 failed: 0
connections destroyed: 0 failed: 0
traffic processed:
0 Bytes 0 Pckts
multicast traffic (active device=eth0):
868780 Bytes sent 224136 Bytes recv
20595 Pckts sent 14034 Pckts recv
0 Error send 0 Error recv
message tracking:
0 Malformed msgs 0 Lost msgs
Проверка состояния активных соединений на основном маршрутизаторе:
$ show conntrack-sync statistics
Main Table Statistics:
cache internal:
current active connections: 0
connections created: 0 failed: 0
connections updated: 0 failed: 0
connections destroyed: 0 failed: 0
cache external:
current active connections: 10
connections created: 888 failed: 0
connections updated: 134 failed: 0
connections destroyed: 878 failed: 0
traffic processed:
0 Bytes 0 Pckts
multicast traffic (active device=eth0):
234184 Bytes sent 907504 Bytes recv
14663 Pckts sent 21495 Pckts recv
0 Error send 0 Error recv
message tracking:
0 Malformed msgs 0 Lost msgs
Список команд#
Основные настройки#
- • set service conntrack-sync accept-protocol <proto>#
Определяет протоколы
<proto>
, для которых будут синхронизироваться локальные записи службы отслеживания состояния.Поддерживаемые протоколы: tcp, sctp, dccp, udp, icmp and ipv6-icmp.
- • set service conntrack-sync event-listen-queue-size <size>#
Задает максимальный размера очереди для локальных событий службы отслеживания состояния, который может быть достигнут. Значение размера очереди для прослушивания локальных событий службы отслеживания состояния задается в Мегабайтах.
- • set service conntrack-sync expect-sync <all|ftp|h323|nfs|sip|sqlnet>#
Определяет протокол, для которого необходимо синхронизировать записи ожиданий.
- • set service conntrack-sync failover-mechanism vrrp sync-group <group>#
Активирует механизм отказоустойчивости, используемый для службы отслеживания состояния. Поддерживается только протокол VRRP.
- • set service conntrack-sync ignore-address <x.x.x.x>#
Задает IP-адрес или подсеть
<x.x.x.x>
, для которых локальные записи службы отслеживания состояния не будут синхронизироваться.
- • set service conntrack-sync interface <name>#
Определяет интерфейс
<name>
, используемый для синхронизации записей службы отслеживания состояния.
- • set service conntrack-sync interface <name> port <port>#
Задает номер порта
<port>
для интерфейса<name>
, используемого для синхронизации записей службы отслеживания состояния.
- • set service conntrack-sync listen-address <ipv4address>#
Задает локальный IPv4-адрес
<ipv4address>
прослушивания входящих соединений для службы отслеживания состояния.
- • set service conntrack-sync mcast-group <x.x.x.x>#
Задает адрес для группы Многоадресной трансляции
<x.x.x.x>
, используемой для синхронизации записей службы отслеживания состояния. По умолчанию используется адрес 225.0.0.50.
- • set service conntrack-sync interface <name> peer <address>#
Задает адрес узла
<address>
отправки Одноадресных UDP сообщений для службы отслеживания состояния, если не используется конфигурация Многоадресной трансляции, описанная выше.
- • set service conntrack-sync sync-queue-size <size>#
Задает размер очереди
<size>
для синхронизации записей системы отслеживания состояния.Значение задается в Мегабайтах.
- • set service conntrack-sync disable-external-cache#
Отключает внешний кэш и напрямую передает состояния потока в систему отслеживания соединений в ядро резервного межсетевого экрана.
Мониторинг состояния#
- • show conntrack table ipv4#
Выводит таблицу системы отслеживания состояния для протокола IPv4-.
Пример работы команды show conntrack table ipv4:
admin@fakel:~$ show conntrack table ipv4
TCP state codes: SS - SYN SENT, SR - SYN RECEIVED, ES - ESTABLISHED,
FW - FIN WAIT, CW - CLOSE WAIT, LA - LAST ACK,
TW - TIME WAIT, CL - CLOSE, LI - LISTEN
CONN ID Source Destination Protocol TIMEOUT
1015736576 10.35.100.87:58172 172.31.20.12:22 tcp [6] ES 430279
1006235648 10.35.101.221:57483 172.31.120.21:22 tcp [6] ES 413310
1006237088 10.100.68.100 172.31.120.21 icmp [1] 29
1015734848 10.35.100.87:56282 172.31.20.12:22 tcp [6] ES 300
1015734272 172.31.20.12:60286 239.10.10.14:694 udp [17] 29
1006239392 10.35.101.221 172.31.120.21 icmp [1] 29
Примечание
Если в таблице отсутствуют записи об активных соединениях и выдается предупреждение, значит, система отслеживания состояния не включена. Чтобы включить систему отслеживания состояния, достаточно создать правило трансляции NAT или правило межсетевого экрана.
- • show conntrack-sync cache external#
Выводит записи внешнего кэша синхронизации соединений системы отслеживания состояния
- • show conntrack-sync cache internal#
Выводит записи внутреннего кэша синхронизации соединений системы отслеживания состояния
- • show conntrack-sync statistics#
Выводит актуальную статистику системы отслеживания соединений.
Пример работы команды show conntrack-sync statistics:
admin@fakel:~$ show conntrack-sync statistics
Main Table Statistics:
cache internal:
current active connections: 19606
connections created: 6298470 failed: 0
connections updated: 3786793 failed: 0
connections destroyed: 6278864 failed: 0
cache external:
current active connections: 15771
connections created: 1660193 failed: 0
connections updated: 77204 failed: 0
connections destroyed: 1644422 failed: 0
traffic processed:
0 Bytes 0 Pckts
multicast traffic (active device=eth0.5):
976826240 Bytes sent 212898000 Bytes recv
8302333 Pckts sent 2009929 Pckts recv
0 Error send 0 Error recv
message tracking:
0 Malformed msgs 263 Lost msgs
- • show conntrack-sync status#
Выводит информацию об актуальном состоянии системы отслеживания соединений.
Пример работы команды show conntrack-sync status:
fakel@fakel:~$ show conntrack-sync status
sync-interface : eth0.5
failover-mechanism : vrrp [sync-group GEFOEKOM]
last state transition : no transition yet!
ExpectationSync : disabled