열린 포트를 "닫는" 방법은 무엇입니까?

열린 포트를 "닫는" 방법은 무엇입니까?

며칠 전 나는 내 데이터의 보안에 대해 매우 걱정하게 되었고 결국 다음을 nmap발견했습니다.nmap 127.0.0.1

놀랍게도, localhost를 수신하는 활성 서비스가 많이 있습니다.

$ nmap 127.0.0.1
Starting Nmap 5.21 ( http://nmap.org ) at 2013-05-05 00:19 WEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00025s latency).
Not shown: 993 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
25/tcp  open  smtp
53/tcp  open  domain
111/tcp open  rpcbind
139/tcp open  netbios-ssn
445/tcp open  microsoft-ds
631/tcp open  ipp

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

나의 하나 뿐인가능한use는 다음과 같습니다 ssh(잘 구성되지 않았을 수도 있지만 이에 대해서는 다른 질문으로 남겨 두겠습니다).

내가 아는 한, ippCUPS 프로토콜은 내 프린터를 공유하는 데 사용되며 공유할 필요는 없으며 서버에서 프린터에 액세스하기만 하면 됩니다.

netstat -lntup다음은 localhost 주소가 제거된 루트 사용자에 대한 출력입니다.

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      497/sshd        
tcp        0      0 0.0.0.0:17500           0.0.0.0:*               LISTEN      2217/dropbox    
tcp        0      0 0.0.0.0:445             0.0.0.0:*               LISTEN      892/smbd        
tcp        0      0 0.0.0.0:50022           0.0.0.0:*               LISTEN      1021/rpc.statd  
tcp        0      0 0.0.0.0:139             0.0.0.0:*               LISTEN      892/smbd        
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      906/rpcbind     
tcp6       0      0 :::22                   :::*                    LISTEN      497/sshd        
tcp6       0      0 :::42712                :::*                    LISTEN      1021/rpc.statd  
tcp6       0      0 :::445                  :::*                    LISTEN      892/smbd        
tcp6       0      0 :::139                  :::*                    LISTEN      892/smbd        
tcp6       0      0 :::111                  :::*                    LISTEN      906/rpcbind     
udp        0      0 0.0.0.0:51566           0.0.0.0:*                           615/avahi-daemon: r
udp        0      0 0.0.0.0:68              0.0.0.0:*                           7362/dhclient   
udp        0      0 0.0.0.0:111             0.0.0.0:*                           906/rpcbind     
udp        0      0 192.168.1.255:137       0.0.0.0:*                           1782/nmbd       
udp        0      0 192.168.1.67:137        0.0.0.0:*                           1782/nmbd       
udp        0      0 0.0.0.0:137             0.0.0.0:*                           1782/nmbd       
udp        0      0 192.168.1.255:138       0.0.0.0:*                           1782/nmbd       
udp        0      0 192.168.1.67:138        0.0.0.0:*                           1782/nmbd       
udp        0      0 0.0.0.0:138             0.0.0.0:*                           1782/nmbd       
udp        0      0 0.0.0.0:655             0.0.0.0:*                           906/rpcbind     
udp        0      0 0.0.0.0:17500           0.0.0.0:*                           2217/dropbox    
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           615/avahi-daemon: r
udp        0      0 0.0.0.0:34805           0.0.0.0:*                           1021/rpc.statd  
udp6       0      0 :::40192                :::*                                1021/rpc.statd  
udp6       0      0 :::111                  :::*                                906/rpcbind     
udp6       0      0 :::655                  :::*                                906/rpcbind     
udp6       0      0 :::5353                 :::*                                615/avahi-daemon: r
udp6       0      0 :::42629                :::*                                615/avahi-daemon: r

실제로 사용할 때만 외부 세계의 소리를 듣도록 이러한 서비스를 구성하려면 어떻게 해야 합니까?

답변1

노출 결정

명령의 출력에서 netstat​​많은 서비스가 실제로는 매우 짧은 목록인 것처럼 보입니다.

$ netstat -lntup | awk '{print $6 $7}'|sed 's/LISTEN//'| cut -d"/" -f2|sort|uniq|grep -v Foreign
avahi-daemon:r
dhclient
dropbox
nmbd
rpcbind
rpc.statd
smbd
sshd

상황을 이해하다

이 목록을 보면 내가 다루고 싶지 않은 서비스가 여러 개 있습니다.

  • dh클라이언트
    • IP 주소 획득을 담당하는 DHCP 서버 데몬에는 이 정보가 있어야 합니다.
  • 안전 금고
    • 당연히 Dropbox가 있어야 합니다.

줄이기 시작 - Samba 비활성화

지금 당장 Samba를 비활성화할 수 있습니다. Samba는 위의 서비스 중 2개를 차지하며, nmbd실제로 smbd로컬 호스트나 IP에 연결된 네트워크에서 랩톱에서 이를 실행해야 하는지는 의심스럽습니다.

실행 중인지 확인하려면 다음 명령을 사용할 수 있습니다 status.

$ status nmbd
nmbd start/running, process 19457
$ status smbd
smbd start/running, process 19423

서비스를 종료하면 upstart, /etc/rc.d 및 비즈니스의 모든 변경 사항이 혼동될 수 있으므로 어떤 서비스가 어떤 기술을 사용하는지 파악하기 어려울 수 있습니다. Samba의 경우 다음 service명령을 사용할 수 있습니다.

$ sudo service nmbd stop
nmbd stop/waiting
$ sudo service smbd stop
smbd stop/waiting

이제 그들은 사라졌습니다:

$ status nmbd 
nmbd stop/waiting
$ status smbd 
smbd stop/waiting

멀리하세요...영구적으로

이러한 문제를 방지하기 위해 저는 이 도구를 사용하여 sysv-rc-conf콘솔에서 서비스를 관리해 왔으며 대부분의 서비스보다 더 잘 작동합니다. 이를 통해 실행할 서비스와 서비스를 시작/중지해야 하는 실행 수준을 확인할 수 있습니다.

$ sudo apt-get install sysv-rc-conf

   sysv-rc-conf ss

나머지 불필요한 콘텐츠 비활성화

이제 Samba가 종료되었으므로 다음이 남습니다.

  • 아바히 데몬
    • Zeroconf(플러그 앤 플레이)의 일부, 끄기
  • rpc 바인딩
    • NFS 필요 - 끄기
  • rpc.statd
    • NFS 필요 - 끄기

나머지 3개에 대해서는 Samba와 동일한 작업을 수행하여 끌 수도 있습니다.

컵?

CUPS를 끄려면(실제로 CUPS가 필요하지 않음) 동일한 단계에 따라 서비스를 끈 다음 시작부터 비활성화할 수 있습니다. 인쇄하려면 시스템의 각 프린터를 개별적으로 설정해야 합니다. system-config-printerGUI를 통해 이 작업을 수행 할 수 있습니다 .

이러한 서비스는 요청 시 제공됩니까?

이것이 실제로 문제의 핵심이지만 이러한 서비스를 항상 실행하는 것이 아니라 사용할 때 실행되도록 "스마트"하게 만드는 만능 해결책은 없습니다.

#1 - systemd와 신생 기업

이는 부분적으로 현재의 분열로 인해 발생합니다.체계그리고갑자기 나타나다. 두 가지 경쟁 기술에 대한 좋은 개요여기.

두 기술 모두 약간 다른 작업을 수행하려고 시도하는 것 같습니다. 기능 세트를 고려할 때 systemd는 서버에 더 적합하고 upstart는 데스크톱 볼륨에 더 적합해 보입니다. 이 문제는 시간이 지나면 저절로 해결되며 IMO에서는 두 서비스 모두 안정적이고 기능이 풍부할 것입니다.

궁극적으로 두 서비스 모두 관리하는 모든 서비스에 대한 포괄적인 온디맨드 시작 및 중지 기능을 제공합니다. 예를 들어, 이와 같은 기능은 StopWhenUnneeded=yes이미 존재 systemd하므로 구체화되는 것은 시간 문제일 뿐입니다.

#2 - 서비스 지원

일부 서비스는 중지/시작을 전혀 지원하지 않습니다. 이와 같은 서비스가 sshd필요에 따라 실행되는 것은 타당하지 않은 것처럼 보일 수 있습니다. 특히 사용량이 많은 경우에는 더욱 그렇습니다. 또한 일부 서비스(예: Apache)는 자체 관리를 위해 더 많거나 적은 리스너를 시작하는 메커니즘을 자체적으로 제공합니다. 따라서 이러한 유형의 서비스가 어떻게 온디맨드 서비스를 제공할지 systemd, upstart이러한 서비스와 어떻게 통합될지는 불분명합니다.

이것이 정말로 필요한가?

이건 너무하다, 혹은 미니멀리스트 접근 방식을 취하고 꼭 필요한 것만 설치해야 한다는 말을 양쪽에서 듣게 되겠지만, 그건 사실 개인의 선택이다. 이러한 서비스가 존재하고 어떤 역할을 하는지 이해하는 것이 정말 중요합니다. 궁극적으로 컴퓨터는 단지 도구일 뿐이며 Unix 시스템을 사용함으로써 귀하는 기꺼이 무대 뒤에서 엿보고 컴퓨터가 작동하는 방식을 이해하려는 의지를 보여주었습니다.

나는 이런 유형의 질문이 바로 컴퓨터와 유닉스를 다룰 때 노력해야 할 사고방식이라고 말하고 싶습니다.

인용하다

답변2

127.0.0.1은 "외부세계"가 아니고, 집 안을 둘러보는 것입니다.

방화벽 구성(현재 Linux의 iptables)을 확인하세요. 대부분은 외부에서 액세스할 수 없어야 합니다.

필요하지 않은 서비스를 실행하지 마십시오. 불필요한 소프트웨어를 제거합니다.

변화비밀번호더 강해지세요. 시스템 사용량을 확인하고 흥미로운 웹사이트를 무작위로 추적하지 마세요. 브라우저의 피싱 방지, 스크립트 방지 등 구성을 확인하세요. SSH 및 su/sudo의 사용법을 수정합니다.

그러나 결론은 지나치게 편집증적인 태도는 역효과를 낳을 수 있다는 것입니다. 갇히지 마세요기술의 번쩍임.

답변3

개별 서비스를 "해제"할 수도 있지만 방화벽을 설정하는 것이 더 쉬울 수도 있습니다. 거의 모든 일반 배포판(Ubuntu, Debian, Centos 등)에는 iptables 지원 기능이 내장되어 있습니다.

시작하기 위한 간단한 규칙 세트: (명령 프롬프트에 이러한 규칙을 입력하기만 하면 됩니다. 영구적으로 만들려면 시작 스크립트에 추가하거나 사용 중인 배포판을 알려주십시오. 예를 들어 Centos :system-config-firewall에서 iptables 규칙을 구성하기 위한 좋은 UI입니다)

iptables -A INPUT -p tcp --dport ssh -j ACCEPT
iptables -A INPUT -j DROP

기본적으로 ssh 인바운드를 허용합니다.

이제 INPUT 체인은 다음과 같습니다.

  • "ssh"를 통해 패킷이 내 컴퓨터로 들어오는 경우 - 허용
  • 패킷이 이전 규칙과 일치하지 않으면 그냥 삭제하세요.

그런 다음 나중에 "samba"(Windows 파일 공유)를 허용한다고 가정하면 다음을 실행할 수 있습니다.

iptables -I INPUT-p tcp --dport 465 -j ACCEPT

-I목록 앞에 추가하고 규칙을 -A추가합니다. 이제 체인은 다음과 같습니다.

  • "삼바" 패킷이 내 컴퓨터에 들어오면 허용하세요.
  • "ssh"를 통해 패킷이 내 컴퓨터로 들어오는 경우 - 허용
  • 패킷이 이전 규칙과 일치하지 않으면 그냥 삭제하세요.

INPUT체인은 시스템으로 향하는 패킷을 나타냅니다. 다른 체인은 OUTPUT컴퓨터에서 와서 인터넷으로 들어가는 패킷과 FORWARD컴퓨터를 통해 라우팅되는 패킷(예: 컴퓨터를 공항 환승 구역으로 "전송"하는 패킷)을 위한 INPUT것 입니다. 그것은 당신의 컴퓨터로 이동하지 않습니다).

참고로 nmap'ing 127.0.0.1은 별로 유용하지 않습니다. 많은 서비스는 127.0.0.1에서만 액세스할 수 있고 다른 주소에서는 액세스할 수 없습니다. nmap을 실행할 수 있는 다른 컴퓨터가 없다면 Gibson Research의 Shields UP을 사용해 보세요! (https://www.grc.com/shieldsup) - 이것은 무료 온라인 nmap-lite입니다. 또는 댓글에 귀하의 IP/이메일을 추가하시면 귀하를 매핑해 드리겠습니다. :)

관련 정보