강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

케이블 모뎀을 사용하는 사설 네트워크

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

icon01.giftitle56.gif

Gerard Beekmans December 16th, 1999
                      譯 윤봉환, <el@linuxlab.co.kr> Jan 2000

 

Abstract

이 기사는 Time Warner의 Roadrunner 케이블 모뎀 서비스를 통해 인터넷에 연결된 사설 TCP/IP 네트워크에서 매스커레이딩을 설정하는 것을 돕기 위해 기획되었다. 리눅스가제트에서 이전에 한 번 다루었던 기사를, 그 때와 같은 주제로 Redhat 6에서 사용할 수 있도록 몇 가지를 수정해서 다시 썼다. 이 문서는 네트워킹에 관해서 DNS부터 방화벽 개념까지 포함하는 매우 진지한 시도이다. 여러분이 이 프로젝트를 완성한다면 규모가 작은 네트워크에 대한 특별한 경험을 얻게 될 것이다.

주의할 것이 하나 있는데, 내가 RR(Roadrunner-이미 짐작하고 있겠지만, 케이블 모뎀 서비스를 제공하는 일종의 ISP이다)에 전화를 걸었을 때, 그들은 사용자들이 IP 매스커레이딩을 사용하도록 허가할 것인지 막을 것인지 매우 모호한 대답을 했다. 영업부의 장이 일단, ‘당신이 대역폭을 마구 긁어 가면 우리가 곤란하다. 당신이 서버를 운영하면 대역폭을 많이 차지할 테고, 그럼 우리는 곤란해진다.’고 말했다(아마 하나로통신 등 업체도 이런 말을 하고 있으며, 서버를 운영하는 사용자에 대한 신고까지 받고 있는 것으로 알고 있다. 하지만 여러분의 작은 웹 서버가 전체 네트워크에 정말 그렇게 심각한 영향을 줄지는..)

이 문서에는 두 가지 “내(我)”가 있다. 때로는 Andrew가 말하는 것이고, 때로는 Mark가 말하는 것이다.

 

Table of Contents
 

Required Reading
The Big Picture
Selecting Hardware
Setting up the Gateway
Configuring IPChains / Masquerading
Configuring DNS on the Private Network
Setting up the Workstation Machines
Security Concerns
Dynamic DNS
Comments and Other Notes
Example Files

 

Required Reading

이 문서 외에 필요한 배경지식들을 아래 하우투 문서들이 담고 있을 것이다. 여러분이 아래 하우투 문서들을 읽지 않고 계속 진행한다면 이 문서가 전하는 모든 것을 완전하게 해내지 못할 수도 있다.

Networking - 이더넷(Ethernet)의 기초와 TCP/IP에 대한 정보. Sections 5 와 6에 관련된
                    기사가 있다.
                    http://www.linuxdoc.org/HOWTO/NET3-4-HOWTO.html

Networking - 리눅스 네트워킹과 랜 구축, 사설 네트워크에 대한 실용적인 정보들이 많이
                    있다. http://www.linuxlab.co.kr

IPCHAINS  - IP Firewall Chains는 우리가 시스템 환경을 설정하는데 가장 많이 쓰일 것이다.
                   또 보안과도 매우 밀접한 관계가 있다.
                   http://www.linuxdoc.org/HOWTO/IP CHAINS-HOWTO.html   

DNS          - DNS 서버를 설정하면 어떻게 동작하는지 이해하기가 매우 쉬워질 것이다.  
                   http://www.linuxdoc.org/HOWTO/DNS-HOWTO.html

00-4-4.gif

IP Masquerading - 우리 문서보다 더 일반적이고 광범한 주제들을 다룬다.

Our Previous article on this topic. 우리가 이전에 이 주제로 올렸던 기사.

RRLinux Help Site  http://www.vortech.net/rrlinux/

00-4-2.gif

Yahoo Unix 보안 사이트. http://dir.yahoo.com/Computers_and_Internet/Software
                                   /Operating_Systems/Unix/Security/

00-4-1.gif

The Central Ohio Linux User Group - 정말 많은  유용한 정보들이 있다.                                                      http://stones.wcbe.org/~COLUG/

 00-4-3.gif

 

The Big Picture

이 다이어그램은 이 문서의 기본적인 구상을 보여준다:

00-4-5.gif

다이어그램에서 검게 채워진 동그라미는 각 이더넷 인터페이스 카드를 뜻하고, Time Warner 케이블에 연결된 케이블 모뎀으로부터 받은 선을 제외한 다른 연결선은 각각 CAT5 케이블의 길이이다. 여러분 네트워크에서 워크스테이션마다 네트워크 인터페이스 카드가 각각 하나씩 필요하며, 게이트웨이 머신에는 두 개가 필요하다.

