Мы обновляем старый сервер базы данных, но хотим убедиться, что мы обновляем код на всех других серверах, подключенных к нему. Я думаю о зеркальном отображении сетевого порта и регистрации IP-адресов, подключенных к серверу. Я думал включить ведение журнала на самом сервере, но не хочу влиять на его производительность, поскольку он все еще находится в эксплуатации.
Есть ли какие-либо рекомендации по программному обеспечению, которое я мог бы использовать для регистрации IP-адресов? Это может быть Windows, Linux, FreeBSD, VM, LiveCD или что-то еще. Пока он работает на x86-совместимом компьютере, я смогу запустить его.
Какая ОС работает на самом сервере базы данных? Если это Linux, вы можете добавить правило ведения журнала в конфигурацию локального брандмауэра с минимальным влиянием на сервер. Что-то вроде:
iptables -A INPUT -m state --state NEW -p tcp --dport <yourdbport> -j LOG --log-prefix "[database] "
Можете добавить -m limit --limit 4/s
ограничить это правило регистрацией только 4 раза в секунду (и т. д.), что при высокой скорости соединения не позволит ему забирать все операции ввода-вывода. Это будет записывать в системный журнал строки, которые выглядят так:
[database] IN=eth0 OUT= MAC=00:16:3c:21:7c:f1:00:d0:00:6f:8c:00:08:00 SRC=a.b.c.d
DST=w.x.y.z LEN=48 TOS=0x00 PREC=0x00 TTL=114 ID=16448 DF PROTO=TCP SPT=59871
DPT=5900 WINDOW=8192 RES=0x00 SYN URGP=0
Информация, которую вы хотите, - это SRC=
поле.
Если вы настроили отдельную систему Linux (или FreeBSD) для приема трафика с зеркального порта, вы можете использовать tcpdump
для записи IP-адресов. Что-то вроде:
tcpdump -w record_of_connections -i eth0 \
dst port <yourdbport> and 'tcp[tcpflags] & tcp-syn != 0'
Это сопоставит все пакеты с портом yourdbport с установленным флагом SYN (например, это новая попытка подключения). После запуска этого для файла вы можете извлечь IP-адреса следующим образом:
tcpdump -r record_of_connections -n
В результате получатся такие строки:
15:07:40.808035 IP 10.243.16.190.53967 > 10.243.18.22.http: Flags [S],
seq 1235802021, win 5840, options [mss 1380,sackOK,TS val 3739192250
ecr 0,nop,wscale 7], length 0
Где находятся поля:
<time> <protocol> <src_addr>.<src_port> > <dest_addr>.<dest_port>: ...
Это означает, что вы можете получить только исходный IP-адрес следующим образом:
tcpdump -r record_of_connections -n |
awk '{print $3}' |
sed 's/\.[^.]*$//' |
sort -u
В sort -u
дает вам уникальный список адресов.