포트를 닫는 것에 대해 몇 가지 질문이 있는데 뭔가 이상한 일이 발생한 것 같습니다.
내가 사용하여 실행할 때
nmap --top-ports 10 192.168.1.1
이는 포트 23/TCP가 열려 있음을 나타냅니다.
하지만 내가 실행할 때
nmap --top-ports 10 localhost
포트 23/tcp가 닫혀 있음을 나타냅니다.
다음 중 사실은 무엇입니까? 전체 시스템에서 이 포트를 닫고 싶습니다. 어떻게 해야 합니까?
답변1
Nmap은 훌륭한 포트 스캐너이지만 때로는 더 권위 있는 것을 원할 때도 있습니다. 이 유틸리티를 사용하여 어떤 프로세스에 어떤 포트가 열려 있는지 커널에 물어볼 수 있습니다 netstat
.
My@myhost:~$ sudo netstat -tlnp 활성 인터넷 연결(서버만 해당) Proto Recv-Q Send-Q 로컬 주소 외부 주소 상태 PID/프로그램 이름 tcp 0 0 127.0.0.1:53 0.0.0.0:* 청취 1004/dnsmasq tcp 0 0 0.0.0.0:22 0.0.0.0:* 모니터 380/sshd tcp 0 0 127.0.0.1:631 0.0.0.0:* 청취 822/cupsd tcp6 0 0 :::22 :::* 380/sshd 모니터링 tcp6 0 0 ::1:631 :::* 822/cupsd를 들어보세요
제가 준 옵션은 다음과 같습니다.
-t
TCP 전용-l
수신 대기 포트만-n
서비스 및 호스트 이름을 찾지 않고 숫자만 표시합니다.-p
프로세스 정보 표시(루트 권한 필요)
sshd
이 예에서는 모든 인터페이스( 0.0.0.0
) 포트 22가 수신되고 있고 cupsd
루프백( 127.0.0.1
) 포트 631이 수신되고 있음 을 알 수 있습니다 . 출력에 telnetd
로컬 주소가 로 표시될 수 있습니다 192.168.1.1:23
. 이는 루프백 어댑터의 연결에 응답하지 않음을 의미합니다(예: 응답할 수 없음 telnet 127.0.0.1
).
유사한 정보를 표시할 수 있는 다른 도구(예: lsof
또는 /proc
)가 있지만 netstat가 가장 널리 사용됩니다. Windows에서도 실행 됩니다 netstat -anb
( ). BSD netstat는 약간 다릅니다.양말 통계(1)프로세스 정보를 얻기 위해
프로세스 ID와 프로그램 이름이 있으면 프로세스를 찾아서 포트를 닫고 싶을 때 프로세스를 종료할 수 있습니다. 보다 세부적인 제어를 위해 방화벽(Linux의 경우 iptables)을 사용하여 특정 주소로만 액세스를 제한할 수 있습니다. 서비스 시작을 비활성화해야 할 수도 있습니다. Linux에서 PID가 "-"인 경우 커널 프로세스일 가능성이 높으므로(예를 들어 NFS에서 일반적임) 그것이 무엇인지 알아내시기 바랍니다.
참고: 네트워크 상태와 방화벽으로 인해 방해를 받지 않기 때문에 "권한 있는"이라고 말합니다. 컴퓨터를 신뢰한다면 좋습니다. 그러나 해킹을 당했다고 의심되는 경우 컴퓨터에 있는 도구를 신뢰하지 못할 수도 있습니다. 공격자가 표준 유틸리티(때때로 시스템 호출까지)를 특정 프로세스나 포트(루트킷이라고도 함)를 숨기는 유틸리티로 바꾸는 것이 표준 관행입니다. 이 시점에서 가장 좋은 방법은 디스크의 포렌식 복사본을 만들고 백업에서 복원한 다음 해당 복사본을 사용하여 디스크가 어떻게 들어왔는지 확인하고 종료하는 것입니다.
답변2
포트를 "닫기" 위해 사용할 수 있는iptables
sudo iptables -A INPUT -p tcp --dport 23 -m state --state NEW,ESTABLISHED -j DROP
답변3
Linux 시스템에는 내부 통신을 위한 소위 루프백 인터페이스가 있습니다. 호스트 이름은 localhost
이고 IP 주소는 입니다 127.0.0.1
.
당신 nmap
이 달릴 localhost
때가상루프백 인터페이스. 192.168.1.1
당신의 IP 주소는 무엇입니까물리적(아마도 eth0
) 인터페이스.
따라서 두 개의 서로 다른 네트워크 인터페이스에서 실행 중이므로 nmap
열린 포트에 차이가 있습니다. 그것들은 모두 사실입니다.
TCP 포트 23이 열려 있으면 telnet
서버를 실행 중이거나(암호화 부족으로 인해 좋지 않음) 컴퓨터에 일종의 트로이 목마가 있을 가능성이 높습니다.
답변4
만약에틀림없이 더 깨끗한 포트 23에서 서비스가 실행되고 수신 대기하고 있습니다.멈추다telnet
실행을 유지하는 대신 포트 23(아마도 )에서 수신 대기하는 프로세스폐쇄 또는 차단포트 23이 사용됩니다 iptables
.
포트를 수신하는 프로세스가 없는 경우 포트를 차단하는 방화벽이 없더라도 포트에 연결을 시도하면 즉시 "연결 거부"( ECONNREFUSED
to connect(2)
) 가 발생합니다.
포트 23(해당 프로세스가 있는 경우)에서 수신 대기 중인 프로세스(및 해당 pid)를 찾는 한 가지 방법은 다음과 같습니다.
sudo lsof -i -P | grep ':23 '
-i
개방형 인터넷 포트(UDP 및 TCP)는 위에 나열되어 있으며 -P는 포트를 서비스 이름으로 변환하는 것을 비활성화합니다(pass /etc/services
).
포트 23에서 수신 대기 중인 실행 중인 프로세스를 찾으면 pstree
프로세스 트리(예: )를 보면 해당 프로세스가 어떻게 시작되었는지 확인할 수 있습니다. 상위 프로세스가 init
(가능성이 가장 높음) 프로세스 이름 아래에서 재귀적으로 검색할 수 있습니다 /etc
. 예를 들어:
sudo grep -r telnet /etc
이를 통해 처음부터 실행을 비활성화하는 가장 좋은 방법을 찾을 수 있습니다.