엑스트라넷 프로그램 액세스
GoProxy
배포
goproxy 직접 설치 패키지를 다운로드하세요.
fatedier/frp 같은 다른 유사한 인트라넷 침투 소프트웨어도 사용할 수 있습니다.
시작
직접 프록시
암호화하지 않고 직접 프록시를 설정하여 정방향 프록시를 달성할 수 있습니다.
./proxy http -t tcp -p 호스트 IP:포트 --영구 --log 로그/프록시. .log --daemon
투명 프록시
레벨 1 암호화 에이전트:
암호화, 정방향 프록시로 직접 사용할 수 없음
./proxy http -t tls -p 기본 프록시 호스트 IP:port -z "passwd4#me" -C cert/proxy.crt -K cert/proxy.key --daemon --forever --log log/proxy. .log
보조 에이전트:
암호화되지 않고 정방향 프록시로 직접 사용할 수 있습니다.
./proxy http -t tcp -p 보조 프록시 호스트 IP:80 -T tls -P 기본 프록시 호스트 IP:port -Z "passwd4#me" -C cert/proxy.crt -K cert/proxy.key --daemon --forever --log log/proxy.80.log
./proxy http -t tcp -p 보조 프록시 호스트 IP:443 -T tls -P 기본 프록시 호스트 IP:port -Z "passwd4#me" -C cert/proxy.crt -K cert/proxy.key --daemon --forever --log log/proxy.443.log
투명한 프록시 사용자 구성:
hostAlias: k8s 환경에서는 보조 프록시 서버 IP에 해당하는 도메인 이름의 IP를 직접 수정하고, 호스트 파일을 직접 구성할 수도 있으며, 도메인 이름을 정확히 알아야 합니다.
kubectl을 통해 k8s 환경에서 클러스터 내 DNS 확인을 추가하면 전체 클러스터에 영향을 미치며, 이점은 두 번째 수준 도메인 이름 와일드카드인
kubectl edit cm coredns -n kube-system사용한 다음 사용자 정의 확인 레코드를 . 53.hosts 블록에 사용자 정의 확인 레코드를 추가할 수 있습니다.iptables DNAT: 도메인 이름을 정확히 알 수 없는 경우 외부 네트워크의 IP를 보조 프록시의 IP로 대체하는 방화벽 nat 규칙을 추가합니다. iptables 구성표 세부 정보:
- 컨테이너 환경에서는 기본 이미지에 아이피테이블이 포함되어 있어야 하며 다음을 활성화해야 합니다.
- 인트라넷이 아닌 대상 IP를 보조 프록시 주소로 대체하는 iptables 아웃바운드 NAT 규칙을 추가합니다.
# iptables DNAT
# ipv4주소 변환
iptables -t nat -A PREROUTING -p tcp \
-d 1.0.0.0/8,2.0.0.0/7,4.0.0.0/6,8.0.0.0/7,.0/8,.0/6,.0/4,.0/3,.0/3,.0/6,.0/10,100./9,.0/8,.0/7,.0/5,.0/5,.0/6,.0/7,.0/8,.0/3,.0/5,.0/8,.0/9,169./10,169./11,169./12,169./13,169./14,169./15,169./16,.0/7,.0/12,.0/11,.0/10,172./9,.0/8,.0/7,.0/4,.0/24,.0/24,.0/22,.0/21,.0/20,.0/19,.0/18,8.0/17,.0/16,.0/15,.0/14,.0/13,.0/12,.0/11,.0/12,.0/13,.0/18,.0/19,.0/23,.0/24,0.0/22,4.0/21,2.0/20,8.0/17,.0/16,.0/15,.0/14,.0/11,192./11,192./13,192./16,192./15,192./14,192./12,192./10,.0/8,.0/7,.0/7,.0/12,.0/15,.0/14,.0/13,.0/12,.0/15,.0/16,.0/18,.0/19,.0/22,1.0/24,2.0/23,4.0/21,2.0/20,8.0/17,.0/14,.0/13,.0/10,198./9,.0/8,.0/7,.0/8,.0/18,.0/19,.0/20,2.0/24,4.0/23,6.0/22,0.0/21,8.0/17,.0/16,.0/15,.0/14,.0/13,.0/12,.0/11,.0/10,203./9,.0/6,.0/4 \
--dport 80 -j DNAT --to 10.207.219.3:80
iptables -t nat -A PREROUTING -p tcp \
-d 1.0.0.0/8,2.0.0.0/7,4.0.0.0/6,8.0.0.0/7,.0/8,.0/6,.0/4,.0/3,.0/3,.0/6,.0/10,100./9,.0/8,.0/7,.0/5,.0/5,.0/6,.0/7,.0/8,.0/3,.0/5,.0/8,.0/9,169./10,169./11,169./12,169./13,169./14,169./15,169./16,.0/7,.0/12,.0/11,.0/10,172./9,.0/8,.0/7,.0/4,.0/24,.0/24,.0/22,.0/21,.0/20,.0/19,.0/18,8.0/17,.0/16,.0/15,.0/14,.0/13,.0/12,.0/11,.0/12,.0/13,.0/18,.0/19,.0/23,.0/24,0.0/22,4.0/21,2.0/20,8.0/17,.0/16,.0/15,.0/14,.0/11,192./11,192./13,192./16,192./15,192./14,192./12,192./10,.0/8,.0/7,.0/7,.0/12,.0/15,.0/14,.0/13,.0/12,.0/15,.0/16,.0/18,.0/19,.0/22,1.0/24,2.0/23,4.0/21,2.0/20,8.0/17,.0/14,.0/13,.0/10,198./9,.0/8,.0/7,.0/8,.0/18,.0/19,.0/20,2.0/24,4.0/23,6.0/22,0.0/21,8.0/17,.0/16,.0/15,.0/14,.0/13,.0/12,.0/11,.0/10,203./9,.0/6,.0/4 \
--dport 443 -j DNAT --to 10.207.219.3:443
iptables -t nat -A PREROUTING -p udp \
-d 1.0.0.0/8,2.0.0.0/7,4.0.0.0/6,8.0.0.0/7,.0/8,.0/6,.0/4,.0/3,.0/3,.0/6,.0/10,100./9,.0/8,.0/7,.0/5,.0/5,.0/6,.0/7,.0/8,.0/3,.0/5,.0/8,.0/9,169./10,169./11,169./12,169./13,169./14,169./15,169./16,.0/7,.0/12,.0/11,.0/10,172./9,.0/8,.0/7,.0/4,.0/24,.0/24,.0/22,.0/21,.0/20,.0/19,.0/18,8.0/17,.0/16,.0/15,.0/14,.0/13,.0/12,.0/11,.0/12,.0/13,.0/18,.0/19,.0/23,.0/24,0.0/22,4.0/21,2.0/20,8.0/17,.0/16,.0/15,.0/14,.0/11,192./11,192./13,192./16,192./15,192./14,192./12,192./10,.0/8,.0/7,.0/7,.0/12,.0/15,.0/14,.0/13,.0/12,.0/15,.0/16,.0/18,.0/19,.0/22,1.0/24,2.0/23,4.0/21,2.0/20,8.0/17,.0/14,.0/13,.0/10,198./9,.0/8,.0/7,.0/8,.0/18,.0/19,.0/20,2.0/24,4.0/23,6.0/22,0.0/21,8.0/17,.0/16,.0/15,.0/14,.0/13,.0/12,.0/11,.0/10,203./9,.0/6,.0/4 \
--dport 80 -j DNAT --to 10.207.219.3:80
iptables -t nat -A PREROUTING -p udp \
-d 1.0.0.0/8,2.0.0.0/7,4.0.0.0/6,8.0.0.0/7,.0/8,.0/6,.0/4,.0/3,.0/3,.0/6,.0/10,100./9,.0/8,.0/7,.0/5,.0/5,.0/6,.0/7,.0/8,.0/3,.0/5,.0/8,.0/9,169./10,169./11,169./12,169./13,169./14,169./15,169./16,.0/7,.0/12,.0/11,.0/10,172./9,.0/8,.0/7,.0/4,.0/24,.0/24,.0/22,.0/21,.0/20,.0/19,.0/18,8.0/17,.0/16,.0/15,.0/14,.0/13,.0/12,.0/11,.0/12,.0/13,.0/18,.0/19,.0/23,.0/24,0.0/22,4.0/21,2.0/20,8.0/17,.0/16,.0/15,.0/14,.0/11,192./11,192./13,192./16,192./15,192./14,192./12,192./10,.0/8,.0/7,.0/7,.0/12,.0/15,.0/14,.0/13,.0/12,.0/15,.0/16,.0/18,.0/19,.0/22,1.0/24,2.0/23,4.0/21,2.0/20,8.0/17,.0/14,.0/13,.0/10,198./9,.0/8,.0/7,.0/8,.0/18,.0/19,.0/20,2.0/24,4.0/23,6.0/22,0.0/21,8.0/17,.0/16,.0/15,.0/14,.0/13,.0/12,.0/11,.0/10,203./9,.0/6,.0/4 \
--dport 443 -j DNAT --to 10.207.219.3:443
# ipv6
iptables -t nat -p tcp -A 포트라우팅\
-d 2001::/16 -j DNAT --to IPV6 주소:443
# 방화벽 규칙 구성 저장
service iptables save
Socket5
./proxy socks -t tcp -p 호스트 IP:port --daemon --forever --log log/proxy. .log
장점과 단점
vantage
- 투명 프록시 https를 직접 구현하고 첫 번째 레벨 프록시에서 암호화할 수 있습니다.
- http 지원\socket basic
- SOCKET5 프로토콜 프록시 가능
- UDP 프로토콜이 직접 지원됨
단점
- 오픈 소스 버전에는 블랙리스트와 화이트리스트가 없으며 차단은 전적으로 방화벽에 의존합니다.
- 로그 형식을 조정할 수 없습니다.
전용 서브넷 프로그램
새 사설 서브넷을 생성하고 가상 라우팅 링크 출구를 DMZ에 넣고, DMZ에서 iptables SNAT를 설정하고 ip_forward를 활성화하면 Yungun은 이 게이트웨이를 통해 외부 IP에 액세스하거나 기본 게이트웨이로 사용하거나 인트라넷 서버를 DMZ 게이트웨이에 직접 연결할 수 있습니다.
#DMZ영역: 아이피테이블 규칙
iptables -t nat -A POSTROUTING -o 전용 서브넷 NIC -s 서브넷 IP 세그먼트 -j SNAT -- 외부 NIC IP
#컨테이너 내에서 라우팅 설정
#1.기본 경로는 사설 서브넷 게이트웨이로 이동합니다.
route add default gw 사설 서브넷 게이트웨이
#2.일반 인트라넷 게이트웨이에 인트라넷 다음 홉을 하나씩 추가합니다.
route -p add x.x.x.x mask x.x.x.x 사설 서브넷 게이트웨이
장점과 단점
vantage
- 정방향 프록시에 의존하지 않음
단점
- 직접 위반 격리
- 제어는 전적으로 아이피테이블에 의존합니다.
배포
ngx_http_proxy_connect_module에 대한 종속성
# 1. configure
./configure \
--prefix=/app/nginx_forward_proxy \
--with-http_stub_status_module \
--with-http_sub_module \
--with-http_auth_request_module \
--with-http_addition_module \
--with-http_realip_module \
--with-http_ssl_module \
--with-http_v2_module \
--add-module=/app/nginx-1.24.0/ngx_http_proxy_connect_module-0.0.5
# 2. patch
patch -p1 < \
/app/nginx-1.24.0/ngx_http_proxy_connect_module-0.0.5/patch/proxy_connect_rewrite_102101.patch
# 3. make
make && make install
구성
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 8080;
#http2 on;
# 인트라넷 URL을 확인하지 않도록 외부 DNS 설정하기
resolver 114.114.114.114;
proxy_connect; # ngx_http_proxy_connect_module
# 허용 포트
proxy_connect_allow 443 80;
#proxy_connect_connect_timeout 10s;
#proxy_connect_read_timeout 10s;
#proxy_connect_send_timeout 10s;
location / {
if ($host ~ "^(?=.1)|(?=localhost)|(?=10.\d{1,3}.\d{1,3}.\d{1,3})|(?=100.100.\d{1,3}.\d{1,3})|(?=172.(?=1)|(?=2[0-9])|(?=3[01]).\d{1,3}.\d{1,3})") {
#프록시 루프백 및 인트라넷 IP 허용되지 않음
return 403;
}
proxy_pass $scheme://$host$request_uri;
}
}
}
장점과 단점
vantage
- 인트라넷 주소에 대한 액세스는 다음을 구성하여 직접 차단할 수 있습니다.
- 로그 형식 조정 가능
단점
- 인증서와 도메인 이름이 일치 할 수 없으므로 투명 프록시 https를 직접 수행 할 수 없으므로 투명 프록시 https를 달성하려면 보안 서버에 GOPROXY 보조 프록시를 배포해야합니다.
- 정방향 프록시를 수행할 때 기본 인증이 제대로 작동하지 않으므로 프록시 서버 계정 비밀번호를 설정할 수 없습니다.
사용자 방화벽
프록시 애플리케이션에 사용자를 할당하고 해당 사용자의 방화벽이 해당 사용자의 인트라넷 주소에 대한 액세스를 차단하도록 구성할 수 있습니다.
사용자를 myproxy로 지정하면 아웃바운드 TCP 및 UDP 방화벽이 다음과 같이 구성됩니다.
내부 및 외부 네트워크 IP 주소 설명:
# IP 포워딩 사용
# vim /etc/sysctl.conf
# net.ipv4.ip_forward = 1
#Target이 인트라넷 IPV4에 대한 액세스를 차단합니다.
iptables -A OUTPUT \
-d .0/8,.0/8,192./16,100./16,169./16,.0/12 \
-m owner --uid-owner myproxy -j DROP
#Target이 인트라넷 IPV6에 대한 액세스를 차단합니다.
ip6tables -A OUTPUT \
-d fe80::/64,2406:440:400:878A::/96 \
-m owner --uid-owner myproxy -j DROP
#소스는 인트라넷이 아닌 IPV4 차단 액세스입니다.
iptables -A OUTPUT \
-d 1.0.0.0/8,2.0.0.0/7,4.0.0.0/6,8.0.0.0/7,.0/8,.0/6,.0/4,.0/3,.0/3,.0/6,.0/10,100./9,.0/8,.0/7,.0/5,.0/5,.0/6,.0/7,.0/8,.0/3,.0/5,.0/8,.0/9,169./10,169./11,169./12,169./13,169./14,169./15,169./16,.0/7,.0/12,.0/11,.0/10,172./9,.0/8,.0/7,.0/4,.0/24,.0/24,.0/22,.0/21,.0/20,.0/19,.0/18,8.0/17,.0/16,.0/15,.0/14,.0/13,.0/12,.0/11,.0/12,.0/13,.0/18,.0/19,.0/23,.0/24,0.0/22,4.0/21,2.0/20,8.0/17,.0/16,.0/15,.0/14,.0/11,192./11,192./13,192./16,192./15,192./14,192./12,192./10,.0/8,.0/7,.0/7,.0/12,.0/15,.0/14,.0/13,.0/12,.0/15,.0/16,.0/18,.0/19,.0/22,1.0/24,2.0/23,4.0/21,2.0/20,8.0/17,.0/14,.0/13,.0/10,198./9,.0/8,.0/7,.0/8,.0/18,.0/19,.0/20,2.0/24,4.0/23,6.0/22,0.0/21,8.0/17,.0/16,.0/15,.0/14,.0/13,.0/12,.0/11,.0/10,203./9,.0/6,.0/4 \
-m owner --uid-owner myproxy -j DROP
#소스는 비인트라넷 IPV6 블록 액세스입니다.
ip6tables -A OUTPUT \
-d 2001::/16 \
-m owner --uid-owner myproxy -j DROP
# 방화벽 규칙 구성 저장
service iptables save