여러분의 워크스테이션과 허브는 흰 색으로 칠해진 배경 이미지가 뜻하는 사설 네트워크 안쪽에 있고, 그 밖의 세상은 회색으로 칠해진 영역이다. 게이트웨이 머신은 두 영역 사이 경계에 걸쳐있는 것을 눈여겨보자. 각각의 이더넷 카드는 고유한 IP 주소가 하나씩 배정되어 있고, 여러분의 게이트웨이 머신에서 하나는 바깥 세상에, 다른 하나는 안쪽에 있다. 이 그림이 말하려는 것은, 게이트웨이는 여러분의 사설 네트워크로부터 바깥 세상으로 전달하는 커뮤니케이션을 관리하는 위치라는 것이다.

이런 작업들을 위해서, 나는 내부 네트워크 주소에 사설 IP 주소로 남겨둔 10.x.x.x (netmask 255.0.0.0) 블록을 할당하고, 도메인 이름은 “local”을 사용한다. 여러분이 무엇을 해야 할지 스스로 잘 알고 있다면, 뭐 마음대로 설정할 수도 있겠지만, 일단 이 글을 따라하기 위해 내가 한 것처럼 설정하면 대부분 사용자 시스템에서 잘 동작할 것이다.

워크스테이션들은 “w1.local” (10.0.0.10)부터 “w3.local” (10.0.0.30) 까지 이름이 붙여지고 매스커레이딩 게이트웨이는 “main.local” (사설 네트워크 쪽에서는 10.0.0.1)라는 이름을 가진다. 앞에서처럼, 여러분 내키는 대로 이 스키마를 고치거나 확장할 수 있다.

 

Selecting Hardware

게이트웨이 머신은 상대적으로 적은 리소스를 필요로 하고, 심지어 메모리가 조금 뿐인 오래된 ‘486 머신으로도 충분하다;패킷 경로를 설정하는 것은 특별히 바쁜 일은 아니다. 486 머신이라도 리눅스라면 물론 앞으로 다룰 모든 것에 충분하다.

워크스테이션은 Linux, MacOS, 또는 심지어 MS 운영체제들 따위를 포함하는, TCP/IP를 지원하는 운영체제가 가동 중인 어떤 머신도 쓸 수 있는데, 어떻든 여러분은 각 머신마다 이더넷 카드 하나씩을 준비해야 한다.

허브(hub)는 10/100 자동감지 허브를 사용한다. 그렇게 하면 여러분의 삶이 훨씬 쉬워진다. 내부에서는 100 mbit 이더넷 카드를 사용하고, 여러분의 게이트웨이 컴퓨터에서 바깥쪽으로 연결된 이더넷 카드는 10 mbit 이더넷 카드를 사용한다. 나는 이 글에서 항상 똑 같은 이더넷 카드를 사용할 것이고, 여러분도 하드웨어를 통일하면 삶에서 더 많은 시간이 편해질 것이다.

여러분의 리눅스 워크스테이션은 PCI 방식의 이더넷 카드를 꽂아 쓰는 게 좋다. 요즘은 이더넷 카드가 정말 싼 데다 PCI 카드는 여러분이 작동 환경을 설정하느라 골머리를 썩히지 않도록 잘 만들어진다. 나는 Netgear FA310TX 카드를 여러 시스템에서 여태 아무 문제없이 사용하는데, 게다가 Intel 카드는 매우 확실한 서비스를 제공한다는 평판을 듣고 있다. 어쨌든, 웹이나 동호회를 통해 이것저것 조사해서 여러분이 산 이더넷 카드가 일반적으로 사용 가능한 모듈을 제공하는지 확실히 알아두어야 한다. Netgear 카드와 대부분의 (내가 두루 사용해 본) 3com 카드들은 Redhat 6 배포판에 필요한 드라이버가 포함되어 있었다.

여러분이 꼭 ISA 카드를 사용해야 한다면, 3com 3c509 이더넷 카드가 사용하기 가장 좋다. 여러분이 게이트웨이로 더 오래된 머신을 사용하려 한다면, 아마 ISA 슬롯 밖에 없을지도 모르겠고, 여러분이 선택할 수 있는 ISA 이더넷 카드는 두 가지가 있다. 아무튼, 여러분의 이더넷 카드에 필요한 유틸리티(셋업) 프로그램을 (대개의 경우 DOS에서만 실행될 것이다) 제조사로부터 구해야만 하고, 이 프로그램을 이용해서 이더넷 카드의 IO 주소와 IRQ를 다른 장치와 충돌하지 않도록 설정해야 한다.
 

