이 질문을 주의 깊게 읽어 보십시오.
서버에 원격으로 로그인했지만 sudo 권한이 없지만 해당 서버에 리스너를 만들고 싶습니다. 이렇게 하면 들어오는 모든 연결이 내 콘솔에 표시됩니다.myname@anyip 콘솔.
어떻게 해야 하나요?
답변1
그렇다면 서버의 다른 사용자를 모니터링하시겠습니까?
루트 액세스 없이는 이 작업을 효과적으로 수행할 수 없습니다. 얻을 수 있는 가장 가까운 방법은 netstat -an
명령을 반복적으로 실행하고 출력을 구문 분석하는 것입니다. 시스템이 컨테이너 또는 기타 격리 기술을 사용하는 경우 이 netstat
명령은 컨테이너에 대한 연결만 표시할 수 있습니다. 보안이 강화된 서버에서는 이 netstat
명령이 관리자에게만 제한될 수도 있습니다.
예를 들어, 루트 권한을 사용하면 iptables
새로 들어오는 모든 연결에 대해 로그 메시지가 생성되도록 하는 로깅 규칙을 설정할 수 있습니다. 그런 다음 이러한 메시지를 특정 파일에 쓰거나 네트워크를 통해 다른 시스템으로 보내도록 syslog 데몬을 구성할 수 있습니다. 네트워크를 통해 로그 메시지를 보내는 경우 메시지를 보내는 시스템에서 로그 메시지에 대한 수신자를 설정해야 합니다.
여러 사용자가 있는 서버에서는 많은 수의 들어오는 연결이 동시에 발생할 수 있습니다. 이들 중 일부는 실제로 동일한 서버 내의 프로세스 간 내부 연결이며, 특히 Java 프로세스는 동일한 서버 내의 서로 다른 프로세스 간에 통신하기 위해 많은 수의 "네트워크" 연결을 사용하는 경향이 있습니다. 이 경우 귀하가 찾고 있는 정보는 귀하에게 중요하지 않은 연결에 관한 수많은 메시지 사이에 숨겨질 것입니다. 따라서 정보 요청 시 보다 구체적인 정보를 제공하는 것이 귀하에게 유리할 수 있습니다.
그렇다면 들어오는 연결에 대한 정보가 필요한 이유는 무엇입니까? 귀하의 특정 요구에 맞는 정보를 생성하는 다른 방법이 있을 수 있습니다.
예를 들어, 일부 관리 책임 이전을 위해 서버의 네트워크 연결을 매핑해야 하는 경우 먼저 들어오는 연결을 수신할 수 있는 모든 TCP/UDP 포트를 사용 netstat -na -A inet
하고 식별할 수 있습니다. netstat -na -A inet6
TCP 포트의 경우 LISTEN
상태에서 해당 포트를 찾으면 됩니다. UDP 포트의 경우 나열된 모든 포트를 확인하여 해당 포트가 들어오는 패킷인지 나가는 패킷인지 확인해야 합니다.
시스템에서 실제로 활성화된 서비스 목록이 있으면 관심 없는 서비스를 제외할 수 있습니다. 예를 들어 서버가 한 호스팅 공급자에서 다른 호스팅 공급자로 이동되면 이전 공급자의 서버 모니터링 인프라는 다음을 사용합니다. 이전 공급자가 새 공급자보다 먼저 모니터링 유틸리티를 제거할 수 있으므로 포트는 흥미롭지 않습니다. 실제 핸드오버 중에 새 공급자는 자체 모니터링 도구를 설치할 가능성이 높습니다.
다음 단계는 관심 있는 서비스의 로그를 보는 것일 수 있습니다. 로그에 액세스할 수 있고 로그에 필요한 정보가 있는 경우 이것이 아마도 최선의 선택일 것입니다. 필요한 액세스 권한이 없는 경우 서버 관리자는 들어오는 모든 연결을 모니터링하라는 포괄적인 요청보다 특정 서비스의 이전 로그에 대한 읽기 액세스 요청을 더 잘 받아들일 수 있습니다.
약간의 스크립팅을 사용하면 들어오는 연결을 나타내는 메시지에 대한 로그를 검색하고( grep
), 연결 소스 정보를 선택하고( sed
또는 awk
원하는 도구를 사용하여) 중복 항목을 제거할 수 있습니다( sort
다음에 uniq
). 이와 같은 기존 로그를 처리하면 며칠 동안 들어오는 모든 연결을 모니터링하는 것보다 드물게(예: 일주일에 한 번 또는 한 달에 한 번) 발생하는 연결을 포착할 가능성이 더 높아질 수 있습니다.