iptables 패킷 필터링 방화벽 관련 조언을 부탁드립니다..

parkinsang의 이미지

안녕하세요 전에 라우팅,방화벽 관련 질문을 드렸던 허접관리자 입니다.. ㅠ_-;

KLDP여러분의 도움으로 라우팅 설정을 완료한것 우선 감사드립니다.
오늘은 다름이 아니라 현재 제가 만든 리눅스박스로 방화벽 구축을 하려고 하는대 몇가지 궁금한것이 있어 조언을 얻고자 글을 올립니다.

현재 네트웍 상황은..
광장비 → 방화벽(솔라리스) → 서버허브 → 서버(웹,메일,DB,DNS...)
광장비 → 방화벽(솔라리스) ↘ 사내허브 → 사내(PC 50여대)

이런 상황이며 각각 공인 아이피로 구성이 되어있습니다.
솔라리스에 NIC 3개가
방화벽 203.231.XXX.189
서버 210.103.XXX.62
사내 203.248.XXX.126

게이트웨이는 광장비의 게이트웨이를 디폴트로 잡아 서버와 사내가 모두 인터넷이 되게 설정을 하였습니다..

여기서 재가 궁금한것이..
iptable을 구성할때..
서버쪽은 웹,메일,DNS포트만 열고 모든포트를 막으려 합니다. SSH은 외부에서 접속이 안되고 내부에서만 되도록 하고싶구여.

사내쪽은 일반적으로 사용되는 포트를 재외한 모든것을 막고싶습니다.차후 P2P,메신저 같은것을 재어하려고 하구여.. 이건 공부하며 해볼라 캅니다 ^^;;

여기서.. 재가 몇가지 짧은 지식으로 테스트를 해봤는대..
iptables -P INPUT DROP
iptables -P FORWORD DROP
iptables -P OUTPUT DROP

인터넷 안되더군여.. INPUT ACCEPT 바꿔도 안되서 FORWORD ACCEPT로 바꾸니 인터넷 잘되더군여..

그래서 궁금해진것이 어느 문서를 찾아봐도.. 거의다 INPUT을 기준으로 설명이 되어 있어 질문드립니다..

서버와 사내의 포트 재어를 하려면 어떤식으로 명령을 내려야 하는지...
INPUT과 OUTPUT은 막아논후 FORWORD만 열고 제어를 해야하는것인지.. 아니면 다른 방법이 있는지... 조언 부탁드립니다..
솔직히.. iptables 명령어도 지대로 모릅니다..

몇가지 예라도 들어주신다면 정말 감사드리겠습니다..
긴글 읽어주셔서 감사합니다.. 크리스마스 잘보내시길 ^^;;
3일연짱 철야작업... 힘들지만 많이 배우고 있는것 같습니다.

parkinsang의 이미지

아.. 그리고 이건 솔라리스 질문인대..
한가지만더...

솔라리스에선 패킷필터링을 해주는것이 ipfilter 아닌가여 -_-;;
왠만해선 솔라리스에 설정되어 있는것 최대한 비슷하게 구성을 하고싶은대..
아직 자신이 없어서 =_=;; 아시는분 있으면 조언 부탁드립니다 ^^;
감사합니다.

될때까지 해보는그야 앙~!!!

hansennn의 이미지

parkinsang wrote:
솔라리스에 NIC 3개가
방화벽 203.231.XXX.189
서버 210.103.XXX.62
사내 203.248.XXX.126

iptables 로 방화벽을 구성하시려면.. NIC 가 3개인것 보단 2개만 쓰는 것이 더 간단할 듯 합니다.
그리고 IP Class 가 두개인데..
보통 리얼IP 클래스와 사설IP(192.168.~.~) 클래스로 구성이 되는데 위의 것은 좀 복잡하네요..;;;

parkinsang wrote:

게이트웨이는 광장비의 게이트웨이를 디폴트로 잡아 서버와 사내가 모두 인터넷이 되게 설정을 하였습니다..

모든 컴에서 전용선 회사의 gw 를 잡고 쓴다면 현재는 bridge 방식으로 되어 있는 듯 하네요.

parkinsang wrote:

여기서 재가 궁금한것이..
iptable을 구성할때..
서버쪽은 웹,메일,DNS포트만 열고 모든포트를 막으려 합니다. SSH은 외부에서 접속이 안되고 내부에서만 되도록 하고싶구여.

사내쪽은 일반적으로 사용되는 포트를 재외한 모든것을 막고싶습니다.차후 P2P,메신저 같은것을 재어하려고 하구여.. 이건 공부하며 해볼라 캅니다 ^^;;

여기서.. 재가 몇가지 짧은 지식으로 테스트를 해봤는대..
iptables -P INPUT DROP
iptables -P FORWORD DROP
iptables -P OUTPUT DROP

인터넷 안되더군여.. INPUT ACCEPT 바꿔도 안되서 FORWORD ACCEPT로 바꾸니 인터넷 잘되더군여..

