使用 hostapd 轻松实现强 WiFi 加密

使用 WPA2 加密保护您的开放式 WiFi 访问

保持简单的无线安全性。hostapd 是 Host Access Point 守护进程,它提供了可靠的 WiFi 加密,可满足企业标准,无需承担运行 FreeRADIUS 的所有开销。了解有关此工具的更多信息,以及如何将其纳入自己的环境中。

Carla Schroder, Linux 管理员和作家, Tux Computing

Carla Schroder 是管理 PC 方面的自由作家,她为小企业管理 Linux 和 Windows 系统,为真正需要的人们编写 how-to 教程。她喜爱计算机和高科技,并认为 Linux/开放源码/自由软件是世界上最好的游乐场。Carla 大约自 1994 年开始从事计算机和高技术工作;她的第一台 PC 是 Apple II。通过 DOS/Windows(从 3.1 到 XP),她逐步对计算机有了深入了解。自 1998 年起,她开始从事 Linux 方面的工作。Carla 是一个在中年通过自学成为计算机界领袖的生动的例子。



2012 年 5 月 15 日

简介

hostapd 是 Host Access Point 守护进程,提供对基于 Linux 的无线接入点的强 WPA2 加密和身份验证。配置 hostapd 非常简单,它支持 WPA2-Personal 和 Enterprise,提供了对 WPA2-Personal 的独特修改,可让管理它变得更复杂或更简单。

WPA2-Personal 和 WPA2-Enterprise 之间的差距非常大。WPA2-Enterprise 提供了最强的无线安全性,但是管理它非常复杂,因为它需要一个带有服务器和客户端证书的公共密钥基础架构 (PKI) 和一个认证机构。大多数商店使用 FreeRADIUS 服务器来管理所有这些内容,当您有少量接入点需要管理,或者是想要为临时事件或项目设置服务器时,这非常耗时。

对于小商店而言,WPA2-Personal 应该非常简单或非常复杂,因为它对所有用户使用一个共享密钥,部署非常简单,但是却提出了持续安全和管理威胁。删除一个用户并没有什么好方法,但是无论何时,只要更改了密钥,就必须为所有用户分发新密钥,您无法排除不需要密钥的用户,因为它们只需要一个内部的朋友接收新密钥即可。这更适用于半公共的热点;例如,您想为访问您办公室的人员提供免费 WiFi,但并不是为附近所有吃白食的人提供免费 WiFi。

hostapd 为您提供了一个很好的中间平台,可为每个用户使用具有私有密钥的 WPA2-Personal,而不是为所有人使用一个共享密钥。这些密钥只是 hostapd 配置文件和客户端上的密码,因此 PKI 或单独的身份验证服务器不是必需的。

记住,只有客户端和无线路由器之间的通信是加密的,为了防止窃听无线连接;没有提供端到端加密。端到端加密是 OpenVPN 或 SSH 隧道等软件的工作。


先决条件

您需要一个包含 hostapd 的无线接入点,或者需要允许您安装 hostapd 的 iw 命令,而您需要在 Linux PC 上提供 wpa_supplicant,以便进行测试。您的接入点应支持 hostapd 0.6.8 或其更高版本(目前的 hostapd 版本是 0.7.3)。hostapd V0.6.8 实现了 nl80211 驱动程序。在 Linux 内核中,mac80211 框架支持的所有无线网卡 (WIC) 都不需要特殊的驱动程序;它已经内置到了本机支持中。

nl80211 驱动程序将加密、身份验证、密钥旋转和其他接入点功能都移动到了用户空间中。如果您通常使用 iwconfig 命令,那么现在请开始使用 iw 命令,因为 iwconfig 无法在 V0.6.8 上工作。

DD-WRT 和 OpenWRT 是类似 Linksys WRT54G 类型的设备等消费级无线路由器的两个出色的开源固件置换(请参见 参考资料 部分),它们包含 hostapd。它们都有广泛的数据库支持设备。我喜欢在 Soekris、PC Engines 和 MicroTik 单板计算机上使用删减版 Linux 创建自己的 WAP(请参见 参考资料 部分)。这些小插件很耐用,并且我拥有完全控制权和灵活性。

如果您想要构建自己的 WAP,最重要的组件是具有本机 Linux 内核支持的 WIC,它支持所有重要的 AP 模式。这种模式也称为接入点、主、基础架构模式,并且需要一个无线接入点。许多无线网络接口都不支持 AP 模式,仅支持删减到最少功能的客户端设备支持 AP 模式。我坚持使用 Atheros 无线接口,因为它们的功能全面,并且在其旧版 Madwifi 驱动程序和新 mac80211 驱动程序中都受到良好支持。

请避免在您的接入点上使用 ndiswrapper。当您没有其他选择时,这是让 WIC 工作的一种好方法,但是它同时也隐藏了大量问题,所以请坚持使用具有本机内核支持的优秀无线接口。

访问 Linux Wireless.org 设备数据库,查找受支持的接口,以及与无线驱动程序和用户空间命令相关的大量信息(请参见 参考资料 部分)。Linux Wireless 项目在清理和协调 Linux 无线堆栈方面表现非常出色。

