
У нас есть приложение, установленное на двух серверах. Приложение не работает, потому что брандмауэр блокирует связь между двумя серверами. Мне нужен способ выяснить каждый порт, который блокируется, чтобы я мог запросить открытие этих портов.
Я захватил tcpdump на этих двух серверах. Правильный ли способ получить заблокированный порт, чтобы искать SYN, а затем RST?
Если да, то можно ли создать фильтр в WireShark, который позволит мне отобразить все заблокированные порты?
решение1
Для начала лучше всего получить доступ к серверу брандмауэра и проверить журналы.
Если у вас не было такого доступа, вам необходимо провести расследование.
Wireshark может подтвердить, что происходит, но это неподходящий инструмент для этого. Вам нужно использовать больше инструментов, чтобы проверить это.
Предположим, у вас есть такой сценарий:
- У вас есть доступ к серверу, но нет доступа к брандмауэру.
В этом случае я рекомендую вам запустить обе утилиты nmap и nc в Linux для проверки портов.
░▒▓ │ /mnt/sda1/backup_home ▓▒░ nmap -Pn -v -v 10.1.1.20 ░▒▓ ✔ │ at 17:38:37 ▓▒░
Starting Nmap 7.93 ( https://nmap.org ) at 2023-01-24 17:39 -03
Initiating Parallel DNS resolution of 1 host. at 17:39
Completed Parallel DNS resolution of 1 host. at 17:39, 0.08s elapsed
Initiating Connect Scan at 17:39
Scanning 10.1.1.20 [1000 ports]
Discovered open port 8080/tcp on 10.1.1.20
Discovered open port 22/tcp on 10.1.1.20
Discovered open port 111/tcp on 10.1.1.20
Discovered open port 8000/tcp on 10.1.1.20
Discovered open port 9001/tcp on 10.1.1.20
Completed Connect Scan at 17:39, 0.49s elapsed (1000 total ports)
Nmap scan report for 10.1.1.20
Host is up, received user-set (0.047s latency).
Scanned at 2023-01-24 17:39:28 -03 for 1s
Not shown: 995 closed tcp ports (conn-refused)
PORT STATE SERVICE REASON
22/tcp open ssh syn-ack
111/tcp open rpcbind syn-ack
8000/tcp open http-alt syn-ack
8080/tcp open http-proxy syn-ack
9001/tcp open tor-orport syn-ack
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 0.59 seconds
nc -vnz 10.1.1.20 22 ░▒▓ 1 ✘ │ took 10s │ at 17:38:23 ▓▒░
Ncat: Version 7.93 ( https://nmap.org/ncat )
Ncat: Connected to 10.1.1.20:22.
Ncat: 0 bytes sent, 0 bytes received in 0.05 seconds.
Как видите, я проверил все открытые порты на своем сервере и подтвердил, что 22 из них открыты для использования и не блокируются брандмауэром.
Но это может быть проблемой. Позвольте мне показать вам.
░▒▓ │ /mnt/sda1/backup_home ▓▒░ ssh [email protected] ░▒▓ ✔ │ at 17:39:29 ▓▒░
kex_exchange_identification: read: Connection reset by peer
Connection reset by 10.1.1.20 port 22
░▒▓ │ /mnt/sda/backup_home ▓▒░
Я не могу попасть на этот хост. Проблема в том, что какое-то правило в брандмауэре блокирует обмен ключами ssh. Как это подтвердить? Я использую wireshark, чтобы это подтвердить.
Я выбрал "любой" в качестве интерфейса, а затем я попытался подключиться к серверу и обнаружил, что брандмауэр на xxx.244 блокирует мой вход. Я использую этот фильтр в Wireshark.
!(http or ssdp) && tcp.flags.reset==1
Первая часть — фильтрация мусора, а вторая — сброс настроек.
[фильтр Wireshark и скрытый брандмауэр на подходе][1]
Вторая часть подтверждает причину проблемы, когда я выполняю ping на этот хост и использую команду tracepath при том же захвате. Эта трассировка столкнулась с некоторой блокировкой на своем пути, как вы можете видеть во второй части захваченных пакетов.
[первый — это ping, а второй — вывод tracepath][2]
Как вы видите, вам нужно использовать больше инструментов, чтобы понять, что происходит. Вы также должны проверить свое приложение, есть ли у него какие-то логи, или у вас может быть какой-то обратный прокси в середине пути или что-то еще.
Вы можете использоватьнкдля имитации простого сервера с одной стороны для передачи файлов, используя каждый порт, который вам нужно использовать в вашем приложении.
Создайте файл в клиенте и поместите в него какой-нибудь мусор.
:>test.
cat <<EOF> test
asd
asdas
asd
asd
EOF
В этом примере ваш сервер — 10.1.1.20. Запустите netcat на этом сервере на порту 3333, например:
nc -lv 3333 > test
запустите netcat в клиенте, чтобы отправить файл на этот сервер:
nc -v 10.1.1.20 3333 <test
Следите за результатами на сервере и клиенте. Попробуйте это со всеми необходимыми портами. Если ваш брандмауэр блокирует некоторые из этих портов, вы не сможете передать этот файл.
Удачи! [1]:https://i.stack.imgur.com/avf0y.png [2]:https://i.stack.imgur.com/p5ylM.png