下一页 上一页 目录

8. 使用调制解调器和 PPP 连接代理/防火墙到 ISP

将私有网络连接到互联网,使用专用服务器处理从本地网络到互联网的数据包路由,以及代理/缓存服务和安全防火墙,这是一个复杂的主题,超出了本文档的范围。 还有其他 “Howto” 文档更全面地处理这些主题。 在本文档末尾,您可以找到指向此类文档的链接和参考列表。

在这里,我们仅配置 Diald,假设计算机已在使用 IP 伪装,已安装类似 Squid 的 Web 代理,ISP 连接已正确配置,并且 TCP/UDP 端口的访问安全已得到检查(/etc/inetd.conf 文件以及其他文件,如 securettyhost.allow 等)。

基本上,唯一需要做的是在每次接口集更改时重新配置伪装/过滤/访问规则,即当 ppp0 接口建立和删除时。 执行此操作的好位置是来自 pppd 的 ip-up 和 ip-down 脚本。

8.1 Debian 2.1 示例

在 Debian 中,只需安装 ipmasq 软件包,并回答您希望在设置时与 pppd 同步更改规则。 将在 /etc/ppp/ip-up.d/etc/ppp/ip-down.d 目录中创建两个脚本,以调用 /sbin/ipmasq,这是一个分析现有接口并进行简单配置的脚本,在许多情况下都有效,但您可以使用 /etc/ipmasq/rules 中的规则文件对其进行个性化设置。

安装此软件包后,唯一的更正是在何时运行 ipmasq 的启动脚本,删除 /etc/rcS.d 中的符号链接,并在 /etc/rc2.d 中创建一个新的符号链接,以便在 S20diald 之后运行它。 现在,当执行 ipmasq 分析接口时,sl0 已经存在。 S90ipmasq 是指向 /etc/init.d/ipmasq 的符号链接的好名称。

使用 Debian,无需担心内核版本,因为 /sbin/ipmasq 脚本会根据需要使用 ipfwadmipchains

8.2 Suse 6.1 示例

此示例来自 Mr Cornish Rex, troll@tnet.com.au

以下 ip-masp 和路由控制命令用于 2.2 版本内核,使用 ipchains,但它们对 2.0 版本内核无效。

我们将假设以太网接口的 IP 地址为 192.168.1.1,子网掩码为 16 位,即 255.255.0.0。

这是 /etc/ppp/ip-up 文件