在客户端上这样做更简单一些,因为几乎所有具有本机 Linux 内核支持的所有与 WiFi 兼容的 WIC 都可以连接到具有强 WPA2 安全性的接入点。Mac 和 Windows® 客户端还可以使用良好的基于 Linux 的接入点。


探索 WIC

您如何知道 WIC 支持哪些功能?iw 会告诉您。请参阅 “受支持的接口模式” 部分,了解它是否支持 AP 模式。清单 1 显示了一个示例。

清单 1. iw 清单
$ iw list

[...]

Supported interface modes:
*IBSS
*managed
*monitor
*AP
*AP/VLAN

本示例显示了一个支持 AP 模式和无线 VLAN 的 WIC。IBSS 是临时模式。监控模式用于探查无线网络。所有 WIC 都支持托管模式,它是接入点的客户端。

在使用 Madwifi 驱动程序的 Atheros 接口上,尝试使用 wlanconfig。请参见 清单 2

清单 2. wlanconfig 的示例
# wlanconfig ath0 list caps
ath0=7782e40f<WEP,TKIP,AES,AES_CCM,HOSTAP,TXPMGT,SHSLOT,SHPREAMBLE,TKIPMIC,WPA1,WPA2,BURST
     ,WME>

这表明它支持 AP 模式,以及 WPA2 和强 AES-CCMP 密码。

另一种探查无线硬件的好方法是使用非常有用的 hwinfo 命令。它具有一个特殊的无线接口选项,会生成大量各式各样的信息,如 清单 3 中的代码段所示:

清单 3. WIC 的 hwinfo 数据示例
$ hwinfo --wlan
27: PCI 500.0: 0282 WLAN controller
Model: "Intel WLAN controller"
Driver: "iwlagn"
Driver Modules: "iwlagn"
WLAN encryption modes: WEP40
WEP104 TKIP CCMP
WLAN authentication modes: open sharedkey wpa-psk wpa-eap
Status: iwlagn is active
Driver Activation Cmd: "modprobe iwlagn"

hwinfo 命名驱动程序,说明支持的加密方式和设备的名称等内容。您还可以对 PCI 网络接口使用 lspci ,并对 USB 接口使用 lsusb。此 WIC 将不会充当一个接入点,因为 hostapd 不支持 iwlagn 驱动程序,并且在所有情况下,它都不支持 AP 模式。(它是低预算的集成 Centrino 芯片的一部分。)


配置 hostapd

具体安装取决于您使用的 Linux 发行版,我将其留作您的家庭作业,您可以自行解决它。您首先要配置接入点上的 hostapd,然后需要配置客户端 PC 上的 wpa_supplicant 以测试密钥交换。

如果您的接入点上没有 /etc/hostapd.conf 文件,那么请创建一个新文件。如果您的安装提供了该文件,那么请为它做一份备份,以便您参考,并使用一个空白的全新文件作为开始。清单 4 中的示例提供了您设置 WPA2-Personal 所需的一切内容:

清单 4. 示例 /etc/hostapd.conf
interface=ath0
bridge=br0
driver=nl80211
ssid=alracnet
auth_algs=1
wpa=1
wpa_psk_file=/etc/hostapd-psk
wpa_key_mgmt=WPA-PSK 
wpa_pairwise=CCMP TKIP
rsn_pairwise=CCMP

您可能需要使用自己的值替换其中一些参数,比如 interface、driver 和 ssid。当您列出多个选项时,使用空格分隔它们,如 wpa_pairwise 行所示。下面是此示例的说明。

  • Atheros 接口始终名为 athx,所有其他接口都是 wlanx。
  • 如果您的接入点没有以太网桥接,可省略 bridge 一行的内容。
  • 如果您使用的是 hostapd 0.6.8 或其更高版本以及具有 mac80211 支持的 WIC,那么驱动程序是 nl80211。惟一受支持的旧版驱动程序是 HostAP、madwifi 和 prism54。V0.6.8 之前的 hostapd 发行版支持 hostap、wired、madwifi、test、nl80211 和 bsd 驱动程序。
  • ssid 是您想要 ssid 或接入点名称显示的内容。
  • auth_algs=1 只支持 WPA2 身份验证算法。auth_algs=2 表示支持 WEP。永远不要使用有线等效加密 (wired equivalent privacy, WEP),因为它非常容易破解,并且多年前就已经被完全破解了。auth_algs=3 表示支持这两种方式。
  • wpa=2 仅支持 WPA2。wpa=1 表示支持 WPA1,而 wpa=3 表示二者都支持。
  • wpa_psk_file 指向包含共享密钥的文件。
  • wpa_key_mgmt 指定您想支持的加密密钥算法。您的选择有 WPA-PSK、WPA-EAP 或两者均使用。PSK 是预共享密钥。EAP 是可扩展认证协议,是一个支持许多不同身份验证方法的框架。对于小的预共享密钥设置,不需要使用它。
  • wpa_pairwise 和 rsn_pairwise 控制支持加密数据的密钥,您可以使用 CCMP、TKIP 或两者均使用。CCMP 比 TKIP 更强,因此您可以尝试仅支持 CCMP。Windows 客户端以繁琐和棘手的强安全性而闻名,因此您可能想让 TKIP 支持它们。