그래서 궁금해진것이 어느 문서를 찾아봐도.. 거의다 INPUT을 기준으로 설명이 되어 있어 질문드립니다..

서버와 사내의 포트 재어를 하려면 어떤식으로 명령을 내려야 하는지...
INPUT과 OUTPUT은 막아논후 FORWORD만 열고 제어를 해야하는것인지.. 아니면 다른 방법이 있는지... 조언 부탁드립니다..
솔직히.. iptables 명령어도 지대로 모릅니다..

iptable 로 방화벽을 만드시려면 bridge 방식으로 할 것인지 아니면 NAT 방식으로 할 것인지 결정을 하셔야 합니다.
bridge 방식은 모든 컴들이 리얼IP를 그대로 사용할 수 있고
NAT 방식이라면 192.168.~.~ 로 IP가 재분배되어야 합니다.

NAT 방식은 리눅스로 IP공유하는 문서를 보시면 될 듯하고
브릿지 방식은 bridge_util (brctl) 이라는 유틸을 추천합니다.
이 유틸의 설치방법은 해당 문서를 보셔야 합니다.
http://bridge.sourceforge.net/download.html

그리고 브릿지 방식이든 NAT 방식이든
리눅스 박스 자체에 들어오는 패킷은 INPUT 체인을 통해 제어됩니다.
그리고 리눅스 박스에서 나가는 패킷은 모두 OUTPUT 체인이죠.
그리고 나머지. .. 리눅스 박스를 통과하여 사내의 컴터들에 들어오고 나가고 하는 패킷들은 모두 FORWARD 체인을 통하게 됩니다.

iptables -P FORWARD DROP

이렇게 하게 되면 모든 패킷이 1차적으로 차단됩니다.
이제 허용할 룰셋을 추가해 주면 됩니다.

iptables -A FORWARD -p tcp --dport www -j ACCEPT
iptables -A FORWARD -p tcp --sport www -j ACCEPT

윗줄은 사내에서 80포트로 나가는 룰셋입니다.
둘째줄은 해당 웹서버에서 응답해 들어오는 패킷들입니다.

"사내에서 나가는 것은 모두 허용" 이라는 룰셋이 없을 경우에는
모든 포트에 대해 위와 같이 두 줄이 필요합니다.

"사내에서 나가는 것은 모두 허용" 의 경우
iptables -A FORWARD -s 210.103.XXX.0/24 -j ACCEPT

이렇게 하면 나가는 것은 기본적으로 다 허용이 되므로 해당 웹서버에서 되돌아오는 패킷만 허용해 줍니다.
iptables -A FORWARD -p tcp --sport www -j ACCEPT

www 포트만으로는 웹서핑이 불가능합니다.
iptables -A FORWARD -p udp --sport domain -j ACCEPT
이렇게 도메인도 같이 허용해 줘야겠죠.

이제 웹서핑은 될겁니다.

이런식으로 제어를 해주면 됩니다.

그리고 iptables 에는 수많은 옵션이 있습니다.
물론 위와 같은 룰들만 써도 방화벽으로써는 전혀 손색이 없지만
공부를 하시려면 man iptalbes 등이나 문서를 따로 보심이 좋을 듯 합니다.

Do you really wanna be?
Rich & famous now!

mattabu의 이미지

저는 Openbsd 의 pf 에 한표를 던지겠습니다.
Openbsd 의 Pf 를 이용해보시는것은 어떠신지요?
리눅스의 iptables 도 참 좋긴 합니다만, 사실.. 좀 어렵습니다. ㅎㅎ 어렵다기보다는 상당히 많은 기능을 지원하여, 설정이 좀 복잡스럽지요.
님이 말씀하신데로라면 bridge 로 구성이 되어 있는 것 같구요.
openbsd 에서 bridge 설정하시고, pf 를 사용하는게 빠르고 쉽게 접근할 수 있는 대안이라고 생각됩니다. pf 관련문서도 상당히 좋고, man 만 참고하여도 될만큼 깔끔합니다.
편용헌씨 사이트에서도 좋은정보 얻으실 수 있습니다.
pf도 iptables 만큼 많은 기능을 지원하고, 안정적이고, 성능 좋으니 충분히 고려해볼만하다고 생각합니다.
iptables 의 체인이라는 개념같은 건 없지만, rule 설정하는 것에 있어서 이해가 더 쉽습니다. (물론 개인적인 의견이지만...)

FreeBSD의 ipfw 도 있긴하지만, bridge 가 완벽하지 않습니다. 저는 주로 이녀석을 사용했었지만, 한계가 좀 있어요. NAT 도 남들처럼 커널내에서 동작하지 않고 데몬을 이용하기때문에 성능이 떨어지기도 하구요.

요즘에는 iptables 를 이용해서 방화벽을 구성해보고 있는데, 이 녀석도 참 좋네요.. ㅎㅎ 다른 녀석들에 비해서 정말 flexible 합니다.

즐겁게 살자구요. 어떻게 태어난 인생인데~!

댓글 달기

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