譯註:  나는 PCI 방식의 튤립(커널 컴파일 메시지에 따르면 일반적으로 잘 쓰이지 않는
         것들을 포함해서 매우 다양한 기능을 제공한다), 리얼텍, 3com 카드들, ISA 방식
         의 3com 카드들과 3com의 PCMCIA 카드를 사용해 보았는데, PCI 방식의 카드
         들은 특별히 다른 점을(속도나, 그 밖의 기능상의 제약, 혹은 A/S) 발견할 수
         없었다. 아마 여러분이 만들 네트워크도 저가의 리얼텍 카드로 충분할 것이다.  

         문제가 되는 것은 ISA 방식의 PnP 카드들인데 이 것들은 리눅스뿐만 아니라
         MS 윈도 시스템에서도 종종 문제를 일으킨다. 대개의 경우 도스용 유틸리티를
         이용해서 PnP 기능을 죽이고 리눅스에서 사용한다.

 

Setting up the Gateway

여러분의 게이트웨이로 사용하게 될 컴퓨터는 RR에 연결된 컴퓨터가 될 것이다.

먼저, 여러분이 주의 깊게 고른 이더넷 카드를 게이트웨이로 사용할 머신에 물리적으로 설치한다. 게이트웨이 머신에 서로 다른 두 회사의 카드를 사용해서 혼란스럽게 하라는 것은 아니다; 각각의 이더넷 카드에 사용할 고유한 드라이버를 설치하면 하나는 eth0 이라 불리고 다른 하나는 eth1 이라 불리게 될 것이고, 인터럽트 충돌이 생길 확률을 줄여줄 것이다(성가신 일들을 피하기 위해). 여러분이 ISA 카드를 골랐다면 IRQ와 I/O 주소를 설정하기 위해 필요한 DOS 유틸리티들을 아마 다운로드해야 할 것이다.

여러분의 게이트웨이 머신을 깨끗이 밀고 Redhat 6 배포판을(이 기사는 Redhat 6을 기초로 쓰여졌다)필요한 것들만 깔끔하게 설치하자. 여러분에게 하드 드라이브 공간이 충분히 남아 있다면, 설치 프로그램 옵션에서 모든 것을 설치하도록 설정할 수도 있지만, 여러분은 게이트웨이 머신에서, X 서버나, 그래픽 도구들, 기타등등을 정말, 전혀 사용하지 않을 것이다.  여러분이 설치해야 할 것들은 ipchains, BIND, cacheing nameserver, pump, 그리고 우리가 이 문서에서 다루는 그 밖의 필요한 패키지들이라는 것을 확실히 해 두자.  또 설치프로그램에게 boot할 때 named를 시작할 것이라고 알려 주자.

이 기사에서 우리 계획은, eth0 는 케이블 모뎀에 연결하고 eth1 은 여러분의 사설 네트워크에 연결하는 것이다. 여러분은 아마 시스템이 처음 설치되는 동안에 첫 번째 이더넷 장치를 설정하도록 할 수 있을 것이다. Roadrunner 서비스가 우리에게 인터넷 IP를 할당해 줄 것이므로, eth0 가 필요한 RR과 PN 사이에 걸쳐 있는 케이블을 통해 연결되면 DHCP를 이용해 IP 주소를(고정 IP가 아니다) 얻게 된다고 알려주어야 한다. netconf 유틸리티를 이용해서(또는, /etc/sysconfig/network-scripts/ifcfg-eth?와 /etc/conf.modules 파일을 직접 편집할 수도 있다) 여러분 시스템이 부트할 때 eth1 장치가 작동하도록 할 수 있고, 여기에 사설 네트워크에서 사용할 IP 주소 하나를(10.0.0.1) 배정한다. 양 쪽 카드를 모두 설치하고 동작시키는 일이 쉽지 않을지도 모르겠다.  

알맞은 커널 모듈/드라이버를 정확하게 설정하고 그 다음 ‘ifconfig’ 명령을 사용해서 eth0 와 eth1 장치를 모두 볼 수 있으면 (또는 시스템이 부트될 때 두 장치가 올라오는 것이 보인다면) 계속 진행할 준비가 된 것이다. 네트워크 카드 드라이버를 커널 기능에 포함시켜 컴파일할 수도 있지만 이 문서에서 사용한 방법대로 모듈화된 드라이버를 사용하는 것이 더 일반적이고 유연하며 손쉬운 방법이다.

/etc/sysconfig/network 파일을 아래 예문처럼 설정하고 여러분 자신의 /etc/hosts 파일을 아래 파일로 교체하는 것이 더 안전하다. /etc/hosts 파일은 우리가 DNS 서버를 설정한 다음부터는 꼭 필요한 것은 아니지만, 백업을 받아두는 것이 좋다.

