iptables방화벽과 머스커레이딩에대한 질문입니다
이문제를 해결하게위해서 3주정도 시간이 흘렀고 많은 문서를 보았지만 해결이 안되어서 결국 이곳까지 오게되었습니다
저는 LUG회원입니다 결국 LUG고수님들을 못뵙고 지금이곳의 리눅서님들에게 도움을 청하고자 이렇게 글을씁니다
일단 스크립을 붙이겠습니다
#!/bin/sh
IT="/sbin/iptables"
OUTNET="219.x.x.158/24" (사정상이렇게씁니다)
OUTBCAST="219.x.x.159"
OUTDEV="eth1"
ANYADDR="0/0"
TCPIN="smtp,http"
TCPOUT="smtp,http,ftp,ftp-data,irc"
UDPIN="domain,pop3s"
UDPOUT="domain"
ICMPIN="0,3,11"
ICMPOUT="8,3,11"
start()
{
#로깅 : 방화벽에서 차단된 데이터그램의 로깅을 사용하려면 다음의 행의
# 주석처리를 삭제하면된다.
# LOGGING=1
$IT -F FORWARD
$IT -P FORWARD DROP
$IT -A FORWARD -i $OUTDEV -j DROP
#스머프 형식의 공격에 대비하기위해 브로드캐스트 주소로 ICMP를 보내게
#허용하지않는다..
$IT -A FORWARD -m icmp -p icmp -i $OUTDEV -j DROP
$IT -A FORWARD -f -j ACCEPT
$IT -A FORWARD -m multiport -p tcp -d $OUTNET --dports $TCPIN --tcp-flags SYN,ACK ACK -j ACCEPT
$IT -A FORWARD -m multiport -p tcp -s $OUTNET --sports $TCPOUT --tcp-flags SYN,ACK ACK -j ACCEPT
$IT -A FORWARD -m multiport -p tcp -i $OUTDEV -d $OUTNET --dports $TCPIN --syn -j ACCEPT
$IT -A FORWARD -m multiport -p tcp -i $OUTDEV -d $ANYADDR --dports $TCPOUT --syn -j ACCEPT
$IT -A FORWARD -m multiport -p udp -i $OUTDEV -d $OUTNET --dports $UDPIN -j ACCEPT
$IT -A FORWARD -m multiport -p udp -i $OUTDEV -d $ANYADDR --dports $UDPOUT -j ACCEPT
$IT -A FORWARD -m icmp -p icmp -i $OUTDEV -d $OUTNET -j ACCEPT
$IT -A FORWARD -m icmp -p icmp -i $OUTDEV -d $ANYADDR -j ACCEPT
$IT -t nat -P POSTROUTING DROP
$IT -t nat -A POSTROUTING -o eth1 -j MASQUERADE
}
stop()
{
$IT -F
$IT -X
}
restart()
{
stop
start
}
case $1 in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo $"##Usage:$0 {start|stop|restart}##"
;;
esac
exit $?
이건제가만든스크립이고 제가 문제를 해결하고자하는것은
결론적으로는 nat입니다 스크립이 잘못되었는지 알고싶은것도 있습니다
제 실력이 부족해서요 죄송합니다
이제 마지막으로 스크립은 실행이 잘됩니다 문제는
먼저 이더넷의 설정입니다
eth0 10.10.10.254 netmask 255.255.255.0
eth1 219.x.x.158 netmask 255.255.255.224
dns 168.126.63.1
route -N
0.0.0.0 219.x.x.129 default router 라우팅설정은 219.x.x129로
모든ip가 가게만들어놨습니다
그럼 일단 방화벽내의설명입니다. echo "1" > ip_forward 로 forwarding
(좀 줄이겠습니다) 하게만들었습니다
그리고 10.10.10.x 의 아이피로 방화벽내에서는 ping이보내지고
219..x.x.x 대 의 아이피도 외부로 나갑니다
하지만 내부에있는 10.10.10.x ip가 방화벽 ip219.x.x.158 과 219.x.x.129 (라우터) 까지 가지못합니다
내부ip 10.10.10.x 클라이언트에서 갈수있는건 10.10.10.254까지입니다
제 소견으로는 nat가 안된다고 보는게 맞을꺼 같습니다
그렇지만 이유를 모르겠습니다 리눅서님들에게 절실하게 도움을 청합니다 ..그럼 언제나 어두운하늘이 되는사람이 되시길 ....
제 짧은 소견...
우선은 저는 NAT에서 MASQUERADE를 사용하지 않고
SNAT를 사용합니다.(사용하시는 IP가 고정IP라고 가정한다면)
그렇게 하는 이유는 man page에서 고정IP의 경우 그렇게 하라고 되어 있어서..
그리고 분석툴을 사용한다면..
기본적으로 많이 사용하는 tcpdump를 사용해 보시면 합니다.
위 명령으로 패킷이 어떻게 전달 되는지 확인해 보시겠습니까?
10.xxx에서 외부로 ping을 쏘고
위의 두번째 명령으로 eth1까지 도달하는지 확인하시고
도달한다면
첫번째 명령으로 출력되는 것을 확인하시면 됩니다.
이정도면 확인되지 않을까요?
댓글 달기