실행 시 top
여러 프로세스를 표시하는 'perl' 명령의 CPU 사용량이 100%에 가깝습니다.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
21287 simon 15 0 4141 231 5891 S 90.3 0.0 14:27.50 perl
22545 albert 15 0 12744 1172 8321 S 99.0 0.0 20:00.58 perl
...
...
lsof -p <pid>
악의적인 프로세스인지 추정합니다(일반적으로 파이프라인의 어딘가에서 로컬 포트 >50000을 사용하여 외부 IP 주소에 연결을 시도합니다).
kill -9 <pid>
해당 악성 프로세스를 개별적으로 종료하십시오.
그런 다음 위의 작업을 반복하십시오.
이상적으로는 다음 프로세스를 자동으로 종료하고 싶습니다.
- 위에 표시된 사용자
- 15분 이상 실행 중임
- CPU 사용량이 90%를 초과합니다.
- 아웃바운드 TCP 연결이 있습니다(가능한 경우).
혹시 편리한 스크립트를 가지고 있는 사람이 있나요? 감사해요!
답변1
실제로 편리한 스크립트는 없지만 이러한 악성 프로세스를 종료해도 처음에 발생한 문제가 해결되지는 않습니다. 귀하는 웹 호스트이고 이들은 귀하의 VPS에서 실행되는 광부입니까?
그들을 죽이는 대신에 할 수 있는 일은 "Starve Them"을 사용하는 것입니다.cgroup.
여기에는 CPU 및 네트워크 계정과 이라는 도구가 있습니다 cgclassify
. 유연한 계층 구조를 구축할 수 있습니다. CentOS/RHEL에는 좋은 문서가 있습니다.여기.
나는 세부 사항에 대한 전문가는 아니지만 다음과 같은 방법이 가능하다고 생각합니다. CPU/메모리/네트워크에 대한 cgroup을 생성하고 cgclassify 또는 멘션 데몬을 사용하여 사용된 공유를 기반으로 프로세스를 분류합니다. 이는 데몬이 리소스 사용 모니터링을 담당하고 네트워크와 일정량의 CPU 공유를 사용하는 프로세스를 cgroup으로 이동할 수 있음을 의미합니다. 이는 CPU 및 네트워크 액세스를 심각하게 제한하거나 프로세스를 직접 종료합니다(예: 다음과 같은 이유로 인해). 메모리 부족).
프리젠테이션입니다몇 가지 세부 사항.
15분마다 이러한 프로세스를 종료할 때의 문제는 해당 프로세스가 즉시 다시 생성될 수 있고 해당 15분 동안 모든 리소스를 소모한다는 것입니다.
cgroup을 사용하면 특정 보안 바이너리(예: PHP, Apache)를 분류하고 다른 모든 프로세스를 제한할 수 있습니다. 따라서 CPU/네트워크 사용량은 서버에 영향을 주지 않으며 사용자가 작업을 실행할 가치가 없을 정도로 느려집니다. 프로세스가 더 많은 CPU를 사용할수록 속도가 느려지는 방식으로 CPU 공유를 조정할 수도 있습니다. 네트워크 대역폭도 마찬가지입니다. 나가는 네트워크 연결에 대해 1Mbit만 사용하거나 그 이하로 사용자당 모든 프로세스를 제한할 수 있습니다.
cgroup의 계정 데이터만 사용하여 프로세스를 종료할 수도 있습니다.
이 작업을 "즉시" 수행하는 것은 또 다른 문제처럼 보이지만 문제가 지속되면 사용 및 수정을 고려하십시오.ulatencyd
또는 귀하의 요구 사항을 충족하는 유사한 도구. 좋은 규칙을 사용하면 문제가 있는 프로세스를 15분 이내에 어느 정도 지속성을 가지고 더 빠르게 처리할 수 있습니다.