NOTE ON TWO 3c509 NETWORK CARDS:
여러분이 Redhat 리눅스를 설치하기 전에, 먼저 ISA 이더넷 카드를 둘 다 설치한다.  사용 중인 두 이더넷 카드가 3com 3c509라고 표시될 것이다.  첫 번째 NIC는 irq=10, address=300 값을 가지고, 두 번째 NIC는 irq=11, address=310 값을 가진다.  또, 여러분이 Redhat을 설치할 때, 한참 진행하다가 LAN을 설치하면 이더넷 카드들을 자동으로 검색할 것이다.

NOTE ON DHCP:
여러분은 Redhat 제어판(control panel), netconf를 이용해서, 또는 설정 파일들을 손으로 직접 편집하거나 Redhat 설치과정에서 DHCP를 설정할 수 있다(뭐 여러분이 다른 리눅스 배포판 사용한다 하더라도 상관없다)

 

Configuring IPChains / Masquerading

ping을 바깥에 있는 서버 몇 곳에 보내거나 lynx를 이용해 웹 페이지를 몇 개 검사해서 여러분의 Roadrunner 연결이 제대로 동작하는지 알아본다. 잘 동작한다면, 여러분은 매스커레이딩(masquerading)을 사용할 준비가 된 것이다. 아래 예문처럼 modprobe와 ipchains 명령 블록들을 여러분의 /etc/rc.d/rc.local 스크립트에 추가해서 포워딩/매스커레이딩 기능을 활성화하고 튼튼하고 안전한 방화벽 규칙들도 준비한다.

 

Configuring DNS on the Private Network

이제, ‘pump’는 (eth0 장치에 설정된 DHCP 정보를 수정하는) Roadrunner의 DNS 서버를 이용하기 위해 /etc/resolv.conf 파일을 설정할 것이다. 이 파일은 우리가 만들고 있는 사설 네트워크에서 호스트이름을 찾기 위한 기능을 제공하는 것은 아니다. 각 워크스테이션이 /etc/hosts 파일을 똑같이 복사해서 가지고, Roadrunner 네임서버를 사용하기 위해 손으로 직접 설정할 필요가 있다. 좀 성가시기는 해도 여러분 자신의 DNS 서비스를 가지려면 당연히 이런 일들을 해야 한다.

DNS-HOWTO로부터 몇 가지 지식을 얻어 무장하고, /etc/named.conf, /etc/resolv.conf 파일과 /var/named 아래 관련된 파일들을 새로 만들거나 수정하자. 여러분은 또 eth0 장치가 활성화될 때마다 resolv.conf 설정 값이 덮어써지는 것을 막기 위해 /etc/pump.conf 파일도 만들거나 편집해야 한다. ‘named(name d 라고 읽는다)’가 부트업 될 때 실행되도록 설정되었는지 확인하고 (/etc/rc.d/rc3.d/ 아래 S??named 라는 이름으로 링크가 있다면 시스템이 부트업 될 때 named가 활성화된다) 여러분의 사설 네트워크에서 DNS는 물론 캐싱 네임서버도 가지고 있어야 한다.

 

Setting up the Workstation Machines

여러분의 사설 네트워크 머신들이 (게이트웨이를 포함해서) 허브와 Cat5 케이블을 통해서 연결되도록 잘 설정하고, 그 다음에 워크스테이션의 환경을 조율한다. 각 머신/인터페이스마다 사용 가능한 사설 블록 안에서 고유한 IP 주소를 부여하자. 아래에 /etc/sysc
onfig/network 파일의 예문이 있다. /etc/hosts 파일과 /etc/resolv.conf 파일을 추가하고 여러분이 원하는 대로 설정한다. ping을 몇 개 다른 워크스테이션으로 보내거나 workstaion에 있는 웹 문서 몇 개를 읽어봐서 성공하면 여러분의 매스커레이딩 설정은 안전하고 DNS 서비스가 잘 동작하고 있는 것이다.

아래에 여러분의 네트워크에 속한 다른 컴퓨터들을 위한 예제가 있다.

1. ip address = 10.0.0.10
2. name address = w1.local
3. netmask = 255.255.255.0
4. /etc/resolv.conf 파일은 다른 리눅스 컴퓨터들을 위한 것이다.
5. /etc/hosts 파일은 나도 사용하기는 하지만, 꼭 필요한 것은 아니다.
    다만 여러분의 dns 서버가 고장 났을 때 백업을 위해 요긴하게 쓰인다.

추가되는 컴퓨터마다 여러분이 변경해야 할 것은 ip 주소와 name 주소뿐이다. w2.local과 10.0.0.20은 그 다음 컴퓨터에서 사용될 것이다.  이해가 되는가?

또, 여러분이 pc나 mac 클라이언트 또는 다른 도구를 사용한다면 매스커레이딩 mini-howto를 참고 한다.

