nat에관한문제입니다 부탁드립니다

yanione의 이미지

일단 저희구성도를 그려본것입니다
-----------------------------
외부 네트워크 0/0
-----------------------------
|
------
디폴트 라우터: 219.x.x.129
------
|
|
| eth1: 219.x.x.158
----------------
NAT 게이트웨이 (Linux 머신) ------------------ (oracleDB:219.x.x.162)
----------------------------------------------------- (/web/mailserver)
| |
|
|
|
|
|
|
------------------------------
내부 네트워크: 10.10.10.0/24

mailserver의 network구성은 eth0 10.10.10.161/24 이고
eth1 219.x.x.161입니다

일단이것이 저희구성도입니다
말그대로 사설ip(10.10.10.0/24)공인ip(219.x.x./27)를 쓰는형태로 되어있습니다

그럼 제가했던 작업순서를 말씀드리겠습니다
일단 회사내부에있는 모든허브는 사설network과 공인 network이 같은허브에서 돌아가고있습니다 (크로스케이블로연결되어있습니다)
보안에 취약점이있습니다 공인ip를통해서 내부클라이언트까지 들어올수있다는 보안에 헛점이있습니다

그럼 이제부터틑 작업순서입니다

일단 방화벽에 nic를 2개를 꽂고 eth0 10.10.10.254로
10.10.10.0/24 들이 라우팅할수있는 사설ip를 주었고
나머지 eth1 에는 외부로 나갈수있는 network의 공인ip 219.x.x.158/27을 주었습니다

그리고 밑의 스크립트와 같이 nat를 하였습니다

#!/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 -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 $1

몰론 스크립을 실행하기전에
forwarding을 하였습니다
echo "1" > /proc/sys/net/ipv4/ip_forward

스크립트결과 nat는 되었고 10.10.10.0/24의 network에서 외부 라우터인 219.x.x.129/27번까지 패킷이 전달되었습니다
하지만 문제가생긴건 방화벽에서부터 문제가 생기었습니다.

방화벽에서의 문제는 외부로의 ping은 가능하나 내부사설로의
10.10.10.0/24로의 network은 가능하지않았습니다 .

ping에대한결과입니다:

외부로의 ping은 가능합니다
내부로의 ping (10.10.10.0/24)을 했을경우
ping : sendmsg operating not permitted라는 메세지가나옵니다

이것이 첫번째문제이고

두번째문제로는 oracleDB에서 내부만 10.10.10.0/24 network으로 ping이가질않습니다 일단 oracleDB의 defaultroter를 방화벽외부ip인
219.x.x.158로 바꾼상태이고 mail서버또한 바꾼상태입니다
일단 당연한이야기이지만 mail서버에서는 내부의network인 10.10.10.0/24 로의 ping 이 가능합니다 (그건 10.10.10.161으로 설정된 랜카드때문인거같습니다)
이것이 두번째문제입니다
방화벽에서의 문제와 같은문제라고 보여집니다
nat를 통하여 10.10.10.0/24 --> 219.x.x.158(eth1)타고 외부로의 접근은 가능하지만 방화벽과 oracleDB 에있는 219.x.x.0/27 로 되어있는 network에선 내부 10.10.10.0/24으로의 접근이 불가능하다는것입니다
물론 내부에있는 10.10.10.0/24 의 아이피로 외부로나갈수는있지만
oracleDB와 mail서버로의 접근은 불가능하다는것입니다
이결과로보아서 oracleDB 와 mail서버에서조차도 머스커레이딩을 해야한다는 얘기입니까..??
아님 다른방법이있는것입니까..
참고로 전에쓰고있던 nat가 가능한 windows방화벽은 이런문제가없었던거 같습니다...
설명이 부족하다면 답글을 남겨주시면 수시로 접속해서 더많은 정보를 드리겠습니다 그럼 부탁드립니다

Saintlinu의 이미지

우선 ping에서 다음과 같은 메시지가 발생 했을 경우는 이러합니다.

Quote:
ping : sendmsg operating not permitted라는 메세지가나옵니다

이런 경우는 icmp code / type을 만들지 못할 때 발생합니다.

방화벽에서 code / type을 막아서 raw socket이 못나가는 경우입니다.

그리고 DMZ 영역으로 내부망에서 넘어가지 못하는 것과 NAT와는

별개로 보입니다.

그건 단순히 static routing table만 있으면 넘나 듭니다.

인터넷 구간의 static leased line처럼 사용될 필요는 없습니다.

쓰고 보니 답변은 안되는 군요.. :oops:

행복하세요 ^_^

yanione의 이미지

하지만 nat라는것은 서로다른 network을 주소변환으로인하여 forwarding해주는것으로 알고있습니다

