1) 서버의 열린 포트를 찾으십시오

1) 서버의 열린 포트를 찾으십시오

이러다가 벽에 머리를 박고...

보안 문제일 수 있는 열려 있는 포트가 있는지 확인해야 하는 특정 서버에 대해 데스크탑에서 nmap을 실행했습니다. 열면 안되는 포트를 반환합니다.

nmap -T5 WWW.XXX.YYY.ZZZ
Starting Nmap 7.12 ( https://nmap.org ) at 2016-08-09 21:21 CEST
Nmap scan report for mydomain.com (WWW.XXX.YYY.ZZZ)
Host is up (0.0034s latency).
Not shown: 992 filtered ports
PORT     STATE  SERVICE
80/tcp   open   http
110/tcp  open   pop3
143/tcp  open   imap
443/tcp  open   https
993/tcp  open   imaps
995/tcp  open   pop3s

Nmap done: 1 IP address (1 host up) scanned in 3.33 seconds 

http와 https가 활성화되어 있어야 합니다. 하지만 다른 사람들은 그렇지 않습니다... 저는 5개의 다른 IP 주소에서 이 테스트를 실행했습니다.

글쎄, nmap이 포트 열기/필터링/닫기를 선택하는 방식으로 인해 잘못된 긍정일 수도 있습니다. 그래서 저는 이 포트들에 텔넷 연결을 시도하고... 연결이 있습니다:

[meandmyself@MacBook ~]$ telnet WWW.XXX.YYY.ZZZ 110
Trying WWW.XXX.YYY.ZZZ...
Connected to mydomain.com.
Escape character is '^]'.

대상 호스트에서 netstat 및 iptables를 다시 확인하여 뭔가 놓친 것이 있는지 확인했습니다.

[21:55] ovh-user@mydomain:~ $ sudo netstat -tanlp | grep LISTEN
[sudo] password for ovh-user:
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1016/master
tcp        0      0 WWW.XXX.YYY.ZZZ:4444      0.0.0.0:*               LISTEN      353/sshd
tcp        0      0 0.0.0.0:5665            0.0.0.0:*               LISTEN      2485/icinga2
tcp        0      0 127.0.0.1:8999          0.0.0.0:*               LISTEN      826/php-fpm.conf)
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      25433/mysqld
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      346/rpcbind
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      828/nginx -g daemon
tcp6       0      0 :::9000                 :::*                    LISTEN      25477/java
tcp6       0      0 :::111                  :::*                    LISTEN      346/rpcbind

나는 rpcbind를 제외한 모든 서비스를 알고 있으며 nginx만 외부에서 액세스할 수 있습니다. 포트 110, 143, 993 및 995에는 아무것도 없습니다...

그런 다음 iptables를 다시 확인했습니다.

[21:33] ovh-user@mydomain:~ $ sudo iptables -v -L INPUT
Chain INPUT (policy DROP 8 packets, 352 bytes)
 pkts bytes target     prot opt in     out     source               destination
 2602  749K ACCEPT     all  --  any    any     anywhere             anywhere             state RELATED,ESTABLISHED
   76  5472 ACCEPT     all  --  lo     any     anywhere             anywhere
  272  8912 ACCEPT     icmp --  any    any     anywhere             anywhere
    1    64 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:4444
   27  1604 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:http
    1    44 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:https
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp spt:ftp state ESTABLISHED
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp spt:ftp-data state RELATED,ESTABLISHED
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp spts:1024:65535 dpts:1024:65535 state ESTABLISHED

[21:34] ovh-user@mydomain:~ $ sudo iptables -v -L FORWARD
Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
[21:55] ovh-user@mydomain:~ $ sudo iptables -t nat -nvL PREROUTING
Chain PREROUTING (policy ACCEPT 1342 packets, 49898 bytes)
 pkts bytes target     prot opt in     out     source               destination

pop 또는 imap 포트에 아무것도 열려 있지 않습니다...

UNIX 서비스와 방화벽에 대한 기본적인 이해만으로는 이해가 되지 않습니다. 텔넷에서 "Connected to mydomain.com" 포트를 제공하는데 해당 포트에서 수신 대기하는 프로세스가 없는 이유는 무엇입니까? 텔넷이 특정 장소에 어떻게 도달하는지 추적하는 방법이 있습니까?

답변1

벽에 머리를 부딪히는 분들을 위한 자세한 답변도 제공됩니다.

1) 서버의 열린 포트를 찾으십시오

먼저,지도어떤 포트가 열려 있고 어떤 포트가 닫혀/필터링되는지 진단합니다. 엔맵은다양한 스캔 모드열린 포트를 찾으려면 이러한 모드를 모두 시도해야 합니다.

열린 포트 목록이 표시되며 그 중 일부는 논리적이지만 다른 일부는 그렇지 않습니다.

내 경우에는 포트 110, 143, 993, 995가 열려 있으면 안 됩니다.

2) 이 포트가 실제로 열려 있습니까?

