![iptables는 LAN 내부에 있을 때 개인 웹사이트에 대한 액세스를 허용하지만 외부에 있을 때는 액세스를 차단합니다.](https://rvso.com/image/1597813/iptables%EB%8A%94%20LAN%20%EB%82%B4%EB%B6%80%EC%97%90%20%EC%9E%88%EC%9D%84%20%EB%95%8C%20%EA%B0%9C%EC%9D%B8%20%EC%9B%B9%EC%82%AC%EC%9D%B4%ED%8A%B8%EC%97%90%20%EB%8C%80%ED%95%9C%20%EC%95%A1%EC%84%B8%EC%8A%A4%EB%A5%BC%20%ED%97%88%EC%9A%A9%ED%95%98%EC%A7%80%EB%A7%8C%20%EC%99%B8%EB%B6%80%EC%97%90%20%EC%9E%88%EC%9D%84%20%EB%95%8C%EB%8A%94%20%EC%95%A1%EC%84%B8%EC%8A%A4%EB%A5%BC%20%EC%B0%A8%EB%8B%A8%ED%95%A9%EB%8B%88%EB%8B%A4..png)
소스(클라이언트)에서 대상(서버)으로 요청을 전달하기 위해 투명 프록시를 사용하고 있습니다. 저는 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에서 처리되는 것 같아요. 어떻게 해야 할지 모르고 그냥 잃어버렸습니다. 이 경우 해당 패킷은 클라이언트 브라우저에 웹 페이지를 표시하는 데 필요했기 때문에 웹 사이트 시간이 초과되었습니다.
건배,
몸을 풀다