결과적으로 저희회사의 구성은 일단 10.10.10.0/24와 219.x.x.158/27
은 같은 허브에꽂여있습니다
같은 구성과 같은 허브에 있다고해서 같은 network이 되지는 않습니다
서로다른 network에 있기때문에 일단 주소변환을 통한 nat는 가능한거같지만 같은네트웍에있는 219.x.x.161과 162번이 방화벽ip의 라우팅을 통해서 라우터로까지의 접근은 가능하지만 내부망 10.10.10.0/24로의 접근이 불가능한것입니다 그건 당연히 같은 네트웍이 아니기때문에 가능하지않은거 같습니다
그래서 그것에대한 설정이 필요한거같습니다
방화벽에서 안되는이유를 조금더 자세히 말씀해주시면 감사하겠습니다
그럼 답변감사했습니다
그런데 이해가안가는건 방화벽에서의 내부망으로의 접근입니다
nat라는것이 외부로 나갈경우만 그러니까 10.10.10.0/24에서 219.x.x.158/27을 통한 외부로의 접근만 가능하게 해주는것인지 알고싶습니다 아님 제가 생각하기로는 방화벽다음단에서는 당연히 내부로의 접근또한 가능해야한다고 생각하고있습니다 그래야만 mail서버의 pop3가 가능할테니까요...음 저의 잛은지식으로 헛소리한거같습니다 흑흑

안녕하세요....
많은것을 배우고 나가겠습니다

Saintlinu의 이미지

네..

인터넷 같은 공중망으로 나갈경우는 다시 돌아와야 하기때문에

반듯이 공인망 IP를 타고 나가야 합니다.

하지만 인트라넷이 구축된 망에서는 10.10.10.0/24망의 IP가

그냥 공인망 IP처럼 다닐 수 있습니다.

이 망에서 내부 DMZ로 돌아다기 위해서는 NAT가 필요하지 않습니다.

IPTables 같은 방화벽에는 Forward라는 정책이 있고요

static routing이 구성되면 내부 인트라는 공중망처럼 라우팅이 자유롭게

됩니다.

A -> B -> C

A에서 C로 갈때 A는 C로 가는 패킷은 전부 B로 던지면 되는구나.

C에서 A로 갈때 C는 A롤 가는 패킷은 전부 B로 던지면 되는구나.

라고 static routing만 넣어주면 됩니다.

그러므로 지금 NAT 게이트웨이가 되고 있는 박스의 routing을 잘 맞춰 보시기

바랍니다.

PS. 통신이 안될때는 tcpdump 같은 sniffer를 이용하면 아주 간단히 해결 할

수 있습니다. 안되는 이유가 명백해 지거든요.

행복하세요 ^_^

yanione의 이미지

제가 말 실수를 한거같습니다...
다시 설명드리겠습니다

--------------------------------------------------------------------------------

하지만 nat라는것은 서로다른 network을 주소변환으로인하여 forwarding해주는것으로 알고있습니다

결과적으로 저희회사의 구성은 일단 10.10.10.0/24와 219.x.x.158/27
은 같은 허브에꽂여있습니다
같은 구성과 같은 허브에 있다고해서 같은 network이 되지는 않습니다
서로다른 network에 있기때문에 일단 주소변환을 통한 nat는 가능한거같지만 같은네트웍에있는 219.x.x.161과 162번이 방화벽ip의 라우팅을 통해서 라우터로까지의 접근은 가능하지만 내부망 10.10.10.0/24로의 접근이 불가능한것입니다 그건 당연히 같은 네트웍이 아니기때문에 가능하지않은거 같습니다
그래서 그것에대한 설정이 필요한거같습니다
방화벽에서 ping 이 안되는이유를 조금더 자세히 말씀해주시면 감사하겠습니다
그럼 답변감사했습니다
그런데 이해가안가는건 방화벽에서의 내부망으로의 접근입니다
nat라는것이 외부로 나갈경우 외부ip로 사설ip로 접근이 가능하게하는것으로 알고있습니다
그리고 DMZ구성에있는 ip들은 공인ip로서 같은네트웍에만 있어도 당연히
방화벽 라우팅테이블로 인해서 mail과 oracleDB의 default roter(방화벽ip)로 라우팅이 됩니다
하지만 왜 외부ip를 가진 DMZ에선 내부 ip(10.10.10.0/24)로 ping 이 갖질않는지 알고싶습니다
그리고 만약시간이 되신다면 직접 메신저를 통화여 얘기하고싶습니다
가능하시다면 엠에센 이나 다른 메신저 아이디를 부탁드립니다
그럼 편안한 하루되십시오

참고로 지금 방화벽의 라우팅 테이블입니다

Destination Gateway Genmask Flags Iface
219.251.138.128 0.0.0.0 255.255.255.224 U eth1
10.10.10.0 0.0.0.0 255.255.255.0 U eth0
169.254.0.0 0.0.0.0 255.255.0.0 U eth1
127.0.0.0 0.0.0.0 255.0.0.0 U lo
0.0.0.0 219.251.138.129 0.0.0.0 UG eth1

_________________
안녕하세요....
많은것을 배우고 나가겠습니다

안녕하세요....
많은것을 배우고 나가겠습니다

dgkim의 이미지

우선 위에서 OracleDB옆에 있는 IP가 잘못된 것 같습니다.(서버가 뭐뭐죠?)
x.x.x.162/27 but Linux is x.x.x.158/27
그리고 iptables -L -n의 결과, iptables -t nat -L -n의 결과를 보여주실 수 있나요?
(ping이 거부되는 이유를 찾기 위해서....)

