У меня есть какой-то вопрос в закрытии порта, я думаю, что у меня есть некоторые странные вещи.
Когда я использую выполнить
nmap --top-ports 10 192.168.1.1
это показывает, что порт 23 / TCP открыт.
Но когда я выполню
nmap --top-ports 10 localhost
это показывает, что порт 23 / tcp закрыт.
Какой из них является правдой? Я хочу закрыть этот порт на всей моей системе, как я могу это сделать?
localhost
осуществляется доступ кlo
интерфейсу (loopback). IP-адрес получает доступ к вашему реальному интерфейсу, возможно,eth0
илиwlan0
или как-то так.Ответы:
Nmap - отличный сканер портов, но иногда вам хочется чего-то более авторитетного. Вы можете спросить ядро, какие процессы имеют какие порты открывать, используя
netstat
утилиту:Варианты, которые я дал:
-t
Только TCP-l
Только прослушивающие порты-n
Не ищите имена сервисов и хостов, просто отображайте номера-p
Показать информацию о процессе (требуется привилегия root)В этом случае мы можем видеть, что
sshd
прослушивает любой0.0.0.0
порт интерфейса ( ) 22 иcupsd
прослушивает127.0.0.1
порт 631 loopback ( ). Ваш вывод может показать, чтоtelnetd
имеет локальный адрес192.168.1.1:23
, то есть он не будет отвечать на соединения на адаптере обратной связи (например, вы не можетеtelnet 127.0.0.1
).Существуют и другие инструменты, которые отображают аналогичную информацию (например,
lsof
или/proc
), но netstat является наиболее широко доступным. Это даже работает на Windows (netstat -anb
). Netstat в BSD немного отличается: вам придется использовать sockstat (1) для получения информации о процессе.Если у вас есть идентификатор процесса и имя программы, вы можете найти процесс и убить его, если хотите закрыть порт. Для более детального управления вы можете использовать брандмауэр (iptables в Linux), чтобы ограничить доступ только определенными адресами. Возможно, вам придется отключить запуск службы. Если PID в Linux означает «-», это, вероятно, процесс ядра (например, это характерно для NFS), так что удачи в выяснении, что это такое.
Примечание: я сказал «авторитетный», потому что вам не мешают условия сети и брандмауэры. Если вы доверяете своему компьютеру, это здорово. Однако, если вы подозреваете, что вас взломали, вы не сможете доверять инструментам на своем компьютере. Замена стандартных утилит (а иногда даже системных вызовов) на те, которые скрывают определенные процессы или порты (или руткиты), является стандартной практикой для злоумышленников. Лучше всего на этом этапе сделать криминалистическую копию вашего диска и восстановить ее из резервной копии; затем используйте копию, чтобы определить, как они вошли, и закройте ее.
источник
Система Linux имеет так называемый петлевой интерфейс, предназначенный для внутренней коммуникации. Его имя хоста
localhost
и IP-адрес127.0.0.1
.При запуске
nmap
наlocalhost
, вы на самом деле запустить PortScan на виртуальном кольцевом интерфейсе.192.168.1.1
это IP-адрес вашего физического (наиболее вероятногоeth0
) интерфейса.Итак, вы работаете
nmap
на двух разных сетевых интерфейсах, поэтому есть разница в открытых портах. Они оба правдивы.Если у вас открыт TCP-порт 23, вероятно, у вас
telnet
запущен сервер (что не очень хорошо из-за отсутствия шифрования), или у вас на компьютере какой-то троянский конь.источник
iptables
правило, как подсказывает ближайший ответ, но оно не будет использовать службу, которая потребляет ресурсы. Так что, если у вас естьtelnetd
бег, просто выключите его.Чтобы «закрыть» порт вы можете использовать
iptables
источник
DROP
делает, как он говорит, он видит пакет, а затем игнорирует его. Обычно (без включенного iptables) ядро отправляет обратно недоступный ICMP-порт (который можно смоделировать с помощьюREJECT
цели вместоDROP
).REJECT
цели путем записи-j REJECT --reject-with tcp-reset
.Если вы это сделаете
nmap localhost
, он расскажет вам о другой ситуации: некоторые программы на Linux работают как сервер, хотя они используются только локально. Это потому, что другие программы используют их как сервер, к которому они подключаются. Так что оба ответа верны, так как вы спрашиваете что-то другое.Порт 23 используется для Telnet. Обычно не используется больше. Попробуйте сделать,
nmap -sV 192.168.1.1
чтобы узнать, какая программа открывает порт.(192 ... это IP-адрес локальной сети, поэтому результат
nmap <your outside world IP>
также даст другой результат из-за возможных настроек брандмауэра и т. Д.)источник
Если у вас есть служба, работающая и прослушивающая порт 23, возможно, будет чище остановить процесс, который прослушивает порт 23 (возможно
telnet
), чем оставить его работающим и закрыть или заблокировать использование порта 23iptables
.Когда процесс не прослушивает порт, даже при отсутствии блока брандмауэра, любая попытка подключиться к нему должна привести к немедленному «отказу в соединении» (
ECONNREFUSED
кconnect(2)
)Один из способов найти процесс (и его pid), который прослушивает порт 23, если такой процесс существует:
В приведенных выше
-i
списках открываются интернет-порты (как UDP, так и TCP), а -P запрещает перевод портов в имена сервисов (через/etc/services
)После того, как вы обнаружили, что запущенный процесс прослушивает порт 23, вы можете выяснить, как он запущен, посмотрев на дерево процессов (скажем,
pstree
). Если его родительinit
(очень вероятно), вы можете рекурсивно искать имя процесса в/etc
. например:Это должно привести вас к лучшему способу отключить его запуск в 1-м месте.
источник
sudo lsof -Pi :23
.23
) соответствует. Если вы не:23
:234
:2345
lsof -Pi :23
) ищет точное совпадение.