LINUX.ORG.RU
ФорумAdmin

Контроль за сетевыми соединениями

 ,


0

1

Есть один вопрос. Он скорее всего много раз был, но тем не менее.

Как получить сведения обо всех соединениях, что в данный момент с сервером установлены? Я выполняю команду netstat от суперпользователя с ключём -a, она выдаёт такую информацию (излишняя информация заменена символами %):

iskatel@gate:~$ sudo netstat -4apn
[sudo] password for root: 
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 192.168.121.254:53      0.0.0.0:*               LISTEN      2233/named      
tcp        0      0 192.168.21.254:53       0.0.0.0:*               LISTEN      2233/named      
tcp        0      0 83.%%%.%%%.236:53        0.0.0.0:*               LISTEN      2233/named      
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      2233/named      
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      2412/sshd       
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      2233/named      
tcp        0      0 0.0.0.0:445             0.0.0.0:*               LISTEN      4541/smbd       
tcp        0      0 0.0.0.0:139             0.0.0.0:*               LISTEN      4541/smbd       
tcp        0    240 83.%%%.%%%.236:22        83.149.8.170:32327      ESTABLISHED 10171/sshd: iskatel
udp        0      0 192.168.121.254:53      0.0.0.0:*                           2233/named      
udp        0      0 192.168.21.254:53       0.0.0.0:*                           2233/named      
udp        0      0 83.%%%.%%%.236:53        0.0.0.0:*                           2233/named      
udp        0      0 127.0.0.1:53            0.0.0.0:*                           2233/named      
udp        0      0 0.0.0.0:67              0.0.0.0:*                           2450/dhcpd      
udp        0      0 192.168.21.255:137      0.0.0.0:*                           4537/nmbd       
udp        0      0 192.168.21.254:137      0.0.0.0:*                           4537/nmbd       
udp        0      0 0.0.0.0:137             0.0.0.0:*                           4537/nmbd       
udp        0      0 192.168.21.255:138      0.0.0.0:*                           4537/nmbd       
udp        0      0 192.168.21.254:138      0.0.0.0:*                           4537/nmbd       
udp        0      0 0.0.0.0:138             0.0.0.0:*                           4537/nmbd       
udp        0      0 0.0.0.0:37330           0.0.0.0:*                           2450/dhcpd      
udp        0      0 0.0.0.0:1194            0.0.0.0:*                           4665/openvpn    
raw        0      0 0.0.0.0:1               0.0.0.0:*               7           2450/dhcpd
Для TCP-протокола это более чем достаточно.Но по UDP информация не полная. Вот сервер sshd в настоящий момент имеет один открытый сокет с одним клиентом. Если бы было два клиента netstat отобразил бы две строки. А для openvpn отображается только одна строка и адрес клиентов не виден, хотя я знаю что клиенты подключены и их в настоящий момент двое. Да, я понимаю, что это особености UDP-протокола в котором такого понятия как «состояния сокета» вообще нет, высокая скорость в ущерб контролю, но всё же, скажите, существует ли какой-нибудь способ конролировать UDP-соединения?

А ведь ещё есть ICMP-пакеты по которым вообще никакой информации. То есть меня могут ICMP-флудом досить, а я даже знать об этом не буду.

А ещё есть второй сервер на FreeBSD в которой я не очень разбираюсь и там netstat не имеет ключа -p, то есть я не могу получить никакой информации какие именно программы взаимодействуют с сетью.

Вобщем, мой вопрос: как полностью контролировать TCP, UDP и ICMP соединения?

★★★★★

А ещё есть второй сервер на FreeBSD в которой я не очень разбираюсь и там netstat не имеет ключа -p, то есть я не могу получить никакой информации какие именно программы взаимодействуют с сетью.

man sockstat

И да, все соедиинения берите из netflow.

hizel ★★★★★ ()
Ответ на: комментарий от edigaryev

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

sunny1983 ★★★★★ ()
Ответ на: комментарий от sunny1983

netflow собирает данные по потокам. Каждый поток представляет из себя запись src:srcport dst:dstport, start_time, end_time и т.д. Данных, доступных через netflow, более чем достаточно для мониторинга соединений и подсчета трафика.

Тебе нужен сенсор, который будет собирать потоки, и коллектор, на котором всё это дело будет считаться

leader32 ()
Ответ на: комментарий от leader32

То есть для того чтобы контроллировать сетевые соединения - нужно установить систему сетевого мониторинга и сведения брать из неё? А не проще ли эти сведения брать из ядра? В /proc ведь должно быть где-то видно какой пакет в какую программу идёт?

netflow я на прошлой работе пытался использовать для подсчёта трафика. Сенсор и коллектор у меня работали. Дальше нужно было писать скрипты, чтобы из того что фиксировал коллектор составлялась статистика - и это как раз оказалось сложным.
А вот как можно netflow использовать для контроля соединений, которые происходят прямо сейчас - не совсем понятно.

sunny1983 ★★★★★ ()
Ответ на: комментарий от sunny1983

netflow - это если серьезно контроллировать. Он кроме сведений ничего не предлагает. В качестве коллектора можно попробовать nfsen, он и графики рисует.

а по теме - conntrack как раз и записывает информацию о текущих соединения, оправдывая свое название. Как-то на другом форуме встречал вопрос: «А как iptables понимает, что состояние udp-соединения ESTABLISHED или RELATED? В протоколе вообще же не предусмотрено установление соединения.». Ответ: «Да, всё верно, модуль state определяет по ответным пакетам состояние соединения. Если ответный пакет пришел - значит, соединение установлено.». Точно не знаю, в каком пакете эта программа, но можешь поискать, запустив что-то вроде yum provides */conntrack, должно показать, в каком пакете он.

leader32 ()
Ответ на: комментарий от leader32

Это я понял. conntrack взаимодействует с одноимённым компонентом ядра, получая сведения о текущих соединениях. С этим же компонентом взаимодействует netfilter для определения состояния соединения. А программа netstat тоже получает сведения из conntrack?

Пакет conntrack установил. А для чего нужен пакет conntrackd?

«conntrack -L» выдает информацию о типе соединения, состоянии, исходящем/входящем ip-адресе, порте. Но не указывает pid процесса, инициировавшего соединение.

sunny1983 ★★★★★ ()
Ответ на: комментарий от sunny1983

насчет netstat не знаю, в код не заглядывал :)

Conntrackd can replicate the status of the connections that are currently being processed by your stateful firewall based on Linux. Conntrackd can also run as statistics daemon.

Смотри, в /proc/net/{tcp,udp} есть тоже информация о соединениях. И да, ты был прав, в /proc есть информация о соединениях каждого PID.

http://stackoverflow.com/questions/838317/how-to-tie-a-network-connection-to-...

leader32 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.