참고로 제 iptables는 다음과 같습니다.

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
REJECT     tcp  --  0.0.0.0/0            x.x.x.253          tcp dpt:3306 reject-with icmp-port-unreachable
REJECT     udp  --  0.0.0.0/0            x.x.x.253          udp dpt:161 reject-with icmp-port-unreachable
REJECT     tcp  --  0.0.0.0/0            x.x.x.253          tcp dpt:111 reject-with icmp-port-unreachable
REJECT     tcp  --  0.0.0.0/0            x.x.x.253          tcp dpt:389 reject-with icmp-port-unreachable
REJECT     tcp  --  0.0.0.0/0            x.x.x.253          tcp dpt:119 reject-with icmp-port-unreachable
REJECT     all  --  x.x.x.128/25         0.0.0.0/0          reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  172.16.0.0/16        172.16.0.0/16
SNAT       all  --  172.16.0.0/16        0.0.0.0/0          to:x.x.x.253

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
yanione의 이미지

늣어서 죄송합니다
사정상이요...급하긴하지만,,,주말에 좀 쉬느냐고..회사에 안나왔습니다
저희 iptables -t nat -L -n 결과입니다

Chain PREROUTING (policy ACCEPT)
target prot opt source destination

Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERRADE all - 0.0.0.0/0 0.0.0.0/0

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

안녕하세요....
많은것을 배우고 나가겠습니다

yanione의 이미지

서버는 eth0 219.x.x.161 (mailserver)/webserver같이씀
eth1 10.10.10.161 (mailserver)

oracleDB hme0(sun입니다) 219.x.x.162입니다

안녕하세요....
많은것을 배우고 나가겠습니다

dgkim의 이미지

제가 커널2.2에선 MASQUERADE를 통해서 사용했지만
2.4에서는 MASQUERADE를 사용해 본적이 없어서 정상 작동이 가능한지
모르겠네요...
그래서.. 제가 보여드린 코드에서 마지막줄
SNAT로 시작하는 부분과 같이 해보시겠습니까?

그리고 ping이 거부되는 것은 filtering룰을 봐야 될 것 같네요..
iptables -L -n(-t nat 말고...)의 결과를 보여주시면....

dgkim의 이미지

네트웍이 잘 뜨질 않아서 제가 정리해서 말씀드리겠습니다.

우선 x.x.x.128/27의 네트웍을 사용하시고
또 x.x.x.160/27을 사용하시고
다음으로 10.10.10.0/24를 사용하시는 게 맞는지...

그럼 그림으로 나타나면....

|-----------------------------------------------|/24
|-----------------------|-----------------------|/25
|-----------|-----------|-----------|-----------|/26

0     32    64    96    128   160   192   224   255
|-----|-----|-----|-----|==+==|=+=+=|-----|-----|/27
                           |    | |
                           |    | |       +------+
            +--------+     |    | +----162|Orache|
            | Linux  |158--+    |         +------+
            |        |161-------+
            +--------+
0               |10.10.10.1                     255
|---------------+--------------+----------------|/24
                               |
                               PC

이런 구성이 맞는가요?

yanione의 이미지

Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -f 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp - 0.0.0.0/0 219.x.x.0/24 multiport dports 25,80 tcp flags:0x12/0x10
ACCEPT tcp - 219.x.x.024 0.0.0.0/0 multiport sports 25,80,21,20,194,110 tcp flags:0x12/0x10
ACCEPT tcp - 0.0.0.0/0 219.x.x.0/24 multiport dports 25,80 tcp flags:0x16/0x02
ACCEPT tcp - 0.0.0.0/0 0.0.0.0/0 multiport dports 25,80,21,20,194,110 tcp:flags:0x16/0x02
ACCEPT udp - 0.0.0.0/0 219.x.x.0/24 multiport dports 53,110
ACCEPT udp - 0.0.0.0/0 0.0.0.0/0 multiport dports 53
ACCEPT icmp - 0.0.0.0/0 219.x.x./24 icmp type 0
ACCEPT icmp - 0.0.0.0/0 0.0.0.0/0 icmp type 0

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

올리느냐고 에고에고..힘듭니다..
다 쳤습니다 지금 방화벽에 선이 안들어가서..흑흑..
일단 죄송하지만 괜찮으시다면..엠에센같은걸로 이야기 하고싶은데..?/
안될까요..??물어볼께 많군요
SNAT건도 좀 가르켜주십시오..??
코드를봐서는 ...??방법이.....죄송..꾸벅..그럼 부탁드립니다

안녕하세요....
많은것을 배우고 나가겠습니다

yanione의 이미지

제가 한가지 실수한게 있는거 같습니다
스크립트를 보시면 알겠지만
원래..27비트로 나누었는데...
스크립트에서는 24비트로 나누엇다고 했네요.....

안녕하세요....
많은것을 배우고 나가겠습니다

yanione의 이미지

두개의 subnet으로 나누었고 ..
말슴하신대로 128 , 160(DMZ) 그리고 10.10.10.254/24입니다

안녕하세요....
많은것을 배우고 나가겠습니다

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.