기본적인 의도는 여러분의 매스커레이딩 머신(10.0.0.1)이 게이트웨이 서비스와 DNS 서비스를 각 머신에게 제공하도록 설정하는 것이다. IP-Masquerading HOWTO는 매스커레이딩을 이용한 사설 네트워크에서 비 리눅스 시스템을 (일반적으로 MS 윈도우 시스템) 설정하는 방법을 설명하는 매우 훌륭한 섹션이 있다.

http://www.ssc.com/mirrors/LDP/HOWTO/IP-Masquerade-HOWTO.html

 

Security Concerns

항상 인터넷에 연결되어 있는 시스템은 그만큼 위험에 더 노출되어 있다. 인터넷에는 무언가 생산적인 일을 하기보다는 시스템의 보안을 깨고 침입해서 망가뜨리려는 사람들이 많이 있고, 그보다 더 많은 사람들이 어떤 못된 짓을 벌이는 중간 기지로 여러분의 시스템을 이용하려고 노리고 있다.

우리는 방화벽을 통해 지나가는 트래픽을 반드시 허용해야 하므로 매스커레이딩은 처음부터 안전하지 못한 구석이 조금 있다. 하지만 여러분의 게이트웨이에서 포트 번호를 이용해 telnet, ftp, 또는 다른 데몬을 닫아둠으로써 많은 위험요소를 미리 막을 수 있다.  그러므로, IP firewall chains에 대해 잘 알아두는 것은 매우 바람직한 일이다. ipportfw처럼 포트 포워딩을 제공하는 프로그램은 여러분 네트워크에 속한 다른 머신들에 연결하려는 요청이 들어오면, (요청된 서비스를 그대로 실행하기보다)위험요소를 여러분의 게이트웨이로부터 먼 곳으로 그 방향을 바꾸는 데에도 사용할 수 있다.

게이트웨이에 DNS 서버를 두지 않고, 여러분 네트워크 안쪽에 있는 다른 머신으로 옮겨서 외부로부터 DNS 서버에 다른 목적으로 접근하는 것을 막을 수 있다.  또는 간단히 named에 적절한 listen-on 속성을 주어(man named.conf 명령으로 맨 페이지를 확인한다) 여러분의 바깥 쪽 인터페이스 포트에 연결하는 것을 막을 수 있다. 여러분이 더 높은 수준의 보안 설정을 하고 싶지만, 여전히 바깥으로부터 로긴할 수 있도록 두고 싶다면 암호화된 연결을 통해 텔넷과 유사한 로긴을 제공하는 openssh을 알아보는 게 좋겠다. tcplogd 처럼 대부분의 포트스캔과 악의적인 행동들을 검사하고 여러분에게 알려줄 수 있는 진보된 로그 프로그램을 설치하는 것도 현명한 생각이다.

마지막으로, 더 이상 연결을 사용하지 않을 때 여러분은 바깥으로 향한 인터페이스를 간단하게 꺼버릴 수 있다. 그럼, 장난꾸러기들이 여러분의 네트워크에 불법적인 접속을 따낼 기회가 그만큼 줄어들 것이다. 여러분의 게이트웨이 머신에서 ‘ifdown eth0’ 명령을 내리는 것만으로 여러분의 연결을 간단하게 닫을 수 있고, 다시 연결이 필요하다면 ‘ifup eth0’ 명령으로 인터페이스를 열 수 있다.

 

Summary of Security

1. 여러분의 방화벽 컴퓨터에서 openssh가 제공하는 유일한 서비스이어야 한다.  
    이상적인 경우를 말하자면, 여러분은 여러분의 게이트웨이 컴퓨터에 DNS를 두어서는
    안된다. 비록 우리 서버에 DNS를 두도록 설정했지만, 어쨌든 이상적인 보안을 위해서는
    여러분의 DNS 서비스를 다른 내부 컴퓨터에 두어야만 한다.  여러분이 어떤 이유에서 꼭
    게이트웨이 머신에 DNS를 두어야만 한다면, 최소한 바깥쪽에서는 DNS 서버를 사용하지
    못하도록 방화벽을 설정해야 한다.

2. 여러분이 바깥쪽에 서비스하기를 원하는 다른 모든 서비스들은 (예를 들어 웹서버 같은),
    ipportfw를 이용해서 여러분 네트워크에 속하는 다른 컴퓨터로 전달되도록 포트 포워딩을
    설정해야 한다(port forwarding에 대해서는 리눅스월드 2000년 3월호에서 자세히 다루
    었다). ftp://ftp.ox.compsoc.org.uk/pub/users/steve/ipsubs/

3. 절대로! 절대로! 절대로! /etc/inetd.conf 파일 아래 어떤 서비스도 켜 두지 말아야 한다.
    아니면 아예 inet을 실행조차 하지 말아야 한다.
    chkconfig inet off ### for RedHat users
    /etc/rc.d/init.d/inet stop