所有人都应该使用 WPA2;WEP (Wired Equivalent Privacy) 比较薄弱,没有什么用,而 WPA 几乎和 WEP 一样薄弱。自 2006 年以来,WPA2 支持已被强制添加到 WiFi 认证设备中,并且所有现代操作系统(包括 Windows XP SP3)都支持它。倘若您必须替换一些 WIC,可以这样考虑,它比入侵后再清理要便宜得多。

接下来,创建一个包含通配符 MAC 地址和简单的纯文本测试密码(多达 63 个字符)的 /etc/hostapd-psk 文件:

00:00:00:00:00:00 testpassword

现在,转到您的 Linux 客户端 PC,为 wpa_supplicant 创建一个简单的配置文件,wpa_supplicant.conf 类似于 清单 5 中的示例。

清单 5. 示例 wpa_supplicant.conf
ctrl_interface=/var/run/supplicant
network={ 
  ssid="alracnet"
  psk="testpassword"
  priority=5
}

ctrl_interface 允许您与命令行中的 wpa_supplicant 交互。使用您自己的 ssid 并测试纯文本密码,为它们加上双引号。优先级数字越高,连接到接入点的速度就越快。现在返回到您的接入点并在调试模式下启动 hostapd

# hostapd -d /etc/hostapd.conf

如果有配置错误,系统会报告这些错误并停止运行,否则,系统会生成许多行输出。按 CTRL+C 组合键停止它。当您找出错误时,可以将它配置为自动开始,您现在就可以这样做。

然后,在客户端上,如果正在使用无线连接,请终止无线连接,并将 wpa_supplicant 作为根命令运行:

# wpa_supplicant -i wlan0 -D wext -c wpa_supplicant.conf -d

-i 指定了无线接口,-D wext 是通用 wpa_supplicant 驱动程序,-c 指向配置文件,而 -d 表示调试模式。您将在接入点和客户端看到许多输出。当密钥交换成功后,它会快速完成,并且您将在客户端上看到与 清单 6 类似的信息。

清单 6. wpa_supplicant 的示例信息
EAPOL: SUPP_BE entering state IDLE
EAPOL authentication completed successfully 
RTM_NEWLINK: operstate=1 ifi_flags=0x11043 ([UP][RUNNING][LOWER_UP]) 
RTM_NEWLINK, IFLA_IFNAME: Interface 'wlan0' added

它可以正常运行。按 CTRL+c 组合键终止 wpa_supplicant 会话。最后一步是创建私人用户密钥。首先在接入点创建它们,然后使用您喜爱的网络配置实用程序将它们复制到您的客户端。所有图形配置都非常类似:输入 SSID,选择 WPA2 Personal 身份验证,然后复制密钥。


添加用户、更强的密钥

现在是准备好一切并添加用户的时候了。从计算角度讲,纯文本密码非常昂贵,因为必须对其进行加密,因此 wpa_supplicant 随附提供了一个很好的命令来根据纯文本密码生成 256-位加密密钥,该命令是 wpa_passphrase。按照 清单 7 所示的方法使用它和 SSID:

清单 7. 使用 wpa_passphrase 创建用户
$ wpa_passphrase "alracnet" "greatbiglongpasswordbecauselongerisbetter"
network={
 ssid="alracnet"
 #psk="greatbiglongpasswordbecauselongerisbetter"
 psk=a8ed05e96eed9df63bdc4edc77b965770d802e5b4389641cda22d0ecbbdcc71c
}

返回到 /etc/hostapd-psk,您现在可以开始添加用户。每个加密预共享密钥都必须与用户的 MAC 地址相匹配。清单 8 显示了一个示例。

清单 8. 示例 /etc/hostapd-psk
11:22:33:44:55:66     a8ed05e96eed9df63bdc4edc77b965770d802e5b4389641cda22d0ecbbdcc71c
22:33:44:55:66:77     eac8f79f06e167352c18c266ef56cc26982513dbb25ffa485923b07bed95757a
33:44:55:66:77:aa     550a613348ffe64698438a7e7bc319fc3f1f55f6f3facf43c15e11aaa954caf6 
44:55:66:77:aa:bb     ad328e5f2b16bdd9b44987793ed7e09e6d7cca3131bc2417d99e48720b4de58c

当您对一切正常运行感到满意时,您可能想要自动运行 hostapd。可使用以下几种方法来达到此目的:创建一个启动脚本,在启动机器时启动它,或者是在连接无线网络接口时启动它。在不同的 Linux 发行版中,有多种配置它的方法,因此我将它留作您的家庭作业。您也可能想要使用 -B 选项(这会将任务转化到后台进行)而不是 -d 选项进行调试。

关于出色 hostapd 守护进程的介绍到此为止。请参阅 参考资料 部分,了解有关的更多信息。

参考资料

学习

获得产品和技术

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Linux, Open source
ArticleID=815794
ArticleTitle=使用 hostapd 轻松实现强 WiFi 加密
publish-date=05152012