다음 이전 차례

6. 그외의 IP 마스커레이드 관련 사항과 소프트웨어 지원

6.1 IP 마스커레이드의 문제점

어떤 TCP/IP 응용 프로그램들의 프로토콜은, 포트 번호에 대한 것들을 자기 나름대로 가정하거나 그들 데이터의 TCP/IP 주소나 포트 번호를 암호화하기 때문에, 리눅스 IP 마스커레이딩을 통해서는 제대로 동작하지 않는다. 암호화 때문에 문제가 되는 프로토콜을 사용하는 응용프로그램들은, 특정한 프록시 서버라든가, 마스커레이딩 코드 내에 특정 IP 마스커레이드 모듈을 추가해야 작동한다.

6.2 외부로부터 들어오는 서비스

기본적으로, 리눅스 IP 마스커레이딩은 외부로부터 들어오는 서비스들을 전혀 처리하지 못한다. 하지만, 이것을 처리할 수 있는 몇가지 방법이 있다.

만약 높은 수준의 보안을 필요로 하지 않는다면, 간단히 요청이 들어오는 IP 포트를 포워딩해 주면 된다. 이를 수행하는 방법은 여러가지가 있지만, 가장 안정적인 방법은 IPPORTFW를 사용하는 것이다. 더 자세한 정보는 Forwarders 섹션을 참조한다.

외부로부터 들어오는 서비스들에 대해서 어느정도의 인증절차를 갖게 하려면, TCP-wrappers나 Xinetd 등을 사용해서 특정한 IP 주소만 통과시킬 수 있다. 그 도구나 정보를 얻기 위해서는 TIS Firewall Toolkit을 살펴보면 좋을 것이다.

외부로부터 들어오는 서비스의 보안에 대한 자세한 사항은 TrinityOS 문서와 IP Masquerade Resource에서 찾을 수 있을 것이다.

6.3 지원되는 클라이언트 소프트웨어와 그외 설정에 대해 알아둘 점

** Linux Masquerade Application list에서 리눅스 IP 마스커레이딩을 통해서 동작하는 응용프로그램들에 관한 다량의 우수한 정보들을 얻을 수 있다. 이 사이트는 현재 Steve Grevemeyer가 관리하고 있으며, 그는 풍부한 데이타베이스를 구축해 놓았다. 아주 훌륭한 정보자원이다!

일반적으로, 표준 TCP와 UDP를 사용하는 응용프로그램들은 잘 작동할 것이다. 만약 어떠한 제안이나 힌트등이 있다면 IP Masquerade Resource를 확인해서 자세한 사항을 확인하기 바란다.

IP 마스커레이드와 함께 -동작하는- 네트웍 클라이언트들

일반적인 클라이언트들:

Archie

지원되는 모든 플랫폼, 화일 검색 클라이언트 (모든 archie 클라이언트가 지원되지는 않는다).

FTP

지원되는 모든 플랫폼, active FTP 접속을 위해서 ip_masq_ftp.o 커널 모듈 사용.

Gopher client

지원되는 모든 플랫폼.

HTTP

지원되는 모든 플랫폼, 웹 서핑.

IRC

지원되는 여러가지 플랫폼에서 동작하는 모은 IRC 클라이언트, DCC는 ip_masq_irc.o 모듈을 통해서 지원.

NNTP (USENET)

지원되는 모든 플랫폼, USENET 뉴스 클라이언트.

PING

모든 플랫폼, ICMP 마스커레이딩 커널 옵션 사용

POP3

지원되는 모든 플랫폼, 이메일 클라이언트.

SSH

지원되는 모든 플랫폼, 보안상 안전한 TELNET/FTP 클라이언트.

SMTP

지원되는 모든 플랫폼, Sendmail, Qmail, PostFix등의 이메일 서버.

TELNET

지원되는 모든 플랫폼, 원격 접속.

TRACEROUTE

UNIX와 Windows 기반 플랫폼, 몇가지 변종들은 동작하지 않을 수 있다.

VRML

Windows(지원되는 모든 플랫폼에서도 어쩌면 가능), 가상 현실.

WAIS client

지원되는 모든 플랫폼.

멀티미디어와 통신 클라이언트:

Alpha Worlds

Windows, 클라이언트-서버 방식의 3D 채팅 프로그램.

CU-SeeMe

지원되는 모든 플랫폼, ip_masq_cuseeme 모듈 사용, 자세한 사항은 CuSeeme 섹션 참조.

ICQ

지원되는 모든 플랫폼. 리눅스 커널이 IPPORTFW를 지원하도록 컴파일되어야 하며, ICQ가 NON-SOCKS 프록시 뒤쪽에서 동작하도록 설정되어야 한다. 이 설정에 대한 자세한 설명은 ICQ 섹션에서 확인할 수 있다.

Internet Phone 3.2

Windows, Peer-to-peer 방식의 음성 통신, 당신이 통화를 요청하는 경우에는 통신이 가능하지만, 다른 사람들이 당신에게 통화를 요청할 수 있게 하려면 특정 포트를 포워딩하도록 설정해야 한다. 자세한 사항은 Forwarders 섹션을 참조한다.

Internet Wave Player

Windows, 네트웍 스트리밍 오디오(network streaming audio).

Powwow

Windows, Peer-to-peer 방식의 텍스트, 음성, 쪽지 통신, 당신이 통화를 요청하는 경우에는 통신이 가능하지만, 다른 사람들이 당신에게 통화를 요청할 수 있게 하려면 특정 포트를 포워딩하도록 설정해야 한다. 자세한 사항은 Forwarders 섹션을 참조한다.

Real Audio Player

Windows, 네트웍 스트리밍 오디오(network streaming audio), ip_masq_raudio UDP 모듈을 사용하면 더 좋은 음질을 얻을 수 있다.

True Speech Player 1.1b

Windows, 네트웍 스트리밍 오디오(network streaming audio)

VDOLive

Windows, ip_masq_vdolive 패치 적용.

Worlds Chat 0.9a

Windows, 클라이언트-서버 방식의 3D 채팅 프로그램.

게임 - LooseUDP 패치에 관한 자세한 사항은 LooseUDP 섹션을 참조하기 바란다.

Battle.net

동작은 하지만, TCP 포트 116과 118과 UDP 포트 6112를 게임을 실행하는 컴퓨터로 IP 포워딩(IPPORTFW)해줘야 한다. 자세한 사항은 Forwarders 섹션을 참조하기 바란다. FSGS와 Bnetd 서버는 NAT와 잘 동작하도록 만들어져 있지 않기 때문에 IPPORTFW를 필요로 한다.

BattleZone 1.4

LooseUDP 패치를 하고 새로운 NAT와 잘 동작하는 .DLLs from Activision를 사용하면 동작한다.

Dark Reign 1.4

LooseUDP 패치를 하거나 TCP 포트 116과 118과 UDP 포트 6112를 게임을 실행하는 컴퓨터로 IP 포워딩(IPPORTFW)해줘야 한다. 자세한 사항은 Forwarders 섹션을 참조하기 바란다.

Diablo

