iptables에서 방화벽 문제...

hyji의 이미지

iptables를 이용해서 포트 포워딩, 인터넷 공유 잘 쓰고 있습니다.
방화벽을 적용 중인데요...
방화벽을 걸면 외부에서 공유 머신과 공유 머신에 물려있는 내부 네트웍으로의 접근이 불가해야합니다.
그래서 INPUT 체인과 FORWARD 체인에
iptables -A INPUT(FORWARD) -i eth0 -j DROP
이렇게 해주었죠... 그랬더니 막히기는 다 막히는데, 공유 머신에 물려 있는 내부 네트웍에서 인터넷이 안되네요...
그래서 찾다 보니 FORWARD에 아래와 같이 넣으라고 해서 넣었습니다.
iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

그랬더니 내부 네트웍에서 인터넷이 잘되더군요...

그런데, 정작 문제는 공유 머신 자체에서는 막혀있다는 것이지요...

제가 개인적으로 생각한 것은 eth0에서 들어오는 모든 패킷을 막았기때문에 당연히 공유 머신에서나 공유 머신에 물려있는 내부 네트웍이나 인터넷을 하려면 패킷을 주고 받아야 하는데, 받는 게 모두 막혔으니 모두 안되는 것이고, 내부 인터넷은 위 두 줄의 명령으로 ESTABLISHED,RELATED 같이 기존에 연결이 된 접속은 허용을 하기때문에 내부 네트웍의 경우 인터넷이 되는 것이라고 생각이 드는데요...
공유 머신의 경우 INPUT으로 받고, OUTPUT으로 나가는 것 같은데 OUTPUT의 경우 ACCEPT이기 때문에 되야 될 것 같은데...
안되네요...

공유머신에서 외부로 나가려면 어떻게 해야할까요?

전체 스크립트

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT

iptables -A INPUT -i eth0 -j DROP

iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -j DROP

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE

송지석의 이미지

iptables -i lo -j ACCEPT
를 앞쪽에 넣으시면 어떨까요.

hyji의 이미지

상관이 없는 것 같습니다.
ping을 kornet으로 쳐보고 있는데...
위 스크립트를 INPUT에 넣어도, FORWARD에 넣어도
공유머신에서 Ping이 안나가네요....

oasis의 이미지

"iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT"를 iptables -A INPUT -i eth0 -j DROP앞에 오게 하세요..

보니까 공유 머신에서 외부로 나가는데 들어오게는 못하게 한것 같군요.

hyji의 이미지

됩니다...^^
감사해요...

new, related, estimated를 접속 방식으로 구분하면 어떻게 되는 건가요?

어려워요...ㅠㅠ

익명 사용자의 이미지

goggling하면 자세히 나오는 곳을 찻을수 있겠지만 간단히 얘기하면 이렇습니다.

TCP일 경우 NEW는 SYN이 있는 경우죠. 맨 처음 커넥션 맺을때요.
ESTABLISHED는 그 후를 의미 합니다. 3-way handshaking에서 맨 처음 SYN 다음 부터죠.
RELATED는 FTP를 예를 들어 설명하죠. FTP는 port(data:20,cmd:21)을 씁니다.
RELATED가 있으면 21번만 열어주면 됩니다. 둘다 열어줄 필요가 없어요.
왜나면 FTP구조상 명령어를 먼저 받고 20번 포트를 이용합니다. 20번 포트는 RELATED가 다 알아서 해줍니다.(그전에 따른 정책으로 20번을 막지 않는한요)

iptables의 설정들은 first-matching입니다. 처음 걸리는 정책이 동작하는거죠

http://www.netfilter.org/ 를 참조 하세요.

익명 사용자의 이미지

Quote:

RELATED는 FTP를 예를 들어 설명하죠. FTP는 port(data:20,cmd:21)을 씁니다.
RELATED가 있으면 21번만 열어주면 됩니다. 둘다 열어줄 필요가 없어요.
왜나면 FTP구조상 명령어를 먼저 받고 20번 포트를 이용합니다. 20번 포트는 RELATED가 다 알아서 해줍니다.(그전에 따른 정책으로 20번을 막지 않는한요)

이것은 정확한 설명은 아닙니다. RELATED 의 경우,
내부에서 tcp 소켓 클라이언트 1.2.3.4:33356 <=> 외부에 4.5.6.7:80
으로 연결했고, 이 접속이 허용되도록 룰을 적용한 상태에서,
4.5.6.7:80 에서 1.2.3.4:33356으로 메시지를 보내올 경우, related에 의해서 적용되는것입니다. (저것을 명시적으로 허용하지 않더라도요)

위에서 말한 경우처럼 ftp 21번을 허용하고 21번이 덩달아 되는것은 ftp-helper 가 conntrack에 정보를 주는것으로, 일반적인 경우는 아닙니다. (ftp 전송내용을 직접 살펴서 PORT명령을 인식하고 exptected를 설정하는 것이기 때문이죠)

hyji의 이미지

^^ 어렵네요...
암튼 감사합니다...

댓글 달기

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