데이터베이스에 대한 애플리케이션 연결이 애플리케이션 내부인지 아니면 네트워크 이벤트로 인한 것인지 확인하려고 합니다. 이는 시스템 전체에서 netfilter에 표시되는 것 같습니다. 이를 위해 -j LOG
javascript를 사용하여 iptables
시스템에서 발생하는 모든 TCP 재설정 및 시간 초과를 기록하고 싶습니다 . 하지만 기준에 맞게 무엇을 사용해야할지 모르겠습니다.
conntrack
언젠가는 그 모듈과 관련된 답변이 나올 것 같지만 거의 아무것도 찾을 수 없습니다. 데이터베이스 서버는 MS-SQL이고 J2EE 애플리케이션은 RHEL 5.10 VM에서 실행됩니다. 후자는 로그인을 수행하려는 시스템입니다.
편집하다:
내가 찾은이 블로그 게시물--tcp-flags
옵션을 사용하여 TCP 재설정을 기록하는 방법(무엇보다도) 을 보여줍니다 iptables
. 따라서 해결해야 할 질문은 명시적인 RST가 없지만 연결이 오래되었거나 시간 초과된 것으로 간주되어 닫힌 연결을 기록하는 방법을 알아내는 것입니다.
답변1
IRC에 물어본 결과, 노드가 연결이 비정상적으로 종료되었다고 느끼면 일반적으로 예상되는 것 같습니다.어느내부적으로 파생된 시간 초과에 도달하는 등의 이유로 RST 패킷은 연결 측이 닫히기 전에 원격 노드로 전송될 것으로 예상됩니다. 따라서 두 질문 모두 동일한 솔루션으로 답변되는 것 같습니다. 즉, TCP 로깅을 통해 재설정하는 것입니다 --tcp-flags
.
내 RHEL 5.10 시스템(Debian 기반 배포판에서도 작동해야 함)에서 이 작업을 수행하는 기본 명령은 다음과 같습니다.
root@xxxxxxvlt01 ~ $ iptables -A OUTPUT -m tcp -p tcp --tcp-flags RST RST -j LOG
root@xxxxxxvlt01 ~ $ iptables -A OUTPUT -m tcp -p tcp --tcp-flags FIN FIN -j LOG
일치 기준이 없으면 꽤 많은 패킷이 일치하게 될 수도 있으므로 내가 다루고 있는 시스템에 특정한 새 규칙을 만들었습니다.
root@xxxxxxvlt01 ~ $ iptables -A OUTPUT -d xxx.xxx.64.248/32 -m tcp -p tcp --tcp-flags RST RST -j LOG
root@xxxxxxvlt01 ~ $ iptables -A OUTPUT -d xxx.xxx.64.248/32 -m tcp -p tcp --tcp-flags FIN FIN -j LOG
root@xxxxxxvlt01 ~ $ iptables -nvL
Chain INPUT (policy ACCEPT 767K packets, 108M bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 448K packets, 68M bytes)
pkts bytes target prot opt in out source destination
0 0 LOG tcp -- * * 0.0.0.0/0 xxx.xxx.64.248 tcp flags:0x04/0x04 LOG flags 0 level 4
0 0 LOG tcp -- * * 0.0.0.0/0 xxx.xxx.64.248 tcp flags:0x01/0x01 LOG flags 0 level 4
root@xxxxxxvlt01 ~ $
이것이 훨씬 낫습니다. 시간 초과 후 RST 내용에 대한 확인은 IRC의 누군가에 의해 제공되었으므로 누군가가 내가 틀렸다는 것을 증명할 경우를 대비하여 이 내용에 대답하지 않고 남겨 두겠습니다. 일주일 후에 누군가가 나에게 반박하지 않는 한 나는 내 대답을 받아들일 것입니다.