LooseUDP 패치를 하거나 TCP 포트 116과 118과 UDP 포트 6112를 게임을 실행하는 컴퓨터로 IP 포워딩(IPPORTFW)해줘야 한다. Diablo의 새로운 버젼은 TCP 포트 6112와 UDP 포트 6112만을 사용한다. 자세한 사항은 Forwarders 섹션을 참조하기 바란다.

Heavy Gear 2

LooseUDP 패치를 하거나 TCP 포트 116과 118과 UDP 포트 6112를 게임을 실행하는 컴퓨터로 IP 포워딩(IPPORTFW)해줘야 한다. 자세한 사항은 Forwarders 섹션을 참조하기 바란다.

Quake I/II/III

바로 작동하지만, 마스커레이드 서버 뒤쪽에 Quake I/II/III 플레이어가 두 명 이상 있을 때에는 ip_masq_quake 모듈이 필요하다. 또,, 이 모듈은 기본적으로는 Quake I과 QuakeWorld만 지원한다. Quake II를 지원하게 하거나 서버에 기본으로 정해진 이외의 포트로 접속하고자 할 때에는, rc.firewall-2.0.xrc.firewall-2.2.x 의 모듈 설치 섹션을 참조하라.

StarCraft

LooseUDP 패치를 하고 TCP와 UDP의 6112번 포트를 마스커레이딩 내부의 게임을 실행하려는 컴퓨터로 포워딩(IPPORTFW)해주어야 한다. 자세한 사항은 Forwarders 섹션을 참조하기 바란다.

WorldCraft

LooseUDP 패치를 하면 동작한다.

그외의 클라이언트들:

Linux net-acct package

Linux, 네트웍 관리-어카운팅 관련 패키지

NCSA Telnet 2.3.08

DOS, TELNET, FTP, PING등이 포함된 패키지

PC-anywhere for Windows

MS-Windows, TCP/IP를 통해서 원격으로 PC를 제어한다. 특정한 포트를 포워딩하도록 설정하지 않으면, 클라이언트로는 동작하지만 호스트(서버)로는 동작하지 않는다. 자세한 사항은 Forwarders 섹션을 참조하기 바란다.

Socket Watch

NTP 사용 - 네트웍 시간조절 프로토콜

동작하지 않는 클라이언트:

All H.323 programs

- MS Netmeeting, Intel Internet Phone Beta 2 - 연결은 되지만 목소리는 한쪽으로만(나가는 쪽) 전달된다. 이를 해결 가능한 방법으로써, Equivalence's PhonePatch H.323 gateway를 참조하기 바란다.

Intel Streaming Media Viewer Beta 1

서버에 연결할 수 없다.

Netscape CoolTalk

상대편에 연결할 수 없다.

WebPhone

현재는 동작하지 않는다. (이 응용프로그램은 IP 주소에 대한 잘못된 가정을 한다.)

6.4 보안 강도가 보다 높은 IP 방화벽(IPFWADM) 정책

이 섹션에는 커널 2.0.x에서 사용되는 방화벽 도구인 IPFWADM에 대한 더 심도 있는 안내가 실려 있다. IPCHAINS(2.2.x 용)의 정책들에 대해서는 다음 섹션을 참조한다.

이 예는 방화벽/마스커레이드 시스템을 고정 주소를 가진 PPP 접속을 통해서 구축하는 것이다.(동적 PPP에 관한 것도 포함되어 있지만 코멘트 처리되어 있다.) 사용된 인터페이스는 192.168.0.1이고, PPP 인터페이스의 IP 주소는 잘못된 사용을 우려해서 실제와 다른 주소로 대체되었다 :) IP 스푸핑(속임)과 부정적인 라우팅이나 마스커레이딩을 검출하기 위해서 들어오고 나가는 인터페이스를 따로 따로 적었다. 명시적으로 허용되지 않은 것은 금지되어 있다 (실제적으로는 거부된다). 여기에 나온 rc.firewall 스크립트를 실행하고 나서 IP 마스커레이드 박스가 죽는다면, 여러분의 상황에 맞도록 편집을 했는지를 확인하고, /var/log/messages나 /var/adm/messages의 시스템 로그화일을 검토한다.

PPP, 케이블모뎀 등에 대해서 좀더 이해하기 쉬운, "강도 높은 IP 마스커레이딩의 IPFWADM 정책"에 대해서는, TrinityOS - Section 10GreatCircle's Firewall WWW page를 참조하기 바란다.

주의: ISP로부터(PPP, ADSL, 케이블 모뎀 등) 동적 TCP/IP 주소를 받았다면 부팅시에 이 "강도 높은" 정책을 로드할 수 없다. 동적으로 IP 주소를 할당받을 때마다 방화벽 정책화일을 다시 로드하거나, /etc/rc.d/rc.firewall 정책화일을 좀더 지능적으로 만들 필요가 있다. PPP 유저의 경우에는, "Dynamic PPP IP fetch" 부분을 주의 깊게 다시 읽어 보고서 적절한 부분의 코맨트를 해제해 준다. 강도 높은 방화벽 정책들과 동적 IP 주소에 관한 더 자세한 사항은 TrinityOS - Section 10 문서를 참조한다.

또한 몇가지의 GUI 방식의 방화벽 설정 도구가 있다. 자세한 사항은 FAQ 섹션을 참조한다.

마지막으로, 고정 PPP IP 주소를 사용하고 있다면, "ppp_ip = "your.static.PPP.address"" 라고 되어 있는 줄을 여러분의 IP 주소에 맞게 바꾼다.

----------------------------------------------------------------

#!/bin/sh
#
# /etc/rc.d/rc.firewall: An example of a semi-STRONG IPFWADM firewall ruleset
#

PATH=/sbin:/bin:/usr/sbin:/usr/bin

# testing, wait a bit then clear all firewall rules.
# uncomment following lines if you want the firewall to automatically
# disable after 10 minutes.
# (sleep 600; \
# ipfwadm -I -f; \
# ipfwadm -I -p accept; \
# ipfwadm -O -f; \
# ipfwadm -O -p accept; \
# ipfwadm -F -f; \
# ipfwadm -F -p accept; \
# ) &

# Load all required IP MASQ modules
#
#   NOTE:  Only load the IP MASQ modules you need.  All current IP MASQ modules
#          are shown below but are commented from loading.

# Needed to initially load modules
#
/sbin/depmod -a

# Supports the proper masquerading of FTP file transfers using the PORT method
#
/sbin/modprobe ip_masq_ftp

# Supports the masquerading of RealAudio over UDP.  Without this module,
#       RealAudio WILL function but in TCP mode.  This can cause a reduction
#       in sound quality
#
#/sbin/modprobe ip_masq_raudio

# Supports the masquerading of IRC DCC file transfers
#
#/sbin/modprobe ip_masq_irc


# Supports the masquerading of Quake and QuakeWorld by default.  This modules is
#   for for multiple users behind the Linux MASQ server.  If you are going to play
#   Quake I, II, and III, use the second example.
#
#Quake I / QuakeWorld (ports 26000 and 27000)
#/sbin/modprobe ip_masq_quake
#
#Quake I/II/III / QuakeWorld (ports 26000, 27000, 27910, 27960)
#/sbin/modprobe ip_masq_quake ports=26000,27000,27910,27960


