RHEL 6.7 DNS 서버가 있고 특정 도메인이 포함된 패킷을 삭제하려고 합니다. 예를 들어, DNS 서버 중 하나가 무작위 하위 도메인 공격에 참여했습니다. 외부 호스트나 다른 DNS 서버가 우리에게 쿼리를 보낸 다음 서버가 특정 호스트 이름에 대해 자체 재귀 쿼리를 시작합니다. 쿼리된 모든 호스트 이름은 유효하지 않고 무작위이며 존재하지 않습니다. tcpdump에서 이러한 쿼리 중 하나는 다음과 같습니다.
123.123.123.123.54729 > 140.205.228.52.53: [bad udp cksum 0x3701 -> 0x0d53!] 37401 A? llij.x99moyu.net. (34)
이 예에서 DNS 서버는 123.123.123.123 주소이며 조회는 다른 DNS 서버에 연결하여 처리됩니다. 우리는 RRL 또는 재귀 클라이언트 속도 제한을 지원하지 않는 이전 버전의 BIND를 실행하고 있습니다. iptables로 속도 제한을 시도했지만 원하는 결과를 얻지 못했습니다. 이제 우리는 iptables를 사용한 문자열 매칭을 조사하고 있지만 아직까지는 성공하지 못했습니다. 전혀 작동하지 못하는 것 같습니다. 내가 구글링한 바에 따르면 이것은 매우 간단한 것 같습니다. 이는 iptables의 규칙입니다.
-A INPUT -p udp --dport 53 -m string --algo bm --string x99moyu.net. -j DROP
이것이 iptables 명령의 모습입니다.
#iptables -L -vxn
0 0 DROP udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:53 STRING match "x99moyu.net." ALGO name bm TO 65535
이 규칙은 x99moyu.net을 통해 서버에 들어오는 모든 패킷을 삭제해야 합니다. 도메인이 존재합니다(패킷의 어느 위치에나). 그러나 이것은 작동하지 않습니다. 이 규칙은 INPUT 체인의 최상위에 있으므로 이것이 우선 적용되어야 한다는 것을 알고 있습니다. 필드 끝부분의 마침표를 없애고 앞에 마침표를 넣어보았으나 그것도 되지 않았습니다. 나는 또한 --string x99moyu.net을 넣어 보았습니다. --algo 앞에 있지만 아무 효과가 없습니다. kmp 알고리즘도 시도했지만 소용이 없었습니다.
내가 뭘 잘못하고 있는지 알려주고 도움을 줄 수 있는 iptables 문자열 패턴 일치 경험이 있는 사람이 있나요?