강좌

HOME > 강좌 >
강좌| 리눅스 및 오픈소스에 관련된 강좌를 보실 수 있습니다.
 
라우터 이용 실제 IP를 가지는 방화벽 구축기
조회 : 4,023  




정정화/jhjung@wyzsoft.com

       

    1. 들어가기 앞서

       Linux가 중소형 네트워크 환경에서 훌륭하게 작동하는 것은 리눅스를 사용하고 있지 않은 사람도 익히 들어 알고 있겠지만 실제 문서자료를 아무리 찾아봐도 머스커레이딩 방식을 이용한 방화벽 구성에 대한 글만 있을 뿐 이미 구성된 실제 IP를 가지는 네트웍에서 방화벽 및 포워딩 머신을 구축하는 것에 대해서는 자료가 부족하여 본인은 이렇게 Mini-HOWTO를 감히 쓰게 되었다.

     

    2. 요구사항

      - 간단한 네트워크 개념(routing , netmask , forwarding, etc.)
      - 실제 Router랑 연결되어 있거나 Wan 카드가 부착된 리눅스 머쉰
      - 담배(비 흡연자는 콜라)

     

    3. 본인의 장비 및 환경

      - Router: CISCO 4500M + 1 Fastethernet module  + 4 serial module
      - CSU : 보라넷 임대 장비
      - Linux1: Intel pentium III 500 + 128M ram + 9G HDD
      - NIC: 3com 905 , 905b  
      - HUB: Intel 405T standalone switch HUB * 3
      - IP대역: 211.50.38.0/25  (255.255.255.128)
      - 디스 한보루 + 지포 라이터
      - Network Bandwidth: T1

     

    4. 노가다 시작

      우선 자신의 라우터나 랜카드에 맞는 크로스 케이블을 만든다. 크로스 케이블을 만들 줄 모르는 사람은 잘하는 사람에게 배우거나 인터넷에서 검색해본다.
      아니면 용산이나 테크노마트 등지에서 크로스 된 라인을 사던지 크로스를 시켜주는 잭을 사면 된다. 중요한 것은 이미 구성 되있는 네트웍에 리눅스 박스를 추가함으로서 방화벽 및 포워딩기능을 제공하는 것이기 때문에 기존 라우터에서 허브로 연결되는 라인을 중간에서 가로채야만 한다. 그림으로 도식해보겠다.      

                  Cross Line(특정 허브는 Direct를 써도 됨)
                                                   ------------  PC   
                                                   ------------  PC
                                                   ------------  PC    
                                                   ------------  PC
         Router                     Hub
              
             [그림.1] 원래 상태  
                                
                Cross     
                                                       ------------ PC           |                                                        ------------ PC                                                                                       
                                                               ------------ PC    
                                                               ------------ PC
        Router             Box             Hub
       
           [그림.2] Linux Box가 추가된 상태

      그럼 중간에서 가로채기만 하면 되느냐? 절대로 될리가 없을 것이다. :) 우선 리눅스박스의 세팅부터 해보자. 편의를 위해 본인의 실제 IP를 사용하겠다. 착오없기 바란다. 중요한건 리눅스 박스에 랜카드 두장이상이 붙어 있어야 한다는 것이다. 그리고 포워딩시 신뢰성과 속도를 위해 버스 마스터링이 잘되는 100Mbps PCI 랜카드를 사용하기를 권장한다. 3Com이나 Intel의 100Mbps 랜카드라면 무난할 것이다.

      여기서는 3Com 3c905와 905b를 사용한다. 하드웨어적인 준비가 끝났으면 커널 컴파일을 한다. 네트웍 부분에서 꼭 IP_FORWARDING을 설정해야 한다. ipchains 사용을 위해 IP_FIREWALL을 설정하는 것도 꼭 잊지 말자. 이렇게 만은 커널로 재부팅 후 랜카드가 잘 인식된다면 이제는 약간의 작업이 필요하다. 우선 라우터와 바로 물린 랜카드의 디바이스를 알아야 한다(본인은 eth1). 이제 다음부터가 중요한데 수많은 시행착오 끝에 얻은 결론을 말하자면 라우터의 IP와 리눅스의 라우터와 물린 랜카드 IP를 private IP - 즉, 실제로 라우팅용으로 사용하지 않는 사설 망 용 IP - 로 배정해야 한다는 것이다. 본인은 Router에는 10.0.0.1을 eth1에는 10.0.0.2를 배정했다.

      실제 IP를 라우터와 랜카드에 배정을 할 경우에는 서브넷으로 다시 나누지 않은 네트웍의 경우(즉  211.50.38.0/128을 다시 더 나누지 않는 이상) 라우터에서 라우팅을 제대로 해줄 수가 없기 때문에 두 장치에는 라우팅의 보증을 위해 사설 IP를 사용한 것이다. 실제 이런 문제 때문인지 ISP에서는 시리얼(라우터간 통신 IP)에는 netmask 255.255.255.252를 사용한다. IP를 배정한 다음 나머지는 그다지 중요한게 없다. 이 글의 목적이 원래 존재하는 네트웍에 영향을 미치지 않고 조용히 리눅스를 집어 넣는 것이기 때문에 나머지 랜카드에는 원래 라우터가 쓰던 IP(일반적으로 게이트웨이 IP)를 배정한다.

       Network: 211.50.38.0/25    
           Cross    
                                                    -------- PC  211.50.38.2|    
                                                        -------- PC  211.50.38.3
                                                        -------- PC  211.50.38.4
                                                        -------- PC
      라우터         리눅스          허브

         (라우터)                     (리눅스)
          serial:                        NIC0:  
          211.50.1.202/30        10.0.0.2
          랜                             NIC1:
          10.0.0.1                    211.50.38.1

      일단 이렇게 구성이 되면 IP_FORWARDING이 알아서 이루어지기 때문에 허브쪽에 물린 PC에서 외부로 나가는 네트웍을 쓸 경우 무조건 우리가 만든 리눅스 포워딩 머쉰을 지나가게 된다. 자 이제는 포워딩 머쉰에서 ipchains를 이용해 각종 방화벽 설정을 할 수 있다. 회사 내부에서 업무시간 중 채팅을 막기 위해 irc 포트로 나가는 모든 네트웍을 막을 수도 있을 것이고 , 지금 활성화된 네트웍을 끊을 수도 있다 :) 실례를 위해 본인의 설정 몇 가지를 보이겠다.

      - 라우터 설정
       

      [root@unixian /root]# ztelnet 10.0.0.1
      Trying 10.0.0.1...
      Connected to 10.0.0.1.
      Escape character is ‘^]’.
      WyzSoft Research & Development Lab. Access-control Router

      User Access Verification
      Password: router>en
      Password: router#show running-config
      Building configuration...
      Current configuration:
      !
      version 11.2
      no service password-encryption
      no service udp-small-servers
      no service tcp-small-servers
      !
      hostname router
      !
      enable secret 5 ******************************
      !
      ip subnet-zero
      ip domain-name wyzlab.com
      ip name-server 210.205.2.52
      !
      interface Serial0
      ip address 211.50.1.202 255.255.255.252
      !

      interface Serial1
        no ip address
        shutdown
        !
      interface Serial2
        no ip address
        shutdown
        !
      interface Serial3
        no ip address
        shutdown
        !
      interface FastEthernet0
        ip address 10.0.0.1 255.0.0.0
      !
      no ip classless
      ip route 0.0.0.0 0.0.0.0 211.50.1.201
      ip route 211.50.38.0 255.255.255.128 10.0.0.2
      logging buffered informational
      logging console informational
      logging monitor informational
      logging 211.50.38.2
      snmp-server community wyzlab RO
      snmp-server trap-authentication

      banner motd ^CWyzSoft Research & Development Lab. Access-control Router^C
      !
      line con 0
      line aux 0
      line vty 0 4
        password *******************
        login
      !
      end
      router#

       

      - 방화벽 리눅스 박스의 설정
       

      [root@bluebird jhjung]# route
      Kernel IP routing table
      Destination     Gateway         Genmask          Flags    Metric   Ref    Use    Iface
      211.50.38.1         *             255.255.255.255      UH         0         0        0       eth0
      10.0.0.2              *             255.255.255.255      UH         0         0        0       eth1
      10.0.0.0              *             255.255.255.252       U          0         0        0       eth1
      211.50.38.0         *             255.255.255.128       U          0         0        0       eth0
      127.0.0.0            *             255.0.0.0                  U          0         0        0       lo
      default           10.0.0.1        0.0.0.0                    UG         0         0        0       eth1

     

        - 일반 PC의 설정(Linux 기준)
         

        [root@unixian /root]# route
        Kernel IP routing table
        Destination      Gateway         Genmask           Flags   Metric   Ref    Use Iface
        211.50.38.38        *              255.255.255.255       UH         0         0         0 eth1
        211.50.38.0          *              255.255.255.128        U          0         0         0 eth1
        127.0.0.0             *               255.0.0.0                  U          0         0         0 lode
        fault              211.50.38.1      0.0.0.0                    UG         0         0         0 eth1
        [root@unixian /root]#

       

          - 일반 PC에서의 traceroute 결과
           

        [root@unixian /root]# traceroute linux.sarang.net
        traceroute to linux.sarang.net (210.122.59.30), 30 hops max, 38 byte packets
         1  211.50.38.1 (211.50.38.1)  0.241 ms  0.192 ms  0.149 ms
         2  10.0.0.1 (10.0.0.1)  2.350 ms  0.884 ms  0.777 ms
         3  211.50.1.201 (211.50.1.201)  4.102 ms  3.571 ms  3.443 ms
         4  anybbb185-fe4-1-0.rt.bora.net (210.120.252.102)  4.060 ms  3.680 ms  3.895 ms
         5  anyg4-ge2-0.rt.bora.net (210.120.193.145)  3.775 ms  3.728 ms  3.692 ms
         6  selg2-pos8-0.rt.bora.net (210.120.192.117)  4.423 ms  3.924 ms  3.943 ms
         7  ysng12kix4-ge5-0.rt.bora.net (210.120.192.69)  4.049 ms  4.053 ms  4.061 ms
         8  210.107.53.66 (210.107.53.66)  4.911 ms  5.091 ms  5.216 ms
         9  203.255.117.248 (203.255.117.248)  5.077 ms  5.759 ms  5.190 ms
         10  10.241.1.178 (10.241.1.178)  12.136 ms  11.571 ms 11.424 ms
         11  linux.sarang.net (210.122.59.30)  11.841 ms  10.977 ms  10.900 ms

         

            - 외부 네트웍에서의 traceroute 결과
             

          [jhjung@www jhjung]$ /usr/sbin/traceroute 211.50.38.38
          traceroute to 211.50.38.38 (211.50.38.38), 30 hops max, 40 byte packets
           1  210.118.74.1 (210.118.74.1)  2.944 ms  2.871 ms  2.908 ms
           2  210.118.73.1 (210.118.73.1)  0.914 ms  0.905 ms  0.877 ms
           3  210.118.49.97 (210.118.49.97)  3.146 ms  3.460 ms  2.889 ms
           4  dacomkix-sds-s2-0.rt.bora.net (203.233.37.221)  5.048 ms  5.653 ms  4.491 ms
           5  selg2-ge5-0.rt.bora.net (210.120.192.65)  4.608 ms  5.121 ms  4.654 ms
           6  anyg4-pos8-0.rt.bora.net (210.120.192.118)  5.543 ms  5.481 ms  4.817 ms
           7  anybbb185-ge1-0-0.rt.bora.net (210.120.193.147)  5.259 ms  69.667 ms  5.210 ms
           8  anyaba74-fe1-0-0.rt.bora.net (210.120.252.74)  5.457 ms  6.135 ms  5.139 ms
           9  211.50.1.202 (211.50.1.202)  9.027 ms  9.660 ms  8.556 ms
           10  10.0.0.2 (10.0.0.2)  8.838 ms  9.265 ms  8.908 ms
           11  211.50.38.38 (211.50.38.38)  17.076 ms  8.672 ms  8.902 ms


           

          5.  사용후기

            외부 네트웍이 T1이기 때문에 아직 폭주를 경험해 보지는 못했지만 상당히 포워딩/방화벽 머쉰으로는 고사양이기 때문에 패킷 로스율이 거의 없이 잘 작동한다. 사실 포워딩 자체로는 의미가 없고 방화벽 설비를 아주 염가로 구축할 수 있기 때문에 사랑받는 관리자가 될 수 있을 것이다. 포워딩 머쉰에서 네트워크 분석툴 들을 돌리면(IPtraf , ntop 등) 모든 네트웍을 감시할 수 있기 때문에 관리가 한결 수월해진다. 아직 해결하지 못한 점이 있다면 포워딩 머쉰 자체에서는 외부 네트웍으로 연결할 수가 없다. 다른 PC에서 가지고 나가는 IP는 단지 포워딩만 되기때문에 상관없지만 실제 포워딩 머신의 기본 IP가 10.0.0.2로 나가기 때문에 외부로 라우팅 될 수 없는 문제인것 같다. IP tunneling을 쓰면 가능하겠지만 수익체감의 법칙상 이 정도는 큰 문제가 아니기 때문에 죽어도 포워딩 머쉰에서 네트웍을 써야겠다는 분은 IP tunnell-ing을 연구해 보기 바란다. 참고로 IPchains를 쉽게 설정해 주는 도구는 http://www.freshmeat.net 에서 ipchains로 검색 해보기 바란다. 본인이 가장 즐겨 쓰는 도구는 gtkfront-end인 gfcc이다. 그럼 흡연을 위해 이만 줄입니다.

           

          6. 감사의 말

            - 놀러왔다가 옆에서 엄청나게 도움을 준 김병찬(적수)(redhands@linux.sarang.net)군에게
               무지 감사함.
            - 라우터 설정에 대한 무공을 전해주신 임채필(채플린) 님에게 감사드립니다.
            - 옆에서 묵묵하게 도와준 박범석(다콘), 허인(헤로인), 김영인(파워자바) 군에게  또한 감사.


          [원글링크] : https://www.linux.co.kr/home2/board/subbs/board.php?bo_table=lecture&wr_id=819


          이 글을 트위터로 보내기 이 글을 페이스북으로 보내기 이 글을 미투데이로 보내기

           
          (주) 수퍼유저