# Supports the masquerading of the CuSeeme video conferencing software
#
#/sbin/modprobe ip_masq_cuseeme

#Supports the masquerading of the VDO-live video conferencing software
#
#/sbin/modprobe ip_masq_vdolive


#CRITICAL:  Enable IP forwarding since it is disabled by default since
#
#           Redhat Users:  you may try changing the options in /etc/sysconfig/network from:
#
#                       FORWARD_IPV4=false
#                             to
#                       FORWARD_IPV4=true
#
echo "1" > /proc/sys/net/ipv4/ip_forward


# Dynamic IP users:
#
#   If you get your IP address dynamically from SLIP, PPP, or DHCP, enable this following
#       option.  This enables dynamic-ip address hacking in IP MASQ, making the life
#       with Diald and similar programs much easier.
#
#echo "1" > /proc/sys/net/ipv4/ip_dynaddr


# Specify your Static IP address here.
#
#   If you have a DYNAMIC IP address, you need to make this ruleset understand your
#   IP address everytime you get a new IP.  To do this, enable the following one-line
#   script.  (Please note that the different single and double quote characters MATTER).
#
#   You will also need to either create the following link or have your existing
#   /etc/ppp/ip-up script run the /etc/rc.d/rc.firewall script.
#
#       ln -s /etc/rc.d/rc.firewall /etc/ppp/ip-up
#
#   If the /etc/ppp/ip-up file already exists, you should edit it and add a line
#   containing "/etc/rc.d/rc.firewall" near the end of the file.
#
#   If you aren't already aware, the /etc/ppp/ip-up script is always run when a PPP
#   connection comes up.  Because of this, we can make the ruleset go and get the
#   new PPP IP address and update the strong firewall ruleset.
#
#   PPP users:  If your Internet connect is via a PPP connection, the following
                one-line script will work fine.
#
#   DHCP users:  If you get your TCP/IP address via DHCP, you will need to replace
#                the word "ppp0" with the name of your external Internet connection
#               (eth0, eth1, etc).  It should be also noted that DHCP can change
#               IP addresses on you.  To fix this, users should configure their
#               DHCPc or DHCP client to re-run the firewall ruleset when their
#               DHCP lease is renewed.  For DHCPcd users, use the "-c" option.
#
#ppp_ip = "`/sbin/ifconfig ppp0 | grep 'inet addr' | awk '{print $2}' | sed -e 's/.*://'`"
#
ppp_ip = "your.static.PPP.address"


# MASQ timeouts
#
#   2 hrs timeout for TCP session timeouts
#  10 sec timeout for traffic after the TCP/IP "FIN" packet is received
#  60 sec timeout for UDP traffic (MASQ'ed ICQ users must enable a 30sec firewall timeout in ICQ itself)
#
/sbin/ipfwadm -M -s 7200 10 60


#############################################################################
# Incoming, flush and set default policy of reject. Actually the default policy
# is irrelevant because there is a catch all rule with deny and log.
#
/sbin/ipfwadm -I -f
/sbin/ipfwadm -I -p reject

# local interface, local machines, going anywhere is valid
#
/sbin/ipfwadm -I -a accept -V 192.168.0.1 -S 192.168.0.0/24 -D 0.0.0.0/0

# remote interface, claiming to be local machines, IP spoofing, get lost
#
/sbin/ipfwadm -I -a reject -V $ppp_ip -S 192.168.0.0/24 -D 0.0.0.0/0 -o

# remote interface, any source, going to permanent PPP address is valid
#
/sbin/ipfwadm -I -a accept -V $ppp_ip -S 0.0.0.0/0 -D $ppp_ip/32

# loopback interface is valid.
#
/sbin/ipfwadm -I -a accept -V 127.0.0.1 -S 0.0.0.0/0 -D 0.0.0.0/0

# catch all rule, all other incoming is denied and logged. pity there is no
# log option on the policy but this does the job instead.
#
/sbin/ipfwadm -I -a reject -S 0.0.0.0/0 -D 0.0.0.0/0 -o


#############################################################################
# Outgoing, flush and set default policy of reject. Actually the default policy
# is irrelevant because there is a catch all rule with deny and log.
#
/sbin/ipfwadm -O -f
/sbin/ipfwadm -O -p reject

# local interface, any source going to local net is valid
#
/sbin/ipfwadm -O -a accept -V 192.168.0.1 -S 0.0.0.0/0 -D 192.168.0.0/24

# outgoing to local net on remote interface, stuffed routing, deny
#
/sbin/ipfwadm -O -a reject -V $ppp_ip -S 0.0.0.0/0 -D 192.168.0.0/24 -o

# outgoing from local net on remote interface, stuffed masquerading, deny
#
/sbin/ipfwadm -O -a reject -V $ppp_ip -S 192.168.0.0/24 -D 0.0.0.0/0 -o

# outgoing from local net on remote interface, stuffed masquerading, deny
#
/sbin/ipfwadm -O -a reject -V $ppp_ip -S 0.0.0.0/0 -D 192.168.0.0/24 -o

# anything else outgoing on remote interface is valid
#
/sbin/ipfwadm -O -a accept -V $ppp_ip -S $ppp_ip /32 -D 0.0.0.0/0

# loopback interface is valid.
#
/sbin/ipfwadm -O -a accept -V 127.0.0.1 -S 0.0.0.0/0 -D 0.0.0.0/0

# catch all rule, all other outgoing is denied and logged. pity there is no
# log option on the policy but this does the job instead.
#
/sbin/ipfwadm -O -a reject -S 0.0.0.0/0 -D 0.0.0.0/0 -o


#############################################################################
# Forwarding, flush and set default policy of deny. Actually the default policy
# is irrelevant because there is a catch all rule with deny and log.
#
/sbin/ipfwadm -F -f
/sbin/ipfwadm -F -p deny

# Masquerade from local net on local interface to anywhere.
#
/sbin/ipfwadm -F -a masquerade -W ppp0 -S 192.168.0.0/24 -D 0.0.0.0/0
#
# catch all rule, all other forwarding is denied and logged. pity there is no
# log option on the policy but this does the job instead.
#
/sbin/ipfwadm -F -a reject -S 0.0.0.0/0 -D 0.0.0.0/0 -o

IPFWADM을 사용하면, 여러분은 -I, -O, -F 등의 옵션을 이용해서 특정 사이트로의 접근을 제한할 수 있다. 각 정책 명령들은 위에서부터 아래로 읽혀지고, "-a" 는 기존의 정책에 "덧붙인다"는 것을 유념한다. 그러므로, 특정한 제한 사항은 전반적인 정책보다 앞에 와야 한다. 예를 들면:

-I 를 사용하면, 가장 빠르지만 제한 사항은 내부의 컴퓨터들에게만 적용된다. 방화벽 컴퓨터 자체는 여전히 "금지된" 사이트에 접속할 수 있다. 물론 여러분은 이것들을 조합해서 사용할 수도 있다.

/etc/rc.d/rc.firewall 정책 화일 중에서:

... start of -I rules ...

