Ô×÷Õߣº David Whitmarsh
±àÒ룺ideal
´«Í³·À»ðǽºÍÍøÇÅʽ·À»ðǽÓÐÊ²Ã´Çø±ðÄØ£¿Í¨³£Ò»¸ö·À»ðǽÏóÒ»¸ö·ÓÉÆ÷Ò»Ñù¹¤×÷£ºÄÚ²¿ÏµÍ³±»ÉèÖÃΪ½«·À»ðǽ¿´×öÊÇͨÏòÍâ²¿ÍøÂçµÄÍø¹Ø£¬²¢ÇÒÍⲿµÄ·ÓÉÆ÷±»ÉèÖÃΪ½«·À»ðǽ¿´×öÊÇÁ¬ÍùÄÚ²¿±»±£»¤µÄÍøÂçµÄÍø¹Ø¡£Ò»¸öÍøÇÅÔòÊÇÒ»¸öÁª½áÒ»¸ö»ò¶à¸öÍø¶ÎµÄÉ豸£¬ÔÚ¸÷¸öÍø¶ÎÖ®¼äת·¢Êý¾Ý£¬¶øÍøÂçÖÐÆäËûÉ豸²¢²»»á¸Ð¾õµ½´æÔÚÒ»¸öÍøÇÅ¡£»»¾ä»°Ëµ£¬Ò»¸ö·ÓÉÆ÷½«Á½¸öÍøÂçÁ¬½ÓÔÚÒ»Æð£¬ÔÚÁ½ÕßÖ®¼ä´«ÊäÊý¾Ý£»Ò»¸öÍøÇÅÔò¸üÏóÒ»¶ÎÍøÏߣ¬½«Ò»¸öÍøÂçµÄÁ½¸ö²¿·ÖÁ¬½ÓÔÚÒ»Æð¡£Ò»¸öÍøÇÅ·À»ðǽÔòÏóÍøÇÅÒ»Ñù¹¤×÷£¬¶ø²»±»Á½¶ËÉ豸·¢ÏÖ£¬µ«ÊÇͬÑù¾ßÓйýÂËͨ¹ýËüµÄÊý¾Ý°üµÄ¹¦ÄÜ¡£
Ϊʲô»áÐèҪʵÏÖÍøÇÅʽ·À»ðÇ½ÄØ£¿Ò»°ãÓÐÒÔϼ¸¸öÔÒò£º
* Äã¿ÉÒÔÔÚÍøÂçÖÐÌí¼ÓÒ»¸ö·À»ðǽ¶ø²»ÐèÒªÐÞ¸ÄÍøÂçÖÐÈκÎÉ豸µÄ²ÎÊý¡£
* Äã¿ÉÄÜÏ£Íû±£»¤ÍøÂçµÄijһ¸ö²¿·Ö¶øÈ´Ã»ÓÐȨÀû¿ØÖÆÍⲿ·ÓɵIJÎÊýÐÅÏ¢¡£
ÎÒÓöµ½µÄÎÊÌâ
Îҵİ칫ÊÒÊÇÒ»¸öADSLÁ¬½Óµ½Demon»¥ÁªÍø£¬Í¬Ê±ÓÐ16¸öIPµØÖ·µÄ×ÓÍø¿É¹©Ê¹Óá£ÒòΪӢ¹úISPµÄÌØÊâÔÒò£¬Ïß·ºÍ·ÓÉÆ÷ÊÇÓÉÓ¢¹úµçÐŹ«Ë¾°²×°ºÍÓµÓУ¬Òò´ËÎÒÃÇÓÐȨÀûÅäÖÃÍⲿ·ÓÉÆ÷À´Ö¸¶¨ËÊÇÄÚ²¿ÍøÂçµÄÍø¹Ø£¬ÕâÑùÎÒÖ»ÓÐÁ½ÖÖÑ¡Ôñ£º
* Ö±½Ó½«Ã¿Ì¨Ö÷»úºÍADSL·ÓÉÆ÷ÏàÁ¬½Ó£¬²¢ÇÒ¶ÀÁ¢µØÎªÃ¿Ì¨Ö÷»úʹÓÃiptablesÀ´ÉèÖ÷À»ðǽ¹æÔò¡£
* ÁíÍâÒ»ÖÖÑ¡ÔñÊÇʹÓÃNAT¹¦ÄܵķÀ»ðǽÀ´´ø¶¯ÄÚ²¿ÍøÂç·ÃÎÊ»¥ÁªÍø¡£
µÚÒ»ÖÖ·½·¨ÊDz»¿É½ÓÊܵģ¬ÒòΪÕâÑù½«´ó´óÔö¼Ó³ö´íºÍϵͳ¹ÜÀí¿ªÏú¡£µÚ¶þÖÖ·½·¨Ò²ÓÅȱµã£¬ËäÈ»´ó¶àÊýÓ¦Óö¼Äܱ»NAT·½Ê½Ö§³Ö£¬µ«ÊÇÒ²ÓÐÀýÍ⣬ÀýÈçÊÓÆµÁ÷ºÍVPNµÈµÈ¡£Ò»¸öÍøÇÅ·À»ðǽÔòÄܽâ¾öÕâЩÎÊÌ⣬·À»ðǽÄܼÜÉèÔÚADSL·ÓÉÆ÷ºÍÄÚ²¿ÍøÂçÖ®¼äÀ´±£»¤ÍøÂ磬µ«Í¬Ê±²»ÐèÒªÐÞ¸ÄÅäÖá£×îºóÒ»¸öÕϰÊÇÔÚ±ê×¼µÄLinuxÄÚºËÖÐÍêÈ«ÅÔ·ÁËiptables£¬Òò´ËÄãÄÜʹÓÃÍøÇÅ»òÕßÊÇiptables·À»ðǽ£¬µ«ÊDz»ÄÜͬʱʹÓøù¦ÄÜ¡£
½â¾ö·½°¸
ÐÒÔ˵ÄÊÇ£¬ÓÐÒ»¸öÏîĿרÃÅʵÏÖÖ§³ÖiptablesµÄÍøÇÅ£¬Òò´ËÈκδ©¹ýÍøÇŵÄÊý¾Ý°ü¿ÉÒÔ±»µÝ½»¸øiptables¹æÔò½øÐйýÂË´¦Àí¡£½á¹ûÊÇ·À»ðǽ¿ÉÒÔÊÇÍêȫ͸Ã÷ÓÚÍøÂçµÄ£¬²»ÐèÒªÌØÊâµÄ·Óɹ¦ÄÜ¡£¾Í»¥ÁªÍø¶øÑÔ£¬·À»ðǽ²¢²»´æÔÚ£¬³ýÁËÌØ¶¨µÄÁ¬½Ó±»×èÈû¡£ÍøÇÅÈí¼þÊÇÒ»¸öÄں˲¹¶¡À´Ö§³ÖÒÑÓеÄÍøÇÅ´úÂë¿ÉÒÔÁ¬Í¬iptablesÒ»Æð¹¤×÷¡£·½±ãµÄÊÇ¿ª·¢ÕßÒÑ¾ÖÆ×÷ÁËRPMÐÎʽµÄÖ§³ÖÍøÇÅ·À»ðǽµÄÄںˡ£µ«²»·½±ãµÄÊÇÏà¹ØÎĵµÌ«ÉÙ£¬Òò´Ë¸ÃÎÄÕ¾ÍÊǰïÖúÄÇЩϣÍûʵÏÖÍøÇÅʽ·À»ðǽµÄÈËÃÇ¡£
ÇŽӺÍ·ÓÉ - ÊÇÈçºÎ¹¤×÷µÄ
¼òµ¥µÄ˵£¬LinuxÍøÇÅʵÏÖÒ»°ãÊÇÔÚ¾ßÓÐÒ»¸ö»ò¶à¸öÍøÂç½Ó¿ÚµÄÉ豸ÉÏʵÏֵģ¬Í¨¹ý¼ì²â¶à¸öÍø¶ÎµÄ»î¶¯ÐÔ£¬ÇŽӴúÂëѧϰµ½ÄĸöMACµØÖ·´ÓÄĸö½Ó¿Ú¿ÉÒÔµ½´ï£¬²¢ÇÒʹÓøÃÐÅÏ¢À´ÅжÏÊÇ·ñÒªÖмÌÒ»¸öÊý¾Ý°üµ½ÁíÍâÒ»¸öÍø¶Î¡£ÍøÇŽӿڱ¾ÉíÊÇûÓзÖÅäIPµØÖ·µÄ£¬µ«ÊÇÕû¸öÍøÇű»ÅäÖÃ×÷Ϊ·À»ðǽµÄµ¥¸ö½Ó¿Ú¡£