사용원격 로그인또는CNC이 TCP 포트가 실제로 열려 있는지 테스트

[meandmyself@MacBook ~]$ telnet WWW.XXX.YYY.ZZZ 110
Trying WWW.XXX.YYY.ZZZ...
Connected to mydomain.com.
Escape character is '^]'.

내 경우에는 서버의 포트 110에 접속하려고 했을 때 진짜 답이 있었다.

여기서 무서운 부분은 포트가 열려 있는 것 같습니다.

3) 서버 측 진단

A) 이 포트에서 수신 대기하는 프로세스가 내 서버에서 실행되고 있습니까?

네트워크 통계또는라소프이러한 열린 포트에서 수신 대기 중인 실행 중인 프로세스가 있는지 여부를 표시할 수 있습니다.

[21:55] ovh-user@mydomain:~ $ sudo netstat -tanlp | grep LISTEN
[sudo] password for ovh-user:
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1016/master
tcp        0      0 WWW.XXX.YYY.ZZZ:4444      0.0.0.0:*               LISTEN      353/sshd
tcp        0      0 0.0.0.0:5665            0.0.0.0:*               LISTEN      2485/icinga2
tcp        0      0 127.0.0.1:8999          0.0.0.0:*               LISTEN      826/php-fpm.conf)
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      25433/mysqld
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      346/rpcbind
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      828/nginx -g daemon
tcp6       0      0 :::9000                 :::*                    LISTEN      25477/java
tcp6       0      0 :::111                  :::*                    LISTEN      346/rpcbind

내 경우에는 포트 110, 993에서 수신 대기하는 프로세스가 없었습니다. 포트 25, 4444, 5665, 8999, 3306, 111, 80, 9000에서 수신 대기하는 프로세스만 있었습니다.

B) 내 서버가 포트 110으로 들어오는 요청을 허용합니까?

iptables 규칙 진단INPUT, FORWARD and PREROUTING chains

[21:33] ovh-user@mydomain:~ $ sudo iptables -v -L INPUT

내 경우에는 기본 정책이 있었는데 DROP, 이는 실행 중인 프로세스에 도달할 기회를 갖기 위해 열려 있는 모든 포트를 명시적으로 지정해야 함을 의미했습니다.

이제 내 서버가 포트 110의 요청에 응답하는 것이 불가능하다는 결론을 내릴 수 있습니다.

4) 포트 110에서 내 서버에 대한 요청에 누가 응답합니까?

내 컴퓨터와 서버 사이의 경로에 있는 모든 actif 노드는 잠재적으로 요청에 응답하는 노드입니다. 여기에는 내 컴퓨터도 포함된다는 점을 명심하세요.

이 문제를 진단하려면 nmap 및 telnet을 사용하여 테스트하십시오.

  • 다른 컴퓨터
  • 다양한 액세스 포인트/ISP 상자
  • 다양한 위치(Ssh 터널 및 기타 서버를 사용하여 요청 프록시)

제 경우에는 동일한 데이터센터에 위치한 다른 서버를 이용하여 테스트를 진행했습니다. 요점은 내 호스팅 공급자가 설정한 프런트 엔드 방화벽이 포트 110, 143의 요청을 처리할 수 있는지 확인하는 것입니다. 또한 내 전화기로 포트 110에서 텔넷을 테스트했습니다.주스 SSH4G 이상.

이러한 테스트를 통해 포트 110에 대한 요청은 응답을 받지 못했습니다.

5) 따라서 이 포트를 로컬로 여는 것은 내 컴퓨터입니다.

제 경우에는 OSX 10.11.5에서 테스트했습니다. 내 컴퓨터가 특정 포트에서 수신 대기하는지 추적하기 위해 lsof 및 netstat를 실행합니다.

[meandmyself@MacBook ~]$ sudo netstat -anv | grep LISTEN
tcp46      0      0  *.3306                 *.*                    LISTEN      131072 131072    827      0
tcp4       0      0  127.0.0.1.4380         *.*                    LISTEN      131072 131072    453      0
tcp4       0      0  127.0.0.1.4370         *.*                    LISTEN      131072 131072    453      0
tcp6       0      0  ::1.12993              *.*                    LISTEN      131072 131072    352      0
tcp4       0      0  127.0.0.1.12993        *.*                    LISTEN      131072 131072    352      0
tcp6       0      0  ::1.12995              *.*                    LISTEN      131072 131072    352      0
tcp4       0      0  127.0.0.1.12995        *.*                    LISTEN      131072 131072    352      0
tcp6       0      0  ::1.12143              *.*                    LISTEN      131072 131072    352      0
tcp4       0      0  127.0.0.1.12143        *.*                    LISTEN      131072 131072    352      0
tcp6       0      0  ::1.12110              *.*                    LISTEN      131072 131072    352      0
tcp4       0      0  127.0.0.1.12110        *.*                    LISTEN      131072 131072    352      0
tcp6       0      0  ::1.12443              *.*                    LISTEN      131072 131072    352      0
tcp4       0      0  127.0.0.1.12443        *.*                    LISTEN      131072 131072    352      0
tcp6       0      0  ::1.12080              *.*                    LISTEN      131072 131072    352      0
tcp4       0      0  127.0.0.1.12080        *.*                    LISTEN      131072 131072    352      0
tcp46      0      0  *.80                   *.*                    LISTEN      131072 131072    321      0
tcp4       0      0  127.0.0.1.49153        *.*                    LISTEN      131072 131072     78      0
tcp4       0      0  127.0.0.1.49152        *.*                    LISTEN      131072 131072     78      0