# reject and log local interface, local machines going to 204.50.10.13
#
/sbin/ipfwadm -I -a reject -V 192.168.0.1 -S 192.168.0.0/24 -D 204.50.10.13/32 -o

# local interface, local machines, going anywhere is valid
#
/sbin/ipfwadm -I -a accept -V 192.168.0.1 -S 192.168.0.0/24 -D 0.0.0.0/0

... end of -I rules ...

-O 를 사용하면, 패킷들이 마스커레이딩을 먼저 통과하기 때문에 속도는 가장 느리지만, 방화벽 컴퓨터 자체도 금지된 사이트에 접속할 수 없다.

... start of -O rules ...

# reject and log outgoing to 204.50.10.13
#
/sbin/ipfwadm -O -a reject -V $ppp_ip -S $ppp_ip/32 -D 204.50.10.13/32 -o

# anything else outgoing on remote interface is valid
#
/sbin/ipfwadm -O -a accept -V $ppp_ip -S $ppp_ip/32 -D 0.0.0.0/0

... end of -O rules ...

-F 를 사용하면, -I 를 사용한 것보다는 조금 더 느리고 역시 마스커레이드 되는 (내부의) 컴퓨터들만 제한하고 방화벽 컴퓨터 자체는 금지된 사이트에 접속할 수 있다.

... start of -F rules ...

# Reject and log from local net on PPP interface to 204.50.10.13.
#
/sbin/ipfwadm -F -a reject -W ppp0 -S 192.168.0.0/24 -D 204.50.10.13/32 -o

# Masquerade from local net on local interface to anywhere.
#
/sbin/ipfwadm -F -a masquerade -W ppp0 -S 192.168.0.0/24 -D 0.0.0.0/0

... end of -F rules ...

192.168.0.0/24가 204.50.11.0로 접속할 수 있도록 허용하기 위해 특별한 정책이 필요하지는 않다. 전반적인 정책에 포함되어 있기 때문이다.

위의 정책화일에서 인터페이스를 구성하는 방법은 여러가지가 있을 수 있다. 예를 들어서, "-V 192.168.255.1" 대신에 "-W eth0"라고 적을 수 있고, "-V $ppp_ip" 대신에 "-W ppp0"를 사용할 수 있다. "-V" 를 사용하는 것은 IPCHAINS와의 호환을 위해서 사용된 것이고, IPFWADM만을 사용한다면 전적으로 사용자의 선택이다.

6.5 보안 강도가 보다 높은 IP 방화벽(IPCHAINS) 정책

이 섹션에는 커널 2.2.x에서 사용되는 방화벽 도구인 IPCHAINS에 대한 더 심도 있는 안내가 실려 있다. IPFWADM(2.0.x 용)의 정책들에 대해서는 이전 섹션을 참조한다.

이 예는 방화벽/마스커레이드 시스템을 고정 주소를 가진 PPP 접속을 통해서 구축하는 것이다.(동적 PPP에 관한 것도 포함되어 있지만 코멘트 처리되어 있다.) 사용된 인>터페이스는 192.168.0.1이고, PPP 인터페이스의 IP 주소는 잘못된 사용을 우려해서 실제와 다른 주소로 대체되었다 :) IP 스푸핑(속임)과 부정적인 라우팅이나 마스커레이딩을 검출하기 위해서 들어오고 나가는 인터페이스를 따로 따로 적었다. 명시적으로 허용되지 않은 것은 금지되어 있다 (실제적으로는 거부된다). 여기에 나온 rc.firewall 스크립트를 실행하고 나서 IP 마스커레이드 박스가 죽는다면, 여러분의 >상황에 맞도록 편집을 했는지를 확인하고, /var/log/messages나 /var/adm/messages의 시스템 로그화일을 검토한다.

PPP, 케이블모뎀 등에 대해서 좀더 이해하기 쉬운, "강도 높은 IP 마스커레이딩의 IPFWADM 정책"에 대해서는, TrinityOS - Section 10GreatCircle's Firewall WWW page를 참조하기 바란다.

주의 #1: 2.2.11보다 버젼이 낮은 리눅스 2.2.x 커널은 IPCHAINS fragmentation bug를 가지고 있다. 이 때문에, 강도 높은 IPCHAINS 정책을 사용하면 공격에 노출되게 된다. 버그가 수정된 커널로 업그레이드하기 바란다.

주의 #2: ISP로부터(PPP, ADSL, 케이블 모뎀 등) 동적 TCP/IP 주소를 받았다면 부팅시에 이 "강도 높은" 정책을 로드할 수 없다. 동적으로 IP 주소를 할당받을 때마다 방화벽 정책화일을 다시 로드하거나, /etc/rc.d/rc.firewall 정책화일을 좀더 지능적으로 만들 필요가 있다. PPP 유저의 경우에는, "Dynamic PPP IP fetch" >부분을 주의 깊게 다시 읽어 보고서 적절한 부분의 코맨트를 해제해 준다. 강도 높은 방화벽 정책들과 동적 IP 주소에 관한 더 자세한 사항은 TrinityOS - Section 10 >문서를 참조한다.

또한 몇가지의 GUI 방식의 방화벽 설정 도구가 있다. 자세한 사항은 FAQ 섹션을 참조한다.

마지막으로, 고정 PPP IP 주소를 사용하고 있다면, "ppp_ip = "your.static.PPP.address"" 라고 되어 있는 줄을 여러분의 IP 주소에 맞게 바꾼다.

----------------------------------------------------------------


#!/bin/sh
#
# /etc/rc.d/rc.firewall: An example of a Semi-Strong IPCHAINS firewall ruleset.
#

PATH=/sbin:/bin:/usr/sbin:/usr/bin

# Load all required IP MASQ modules
#
#   NOTE:  Only load the IP MASQ modules you need.  All current IP MASQ modules
#          are shown below but are commented from loading.

# Needed to initially load modules
#
/sbin/depmod -a

# Supports the proper masquerading of FTP file transfers using the PORT method
#
/sbin/modprobe ip_masq_ftp

# Supports the masquerading of RealAudio over UDP.  Without this module,
#       RealAudio WILL function but in TCP mode.  This can cause a reduction
#       in sound quality
#
/sbin/modprobe ip_masq_raudio

# Supports the masquerading of IRC DCC file transfers
#
#/sbin/modprobe ip_masq_irc


# Supports the masquerading of Quake and QuakeWorld by default.  This modules is
#   for for multiple users behind the Linux MASQ server.  If you are going to play
#   Quake I, II, and III, use the second example.
#
#Quake I / QuakeWorld (ports 26000 and 27000)
#/sbin/modprobe ip_masq_quake
#
#Quake I/II/III / QuakeWorld (ports 26000, 27000, 27910, 27960)
#/sbin/modprobe ip_masq_quake ports=26000,27000,27910,27960


# Supports the masquerading of the CuSeeme video conferencing software
#
#/sbin/modprobe ip_masq_cuseeme

#Supports the masquerading of the VDO-live video conferencing software
#
#/sbin/modprobe ip_masq_vdolive


#CRITICAL:  Enable IP forwarding since it is disabled by default since
#
#           Redhat Users:  you may try changing the options in /etc/sysconfig/network from:
#
#                       FORWARD_IPV4=false
#                             to
#                       FORWARD_IPV4=true
#
echo "1" > /proc/sys/net/ipv4/ip_forward


