iptables방화벽과 머스커레이딩에대한 질문입니다

yanione의 이미지

이문제를 해결하게위해서 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가 안된다고 보는게 맞을꺼 같습니다
그렇지만 이유를 모르겠습니다 리눅서님들에게 절실하게 도움을 청합니다 ..그럼 언제나 어두운하늘이 되는사람이 되시길 ....

dgkim의 이미지

우선은 저는 NAT에서 MASQUERADE를 사용하지 않고
SNAT를 사용합니다.(사용하시는 IP가 고정IP라고 가정한다면)

그렇게 하는 이유는 man page에서 고정IP의 경우 그렇게 하라고 되어 있어서..

그리고 분석툴을 사용한다면..
기본적으로 많이 사용하는 tcpdump를 사용해 보시면 합니다.

tcpdump -n -i eth0 -l -p -> eth0의 트래픽을 확인 할 수 있습니다.
tcpdump -n -i eth1 -l -p -> eth1의 트래픽을 확인 할 수 있습니다.

위 명령으로 패킷이 어떻게 전달 되는지 확인해 보시겠습니까?

10.xxx에서 외부로 ping을 쏘고
위의 두번째 명령으로 eth1까지 도달하는지 확인하시고
도달한다면
첫번째 명령으로 출력되는 것을 확인하시면 됩니다.

이정도면 확인되지 않을까요?

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.