특정 웹사이트에 대한 POST 페이로드를 검사해야 합니다(서버가 사용량이 많아서 전체 서버에 대해 POST 로깅을 설정하지 않습니다).
서버는 LiteSpeed 5.0.7입니다. SecRequestBodyAccess가 "켜짐"으로 설정되어 있습니다.
먼저 규칙 체인을 사용해 보았습니다. 원하는 호스트에 대한 요청만 일치시키는 1단계의 첫 번째 규칙이지만 포스트 페이로드는 2단계에 있으며 2개의 서로 다른 단계에서 체인을 만들 수 없을 것 같습니다.
그런 다음 이것을 사용하려고했습니다.
<VirtualHost xxxxx>
SecRule REQUEST_METHOD "POST" "phase:2,log,id:22222223
</VirtualHost>
하지만 modsec_audit.log
.
제가 뭔가 잘못하고 있는 걸까요, 아니면 ModSec과의 LiteSpeed 호환성과 관련이 있는 걸까요?
결국 나는 모든 요청에 대해 POST를 기록하기 위해 이 규칙을 시도했습니다.
SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,log,pass".
요청은 기록하지만 요청 본문( -C-- group si missing in modsec audit
)은 기록하지 않습니다.
답변1
이 질문과 유사합니다:모든 POST 데이터를 기록하기 위해 mod_security를 얻는 방법은 무엇입니까?
두 가지 다른 단계에서 두 개의 규칙을 연결할 수 없다는 것이 맞습니다. 그러나 단계 2는 모든 단계 1 정보에 액세스할 수 있으므로 이 방식으로 수행하려면 이를 단계 2로 이동하면 됩니다.
당신이 준 이 규칙은:
SecRule REQUEST_METHOD "POST" "phase:2,log,id:22222223
무의미합니다. POST 요청이 수신되었지만 POST 본문 없이 기본 로그에 기록됩니다.
또한 귀하의 내용에 따라 AuditEngine에 기록됩니다.SecAuditEngine값은 다음과 같이 설정됩니다.
- SecAuditEngine을 On으로 설정하면 모든 것이 감사 로그에 기록되며 위의 규칙은 필요하지 않습니다. 이렇게 하면 로그 파일이 빨리 채워지므로 권장되지 않습니다.
- SecAuditEngine을 RelevantOnly로 설정한 경우 여기에도 기록됩니다.
- SecAuditEngine이 Off로 설정되면 감사 로그에 기록되지 않습니다.
일반적으로 SecAuditEngine을 RelevantOnly로 설정하는 것이 가장 좋지만(이미 설정한 것으로 의심됩니다), 그렇게 설정하지 않으면 본문이 AuditLog에 기록되지 않을 수 있습니다.
아마도 더 좋은 방법은 다음을 사용하여 제공한 다른 규칙을 사용하는 것입니다.ctl행동:
SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,log,pass"
이렇게 하면 AuditLog가 Off로 설정된 경우에도 사후 요청에 대해 AuditEngine이 강제로 켜집니다. 이는 또한 실제로 필요하지 않거나 유용하지 않은 규칙을 적용하기 위해 이 규칙을 실행했음을 기록하므로 "log"를 "nolog"로 변경하겠습니다. 요청은 계속 기록되지만(auditEngine이 yes로 설정되었으므로) 해당 변경을 수행하는 이 규칙은 기록되지 않습니다. 그런데 ctl을 사용하면 이 요청에만 영향을 미치므로 AuditEngine은 다음 요청을 위해 다시 재설정됩니다.
당신이 말했듯이 이것은 C 부분이 없다는 점을 제외하면 작동하는 것 같습니다. 이것은 다음과 같이 설정됩니다.SecAuditLogParts. 기본적으로 여기에는 C 부분이 포함되어 있으므로 기본값을 변경했음이 틀림없다고 생각하시나요? 이에 대한 이유가 있었나요?
어쨌든 C 부분을 포함하도록 설정할 수 있습니다.
SecAuditLogParts ABCFHZ
SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,nolog,pass"
또는 이 규칙이 실행될 때 C 부분만 기록하려면 규칙의 일부로 다음을 수행할 수 있습니다.
SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,ctl:auditLogParts=ABCFHZ,nolog,pass"
알아야 할 또 다른 사항은 POST 요청이 민감한 데이터(비밀번호, 신용카드 번호, 주민등록번호 등)를 기록할 수 있다는 것입니다. 이를 기록하는 것은 권장되지 않으며 회사 정책 및/또는 귀하가 따르는 표준(예: PCI 준수)을 위반할 수도 있습니다. 따라서 이 데이터를 마스킹하기 위해 삭제 규칙을 설정하는 것이 좋습니다. 자세한 내용은 여기를 참조하세요.https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#sanitiseArg
답변2
다음 사항을 확인하세요.
가지다
SecRequestBodyAccess On
"log" 대신 "auditlog"를 사용해 보십시오.
사용자 정의된 SecAuditLogParts가 있는 경우 요청 본문이 포함되어 있는지 확인하세요.