[완료]방화벽 관련 질문!

GjtRoql의 이미지

얼마 전에 학교 방화벽을 구축하는데 문제점이 하나 생겨 이렇게 질문을 올립니다.

우선 시스템 구성은 얼마 전에 학교 방화벽을 구축하는데 문제점이 하나 생겨 이렇게 질문을 올립니다.

우선 시스템 구성은

기존에 웹서버로 사용하던 고유 IP를 방화벽으로 잡고 Iptables 로 방화벽을 구성했습니다.
그리고 내부는 172.x.x.x로 ip를 구성했습니다.

그리고 웹서버나 기타 필요한 포트는 오픈해 놓았습니다.

마지막으로 웹서비스를 위해 방화벽 안쪽으로 IP를 하나 할당하고 방화벽에서 포트 포워딩을 했습니다.

외부 --- 방화벽 --- 사설IP 컴
|-------- 웹서버(사설아이피, 포트 포워딩)

문제는 여기부터 입니다. 웹서버를 외부에서 접속이 되는데 내부에서는 접속이 되지 않습니다.

어떻게 된 것인지 알 수가 없네요. 대충 감은 오는데... 해결책이... 방화벽쪽에 DNS 셋팅을 하면 될 것 같기도 한데...
미봉책으로 원도우 hosts 파일을 수정해서 강제로 이동하게는 만들어 놓았는데.

해결책이 없을까요?

wariua의 이미지

간단하게 DNS쪽을 손 보실 수 있다면 그게 가장 깔끔한 해결책일 듯 합니다. 그게 아니라면...

이전에 저도 비슷한 경험이 있었습니다. 기본 구성은 동일했고, 마찬가지로 내부의 PC에서 (도메인 이름 내지는 방화벽 외부 주소로) 웹서버에 접속하려 할 때 연결이 안 됐습니다. 패킷이 다음과 같은 식으로 오가고 있었기 때문이었습니다.

(방화벽 외부 주소를 a.b.c.d, 방화벽 내부 주소를 172.x.x.1, 웹서버 주소를 172.x.x.w, 내부 PC 주소를 172.x.x.p라고 하겠습니다.)

1. 내부 PC가 웹서버로 연결하는 패킷(SYN)을 날립니다. (출발 주소: 172.x.x.p, 목적 주소: a.b.c.d) 그 패킷은 방화벽에게 전달됩니다.
2. 방화벽은 포트 포워딩을 위해 넣어놓은 규칙에 따라 목적지 주소를 변환합니다. (출발 주소: 172.x.x.p, 목적 주소: 172.x.x.w) 그리고 그 패킷을 내부망에 있는 웹서버에게 전달합니다.
3. 웹서버가 그 패킷을 수신합니다. 응답 패킷(SYN,ACK)을 날립니다. (출발 주소: 172.x.x.w, 목적 주소: 172.x.x.p) 목적지가 같은 네트워크이므로 방화벽을 통하지 않고 즉시 내부 PC에게 전달합니다.
4. 내부 PC가 응답 패킷을 수신합니다. 자신은 a.b.c.d로 패킷을 날렸는데 뜬금없이 172.x.x.w에서 패킷이 왔으므로 무시합니다.

적당한 지점에서 wireshark나 tcpdump 같은 프로그램으로 패킷을 살펴보시면 위와 같은 상황인지 확인하실 수 있습니다. 같은 상황이라면...

저는 방화벽에 nat 규칙 하나를 추가하는 방식으로 문제를 해결했습니다. 2번 과정에서 방화벽이 패킷의 출발지 주소를 172.x.x.1로 바꿔주도록 하면 (출발 주소와 목적 주소에 각각 NAT를 거치는 하는 셈이지요), 3번 과정에서 웹서버가 응답 패킷을 다시 방화벽으로 보내 주게 되고, 그러면 그 패킷은 2단계의 NAT를 역으로 거치고 나서 내부 PC로 전해지게 됩니다.

iptables 규칙은 대략 다음과 같은 식이었습니다. (내부 네트워크를 172.x.x.0/255.255.255.0로 가정)

iptables -t nat -A POSTROUTING -s 172.x.x.0/24 -d 172.x.x.w -j MASQUERADE

----
$PWD `date`

$PWD `date`

GjtRoql의 이미지

감사합니다. 님이 말씀하신 경우가 맞는 것 같습니다.
빨리 테스트 해봐야겠네요.

--------------
Burning Blue!
--------------

댓글 달기

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