# Get the dynamic IP address assigned via DHCP
#
extip="`/sbin/ifconfig eth1 | grep 'inet addr' | awk '{print $2}' | sed -e 's/.*://'`"
extint="eth1"

# Assign the internal IP
intint="eth0"
intnet="192.168.1.0/24"


# MASQ timeouts
#
#   2 hrs timeout for TCP session timeouts
#  10 sec timeout for traffic after the TCP/IP "FIN" packet is received
#  60 sec timeout for UDP traffic (MASQ'ed ICQ users must enable a 30sec firewall timeout in ICQ itself)
#
ipchains -M -S 7200 10 60

#############################################################################
# Incoming, flush and set default policy of reject. Actually the default policy
# is irrelevant because there is a catch all rule with deny and log.
#
ipchains -F input
ipchains -P input REJECT

# local interface, local machines, going anywhere is valid
#
ipchains -A input -i $intint -s $intnet -d 0.0.0.0/0 -j ACCEPT

# remote interface, claiming to be local machines, IP spoofing, get lost
#
ipchains -A input -i $extint -s $intnet -d 0.0.0.0/0 -l -j REJECT

# remote interface, any source, going to permanent PPP address is valid
#
ipchains -A input -i $extint -s 0.0.0.0/0 -d $extip/32 -j ACCEPT

# loopback interface is valid.
#
ipchains -A input -i lo -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT

# catch all rule, all other incoming is denied and logged. pity there is no
# log option on the policy but this does the job instead.
#
ipchains -A input -s 0.0.0.0/0 -d 0.0.0.0/0 -l -j REJECT

#############################################################################
# Outgoing, flush and set default policy of reject. Actually the default policy
# is irrelevant because there is a catch all rule with deny and log.
#
ipchains -F output
ipchains -P output REJECT

# local interface, any source going to local net is valid
#
ipchains -A output -i $intint -s 0.0.0.0/0 -d $intnet -j ACCEPT

# outgoing to local net on remote interface, stuffed routing, deny
#
ipchains -A output -i $extint -s 0.0.0.0/0 -d $intnet -l -j REJECT

# outgoing from local net on remote interface, stuffed masquerading, deny
#
ipchains -A output -i $extint -s $intnet -d 0.0.0.0/0 -l -j REJECT

# anything else outgoing on remote interface is valid
#
ipchains -A output -i $extint -s $extip/32 -d 0.0.0.0/0 -j ACCEPT

# loopback interface is valid.
#
ipchains -A output -i lo -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT

# catch all rule, all other outgoing is denied and logged. pity there is no
# log option on the policy but this does the job instead.
#
ipchains -A output -s 0.0.0.0/0 -d 0.0.0.0/0 -l -j REJECT

#############################################################################
# Forwarding, flush and set default policy of deny. Actually the default policy
# is irrelevant because there is a catch all rule with deny and log.
#
ipchains -F forward
ipchains -P forward DENY

# Masquerade from local net on local interface to anywhere.
#
ipchains -A forward -i $extint -s $intnet -d 0.0.0.0/0 -j MASQ
#
# catch all rule, all other forwarding is denied and logged. pity there is no
# log option on the policy but this does the job instead.
#
ipchains -A forward -s 0.0.0.0/0 -d 0.0.0.0/0 -l -j REJECT

IPCHAINS를 사용하면, 여러분은 "input", "output", "forward" 규칙을 통해서 특정 사이트와의 통신을 제한할 수 있다. 각 정책 명령들은 위에서부터 아래로 읽혀지고, "-A" 는 기존의 정책에 "덧붙인다"는 것을 유념한다. 그러므로, 특정한 제한 사항은 전반적인 정책보다 앞에 와야 한다. 예를 들면:

"input" 규칙: 가장 빠르지만 제한은 내부의 컴퓨터들에게만 적용된다. 방화벽 컴퓨터 자체는 여전히 "금지된" 사이트에 접속할 수 있다. 물론 여러분은 이것들을 조합해서 사용할 수도 있다.

/etc/rc.d/rc.firewall 정책 화일 중에서:

... start of "input" rules ...

# reject and log local interface, local machines going to 204.50.10.13
#
/sbin/ipfwadm -I -a reject -V 192.168.0.1 -S 192.168.0.0/24 -D 204.50.10.13/32 -o

# local interface, local machines, going anywhere is valid
#
/sbin/ipfwadm -I -a accept -V 192.168.0.1 -S 192.168.0.0/24 -D 0.0.0.0/0

... end of "input" rules ...

"output"을 사용하면, 패킷들이 마스커레이딩을 먼저 통과하기 때문에 속도는 가장 느리지만, 방화벽 컴퓨터 자체도 금지된 사이트에 접속할 수 없다.

... start of "output" rules ...

# reject and log outgoing to 204.50.10.13
#
/sbin/ipfwadm -O -a reject -V $ppp_ip -S $ppp_ip/32 -D 204.50.10.13/32 -o

# anything else outgoing on remote interface is valid
#
/sbin/ipfwadm -O -a accept -V $ppp_ip -S $ppp_ip/32 -D 0.0.0.0/0

... end of "output" rules ...

"forward"를 사용하면, "input"을 사용한 것보다는 조금 더 느리고 역시 마스커레이드 되는 (내부의) 컴퓨터들만 제한하고 방화벽 컴퓨터 자체는 금지된 사이트에 접속할 수 있다.

... start of "forward" rules ...

# Reject and log from local net on PPP interface to 204.50.10.13.
#
/sbin/ipfwadm -F -a reject -W ppp0 -S 192.168.0.0/24 -D 204.50.10.13/32 -o

# Masquerade from local net on local interface to anywhere.
#
/sbin/ipfwadm -F -a masquerade -W ppp0 -S 192.168.0.0/24 -D 0.0.0.0/0

... end of "forward" rules ...

192.168.0.0/24가 204.50.11.0로 접속할 수 있도록 허용하기 위해 특별한 정책이 필요하지는 않다. 전반적인 정책에 포함되어 있기 때문이다.

IPFWADM와는 다르게, 위의 정책화일에서 인터페이스를 구성하는 방법은 오직 한가지 뿐이다. IPCHAINS는 "-i eth0" 옵션을 사용한다. "-V"는 IPFWADM의 방법으로 IPCHAINS와의 호환을 위해서 사용된 것이고, IPFWADM만을 사용한다면 전적으로 사용자의 선택이다.

6.6 여러개의 내부 네트웍을 IP 마스커레이딩하는 법

여러개의 내부 네트웍을 마스커레이딩하는 것이 매우 간단하다. 우선 내부와 외부의 모든 네트웍이 제대로 동작하는지 확인해야 한다. 그런 후에 네트웍 트래픽이 내부의 다른 컴퓨터들에게도 전달되고 인터넷으로 마스커레이딩되도록 만들어야 한다.

다음으로, 내부의 인터페이스에 마스커레이딩을 사용가능하도록 해줘야 한다. 이 예는 eth1 (192.168.0.1)와 eth2 (192.168.1.1)의 두개의 내부 인터페이스가 외부로 향하는 eth0 인터페이스로 마스커레이딩되도록 설정하는 것이다. rc.firewall 정책화일에 다음 내용을 추가한다:

6.7 IP 마스커레이드와 전화 접속

  1. 인터넷에 연결하기 위해서 자동으로 전화 접속을 하도록 설정하고자 한다면, Diald를 사용한 전화걸기나 PPPd의 새 버젼을 사용하는 것이 좋을 것이다. 구성이 더 나은 Diald를 사용하는 것을 권장한다.

  2. Diald를 설정하기 위해서는, Setting Up Diald for Linux PageTrinityOS - Section 23를 살펴보기 바란다.

  3. 일단 Diald와 IP 마스커레이딩이 제대로 설정되고 나면, 마스커레이드되는 클라이언트들이 웹이나 telnet, ftp등의 접속을 하려고 하면 리눅스 box가 자동으로 인터넷 연결을 할 것이다.

  4. 처음 접속 때는 시간 초과가 있을 수도 있는데, 아날로그 모뎀을 사용한다면 어쩔 수 없다. 모뎀 자체의 접속과 PPP 접속을 위한 시간 때문에, 클라이언트 프로그램들(웹 브라우저 등)이 시간 초과를 일으킬 수 있다. 하지만 늘 그런 것은 아니다. 만약 이런 현상이 일어나면, 단지 재시도(이를테면, 웹 페이지를 다시 보기)를 하면 그 다음부터는 잘 동작할 것이다. 또는, echo "1" > /proc/sys/net/ipv4/ip_dynaddr라고 커널에 옵션을 주어서 이러한 초기 설정에 관한 것을 해결할 수도 있다.

6.8 IPPORTFW, IPMASQADM, IPAUTOFW, REDIR, UDPRED 등과 기타의 포트 포워딩 도구들

IPPORTFW, IPAUTOFW, REDIR, UDPRED 등과 기타 다른 프로그램들은 리눅스 IP 마스커레이드를 위한 일반적은 TCP또는 UDP 포트 포워딩 도구들이다. 이러한 도구들은 일반적으로, 현재의 FTP, Quake 등을 위한 특정한 IP 마스커레이드 모듈들과 함께 사용되거나 대체해서 사용된다. 포트 포워딩 도구들을 사용하면, 인터넷으로부터 오는 접속들을, IP 마스커레이딩 뒤에서 내부 주소만 가지고 있는 컴퓨터로 전달해 줄 수 있다. 이러한 포워딩 기능은 TELNET, WWW, SMTP, FTP (특별한 패치를 필요로 한다 - 아래를 볼 것), ICQ 와 다른 많은 네트웍 프로토콜들을 처리할 수 있다.

주의: 만약 IP 마스커레이딩 없이 단지 포트 포워딩만을 하길 원한다 해도, 여전히 커널과 IPFWADM나 IPCHAINS 정책 내에 IP 마스커레이딩 기능을 추가하고서 리눅스의 포트 포워딩 도구들을 사용해야 한다.

그러면 이것들의 차이는 무엇인가? IPAUTOFW, REDIR와 UDPRED(모든 URL들은 2.0.x-Requirements 섹션에 있다)등은 IP 마스커레이드 사용자가 이 기능을 사용하기 위해서 필요한 초기의 도구들이었다. 시간이 흐르고, 리눅스 IP 마스커레이드가 발전하면서, 이 도구들은 더 지능적인 해결책인 IPPORTFW로 대체되었다. 새로운 도구들을 사용가능하게 되었기 때문에, IPQUTOFW와 REDIR와 같은 예전의 도구들을 사용하는 것은 *매우 바람직하지 않다*. 이들은 커널과 함께 제대로 동작하지 못하거나 심지어 여러분의 리눅스 서버를 파괴할 수도 있다.

2.0.x 버젼의 IPPORTFW나 2.2.x 버젼의 IPMASQADM을 IPPORTFW와 함께 사용하기 전에, 다른 포트 포워딩 도구들을 사용하면 네트웍 보안 문제를 일으킬 수 있다. 그 이유는 이러한 도구들은 TCP/UDP 포트를 포워딩하기 위해서 기본적으로 패킷 방화벽에 구멍을 만들기 때문이다. 이것이 리눅스 머신에 위협을 주지는 않지만, 패킷이 포워딩되는 내부의 컴퓨터에게는 문제가 될 수도 있다. 큰 문제는 아니지만, IPPORTFW의 제작자인 Steven Clarke은 다음과 같이 말한다:

        "해당하는 IPFWADM/IPCHAINS 정책에 들어맞도록, 포트 포워딩은 
        마스커레이딩 함수에서만 불려진다. 마스커레이딩은 IP 포워딩으로 
        확장된다. 그래서, ipportfw는 입력과 ipfwadm 정책 모두에 들어맞는 
        패킷만을 볼 수 있다."

이러한 이유로, 강력한 방화벽 정책을 사용하는 것이 중요하다. 강력한 방화벽 정책에 대한 자세한 것은 Strong-IPFWADM-RulesetsStrong-IPCHAINS-Rulesets 섹션을 참조하기 바란다.

이제, IPPORTFW 포워딩을 2.0.x나 2.2.x 커널에 사용하기 위해서는, 리눅스 커널이 IPPORTFW를 지원하도록 재컴파일해야 한다.

2.0.x 커널에서 IPPORTFW 사용

우선, /usr/src/linux 디렉토리에 가장 최신의 2.0.x 커널이 존재하는지 확인한다. 만약 없다면, Kernel-Compile 섹션에서 자세한 사항을 참조한다. 다음으로, 2.0.x-Requirements 섹션에서 "ipportfw.c" 프로그램과 "subs-patch-x.gz" 커널 패치를 다운로드해서 /usr/src/ 디렉토리에 압축을 푼다.

주의: "subs-patch-x.gz"의 화일명에서 "x"는 그 사이트에서 구할 수 있는 가장 최신의 버젼으로 대치한다.

이제, IPPORTFW 패치(subs-patch-x.gz)를 리눅스 디렉토리로 복사한다.

        cp /usr/src/subs-patch-1.37.gz /usr/src/linux

다음에, IPPORTFW 커널 옵션을 생성하기 위해서 커널 패치를 한다:

        cd /usr/src/linux
        zcat subs-patch-1.3x.gz | patch -p1

다음으로, FTP 접속을 내부의 서버로 포트 포워딩하고자 한다면, 2.0.x-Requirements 섹션에서 구할 수 있는 새로운 IP_MASQ_FTP 모듈 패치를 해야 한다. 자세한 사항은 이 섹션의 나중 부분에 나와 있다.

자, Kernel-Compile 섹션에 있는 것처럼 커널을 컴파일할 차례이다. 커널을 설정하는 단계에서 IPPORTFW 옵션에 YES라고 하도록 한다. 일단 컴파일이 끝나고 새로운 커널로 리부트하고 나면, 다시 이 섹션으로 돌아온다.

이제 새로 컴파일한 커널을 사용해서, 실제의 "IPPORTFW" 프로그램을 컴파일하고 설치한다.

        cd /usr/src
        gcc ipportfw.c -o ipportfw
        mv ipportfw /usr/local/sbin

