iptables는 LAN 내부에 있을 때 개인 웹사이트에 대한 액세스를 허용하지만 외부에 있을 때는 액세스를 차단합니다.

iptables는 LAN 내부에 있을 때 개인 웹사이트에 대한 액세스를 허용하지만 외부에 있을 때는 액세스를 차단합니다.

소스(클라이언트)에서 대상(서버)으로 요청을 전달하기 위해 투명 프록시를 사용하고 있습니다. 저는 iptables를 사용하여 투명 비트를 작동시킵니다... 즉, 요청이 중간 프록시를 통과하더라도 클라이언트 IP가 대상에 나타나게 합니다... 실제로는 SSLH라고 합니다..https://github.com/yrutschle/sslh

규칙은 다음과 같습니다.

iptables -w -t mangle -N SSLH
iptables -w -t mangle -A PREROUTING -p tcp -m socket --transparent -j SSLH
iptables -w -t mangle -A OUTPUT --protocol tcp --out-interface eth0 -m multiport --sport 80,443,4480 --jump SSLH
iptables -w -t mangle -A SSLH --jump MARK --set-mark 0x1
iptables -w -t mangle -A SSLH --jump ACCEPT
ip rule add fwmark 0x1 lookup 100
ip route add local 0.0.0.0/0 dev lo table 100

나는 프록시와 동일한 컴퓨터의 Apache에서 웹 사이트를 실행하고 있습니다. 그것은 내 집 LAN 내부에 있는 Pi입니다.

해당 아파치의 웹사이트에 액세스하려고 할 때 요청이 LAN 외부에서 발생합니다. 예를 들어 휴대전화의 Wi-Fi 핫스팟에 연결하는 경우와 같이 LAN Wi-Fi 네트워크에 연결하고 시도하면 브라우저에 페이지가 나타납니다. 같은 페이지를 열면 시간 초과가 발생합니다... 해당 iptables 규칙을 비활성화하지 않는 한... 하지만 이 작업을 수행하면 LAN 시간 초과 외부에서 발생하는 요청이 발생합니다.

상황을 조금 복잡하게 만들기 위해 동일한 Pi에서 실행되는 dnsmasq를 사용하여 NAT 루프백을 시뮬레이션하므로 로컬 IP 주소뿐만 아니라 도메인 이름을 사용하여 내 LAN 내에서 웹 사이트에 액세스할 수 있습니다.

웹서버의 로컬 IP 주소만 사용한다면 어쨌든 작동하지 않을 것입니다.

다음과 같은 웹 요청이 가능하도록 iptables 규칙을 수정해야 합니까?

https://www.example.com/test.html

LAN 외부에 있든 내부에 있든 페이지를 표시합니까?

감사합니다,

몸을 풀다

답변1

효과적인 솔루션이 있습니다.

내 질문은 ...

다음과 같은 웹 요청이 가능하도록 iptables 규칙을 수정해야 합니까?
https://www.example.com/test.html
LAN 외부에 있든 내부에 있든 페이지를 표시합니까?

내 iptables 규칙이 내 LAN 내부에서 발생하는 연결 요청을 차단하는 것 같습니다. LAN 외부에서 시작된 요청은 규칙에 따라 잘 작동하고 규칙이 완전히 해제되었을 때 외부 또는 내부 작업에서 시작된 요청은 제대로 작동하기 때문에 이를 수행하는 iptables 규칙이어야 한다는 점을 제외하고는 이것이 정확히 왜 그런지 모르겠습니다.

내 로컬 LAN의 모든 IP에서 들어오고 나가는 트래픽을 허용하는 규칙을 추가하는 아이디어가 있었습니다. 내 라우터의 DHCP 서버는 192.168.1.1에서 192.168.1.200 범위의 LAN에 있는 장치에 IP를 할당합니다.

192.168.1.0/24를 지정하면 해당 범위의 모든 IP를 참조할 수 있습니다.

그래서 제가 지금 사용하는 규칙은 다음과 같습니다.

iptables -t mangle -N SSLH
iptables -t mangle -A INPUT -p tcp -s 192.168.1.0/24 -j ACCEPT
iptables -t mangle -A OUTPUT -p tcp -d 192.168.1.0/24 -j ACCEPT
iptables -t mangle -A PREROUTING -p tcp -m socket --transparent -j SSLH
iptables -t mangle -A OUTPUT -p tcp --out-interface eth0 -m multiport --sport 80,443,4480 -j SSLH
iptables -t mangle -A SSLH -j MARK --set-mark 0x1
iptables -t mangle -A SSLH -j ACCEPT
ip rule add fwmark 0x1 lookup 100
ip route add local 0.0.0.0/0 dev lo table 100

그리고 다음과 같은 URL이 있다는 것을 기쁘게 생각합니다.https://www.example.com/내 LAN의 Pi에 있는 내 개인 Apache 서버의 웹 페이지를 가리키는 이 페이지는 이제 LAN 내부 또는 외부에서 페이지를 요청하면 웹 페이지를 엽니다.

원래 규칙이 LAN 내에서 발생한 요청을 차단하는 이유를 파악하기 위해 다음과 같이 변경해 보았습니다.

iptables -t mangle -A PREROUTING -p tcp -m socket --transparent -j SSLH

에게:

iptables -t mangle -A PREROUTING -p tcp -j SSLH

투명 소켓 일치는 SSLH를 통과하지 않는 요청이 있는 불투명 소켓을 무시하기 때문입니다. 그러나 로컬 IP 주소의 트래픽은 여전히 ​​차단되었습니다.

이 규칙이 범인일 가능성이 높습니다. 내 웹 서버(포트 443)에서 사용자 정의 체인 SSLH로 나가는 모든 패킷을 보냅니다. 이 체인의 모든 패킷은 표시되고 이후 규칙의 도움을 받아 SSLH 프록시의 처리를 위해 루프백 인터페이스로 라우팅됩니다.

iptables -t mangle -A OUTPUT -p tcp --out-interface eth0 -m multiport --sport 80,443,4480 -j SSLH

그러나 해당 패킷이 "들어오고" 처음에 목적지에 도달하기 위해 SSLH 프록시를 거치지 않았을 때 "나가고" 루프백 인터페이스로 라우팅되어 SSLH에서 처리되는 것 같아요. 어떻게 해야 할지 모르고 그냥 잃어버렸습니다. 이 경우 해당 패킷은 클라이언트 브라우저에 웹 페이지를 표시하는 데 필요했기 때문에 웹 사이트 시간이 초과되었습니다.

건배,

몸을 풀다

관련 정보