Я ищу метод проверки сетевого подключения на конкретном порту между двумя хостами Linux.
Скажем, для примера: я отправляю события системного журнала с сервера A на сервер B через порт 514. Однако сервер B никогда не получает события от сервера A. Я могу подтвердить, что сервер A отправляет их, и порт 514 на сервере B открыт. На данный момент я подозреваю, что брандмауэр между этими серверами блокирует 514 соединений.
Есть ли какой-либо инструмент или метод, который может помочь проверить, открыт ли брандмауэр для порта 514 в этой ситуации?
Ты можешь использовать traceroute
чтобы узнать, как далеко уходят пакеты определенного протокола. Вот пример того, как может выглядеть команда:
traceroute -n -T -p 514 2001:db8::1
Смысл аргументов следующий:
-n
отключает обратный DNS, который часто заставляет команду работать намного быстрее.-T
выполнить трассировку с использованием пакетов TCP SYN.-p 514
отправить пакеты на порт 5142001:db8::1
IP-адрес места назначения. Также можно использовать имя хоста.Сравните выходные данные для нескольких разных номеров портов, чтобы узнать, последовательно ли один из них обрабатывается иначе, чем другие.
Обратите внимание, что разные версии traceroute
существует. Вышеупомянутое было протестировано с использованием одного из traceroute
пакет в Ubuntu 16.04. Эта версия также известна как traceroute.db
.
Вы можете сделать несколько вещей.
Во-первых, проверьте, действительно ли сервисы, которые, по вашему мнению, работают и прослушивают определенные порты, прослушивают, для этого используйте netstat:
netstat -plunt
Более того, вы можете использовать анализатор пакетов, такой как Wireshark, или встроенный инструмент Linux, который называется tcpdump.
Чтобы проанализировать весь трафик, скажем, на сетевой карте с именем eth0, запустите:
tcpdump -i eth0
Чтобы проанализировать весь трафик на nic eth0, протоколе udp и порту 514:
tcpdump -i eth0 -n udp 'port 514'
Если вы подозреваете, что на одной из машин установлен брандмауэр, вы можете перечислить все активные правила на машине, выполнив следующую команду:
sudo iptables -S
Дополнительную информацию о команде iptables, которую вы можете запустить для устранения неполадок, можно найти Вот.
Еще один шаг по устранению неполадок, который я бы предпринял, - это Telnet с машины-отправителя syslog на принимающую машину syslog через порт 514:
telnet hostB:514
Если ваш сеанс открыт, это означает, что hostA может достичь hostB в данном порту.