´ÓÉÏͼ¿ÉÒÔ¿´µ½£¬ÔÚÇŽÓÇé¿öÏÂÄ¿µÄµØÖ·ÎªÇÅÉ豸±¾ÉíµÄÊý¾ÝÐèÒª¾¹ýfilter±íµÄINPUT¹æÔòÁ´ºÍmangle±íµÄPREROUTING¹æÔòÁ´£»´ÓÇÅÉ豸×ÔÉí·¢³öµÄÊý¾ÝÐèÒª¾¹ýfilter±íµÄOUTPUT¹æÔòÁ´ºÍmangle±íµÄPREROUTING¹æÔòÁ´£»¶øÁ÷¾ÇÅÉ豸µÄÊý¾ÝÔòÒª·Ö±ð¾¹ýmangle±íµÄPREROUTING¹æÔòÁ´ºÍfilter±íµÄFORWARD¹æÔòÁ´ºÍmangle±íµÄPOSTROUTING¹æÔòÁ´¡£
ÍøÂçÍØÆÓ
ÎÒ·ÖÅäµÃµ½µÄ¾²Ì¬IPµØÖ··¶Î§Îªxxx.xxx.xxx.48-63£¬Ò²¾ÍÊÇ×ÓÍøÑÚÂëΪ255.255.255.240¡£ÎÒ¾ö¶¨½«Õû¸öIP·Ö¸îΪÁ½¸öÍø¶Î£ºxx.xxx.xxx.48-56ÓÃÓÚ·À»ðǽÒÔÍ⣬Õâ°üÀ¨ADSL·ÓÉÆ÷×ÔÉíµÄIPµØÖ· (xxx.xxx.xxx.49)£»xxx.xxx.xxx.57-62ÓÃÔÚ·À»ðǽ֮ºó²¿·Ö¡£ÐèҪעÒâµÄÊÇÕâ²¢²»ÊÇÕæÕýµÄ×ÓÍø»®·Ö£¬ÒòΪËüÃÇÊÇÓÐÍøÇŶø²»ÊÇ·ÓÉÆ÷Á¬½ÓµÄ¡£

