방화벽에관한 문제입니다

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방화벽은 이런문제가없었던거 같습니다...
설명이 부족하다면 답글을 남겨주시면 수시로 접속해서 더많은 정보를 드리겠습니다 그럼 부탁드립니다
_________________
안녕하세요....
많은것을 배우고 나가겠습니다

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

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

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

iptables -L -n

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

cjleecom의 이미지

제가 지금 별로 참고할 만한게 없어서리.. 생각나는데로 적습니다.

IP MASQURADE는 SNAT의 일종이라고 볼 수 있는데요..
기본적으로 외부 네트워크에서 내부 네트워크로 들어가는 것은 안되어야 정상이지요.

기본적으로 Oracle DB존 (이하 Public Network)에서 내부(이하 Private Network)으로 가는 것 자체가 문제가 있는 구조인 듯 합니다.
NAT가 제대로 돌아 가고 있는 상황이라면 Private Network에서 Public Netowrk로 갈 수 있죠.. Oracle DB 같은 경우도 물론 가능하고요..
즉 보통은 Public Network에서 Private Network으로 먼저 Request가 없다는 이야기죠.
그리고 제대로라면 Oracle DB에서 Private Network로 갈일은 없을 것 같은데요..
Masqurade(SNAT, DNAT 등)는 Network Connection Session을 관리 해주기 때문에 Private에서 Public으로 먼저 간 데이터에 대한 응답만 들어 올 수 있죠..

그런데도 불구하고 꼭 안쪽으로 들어 오고 싶으시다......

Public Network 에서 Private Network로 갈려면 누군가가 라우팅을 해 줘야하는데, 지금의 귀사의 네트웍 구조로선 라우터가 그 일을 하겠죠?
근데.. 라우터에선 리눅스 박스 안쪽의 IP들을 알 수 없으니 라우터에서
보내 주지 않겠죠..
먼저 리눅스에 라우팅 기능을 켜신담에 (리눅스 라우터에 관한 법을 잘 찾아 보시길) iptable에서 Routing Protocole을 통과 시켜 주어야 합니다.
(제 기억으로는 들어 오는것 과 나가는 것 두가지 다 해주면 됩니다...)
그리고 Public Network에 있는 Server들의 Default 라우터를 리눅스 박스로 정해 주어야 합니다... 그런데 저는 이 방법을 권장 하고 싶지 않습니다.
리눅스 박스가 깨지면 회사 전체의 네트웍이 마비가 되니까요..

이거 답변이 아니라 더 고민되게 만든건 아닌지 ....
그럼 도움이 되셨기를 바랍니다.

댓글 달기

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