이제, 예를 들어서 모든 웹 접속(포트 80)을 마스커레이드되는 내부의 머신 중에서 192.168.0.10을 주소로 같은 머신으로 포워드하려 한다고 하자.

주의: 일단 포트 80을 포트 포워딩하면, 리눅스 IP 마스커레이드 서버는 그 포트를 더이상 사용하지 못한다. 더 구체적으로, 만약 여러분이 마스커레이드 서버에 이미 웹 서버를 운영하고 있고 포트 80을 내부의 마스커레이드되는 컴퓨터로 포트 포워딩한다면, 모든 인터넷 사용자들은 IP 마스커레이드 서버에서 보내는 페이지가 아닌 -내부의- 웹 서버에서 보내는 페이지를 볼 것이다. 이를 해결하기 위한 유일한 방법은 예를 들어 8080과 같은 다른 포트를 내부의 마스커레이드되는 머신으로 포트 포워딩하는 것이다. 이렇게 하면 되긴 하지만, 모든 인터넷 사용자들은 내부의 마스커레이드되는 웹 서버에 접속하기 위해서 URL에 :8080을 덧붙여야 한다.

어쨌든, 포트 포워딩을 사용하기 위해서는, /etc/rc.d/rc.firewall 정책화일을 편집한다. 다음에 있는 내용을 추가하되, "$extip"는 여러분의 인터넷 IP 주소로 대치한다.

주의: 만약 여러분이 ISP 로부터(PPP, ADSL, 케이블 모뎀, 기타 등등) 동적 TCP/IP 주소를 받아서 사용한다면, /etc/rc.d/rc.firewall 정책화일을 더 지능적으로 만들어야 할 것이다. 강력한 정책들과 동적 IP 주소에 관한 자세한 사항은 TrinityOS - Section 10을 참조하기 바란다.

        /etc/rc.d/rc.firewall
        --

        #echo "Enabling IPPORTFW Redirection on the external LAN.."
        #
        /usr/local/sbin/ipportfw -C
        /usr/local/sbin/ipportfw -A -t$extip/80 -R 192.168.0.10/80

        --

자 이제 됐다! /etc/rc.d/rc.firewall 정책화일을 다시 실행시키고 시험해 보자!

만약에 "ipfwadm: setsockopt failed: Protocol not available" 라는 에러 메시지를 보게 된다면, 새로 컴파일한 커널을 사용하고 있지 않는 것이다. 새로운 커널을 제대로 된 위치에 옮겨 놓았는지, LILO를 재 실행했는지 확인하고 다시 한번 리부트한다.

FTP 서버의 포트 포워딩:

FTP를 내부의 머신으로 포트 포워딩하고자 한다면, 일이 좀 더 복잡해진다. 그 이유는 표준의 IP_MASQ_FTP 커널 모듈이 이러한 목적으로 만들어져 있지 않기 때문이다. 다행히 Fred Viles가 이러한 목적으로 동작하도록 수정된 IP_MASQ_FTP 모듈을 작성했다. 정확히 무엇이 문제인지 알고 싶다면, Fred가 문서를 매우 잘 작성해 놓았으니 그것을 다운로드해 보기 바란다. 이 패치는 다소 실험적인 면이 있다는 것도 알아두기 바란다. 또한 현재 이 패치는 2.0.x 커널용에서만 사용할 수 있다는 것도 알아두기 바란다. 2.2.x 커널로의 포팅도 어느 정도 이루어져 있지만, 여기에 도움을 주고 싶다면 Fred Viles - fv@episupport.com로 직접 이메일을 보내기 바란다.

이제 다음 과정을 거쳐서 2.0.x 패치를 한다:

다 됐으면, /etc/rc.d/rc.firewall 정책화일을 편집해서 다음 내용을 추가하되 "$extip"는 여러분의 인터넷 IP 주소로 대치한다.

주의: 만약 여러분이 ISP 로부터(PPP, ADSL, 케이블 모뎀, 기타 등등) 동적 TCP/IP 주소를 받아서 사용한다면, /etc/rc.d/rc.firewall 정책화일을 더 지능적으로 만들어야 할 것이다. 강력한 정책들과 동적 IP 주소에 관한 자세한 사항은 TrinityOS - Section 10을 참조하기 바란다.

이 예는 위에서와 같이 모든 FTP 접속(포트 21)을 내부의 마스커레이드되는 머신 중 192.168.0.10의 주소를 갖는 머신으로 포트 포워딩할 것이다.

주의: 일단 포트 21을 포트 포워딩하면, 리눅스 마스커레이드 서버는 그 포트를 더 이상 사용하지 못할 것이다. 더 구체적으로, 만약 리눅스 마스커레이드 서버에 이미 FTP 서버를 운영하고 있다면, 모든 인터넷 사용자의 FTP 접속은 IP 마스커레이드 서버가 아니라 -내부의- FTP 서버로 갈 것이다.

        /etc/rc.d/rc.firewall
        --

        #echo "Enabling IPPORTFW Redirection on the external LAN.."
        #
        /usr/local/sbin/ipportfw -C
        /usr/local/sbin/ipportfw -A -t$extip/21 -R 192.168.0.10/21

        --

자 이제 됐다! /etc/rc.d/rc.firewall 정책화일을 다시 실행시키고 시험해 보자!

만약에 "ipchains: setsockopt failed: Protocol not available" 라는 에러 메시지를 보게 된다면, 새로 컴파일한 커널을 사용하고 있지 않는 것이다. 새로운 커널을 제대로 된 위치에 옮겨 놓았는지, LILO를 재 실행했는지 확인하고 다시 한번 리부트한다. 새로운 커널을 사용하고 있는 것이 확실하다면, "ls /proc/net"이라고 명령해서 "ip_portfw" 화일이 있는지 확인한다. 없다면, 커널을 설정하는 단계에서 무엇인가 빠트렸을 것이다. 커널을 다시 만든다.

2.2.x 커널에서 IPPORTFW와 함께 IPMASQADM 사용

우선, /usr/src/linux 디렉토리에 최신의 2.2.x 커널이 있는지 확인한다. 없다면, Kernel-Compile 섹션에서 자세한 사항을 참조한다. 다음으로, 2.2.x-Requirements 섹션에서 "ipmasqadm.c" 프로그램을 다운로드해서 /usr/src/ 디렉토리에 넣는다.

다음으로, Kernel-Compile 섹션에 있는 것과 같이 2.2.x 커널을 컴파일해야 한다. 커널을 설정하는 단계에서 IPPORTFW 옵션에 YES 라고 한다. 일단 커널을 컴파일해서 리부트한 후에 이 섹션으로 돌아온다.

이제, IPMASQADM 도구를 컴파일하고 설치한다:

        cd /usr/src
        tar xzvf ipmasqadm-x.tgz
        cd ipmasqadm-x
        make
        make install

이제, 예를 들어서 모든 웹 접속(포트 80)을 내부의 마스커레이드되는 머신중에서 192.168.0.10을 주소로 갖는 머신으로 포트 포워딩한다고 하자.