#!/bin/sh
# $1 = Interface
# $2 = Tty device
# $3 = speed
# $4 = local ip
# $5 = remote ip
# $6 = ipparam
/sbin/ipchains -F input
/sbin/ipchains -P input DENY
/sbin/ipchains -A input -j ACCEPT -i eth0 -s 192.168.0.0/16 -d 0.0.0.0/0
/sbin/ipchains -A input -j DENY -p udp -i $1 -s 0.0.0.0/0 -d $4/32 0:52 -l
/sbin/ipchains -A input -j DENY -p udp -i $1 -s 0.0.0.0/0 -d $4/32 54:1023 -l
/sbin/ipchains -A input -j DENY -p tcp -i $1 -s 0.0.0.0/0 -d $4/32 0:112 -l
/sbin/ipchains -A input -j DENY -p tcp -i $1 -s 0.0.0.0/0 -d $4/32 114:1023 -l
/sbin/ipchains -A input -j DENY -p tcp -i $1 -s 0.0.0.0/0 -d $4/32 6000:6010 -l
/sbin/ipchains -A input -j DENY -p icmp --icmp-type echo-request \
-i $1 -s 0.0.0.0/0 -l
/sbin/ipchains -A input -j DENY -p icmp -f -i $1 -s 0.0.0.0/0 -l
/sbin/ipchains -A input -j DENY -p udp -i $1 -s 0.0.0.0/0 -d $4/32 5555 -l
/sbin/ipchains -A input -j DENY -p udp -i $1 -s 0.0.0.0/0 -d $4/32 8000 -l
/sbin/ipchains -A input -j DENY -p tcp -i $1 -s 0.0.0.0/0 -d $4/32 8000 -l
/sbin/ipchains -A input -j DENY -p udp -i $1 -s 0.0.0.0/0 -d $4/32 6667 -l
/sbin/ipchains -A input -j DENY -p tcp -i $1 -s 0.0.0.0/0 -d $4/32 6667 -l
/sbin/ipchains -A input -j DENY -p tcp -i $1 -s 0.0.0.0/0 -d $4/32 4557 -l
/sbin/ipchains -A input -j DENY -p tcp -i $1 -s 0.0.0.0/0 -d $4/32 4559 -l
/sbin/ipchains -A input -j DENY -p tcp -i $1 -s 0.0.0.0/0 -d $4/32 4001 -l
/sbin/ipchains -A input -j DENY -p tcp -i $1 -s 0.0.0.0/0 -d $4/32 2005 -l
/sbin/ipchains -A input -j DENY -p tcp -i $1 -s 0.0.0.0/0 -d $4/32 6711 -l
/sbin/ipchains -A input -j DENY -i $1 -s 192.168.0.0/16 -d 0.0.0.0/0 -l
/sbin/ipchains -A input -j ACCEPT -i $1 -s 0.0.0.0/0 -d $4/32
/sbin/ipchains -A input -j ACCEPT -i lo -s 0.0.0.0/0 -d 0.0.0.0/0
/sbin/ipchains -A input -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0 -l

/sbin/ipchains -F output
/sbin/ipchains -P output DENY
/sbin/ipchains -A output -j ACCEPT -i eth0 -s 0.0.0.0/0 -d 192.168.0.0/16
/sbin/ipchains -A output -j DENY -i $1 -s 192.168.0.0/16 -d 0.0.0.0/0 -l
/sbin/ipchains -A output -j ACCEPT -i $1 -s $4/32 -d 0.0.0.0/0
/sbin/ipchains -A output -j ACCEPT -i lo -s 0.0.0.0/0 -d 0.0.0.0/0
/sbin/ipchains -A output -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0

/sbin/ipchains -F forward
/sbin/ipchains -P forward DENY
/sbin/ipchains -M -S 120 120 120
/sbin/ipchains -A forward -j MASQ -s 192.168.1.0/24 
/sbin/ipchains -A forward -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0

exit 0

这是 /etc/ppp/ip-down 文件

#!/bin/sh
# $1 = Interface
# $2 = Tty device
# $3 = Speed
# $4 = Local ip
# $5 = Remote ip
/sbin/ipchains -F input
/sbin/ipchains -F output
/sbin/ipchains -F forward
/sbin/ipchains-restore < /etc/ppp/orig.chains

最后一个脚本中的最后一个文件 orig.chains 是以下文件(ipchains 的原始状态)

# orig.chains
# created with: ipchains-save > orig.chains
:input ACCEPT
:forward ACCEPT
:output ACCEPT
-A input -s 0.0.0.0/0.0.0.0 -d 192.168.1.1/255.255.255.255
-A output -s 192.168.1.1/255.255.255.255 -d 0.0.0.0/0.0.0.0

8.3 Slackware 3.6 示例

此示例来自 Hoo Kok Mun, hkmun@pacific.net.sg

这是我见过的最简单的示例,但功能齐全。 从一开始,此示例就在 sl0 接口存在之前配置了伪装,并且在 ppp0 接口出现时不会更改。 如果您需要高级安全考虑,它可能会有点局限性。

#/etc/rc.d/rc.local
/sbin/ipfwadm -F -p deny
/sbin/ipfwadm  -F -a m -S 192.168.0.0/24 -D 0.0.0.0/0

如您所见,它适用于 2.0 版本内核。


下一页 上一页 目录