《The BOOK Of PF》中文版 —— 16. 设置一个简单的无线网络

内部资料,请勿转载,多谢。
主题已锁定
头像
whoami
铁 Fe
帖子: 76
注册时间: 2010-06-03 13:23

《The BOOK Of PF》中文版 —— 16. 设置一个简单的无线网络

帖子 whoami » 2010-07-13 9:37

设置一个简单的无线网络
要建立第一个无线网络, 我们使用上一章的基本的网关配置作为起点是很不错的选择。 我们假设在你的网络设计中, 无线网络没有直接连接到Ineternet上,而是需要通过一个网关。 因此, 在下面的段落中我们仅需对前面网关的设置做少许的修改就可以设置这个无线接入点了。总之,这比重新配置一个无线接入点要方便得多。
说明
我们目前在构建基础结构, 并将首先设置这个接入点。 如果你想先看一下客户端的设置,参考40页的“客户端”部分, 然后再回来读这部分内容。
像我们前面提过的那样, 第一个步骤是确认你拥有一块系统支持的网卡,并且确保驱动导入和初始化的正确。启动时的系统信息在终端上是滚屏显示的, 但是这些信息保存在文件 /var/run/dmesg.boot 里,你可以参看这些文件或使用dmesg命令输出这些信息。如果你的PCI卡配置成功, 你应该看到类似这样的信息:

代码: 全选

ath0 at pci1 dev 4 function 0 "Atheros AR5212" rev 0x01: irq 11
ath0: AR5212 5.6 phy 4.1 rf5111 1.7 rf2111 2.3, ETSI1W, address 00:0d:88:c8:a7:c4
本例中假设你想配置一个热插拔类型的设备,例如一个USB或PCCARD, 你可以查看文件/var/log/messages以了解内核信息, 例如在插入设备前查看文件时使用-f参数。接下来配置这个接口以便启用连接,最后配置系统的TCP/IP。你可以在命令行输入类似的命令:

代码: 全选

$ sudo ifconfig ath0 up mediaopt hostap mode 11b chan 11 nwid unwiredbsd nwkey 0x1deadbeef9

这个命令会立刻完成下列工作:配置ath0接口, 用up参数启用接口, 制定这个接口使用mediaopt hostap作为一个无线接入点; 然后明确的设定工作模式为11b,、使用11号通道, 最后将niwd参数代表的网络名称设置为unwiredbsd, 将WEP的key (nwkey)设置为16进制字符串0x1deadbeef9。
使用ifconfig检查是否该命令已经成功地配置了该接口:

代码: 全选

$ ifconfig ath0
ath0: flags=8823<UP,BROADCAST,NOTRAILERS,SIMPLEX,MULTICAST> mtu 1500
lladdr 00:11:95:ca:e6:59
groups: wlan
media: IEEE802.11 autoselect mode 11b hostap
status: no network
ieee80211: nwid unwiredbsd chan 11 bssid 00:11:95:ca:e6:59 nwkey <not displayed>
inet6 fe80::211:95ff:feca:e659%ath0 prefixlen 64 tentative scopeid 0x5

注意包含 media: 和 ieee80211: 的这些行,它们应该和你在ifconfig命令中输入的一致。为了让你的无线网络的连接部分运行, 你可以接续操作下面的步骤并给此接口分配一个IP地址:

代码: 全选

sudo ifconfig ath0 10.50.90.1
在OpenBSD中, 你既可以保存一个文件 /etc/hostname.ath0 , 类似这样:

代码: 全选

up mediaopt hostap mode 11b chan 11 nwid unwiredbsd nwkey 0x1deadbeef9
inet 10.50.90.1

也可以运行 /etc/netstart ath0 (必须以root身份运行) 或者等到下次启动后完全生效。
注意配置被分成了两行。第一行生成一个ifconfig命令,该命令用正确的参数设置这个接口以适应无线网络。第二条命令设置了IP地址, 它仅在第一条命令完成后执行。值得一提的是因为这是我们自己的接入点, 所以我们明确地设置了通道, 通过设置nwkey参数启用了一个较弱的WEP加密。
在FreeBSD和NetBSD里, 你一般可以将所有的参数整合为rc.conf文件里的一行设定:

代码: 全选

ifconfig_ath0="mediaopt hostap mode 11b chan 11 nwid unwiredbsd nwkey 0x1deadbeef inet 10.50.90.1"
但是, 在某些硬件组合时, 你可能在同时设置连接层选项和IP地址时失败。如果你使用一行的配置无效的话, 你需要将这两行放在 /etc/start_if.ath0 文件中并且用你的接口名称替换这里的ath0。
注意:
你必须已经阅读了最新的ifconfig用户手册,这样也许能发现更适合你自己网络的配置参数。