4. 따로 떨어진 컴퓨터에 다른 모든 내부적인 서비스들을 둔다.
    (프린팅, 파일공유, 데이터베이스 등)

5. tcplogd를 설치하고 여러분의 컴퓨터를 스캔하려는 자들을 감시한다 --     http://www.tigerteam.net/linuxgroup/tcplogd/

6. VNC, mail, ftp, 그리고 그 밖의 프로그램들이 Open SSH 터널을 거치도록 하는 방법도
    있다. 이 방법은 작업내용의 보안을 유지할 수 있다. http://www.openssh.com/

7. Abacus 프로젝트(침입 예방 시스템)를 살펴본다 -
    
http://www.psionic.com/abacus/

 

Dynamic DNS

ISP에 고정 IP 주소를 요청하지 않은 이상, Road Runner는 여러분이 로그인할 때마다 다른 IP 주소를 여러분에게 줄 것이다. Dynamic DNS는 여러분이나 다른 이들이 여러분의 컴퓨터를 찾을 수 있도록 에일리어스를 제공한다.

Dyndns.org(http://www.dyndns.org)는 여러분의 IP 주소가 늘 변하더라도 고정된 도메인 이름을 부여해서, 인터넷의 다른 이들이 쉽게 기억하고 찾아올 수 있도록, 여러분의 게이트웨이 머신에 변하지 않는 이름을 준다. 여러분이 dyndns에 등록하면, ‘ddup’(http://www.gandy.dyndns.org/~thomas/ddup.php3)이라 불리는 유틸리티는 dyndns.org 에 연결하고 여러분의 IP 주소가 바뀌었을 때 여러분의 네임서버 레코드를 업데이트한다. 아래 셸 스크립트 조각을 /etc/rc.d/rc.local 파일에 덧붙이면 시스템이 부트될 때 dyndns 레코드를 업데이트하되, 여러분의 IP 주소가 바뀌었을 때만 수정한다(dyndns는 아무 이유 없이 여러분의 레코드를 업데이트하지는 않는다.)  이 글은 여러분이 ‘ddup’을 제대로 설치했을 경우를 가정한 것이다.

나는 하루나 이틀마다 게이트웨이 머신을 리부트하는데, 시스템이 부트되는 동안 별 문제가 없이 할당된 IP 주소에 맞게 변경되었다.(비록 기술적인 문제이지만)만약 여러분이 한동안 게이트웨이를 떠날 계획이라면, 여러분은 아마 dyndns 레코드가 항상 제대로 된 정보를 유지할 수 있도록 아래 스크립트를 cron 데몬을 통해 실행하려 할 것이다. 아마 약간 수정이 필요한 터인데, 그건 여러분이 스스로 알아보기 바란다.

 

Comments and Other Notes

더 확실한 보안을 위해, 여러분은 네트워크 안쪽 트래픽을 격리하는 데 사용할 수 있는 네트워크 스위치를 사고 싶을지도 모르겠다. 그런 장치들은 비싸지만, 중요한 네트워크에서는 충분히 가치 있는 일이다.여러분이 자신의 내부 네트워크를 한 번에 설정할 수 있는 더 진보적인 것들이 있다. fetchmail을 이용해 오든 전자우편을 다운로드할 수 있다. 여러분은 대역폭을 확보하기 위해 프록시 서버를 이용할 수도 있다.

Mark Nielsen은 ZING과 TCU의 책 제본하는 일을 하며 Andrew는 리눅스 컨설턴트이다.

 

Example Files

(이 파일들은 다만 구문을 설명하기 위한 예문들로, 여러분은 아마 도메인 이름 등을 자신에게 적절한 것으로 바꾸어야 할 것이다.)

 

/etc/rc.d/rc.local  (gateway)

# 방화벽 설정 - 시스템이 부트될 때 실행되도록 /etc/rc.d/rc.local 파일의 끝에 덧붙여야
                       한다.
# IP Masquerading HOWTO와 IPChains HOWTO에 소개된 예제를 바탕으로 고쳐 썼다.
# 더 많은 것을 알고 싶으면 원문을 본다.
# 이 예문들은 그런대로 안전한 매스커레이딩 방화벽 시스템을 제공한다.

echo “Loading IP masquerading modules...”
# 매스커레이딩에서 다른 몇 가지 일상적인 프로토콜을 사용하기 위해 모듈을 로드한다.

/sbin/depmod -a
/sbin/modprobe ip_masq_ftp
/sbin/modprobe ip_masq_raudio
/sbin/modprobe ip_masq_irc

echo “Turning IP forwarding on...”
# 패킷 전달기능을 켠다.

echo “1” > /proc/sys/net/ipv4/ip_forward

# DHCP를 통해 동적 IP 주소를 할당받고
# 외부 인터페이스 이름을 사용하기 편하게 변수로 저장한다.

extip=”`/sbin/ifconfig eth0 | grep ‘inet addr’ | awk ‘{print $2}’ | sed -e ‘s/.*://’`”
extint=”eth0”

# 같은 방법으로 내부 네트워크 이름과 인터페이스를 설정한다.
intint=”eth1”
intnet=”10.0.0.0/8”

echo “Configuring firewall chains:”
echo -n “input...”

# 입력 체인: 먼저 설정 값을 비워 내고(flush) 기본 정책을 거절(reject)로 설정한다.  
# 일단, 현재 기본 정책은 모든 룰을 거부(deny)와 기록(log)으로 설정했기 때문에
   무의미하다.

ipchains -F input
ipchains -P input REJECT

# 로컬 인터페이스, 로컬 머신으로부터 나가는 것은 모두 가능하게 한다.
   ipchains -A input -i $intint -s $intnet -d 0.0.0.0/0 -j ACCEPT

# 원격 인터페이스에서, 로컬 머신이 되려는 요청, IP 속이기, 등 불법적인 요청을 버린다.
   ipchains -A input -i $extint -s $intnet -d 0.0.0.0/0 -l -j REJECT

# 원격 인터페이스에서, 로컬 네트워크 내부로 연결을 설정하려는 어떤 시도도 되돌려서
   외계에 우리 머신의 TCP 연결이 열리는 것을 막아준다.
# 아래는 단지 IPChains 유틸리티로 우리가 어떤 것들을 할 수 있는지 예를 든 것이지만,
   여러분의 방화벽을 열어 다른 이들이 연결하도록 허용할 특별한 이유가 없는 한 그대로
   사용해도 나쁠 건 없다.
# ipchains -A input ! -f -i $extint -p TCP -y -j REJECT

# 원격 인터페이스에서, 어떤 출발지 주소도, roadrunner dhcp 주소로 갈 수 있도록 허용
   한다.
   Ipchains -A input -i $extint -s 0.0.0.0/0 -d $extip/32 -j ACCEPT

# 루프백 인터페이스를 유효하게 한다.
   ipchains -A input -i lo -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT

# 그 밖에 들어오는 다른 모든 것들은 거부하고 기록을 남긴다.
   ipchains -A input -s 0.0.0.0/0 -d 0.0.0.0/0 -l -j REJECT
   echo -n “output...”

# 나가는 체인: 먼저 설정 값을 비워 내고(flush) 기본정책을 거절(reject)로 설정한다.  
# 현재 기본 정책은 모든 룰을 거부(deny)와 기록(log)으로 설정했기 때문에 무의미하다.

ipchains -F output
ipchains -P output REJECT

# 로컬 인터페이스에서, 어떤 출발지 주소도 로컬넷에 이를 수 있도록 허용한다.
   ipchains -A output -i $intint -s 0.0.0.0/0 -d $intnet -j ACCEPT

# 원격 인터페이스에서 로컬 네트워크로 나가는 것들을 거부한다.
   ipchains -A output -i $extint -s 0.0.0.0/0 -d $intnet -l -j REJECT

# 원격 인터페이스에서 로컬 인터페이스로부터 나가는 것들을 거부한다.
   ipchains -A output -i $extint -s $intnet -d 0.0.0.0/0 -l -j REJECT

# 원격 인터페이스에서 나가는 모든 것을 허용한다.
   ipchains -A output -i $extint -s $extip/32 -d 0.0.0.0/0 -j ACCEPT

# 루프백 인터페이스를 유효하게 설정한다.
   ipchains -A output -i lo -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT

# 그밖에 나가는 모든 것을 거부하고 기록을 남긴다.
   ipchains -A output -s 0.0.0.0/0 -d 0.0.0.0/0 -l -j REJECT

 

echo -n “forward...”

# 전달하는 체인(Forward chain): 먼저 설정 값을 비워 내고(flush) 기본 정책을 거부(deny)로
   설정한다.  
# 현재 기본 정책은 모든 룰을 거부(deny)와 기록(log)으로 설정했기 때문에 무의미하다.
# ipchains -F forward
   ipchains -P forward DENY

# 로컬 인터페이스에서 로컬 넷으로부터 다른 모든 곳으로 가는 것을 매스커레이딩한다.
# 이 줄까지가 우리 작업의 끝이다. 나머지 줄은 보안을 위한 것들이다.
   Ipchains -A forward -i $extint -s $intnet -d 0.0.0.0/0 -j MASQ

# 다른 모든 포워딩은 거부하고 기록을 남긴다.  
# 유감스럽게도 정책에 로그 옵션이 없지만 이 명령이 그 일을 대신한다.
   ipchains -A forward -s 0.0.0.0/0 -d 0.0.0.0/0 -l -j REJECT

echo “done.”

 

/etc/sysconfig/network  (gateway)
 

NETWORKING=”yes”
FORWARD_IPV4=”yes”
HOSTNAME=”main.local”
DOMAINNAME=”local”
GATEWAY=”10.0.0.1”
GATEWAYDEV=”eth0”

 

/etc/sysconfig/network  (workstations)
 

NETWORKING=”yes”
FORWARD_IPV4=”no”
# 각 머신의 호스트이름을 바꾼다.
HOSTNAME=”w1.local”
DOMAINNAME=”local”
GATEWAY=”10.0.0.1”
GATEWAYDEV=”eth0”

 

/etc/hosts  (gateway and workstations)
 

127.0.0.1     localhost    localhost.localdomain
10.0.0.1         main         main.local
10.0.0.10        w1           w1.local
10.0.0.20        w2           w2.local
10.0.0.30        w3           w3.local

 

/etc/resolv.conf  (gateway and workstations)
 

search local columbus.rr.com
# 우리가 사용할 로컬 네임서버이다.
   nameserver 10.0.0.1             

# 백업 서버를 써넣는다. 단, 이것은 OSU 학생만을 위한
   것이므로 그대로 사용하지 않는다.
   nameserver 128.146.1.7  

 

/etc/pump.conf  (on gateway only)
 

device  eth0 {  
         nodns
        }

 

 /etc/named.conf  (on gateway only)
 

options {
        directory “/var/named”;
};
zone “.” {
        type hint;
        file “named.ca”;
};
zone “local”{
        type master;
        file “local.zone”;
        notify no;
};
zone “0.0.10.in-addr.arpa”{
        type master;
        file “local.reverse”;
        notify no;
};
zone “0.0.127.in-addr.arpa”{
        type master;
        file “named.local”;
};

 

/var/named/local.zone  (on gateway only)
 

@       IN      SOA     main.local.     root.main.local. (
                                                   200001151 ; serial
                                                   8 ; refresh
                                                   2 ; retry
                                                   1 ; expire
                                                   1 ; default_ttl
                                                   )
@                 IN            NS            main.local.
localhost       IN             A             127.0.0.1
main             IN             A             10.0.0.1
w1                IN             A             10.0.0.10
w2                IN             A             10.0.0.20
w3                IN             A             10.0.0.30

 

/var/named/local.reverse  (on gateway only)
 

0.0.10.in-addr.arpa.        IN      SOA        main.local. root.main.local. (

                                                            1997022700 ; serial
                                                            28800 ; refresh
                                                            14400 ; retry
                                                            3600000 ; expire
                                                            86400 ; default_ttl
                                                            )
1.0.0.10.in-addr.arpa.     IN      PTR         main.local.
10.0.0.10.in-addr.arpa.   IN      PTR         w1.local.
20.0.0.10.in-addr.arpa.   IN      PTR         w2.local.       
30.0.0.10.in-addr.apra.   IN      PTR         w3.local.

 

 append to /etc/rc.d/rc.local  (dyndns support with ddup)

# 교묘하게 악용되는 것을 막기 위해 dyndns.org 항목을 업데이트한다.
# 여러분에게 dyndns 계정이 없거나 ddup 패키지가 설치되지 않았다면 이 작업은 소용 없다.
# 방화벽 설정 스크립트에서 사용할 변수가 몇 가지 필요하므로,
# 방화벽 스크립트 끝에 이 것들을 덧붙여야 한다.  

# dummy.hostname을 여러분이 받은, 등록된 이름으로 바꾼다.

 

reghost=”dummy.hostname”
regip=”`nslookup $reghost main.dyndns.org | tail -n 3 |
grep ‘ddress’ | awk ‘{print $2}’`”

echo -e “\n Dyndns.org abuse prevention IP address check:”
echo “$reghost registered: $regip”
echo -e “$extint has IP address: $extip \n”

if [ “$regip” = “$extip” ]; then
          echo “Address has not changed. DDUP not run.”;
          else
          echo “Address has changed. Updating your record.”;
          ddup --host $reghost;
fi

 

/etc/conf.modules  (gateway; ‘alias ethx’ 줄만 관련)
 

alias eth0 3c509
alias parport_lowlevel parport_pc
pre-install pcmcia_core /etc/rc.d/init.d/pcmcia start
alias eth1 tulip

 

Copyright ⓒ 2000, Mark Nielsen, Andrew oyd
Published in Issue 51 of Linux Gazette, March 2000

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,076 명
  • 현재 강좌수 :  36,001 개
  • 현재 접속자 :  542 명