저는 DD-WRT를 사용하고 있으며 텔넷을 통해 iptable 규칙을 추가할 수 있습니다.
내부 IP(예: 192.168.0.200)를 가리키는 포트 80(예: mydomain.com)의 특정 주소에서 입력을 허용하는 규칙을 찾고 있습니다. 참고: 내 IP 주소를 가리키도록 mydomain.com에 A 레코드를 추가했습니다.
나는 시도했다:
iptables -I INPUT -p tcp --src mydomain.com --dport 80 -j ACCEPT
iptables -I INPUT -p tcp --port 80 -m string --hex-string "|08|mydomain|03|com" -algo bm -j ACCEPT
DD-WRT 웹 인터페이스에 로그인하고 포트 전달을 사용하여 이 작업을 수행할 수 있다는 것을 알고 있습니다. 이렇게 하면 작동하지만 포트 80의 모든 요청을 허용하지 않고 mydomain.com의 요청만 허용하고 싶습니다. 가능합니까?
답변1
당신은 그렇게 할 수 없습니다. TCP 요청은 다음을 포함하는 SYN 패킷에 의해 시작됩니다.데이터 없음. 포트 번호와 IP 주소는 얻을 수 있지만 호스트 이름은 얻을 수 없습니다.
연결을 허용하고 헤더와 일치하는 데이터가 포함된 첫 번째 Host
패킷을 찾는 몇 가지 복잡한 규칙을 작성할 수도 있습니다. 첫 번째 패킷에 있다고 보장할 수는 없지만 일반적으로 그렇습니다. 그런 다음 첫 번째 패킷이 도메인에 대한 요청이 아닌 경우 연결을 종료합니다. 당연하지 만약두번째연결에 대한 요청입니다. 실제로 방화벽을 우회하려는 사람들이 사용할 수 있는 온갖 종류의 트릭이 있습니다. 예를 들어 패킷의 다른 곳에 도메인을 채우십시오.
이러한 필터링이 필요한 경우 HTTP 프록시가 필요합니다.
추신: 해당 16진수 문자열과 무엇을 일치시키고 싶은지 잘 모르겠습니다. 헤더는 Host
DNS 길이 문자열 형식이 아닌 순수 ASCII입니다. 그게 다야 --hex-string "mydomain.com"
.