제목: Linux Real IP Forward/Firewall Machine 구축하기 Mini-HOWTO 작성자: 정정화(jhjung@wyzsoft.com) 작성일: Sun Jan 16 02:45:41 KST 2000 대상: 실제 인터넷 IP가 부여된 네트워크 상에서 포워딩과 방화벽 구성에 관심있는 분들. 언어: 한국어 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_FIRE WALL을 설정하는것도 꼭 잊지말자. 이렇게 만들 커널로 재부팅후 랜카드가 잘인식된 다면 이제는 약간의 작업이 필요하다. 우선 라우터와 바로 물린 랜카드의 디바이스를 알아야 한다(본인은 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: HUB 211.50.1.202/30 10.0.0.2 ip: 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 lo default 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.fre shmeat.net 에서 ipchains로 검색 해보기 바란다. 본인이 가장 즐겨 쓰는 도구는 gtk front-end인 gfcc이다. 그럼 흡연을 위해 이만 줄입니다. 6. 감사의 말 - 놀러왔다가 옆에서 엄청나게 도움을 준 김병찬(적수)(redhands@linux.sarang.net) 군에게 무지 감사함.(갈비 사주기로 했음) - 라우터 설정에 대한 무공을 전해주신 임채필(채플린) 님에게 감사드립니다. - 옆에서 묵묵하게 도와준 박범석(다콘) , 허인(헤로인) , 김영인(파워자바) 군에게 또한 감사.