接入点的PF规则设置
完成接口配置后, 现在我们要将接入点配置为一个包过滤网关。
你可以拷贝一些第三章的内容作为起点。通过在接入点的sysctl.conf或者rc.conf文件里设置适当的参数启用该网关; 然后拷贝文件pf.conf的内容。根据最后一章的部分内容(这章对你很有用处), 这个pf.conf文件类似这样:

代码: 全选

ext_if = "re0" # macro for external interface - use tun0 or pppoe0 for PPPoE
int_if = "re1" # macro for internal interface
localnet = $int_if:network
client_out = "{ ssh, domain, pop3, auth, nntp, http,\
https, cvspserver, 2628, 5999, 8000, 8080 }"
udp_services = "{ domain, ntp }"
icmp_types = "{ echoreq, unreach }"
# ext_if IP address could be dynamic, hence ($ext_if)
nat on $ext_if from $localnet to any -> ($ext_if)
block all
pass quick inet proto { tcp, udp } from $localnet to any port $udp_services
pass log inet proto icmp all icmp-type $icmp_types
pass inet proto tcp from $localnet to any port $client_out

这里唯一的修改就是严格限制接入点仅为匹配int_if的无线接口提供服务。 本例中, 意味着现在应该读取的规则行是

代码: 全选

int_if = "ath0" # 为内部接口定义宏
和这些无线网卡连接后其它客户端的相关网络信息。如果你阅读了用户手册,那么设置dhcpd服务也很简单。
所有需要做的工作就完成了。这个配置为你提供了一个可用的BSD接入点, 它通过WEP加密至少提供了一个令牌级别的安全措施 (实际上更像一个禁入标志)。如果你需要提供FTP支持, 你可以从第三章设置设置里拷贝相应的FTP代理规则,并根据情况对后面的规则作相应的调整。

如果你的接入点有三个以上的接口
如果你的网络要使用该接入点作为一个本地有线网络甚至是几个无线网络的网关, 你需要对规则集做一些小调整。只需替换宏int_if的值, 你可能还需要为无线接口添加另一个(注释)定义, 好比

代码: 全选

air_if = "ath0"
在无线网关的配置中, 你的无线接口可能在不同的子网上, 所以可能要为它们分别设置nat规则:

代码: 全选

nat on $ext_if from $air_if:network to any -> ($ext_if) static-port
根据你的过滤策略, 你也许还想调整你的本地网络定义,或者至少在放行规则中适当位置加入 $air_if 。
在强调一下, 如果你需要支持FTP, 你需要单独将无线网络重定向到ftp-proxy,也许还要考虑规则的次序问题。

处理IPsec, VPN
通过内置的IPsec工具、OpenSSH或者其它的工具设置虚拟私有网络(VPNs)的详细步骤并非本章所涉范围。但是考虑到无线网络相对薄弱的安全特性, 你可能想额外设置一些安全措施。这个时候设置一个VPN就变成很有用或者说必需的了。
大致上有三种选择:

SSH
如果你的VPN是基于SSH通道的, 则基本的规则集已经包含了你所需的过滤规则。包过滤器很难区分vpn通道内的其它通讯和SSH通讯。

用UDP密码交换的IPsec (IKE/ISAKMP)
一些IPsec变种严重依赖udp协议的端口500或者tcp/udp协议的端口4500来NAT通讯(NAT-T)。
你只能放行这些通讯才可能建立连接。 有些还需要依赖于在主机间放行ESP协议通讯(protocol 50):

代码: 全选

pass proto esp from $source to $target

在IPsec封装的接口上过滤
通过适当地配置IPsec, 你可以用PF在封装的接口enc0本身进行过滤:pass on enc0 proto ipencap from $source to $target keep state (if-bound).
请查阅本书的附录A以参考相应的资料。

客户端设置
在所有的BSD客户端上设置都很简单。要想连接到我们刚建立的接入点上,OpenBSD客户端上需要需要一个hostname.if 配置文件,内容类似

代码: 全选

up media autoselect mode 11b chan 11 nwid unwiredbsd nwkey 0x1deadbeef9
dhcp
先尝试在命令行输入如下命令

代码: 全选

$ sudo ifconfig ath0 up mode 11b chan 11 nwid unwiredbsd nwkey 0x1deadbeef9
然后

代码: 全选

$ sudo dhclient ath0
这个ifconfig命令应该没有输出信息, 而dhclient命令会输出它与DHCP服务器交涉的一些细节:

代码: 全选

DHCPREQUEST on ath0 to 255.255.255.255 port 67
DHCPREQUEST on ath0 to 255.255.255.255 port 67
DHCPACK from 10.50.90.1
bound to 10.50.90.11 -- renewal in 1800 seconds.
同样在FreeBSD上, 你应该将这些行放在文件 /etc/start_if.ath0 里,用你的接口名称替换这里的ath0。
未完待续、请勿转载、欢迎纠错、多谢!;)
[email]WHOAMi@点点儿[/email]

主题已锁定

在线用户

正浏览此版面之用户: 没有注册用户 和 23 访客