[meandmyself@MacBook ~]$ sudo lsof -i -n -P |grep LISTEN
mtmfs       78           root    4u  IPv4 0x7f85fc078645d63b      0t0    TCP 127.0.0.1:49152 (LISTEN)
mtmfs       78           root    6u  IPv4 0x7f85fc078645cd43      0t0    TCP 127.0.0.1:49153 (LISTEN)
httpd       83           root    4u  IPv6 0x7f85fc0788d37b8b      0t0    TCP *:80 (LISTEN)
httpd      321           _www    4u  IPv6 0x7f85fc0788d37b8b      0t0    TCP *:80 (LISTEN)
com.avast  352           root    3u  IPv4 0x7f85fc0788dc363b      0t0    TCP 127.0.0.1:12080 (LISTEN)
com.avast  352           root    4u  IPv6 0x7f85fc0788d380eb      0t0    TCP [::1]:12080 (LISTEN)
com.avast  352           root    5u  IPv4 0x7f85fc078645df33      0t0    TCP 127.0.0.1:12443 (LISTEN)
com.avast  352           root    6u  IPv6 0x7f85fc0788d3864b      0t0    TCP [::1]:12443 (LISTEN)
com.avast  352           root    7u  IPv4 0x7f85fc0788dc3f33      0t0    TCP 127.0.0.1:12110 (LISTEN)
com.avast  352           root    8u  IPv6 0x7f85fc0788d38bab      0t0    TCP [::1]:12110 (LISTEN)
com.avast  352           root    9u  IPv4 0x7f85fc0788dc2d43      0t0    TCP 127.0.0.1:12143 (LISTEN)
com.avast  352           root   10u  IPv6 0x7f85fc0788d3910b      0t0    TCP [::1]:12143 (LISTEN)
com.avast  352           root   11u  IPv4 0x7f85fc0788dc482b      0t0    TCP 127.0.0.1:12995 (LISTEN)
com.avast  352           root   12u  IPv6 0x7f85fc0788d3762b      0t0    TCP [::1]:12995 (LISTEN)
com.avast  352           root   13u  IPv4 0x7f85fc0788dc5123      0t0    TCP 127.0.0.1:12993 (LISTEN)
com.avast  352           root   14u  IPv6 0x7f85fc0788d370cb      0t0    TCP [::1]:12993 (LISTEN)
SpotifyWe  453        kheraud    6u  IPv4 0x7f85fc078a53282b      0t0    TCP 127.0.0.1:4370 (LISTEN)
SpotifyWe  453        kheraud    7u  IPv4 0x7f85fc078a533123      0t0    TCP 127.0.0.1:4380 (LISTEN)
mysqld     827         _mysql   33u  IPv6 0x7f85fc0788d36b6b      0t0    TCP *:3306 (LISTEN)

Lsof는 나에게 첫 번째 힌트를 주었다. 제 직업은 음악을 듣는 동시에 웹사이트를 구축하는 것이기 때문에 Apache, Mysql, Spotify가 수신해야 하는 포트에서 수신 대기하는 것을 보고 놀라지 않았습니다. 하지만 Avast는 제게 올바른 방향을 제시해 주었습니다. 모든 열린 포트(110, 143, 993, 995)는 "127.0.0.1.12XXX"(12110, 12143, 12993, 12995...)로 나열됩니다.

Avast가 포트 110에서 실제 요청을 어떻게 처리하는지 확인하는 데 성공하지 못했습니다(@MarkPlotnick은 내가 pfctl을 사용하지만 사용하기가 쉽지 않다고 지적했습니다. 어떤 도움이라도 환영합니다.).

Avast를 닫고 lsof를 다시 실행한 다음 telnet, nmap을 실행했습니다. 실수로 연 포트는 더 이상 존재하지 않습니다.


이 경우, 나는 겁에 질려 단서를 찾기 위해 재빨리 stackexchange에 뛰어들었습니다. 심호흡을 하고 커피를 한 잔 더 마시고 내 컴퓨터와 서버 사이의 경로가 무엇인지 생각해 봐야 합니다. 다른 위치에서 다른 테스트를 시도해보고 내 서버가 보안 위반을 겪지 않는지 확인하겠습니다.

결론적으로: 1) 생각하다 2) 다시 생각하다 3) 시험하다 4) 실행하다

관련 정보