본문 바로가기
I T/Network

TCP proxy

by 루솨 2015. 8. 29.

사이트 : http://www.quietsche-entchen.de/cgi-bin/wiki.cgi/proxies/TcpProxy

 

 

파일 다운로드 및 설치

 

wget http://www.quietsche-entchen.de/download/tcpproxy-2.0.0-beta15.tar.gz

 

make && make install

 

 

tcpproxy ESTABLISHED timeout 설정

 

tcpproxy.c

디폴트는 60초인데 기본적으로 60초동안 패킷 통신이 일어나지 않으면 접속을 끊는다는 의미

넉넉하게 주면 TCP 끊어질 일은 없음

x->timeout   = 60;

 

수정후 재컴파일 하면 적용됨

 

설정파일

/etc/tcpproxy.conf

 

port 80 : 프록시 서버에서 LISTEN 포트

interface : 랜카드 eth0, eth1 등 이더넷 디바이스를 지칭하는 듯 함

server 211.xxx.xxx.10:80 : 원본서버 (리얼서버)와 목적지 포트를 의미

 - 프록시 서버에서 80번 패킷을 받으면 211.xxx.xxx.10: 80번으로 넘기겠다는 의미

 

port 80
interface *
server 211.xxx.xxx.10:80                                     

 

port 20
interface *
server 211.xxx.xxx.10:20

 

port 21
interface *
server 211.xxx.xxx.10:21

 

port 3389
interface *
server 211.xxx.xxx.12:3389

 

주의) server 0.0.0.0:80 이런식으로 0.0.0.0 으로 하는 순간 아래와 같이 루프에 빠질수 있음

 

tcp        0      0 127.0.0.1:33612             127.0.0.1:80                TIME_WAIT   -
tcp        0      0 127.0.0.1:46174             127.0.0.1:80                TIME_WAIT   -
tcp        0      0 127.0.0.1:52993             127.0.0.1:80                TIME_WAIT   -
tcp        0      0 127.0.0.1:47917             127.0.0.1:80                TIME_WAIT   -
 

 

실행

tcpproxy

 

중지

pkill -9 tcpproxy

 

 

squid 패킷은 아래와 같은 정보가 있어 PROXY 주소가 아닌 원 패킷 출처 (클라이언트 주소) 표기 가능 (소스 수정, 기타 모듈 사용)

 

Via: 1.1 proxy.도메인:80 (squid)

X-Forwarded-For: 211.xxx.xxx.12

 

tcpproxy 는 위 정보가 없으며 패킷형태는 아래와 같이 처리했을때와 동일하며 소스아이피 복호화 할때 안될 가능성 많음

어플리케이션이 주소수집 및 IP 기반으로 동작하는 방식이면 tcpproxy 는 사용하지 않는게 좋음

 

 - iptables NAT 모듈을 이용해서 포워딩 했을시 클라이언트 브라우져 접근시

 - 프록시 장비 및 방화벽 없이 서버에 클라이언트가 직접 브라우져 접속했을시 (소스아이피만 틀림)

 

 

※ 공격방어

iptables NAT FORWARD는 SYN 패킷까지 리얼서버 주소 변환을 해서 그대로 전달하므로 SYN 공격 차단 불가

 

TCPPROXY는 SYN 패킷을 받으면 그 클라이언트와 리얼 웹서버 대신 맺고 어플리케이션단의 HTTP 헤더 요청이 없으면

패킷을 리얼 웹 서버에 넘기지 않음