주의: FTP 접속을 포트 포워딩하기 위해서 수정된 IP_MASQ_FTP 모듈이 현재로는 2.2.x 커널에서 동작하지 않을 지도 모른다. 하지만 이를 시험해 보고 싶다면, 이 모듈을 2.2.x 커널용으로 포팅해 보라. 그리고 Ambrose 와 David에게 여러분의 결과물을 메일로 보내 주기 바란다.

주의: 일단 포트 80을 포트 포워딩하고 나면, 리눅스 IP 마스커레이드 서버는 그 포트를 사용하지 못한다. 더 구체적으로, 만약 마스커레이드 서버에 이미 웹 서버를 운영하고 있다면, 모든 인터넷 사용자들은 여러분의 IP 마스커레이드 서버가 아닌 -내부의- 웹 서버에서 웹 페이지를 받아 볼 것이다.

어쨌든, 포트 포워딩을 하기 위해서는 /etc/rc.d/rc.firewall 정책 화일을 편집한다. 다음의 내용을 추가하되, "$extip"를 여러분의 인터넷 IP 주소로 대치한다.

주의: 만약 ISP로부터(PPP, ADSL, 케이블 모뎀, 기타 등등) 동적 TCP/IP 주소를 받아서 사용하고 있다면, /etc/rc.d/rc.firewall 정책화일을 좀더 지능적으로 만들 필요가 있다. 강력한 방화벽 정책과 동적 IP 주소에 관한 자세한 사항에 대해서는 TrinityOS - Section 10을 참조하기 바란다. 여기에 힌트를 한가지 제공한다: PPP 사용자들을 위한 /etc/ppp/ip-up 화일.

        /etc/rc.d/rc.firewall
        --

        #echo "Enabling IPPORTFW Redirection on the external LAN.."
        #
        /usr/sbin/ipmasqadm portfw -f
        /usr/sbin/ipmasqadm portfw -a -P tcp -L $extip 80 -R 192.168.0.10 80

        --

자 이제 됐다! /etc/rc.d/rc.firewall 정책화일을 다시 실행시키고 시험해 보자!

만약에 "ipchains: setsockopt failed: Protocol not available" 라는 에러 메시지를 보게 된다면, 새로 컴파일한 커널을 사용하고 있지 않는 것이다. 새로운 커널을 제대로 된 위치에 옮겨 놓았는지, LILO를 재 실행했는지 확인하고 다시 한번 리부트한다. 새로운 커널을 사용하고 있는 것이 확실하다면, "ls /proc/net/ip_masq"라고 명령해서 "portfw" 화일이 있는지 확인한다. 없다면, 커널을 설정하는 단계에서 무엇인가 빠트렸을 것이다. 커널을 다시 만든다.

6.9 CU-SeeMe와 리눅스 IP 마스커레이드

리눅스 IP 마스커레이드는 "ip_masq_cuseeme" 커널 모듈을 통해서 CuSeeme를 지원한다. 이 커널 모듈은 /etc/rc.d/rc.firewall 스크립트에서 메모리에 적재되어야 한다. 일단 "ip_masq_cuseeme" 모듈일 설치되면, 원격의 reflector들이나 사용자들에게 접속 신호를 보내거나 접속을 받아들일 수 있게 된다.

주의: CuSeeme를 사용하기 위해서는 예전의 IPAUTOFW 도구 대신에 IPPORTFW 도구를 사용할 것을 권장한다.

CuSeeme를 설정하는 데 있어서 더 확실한 정보가 필요하다면, Michael Owings's CuSeeMe page에서 미니-하우투를 보거나 The IP Masquerade Resources에서 미니-하우투의 미러 페이지를 볼 수 있을 것이다.

6.10 Mirabilis ICQ

리눅스 마스커레이드 서버의 뒤에서 ICQ를 사용하는 방법은 두가지가 있다. 한가지 방법은 새로운 ICQ 마스커레이드 모듈을 사용하는 것이고, 다른 한가지는 IPPORTFW를 사용하는 것이다.

ICQ 모듈은 몇가지 이득과 함께 제한도 있다. 이 모듈은 간단한 설정으로 마스커레이드 서버 뒤에서 여러명이 ICQ를 사용할 수 있게 한다. ICQ 클라이언트에서 특별한 설정을 필요로 하지도 않는다. 그러나, 현재는 화일 전송과 실시간 채팅이 되지 않는다.

IPPORTFW를 설정해서 사용하면, 마스커레이드 서버와 ICQ 클라이언트 모두에 몇가지 설정을 변경시켜줘야 하지만, ICQ의 메시지 기능, URL 기능, 채팅, 화일 전송 등 모든 것이 동작할 것이다.

Andrew Deryabin의 djsf@usa.net 2.2.x 커널을 위한 ICQ IP 마스커레이드 모듈에 관심이 있다면, 2.2.x-Requirements 섹션에서 자세한 사항을 확인하기 바란다.

마스커레이드 서버 뒤에서 ICQ를 사용하기 위해 다소 고전적인 방법을 쓰길 원한다면 다음과 같이 한다:

6.11 게임: LooseUDP 패치

LooseUDP 패치는, 일반적으로 리눅스 IP 마스커레이드 서버 뒤에서 동작하면서 UDP 접속을 사용하는, NAT와 잘 동작하는 게임들을 할 수 있도록 해 준다. 현재, LooseUDP는 2.0.36이상의 커널에 패치로서 제공되고 2.2.3이상의 커널에는 이미 자체 포함되어 있다. 이를 사용하기 위해서는, 몇가지 일만 해주면 된다:

이제, LooseUDP 패치를 /usr/src/linux 디렉토리에 넣는다. 그 다음에 다음과 같이 명령한다:

압축된 패치 화일일 때: zcat loose-udp-2.0.36.patch.gz | patch -p1

압축되지 않는 패치 화일일 때: cat loose-udp-2.0.36.patch | patch -p1

이제, "patch" 프로그램의 버젼에 따라서, 다음과 같은 메시지를 볼 것이다:

patching file `CREDITS'
patching file `Documentation/Configure.help'
patching file `include/net/ip_masq.h'
patching file `net/ipv4/Config.in'
patching file `net/ipv4/ip_masq.c'

패치의 제일 처음에서만 "Hunk FAILED"라는 메시지를 보게 된다면, 심각한 문제는 아니다. 아마도 오래된 패치 화일일 테지만 동작할 것이다. 하지만 만약 패치가 완전히 실패한다면, IPPORTFW 커널 패치를 "먼저" 적용했는지 확인해 본다.

패치가 설치되면, Kernel-Compile 섹션에 나와 있는 대로 커널을 재구성하고 "IP: loose UDP port managing (EXPERIMENTAL) (CONFIG_IP_MASQ_LOOSE_UDP) [Y/n/?]" 옵션에서 "Y"라고 한다.

일단 LooseUDP 기능이 추가된 새 커널을 사용하면, NAT와 잘 동작하는 게임들은 잘 동작할 것이다. BattleZone이나 다른 게임들을 NAT와 잘 동작하도록 해 주는 패치들을 구할 수 있는 몇가지 URL들이 있다. 자세한 사항은 Game-Clients 섹션을 참조한다.


다음 이전 차례