그래서 그림과 같이 토폴로지를 만들었습니다.
라우터에는 다음과 같은 3개의 인터페이스가 있습니다.
eth0을 인터넷 측으로(IP 사용)192.168.1.10/24게이트웨이192.168.1.254/24).
eth1을 서버 PC에 (ip로192.168.20.1/28)
eth2를 클라이언트로(IP 포함)172.16.20.1/29)
서버와 클라이언트가 연결되어 라우터 컴퓨터에서 인터넷을 얻습니다. Server-pc는 고정 IP(192.168.20.2), 클라이언트는 router-pc의 DHCP에서 자동 IP를 얻는 동안
클라이언트의 인터넷을 내 서버 PC의 프록시 서버로 리디렉션하기 위해 내 라우터 PC에서 iptables를 구성하고 싶습니다. 따라서 클라이언트는 인터넷에 액세스하기 위해 자격 증명을 사용해야 합니다(저는 오징어에 인증 프록시를 구성했고 클라이언트 측에서 프록시를 수동으로 구성했습니다).
내가 실행 중인 방화벽은 다음과 같습니다.
iptables -t nat -A 사전 설정 -p tcp -s 172.16.20.0/29 -j DNAT --to 192.168.20.2
192.168.20.2는 내 서버의 IP 주소입니다. 그러면 제가 만든 구성을 수정하여 필요에 따라 작동하도록 도와주실 수 있나요?
죄송합니다. 제 영어 실력이 좋지 않습니다. 감사해요.
답변1
첫째: Debian 6 "squeeze"는 2013년부터 주요 지원이 중단되었으며, 장기 지원도 2016년부터 중단되었습니다. 데비안 6에서 이러한 방식으로 인터넷 액세스를 차단하는 것은 제한 사항을 우회할 수 있는 보안 허점, 요청된 규칙 세트를 구현하지 못하게 하는 기능 부족 또는 두 가지 모두로 인해 비효율적일 가능성이 높습니다. 나강하게시스템을 지원되는 Debian 버전(Debian 9 "stretch")으로 업그레이드하는 것이 좋습니다.
둘째, 인증된 프록시와 투명 프록시 모드를 결합하면 제대로 작동하지 않습니다. 문제는 궁극적으로 호스트가반품인증이 필요합니다(예: HTTP 수준 인증이 필요한 DAV 서버에 로그인하기 때문에). 그러면 투명 프록시가 해당 자격 증명을 먹거나 혼동하게 됩니다.
대신 내 조언은 다음과 같습니다.
프록시를 통과하지 않는 모든 트래픽을 차단합니다.
iptables -A FORWARD -i eth2 -o eth0 -p tcp --dport 443 -j REJECT iptables -A FORWARD -i eth2 -o eth0 -p tcp --dport 80 -j REJECT
이렇게 하면 프록시를 통과하지 않는 모든 인터넷 트래픽이 차단됩니다.
클라이언트에 도메인 이름을 보내도록 DHCP 서버를 구성합니다.
subnet 172.16.20.1/29 { (...) option domain-name "example.com"; };
(여기가 아닌 로컬 도메인 이름을 사용하세요
example.com
)wpad.example.com
라우터를 가리켜야 하는 호스트 이름을 알 수 있도록 DNS 서버를 구성하십시오 (다시 말하지만,example.com
도메인 이름을 바꾸십시오).wpad.dat 파일을 만들고 다음 내용을 추가합니다.
function FindProxyForURL(url, host) { return "PROXY 172.16.20.1:3128"; }
이는 간단한 Javascript입니다. 대상 URL을 기반으로 다른 프록시를 사용하려면 함수를 수정하면 됩니다.
그런 다음 파일은 라우터에서 HTTP를 통해 "/wpad.dat"로 제공됩니다. 파일의 MIME 유형이
application/x-ns-proxy-autoconfig
또는 인지 확인하세요application/x-javascript-config
.
이렇게 하면 네트워크의 브라우저가 자동으로 프록시를 사용하도록 구성되며("자동으로 설정 검색" 옵션이 켜져 있는 경우(해당되는 경우)) 사용자는 인증에 대해 혼동하지 않습니다.