내 대학 Ubuntu 22.04 컴퓨터가 다른 컴퓨터에 제공해야 하는 서비스가 무엇인지 알아내려고 합니다. 나는 이 기계에 정기적으로 ssh
접속하여 NFS
내 연구실의 다른 컴퓨터들 사이에서 서버로 사용합니다. 하지만 이 기계가 제공해야 할 다른 어떤 것도 생각할 수 없습니다. 그래서 불필요한 서비스를 꺼서 컴퓨터를 튼튼하게 하려고 노력했습니다. 불행하게도 내가 Linux 서비스와 포트에 대해 알고 있는 바에 따르면 어떤 것이 필요하고 어떤 것이 불필요한지 잘 모르겠습니다.
내가 달리면$ netstat -A inet --listening
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:37725 0.0.0.0:* LISTEN
tcp 0 0 localhost:domain 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:sunrpc 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:nfs 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:8787 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:42757 0.0.0.0:* LISTEN
tcp 0 0 localhost:51144 0.0.0.0:* LISTEN
tcp 0 0 localhost:17603 0.0.0.0:* LISTEN
tcp 0 0 localhost:17600 0.0.0.0:* LISTEN
tcp 0 0 localhost:12546 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:56703 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:56607 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:db-lsp 0.0.0.0:* LISTEN
tcp 0 0 localhost:44911 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:58017 0.0.0.0:* LISTEN
tcp 0 0 localhost:ipp 0.0.0.0:* LISTEN
tcp 0 0 localhost:32997 0.0.0.0:* LISTEN
udp 0 0 0.0.0.0:17500 0.0.0.0:*
udp 0 0 0.0.0.0:53815 0.0.0.0:*
udp 0 0 0.0.0.0:55047 0.0.0.0:*
udp 0 0 0.0.0.0:57529 0.0.0.0:*
udp 0 0 localhost:domain 0.0.0.0:*
udp 0 0 0.0.0.0:sunrpc 0.0.0.0:*
udp 0 0 localhost:864 0.0.0.0:*
udp 0 0 0.0.0.0:33798 0.0.0.0:*
udp 0 0 0.0.0.0:35842 0.0.0.0:*
udp 0 0 0.0.0.0:36165 0.0.0.0:*
udp 0 0 0.0.0.0:mdns 0.0.0.0:*
udp 0 0 0.0.0.0:40000 0.0.0.0:*
udp 0 0 0.0.0.0:43526 0.0.0.0:*
최근 DNS 공격을 증폭시키는 데 사용되었기 때문에 sunrpc 서비스가 일시적으로 중단되었습니다. 내 이해는 NFS의 일부로 서비스가 필요하다는 것입니다(그러나 내 이해는 쉽게 틀릴 수 있습니다).
내 필요에 따라 다른 컴퓨터에 어떤 서비스를 제공해야 합니까?
내가 제공해야 하는 것 중에서
ssh
연결을 위한 Fail2ban 외에 내 컴퓨터를 강화하기 위해 어떤 단계를 수행해야 합니까?
이는 지나치게 광범위하거나 순진한 질문일 수 있습니다. 그렇다면 통찰력을 높이 평가하겠습니다.
답변1
방화벽과 함께 첫 번째 단계는 어떤 실제 서비스가 어떤 포트에서 수신 대기하는지 찾는 것입니다. 그런 다음 이를 바탕으로 결정을 내립니다.netstat -p
제공하다, 포트 번호가 아닙니다.
예를 들어, 서버에서 Dropbox Sync를 실행해야 합니까? 방화벽 규칙은 단순히 "포트 8787 허용"이 아니라 "8787 허용"이어야 합니다.왜냐하면우리는 이 포트에 바인딩된 XYZ 서비스를 호스팅합니다."
localhost
또는 에 바인딩된 모든 소켓을 무시할 수 있습니다 127.0.0.1
. 어쨌든 외부에서는 액세스할 수 없으므로 내부 프로세스 통신에 사용될 수 있습니다.
(또한 출력을 inet
다음으로 제한하지 마십시오.~ 할 것이다그렇다면 IPv6는 잊어버리십시오. IPv4 규칙이 엄격하게 잠겨 있다고 생각하더라도 이를 활짝 열어두게 됩니다. )
제공해야 하는 것 중에서 SSH 연결을 위한 Fail2ban 외에 시스템을 강화하려면 어떤 단계를 수행해야 합니까?
최소한 각 서비스가 "세계에 개방"인지, "대학에 개방"인지, "연구실에 개방"인지 결정하고 이에 따라 방화벽 규칙을 설정하세요.
예를 들어 SSH가 애초에 인터넷 연결을 허용하지 않는 경우 SSH의 fall2ban에 대한 필요성이 줄어듭니다. (집에서 관리하는 경우에도 대학에서 이러한 목적으로 VPN 서비스를 제공할 수 있습니다.)
마찬가지로, UID 기반 인증을 사용하는 NFS는 가능한 한 적은 수의 "신뢰할 수 있는" 시스템에 개방되어야 합니다(자신의 시스템에 대한 루트 권한이 있는 사람은 누구나 NFS 보안을 우회할 수 있기 때문입니다). 확실히 공개되지는 않습니다. 반면 Kerberos 인증을 사용하는 NFS는거의인터넷 접속이 가능합니다(아마 현명하지 못할 수도 있지만 프로토콜은 충분히 강력합니다).
일부 서비스를 자체 머신(컨테이너, 가상 머신 또는 물리적)으로 분할하는 것이 좋은 경우가 많습니다.
최근 DNS 공격 증폭에 익숙해져서 sunrpc 서비스를 일시적으로 중단했습니다. 제가 이해한 바는 이 서비스가 NFS의 일부로 필요하다는 것입니다(그러나 제가 이해한 내용은 쉽게 오류가 발생하기 쉽습니다).
"sunrpc"는 클라이언트가 동적 포트 번호를 찾기 위해 사용하는 portmapper 서비스입니다. 이전 NFSv3 버전은 여러 가지 프로토콜(NFS 자체, MOUNT 프로토콜, STATD 프로토콜)로 구성되었기 때문입니다. 이는 Windows의 MS-RPC 포트 135와 유사합니다.
Portmapper는 NFSv2/NFSv3에만 필요합니다. NFSv4를 독점적으로 사용하는 경우 단일 TCP(UDP 아님) 포트 2049만 필요합니다.
NFSv3가 필요한 경우 "동적" 부분을 기억하십시오. 방화벽을 사용하는 경우 재부팅할 때마다 변경되지 않도록 관련된 각 RPC 서비스에 대해 일부 정적 포트 번호를 수동으로 선택해야 합니다. 요즘에는 모두 /etc/nfs.conf
범용 파일을 통해 설정할 수 있습니다.