·À»ðǽ¹æÔò
·À»ðǽ¹æÔò¶¨ÒåÈçÏ£º
#!/bin/sh
#
# rc.firewall - Initial SIMPLE IP Firewall test script for 2.4.x
#
# Author: David Whitmarsh
# (c) 2001, 2002 Sparkle Computer Co ltd.
# based on rc.firewall by Oskar Andreasson
# parts (c) of BoingWorld.com, use at your own risk,
# do whatever you please with
# it as long as you don't distribute this without due credits to
# BoingWorld.com and Sparkle Computer Co Ltd
#
###########
# Configuration options, these will speed you up getting this script to
# work with your own setup.
#
# your LAN's IP range and localhost IP. /24 means to only use the first 24
# bits of the 32 bit IP adress. the same as netmask 255.255.255.0
#
# BR_IP is used to access the firewall accross the network
# For maxium security don't set one up - but then you must do
# everything directly on the firewall.
BR_IP="xxx.xxx.xxx.57"
BR_IFACE=br0
LAN_BCAST_ADDRESS="xxx.xxx.xxx.63"
INTERNAL_ADDRESS_RANGE="xxx.xxx.xxx.56/29"
INET_IFACE="eth1"
LAN_IFACE="eth0"
LO_IFACE="lo"
LO_IP="127.0.0.1"
IPTABLES="/sbin/iptables"
#########
# Load all required IPTables modules
#
#
# Needed to initially load modules
#
/sbin/depmod -a
#
# Adds some iptables targets like LOG, REJECT
#
/sbin/modprobe ipt_LOG
/sbin/modprobe ipt_REJECT
#
# Support for connection tracking of FTP and IRC.
#
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_conntrack_irc
#
# Take down the interfaces before setting up the bridge
#
ifdown $INET_IFACE
ifdown $LAN_IFACE
ifconfig $INET_IFACE 0.0.0.0
ifconfig $LAN_IFACE 0.0.0.0
# Clean up for a restart
$IPTABLES -F
$IPTABLES -X
#
# Set default policies for the INPUT, FORWARD and OUTPUT chains
#
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD DROP
# Our interfaces don't have IP addresses so we have to start with the mangle
# PREROUTING table
$IPTABLES -t mangle -P PREROUTING DROP
# Now we are pretty secure, let's start the bridge
# This will create a new interface
brctl addbr $BR_IFACE
# and add the interfaces to it
brctl addif $BR_IFACE $INET_IFACE
brctl addif $BR_IFACE $LAN_IFACE
# make us visible to the network again (optional)
if [ "$BR_IP" != "" ] ; then
ifconfig $BR_IFACE $BR_IP
else
# otherwise we must at least bring the interface up for the bridge to work.
ifconfig $BR_IFACE up
fi
# Block obvious spoofs
$IPTABLES -t mangle -A PREROUTING -s 192.168.0.0/16 -j DROP
$IPTABLES -t mangle -A PREROUTING -s 10.0.0.0/8 -j DROP
$IPTABLES -t mangle -A PREROUTING -s 172.16.0.0/12 -j DROP
# Accept internal packets on the internal i/f
$IPTABLES -t mangle -A PREROUTING -i $LAN_IFACE -s $INTERNAL_ADDRESS_RANGE -j ACCEPT
# Accept external packets on the external i/f
$IPTABLES -t mangle -A PREROUTING -i $INET_IFACE ! -s $INTERNAL_ADDRESS_RANGE -j ACCEPT
#
# Accept the packets we actually want to forward
#
$IPTABLES -A FORWARD -p ALL -s $INTERNAL_ADDRESS_RANGE -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level 7 --log-prefix "IPT FORWARD packet died: "
#
# Create separate chains for ICMP, TCP and UDP to traverse
#
$IPTABLES -N icmp_packets
#
# ICMP rules
#
$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 0 -j ACCEPT # echo reply
$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 3 -j ACCEPT # dest unreachable
$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 5 -j ACCEPT # redirect
$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT # time exceeded
$IPTABLES -A FORWARD -p ICMP -j icmp_packets
#
# UDP ports
#
$IPTABLES -N udpincoming_packets
$IPTABLES -A udpincoming_packets -p UDP -s 0/0 --source-port 53 -j ACCEPT # DNS
$IPTABLES -A udpincoming_packets -p UDP -s 0/0 --source-port 123 -j ACCEPT # ntp
#$IPTABLES -A udpincoming_packets -p UDP -s 0/0 --source-port 2074 -j ACCEPT # speakfreely
#$IPTABLES -A udpincoming_packets -p UDP -s 0/0 --source-port 4000 -j ACCEPT #icq
$IPTABLES -A FORWARD -p UDP -j udpincoming_packets
#
$IPTABLES -N tcp_packets
#
# The allowed chain for TCP connections
#
$IPTABLES -N allowed
$IPTABLES -A allowed -p TCP --syn -j ACCEPT
$IPTABLES -A allowed -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A allowed -p TCP -j DROP
# TCP rules
#
#
# Bad TCP packets we don't want
#
$IPTABLES -A tcp_packets -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "New not syn:"
$IPTABLES -A tcp_packets -p tcp ! --syn -m state --state NEW -j DROP
$IPTABLES -A tcp_packets -p TCP -s 0/0 -d springfield.sparkle-cc.co.uk --dport 80 -j allowed # smtp
$IPTABLES -A tcp_packets -p TCP -s 0/0 -d lisa.sparkle-cc.co.uk --dport 6346 -j allowed # gnutella
$IPTABLES -A tcp_packets -p TCP -s 0/0 -d springfield.sparkle-cc.co.uk --dport 25 -j allowed # smtp
$IPTABLES -A FORWARD -p TCP -j tcp_packets
#
# Input to the firewall itself. Leave these out if you don't want the firewall
# to be visible on the network at all.
# Note that the PREROUTING restrictions above mean that only packets form inside
# the firewall can fulfill the source condition. So the firewall machine should not be
# visible to the internet.
#
$IPTABLES -A INPUT -p ALL -i $BR_IFACE -s $INTERNAL_ADDRESS_RANGE -d $LAN_BCAST_ADDRESS -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $BR_IFACE -s $INTERNAL_ADDRESS_RANGE -d $BR_IP -j ACCEPT
# But you *will* need this
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -d $LO_IP -j ACCEPT
$IPTABLES -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level 7 --log-prefix "IPT INPUT packet died: "
#
# OUTPUT chain
#
$IPTABLES -A OUTPUT -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "New not syn:"
$IPTABLES -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP
$IPTABLES -A OUTPUT -p ALL -s $LO_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $BR_IP -j ACCEPT
$IPTABLES -A OUTPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level 7 --log-prefix "IPT OUTPUT packet died: "
ÕâÀïµÄÑù±¾·À»ðǽ½Å±¾ÀàËÆÓÚ´«Í³µÄ·À»ðǽÉèÖã¬Õª³ÓÚOskar Andreasson's iptables tutorial
»ù±¾µÄ·À»ðǽ²ßÂÔΪ£º
1.×èÖ¹²»¿ÉÄܵÄIPµØÖ·µÄÊý¾Ý°ü¡£
2.ÔÊÐíËùÓзÀ»ðǽÄÚ²¿µ½ÍâÁ¬µÄÁ¬½Ó¡£
3.ÔÊÐíÊôÓÚÄÚ²¿µ½ÍⲿµÄÁ¬½ÓµÄ·´ÏòÊý¾Ý½øÈëÄÚ²¿ÍøÂç¡£
4.ÔÊÐíÍⲿÁ¬½Óµ½Ìض¨µÄÖ÷»úµÄÌØ¶¨¶Ë¿Ú¡£
±äÁ¿¶¨Òå
ΪÁ˱£Ö¤ÇåÎúÐԺͿÉά»¤ÐÔ£¬¶¨ÒåһЩ½Ó¿ÚÃûºÍIPµØÖ·×÷Ϊ±äÁ¿ÊǺܲ»´íµÄÏë·¨¡£Àý×ÓÖÐʹÓÃÁËÏÂÃæÕâЩÊý¾Ý£º
BR_IP="xxx.xxx.xxx.57"
BR_IFACE=br0
LAN_BCAST_ADDRESS="xxx.xxx.xxx.63"
INTERNAL_ADDRESS_RANGE="xxx.xxx.xxx.56/29"
INET_IFACE="eth1"
LAN_IFACE="eth0"
LO_IFACE="lo"
LO_IP="127.0.0.1"
"xxx.xxx.xxx"±íÊ¾ÍøÂçIPµÄǰÈý¸ö×ֶΡ£$INTERNAL_ADDRESS_RANGE±íʾÄÚ²¿ÍøÂçµÄIP·¶Î§¡£
ÉèÖÃÒ»¸öÇŽÓÉ豸
ΪÁËÉèÖÃÒ»¸öÍøÇÅ£¬ÎÒÃÇÐèÒª×öÒÔÏÂһЩ¹¤×÷¡£Ê×ÏÈÎÒÃÇÐèÒª¹Ø±ÕÍøÂç½Ó¿Ú²¢½«ÆäIPÉèÖÃÈ¥³ý£º
ifdown $INET_IFACE
ifdown $LAN_IFACE
ifconfig $INET_IFACE 0.0.0.0
ifconfig $LAN_IFACE 0.0.0.0
Èç¹ûÄã½ö½öÊÇͨ¹ýtelnet»òssh»á»°Ö´ÐÐÁËÕâЩÃüÁÄÇÊDz»ÐеĶøÓ¦¸Ãµ½Ö÷»úµÄ¿ØÖÆÌ¨À´½øÐвÙ×÷¡£ÏÂÒ»²½ÎÒÃÇ´´½¨Ò»¸öÇÅÉ豸£¬²¢ÎªÆäÖ¸¶¨ÒÔÌ«½Ó¿Ú£º
brctl addbr $BR_IFACE
brctl addif $BR_IFACE $INET_IFACE
brctl addif $BR_IFACE $LAN_IFACE
ÏÖÔÚÎÒÃǾͿÉÒÔÆô¶¯ÇŽÓÉ豸×÷Ϊһ¸öÄÚ²¿½Ó¿Ú£º
ifconfig $BR_IFACE $BR_IP
×èֹαװ
ÎÒÃÇ¿ÉÒÔÔÚmangel PREROUTING¹æÔòÁ´ÖÐ×èÈûαÔìµÄÊý¾Ý°ü¡£Í¨¹ýÔÚÕâÀï×èÈû£¬ÎÒÃÇͬʱ¿ÉÒÔ×¥»ñÁ÷ÈëºÍ±»×ª·¢µÄÊý¾Ý°ü¡£ÎÒÃÇʹÓÃmangle PREROUTING£¬¶ø²»ÊÇnat PREROUTINGÊÇÒòΪÔÚNAT±íÖÐÖ»ÓеÚÒ»¸öÊý¾Ý°ü±»¼ì²é¡£
ÏÂÃæµÄÄÚÈÝÈ·±£Ö»ÓоßÓкӰ¶µÃ·ÖÄÚ²¿µØÖ·µÄÊý¾Ý°ü±»ÄÚ²¿½Ó¿ÚËù½ÓÊÜ£º
$IPTABLES -t mangle -A PREROUTING -i $LAN_IFACE -s $INTERNAL_ADDRESS_RANGE -j ACCEPT
ÏÂÃæÃüÁî×èÖ¹ÍøÇÅÍⲿ½Ó¿Ú½ÓÊÕ¾ßÓÐÄÚ²¿µØÖ·µÄÊý¾Ý°ü£º
$IPTABLES -t mangle -A PREROUTING -i $INET_IFACE ! -s $INTERNAL_ADDRESS_RANGE -j ACCEPT
´ÓÄÚ²¿ÍøÂçÖзÃÎÊ·À»ðǽ
Ò²ÐíÄãÏ£ÍûÄãµÄ·À»ðǽ¶ÔÓÚÍøÂçÊÇÍêȫ͸Ã÷µÄ£¬»òÕßÄãÒ²¿ÉÄÜΪÁË·½±ãÔÊÐí´ÓÄÚ²¿ÍøÂçÖ±½ÓÁ¬½ÓÍøÇÅ·À»ðǽ£¬ÏÂÃæµÄÃüÁֻÔÊÐíÄÚ²¿ÍøÂçµ½·À»ðǽµÄÁ¬½Ó¡£µ±È»¸ù¾Ý×Ô¼ºµÄʵ¼ÊÇé¿ö¶ÔÊÇ·ñÔÊÐí·ÃÎÊÍøÇÅ·À»ðǽµÄÒªÇóÊDz»Ò»ÑùµÄ£º
$IPTABLES -A INPUT -p ALL -i $BR_IFACE -s $INTERNAL_ADDRESS_RANGE -d $LAN_BCAST_ADDRESS -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $BR_IFACE -s $INTERNAL_ADDRESS_RANGE -d $BR_IP -j ACCEPT
Ç°ÃæÎÒÃÇÒѾ×èÖ¹Á˾ßÓкͽÓÊÕ½Ó¿Ú²»Æ¥ÅäµÄIPµØÖ·µÄÊý¾Ý°üÁË¡£
¸ü¶àÐÅÏ¢
Äں˲¹¶¡£¬Ã»ÓÐËüiptables½«²»ÄܺÍÇÅÉ豸һÆðʹÓá£
Oskar AndreassonµÄiptablesÈëÃŽ̳ÌÊÇÍÆ¼ö¶ÁÎï¡£
Rusty's Remarkably Unreliable GuidesÌÖÂÛÁ˰ü¹ýÂ˺ÍÁªÍøµÄһЩ±³¾°ÐÅÏ¢¡£
Sparkle Home Page (×÷ÕߵĹ«Ë¾)'

