iptables - 포트포워딩 + 방화벽

hyji의 이미지

리눅스에서 인터넷 공유기처럼 쓰고 있습니다. 포트포워딩과 방화벽을 사용하려고 합니다.

아래 그림과 같이 세팅했습니다. 1.1.1.1이 리눅스구요, 2.2.2.2는 접근을 막으려는 PC의 IP입니다. 192.168.0.100은 리눅스 밑에 붙은 내부 아이피를 갖는 PC입니다. 포트포워딩이 이리로 되어 있죠.

아래와 같이 4가지 포트포워딩을 하고 있구요.. 모.. 더 될수도 있습니다.

문제는 방화벽을 거는데요... 아래와 같이 80, 21, 2121 포트를 막았습니다. 해서 리눅스의 21 포트인 FTP와 80인 WEB은 잘 막히더군요... 헌데 2121은 막아도 포트포워딩이 걸린 192.168.0.100의 21이 열립니다.

이걸 어떻게 막아야 할까요... 아래와 같이 firewall 체인을 FORWARD에 넣어주어도 안되네요... 포트포워딩이 처음 접하는 체인이 바로 NAT의 PREROUTING인가요? FORWARD를 거쳐서 가는 게 아닌가요? 그 경로도 궁금합니다...

Chain INPUT (policy ACCEPT 1121 packets, 119K bytes)
pkts bytes target prot opt in out source destination
8 329 ACCEPT all -- eth0 * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
1493 160K firewall all -- * * 0.0.0.0/0 0.0.0.0/0

Chain FORWARD (policy ACCEPT 4 packets, 216 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- eth0 eth1 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
1493 160K firewall all -- * * 0.0.0.0/0 0.0.0.0/0

Chain OUTPUT (policy ACCEPT 810 packets, 100K bytes)
pkts bytes target prot opt in out source destination

Chain firewall (1 references)
pkts bytes target prot opt in out source destination
0 0 DROP tcp -- * * 2.2.2.2 1.1.1.1 tcp dpt:80
0 0 DROP tcp -- * * 2.2.2.2 1.1.1.1 tcp dpt:21
0 0 DROP tcp -- * * 2.2.2.2 1.1.1.1 tcp dpt:2121

===================================================================
Chain PREROUTING (policy ACCEPT 854 packets, 59705 bytes)
pkts bytes target prot opt in out source destination
1 48 DNAT tcp -- * * 0.0.0.0/0 1.1.1.1 tcp dpt:2121 to:192.168.0.100:21
1 48 DNAT tcp -- * * 0.0.0.0/0 1.1.1.1 tcp dpt:8080 to:192.168.0.100:80
1 48 DNAT tcp -- * * 0.0.0.0/0 1.1.1.1 tcp dpt:3000 to:192.168.0.100:3089
1 48 DNAT tcp -- * * 0.0.0.0/0 1.1.1.1 tcp dpt:4000 to:192.168.0.100:3090

Chain POSTROUTING (policy ACCEPT 1 packets, 48 bytes)
pkts bytes target prot opt in out source destination
0 0 MASQUERADE all -- * eth0 192.168.0.0/24 0.0.0.0/0
4 240 SNAT all -- * eth0 0.0.0.0/0 0.0.0.0/0 to:1.1.1.1

Chain OUTPUT (policy ACCEPT 4 packets, 240 bytes)
pkts bytes target prot opt in out source destination

wariua의 이미지

netfilter의 패킷 처리 경로는 요기서 참고하실 수 있습니다. 예쁘게 그려져 있는 걸 어디서 본 것 같는데 못 찾겠네요.

현재 filter/firewall 체인에서 전혀 패킷 차단이 이뤄지고 있지 않은 것 같습니다. DROP 규칙의 첫 번째 컬럼인 'pkts'가 모두 0인 걸 보면 이를 확인하실 수 있습니다.

DROP 규칙에 패킷이 걸리지 않는 이유는 nat/PREROUTING 체인에서 이미 패킷의 목적지 주소가 변경되었기 때문입니다. 따라서 filter/firewall 체인에서 DROP 규칙을 집어넣을 때 목적지 주소를 1.1.1.1이 아닌 192.168.0.100으로 명시해 주셔야 합니다. 마찬가지로 --dport로 목적지 포트를 지정해 주실 때도 변경된 후의 포트 번호를 사용해 주셔야 합니다.

$PWD `date`

댓글 달기

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