2.对于小型的办公环境,较之家用的AP(接入点),我们不仅需要基本的无线接入,更需要安全,稳定,自动化的网络环境.所以无线AP应该要集成以下3种服务:
(1) DHCP服务,为无线客户端自动分配ip,
(2) 防火墙,为无线网络提供保护
(3)代理服务,无线客户端(可控制地)接入internet
基于以上的考虑,决定使用netfilter/iptables做NAT来实现数据转发,同时对数据包在网络层进行过滤。
(1).首先配制DHCP服务器,DHCP软件安装可以用CentOS4.2安装盘自带的rpm包,也可以到www.irc.org下载源码包编译,安装。这里不再重复。
安装完毕后,要在/etc目录下编写配制文件dhcpd.conf
[root@Jack ~]# vi /etc/dhcpd.conf
DHCPDARGS=ath0; //dhcpd进程监听ath0端口
option routers 192.168.0.1; //默认网关
option broadcast-address 192.168.0.255; //对客户端的广播地址范围
option subnet-mask 255.255.255.0; //客户端的子网掩玛
option domain-name "Jack.org"; //客户端所在域的名称
option domain-name-servers 211.167.97.67, 211.167.97.68; //域名服务器地址
ddns-update-style ad-hoc; //配制DHCP-DNS互动更新模式
default-lease-time 21600; //默认地址租期时间
max-lease-time 43200; //最长地址租期时间
subnet 192.168.0.0 netmask 255.255.255.0 { //可分配的地址池
range 192.168.0.60 192.168.0.90;
}
配制完毕后,按shitf : wq存盘退出
启动DHCP
[root@Jack ~]# /etc/init.d/dhcpd start
Starting dhcpd: [ OK ]
查看客户机ibookG4的TCP/IP信息,看到已经得到IP地址:192.168.0.90/24
DHCP配制成功。客户端已经可以自动接入无线网络。
(屏幕截图:显示airport的当前状态)
(2)然后开始使用netfilter/iptables做数据包转发及过滤
在2.4和2 .6内核的linux ,采用netfilter模块做过滤引擎,其命令行工具为iptables ,较之2.2内核的ipchains,功能上有很大的提升。由过去的3条链(input, output, forward),变成3张表(filter, nat, mangel),尤其是正确地实现了NAT (网络地址转换)---这正也是做Linux AP的核心所在。
Linux AP数据包转发原理示意图
Incoming Outgoing
-----> [Routing] ---- > FORWARD ----- >
[Decision]
| ^
| |
V |
INPUT OUTPUT
| |
----------- > Local Process -----------------
数据包到达Linux AP的NIC时,先做路由决策(由nat表完成):需要转发的数据,做IP地址翻译, SNAT(从无线局域网络到公网),或DANT(从公网到无线局域网),然后由filter表的FORWARD链完成包的转发和过滤。而流入/流出Linux AP本地的数据包由filter表的INPUT和OUTPUT链完成。
以下是我的iptables的编写过程:
vi /usr/local/bin/fwsh
CODE:
echo " Starting firewall now ......"
echo '1'>/proc/sys/net/ipv4/ip_forward //打开内核的数据包转发功能
modprobe ip_nat_ftp //加载内核模块,支持ftp服务的nat和状态检测功能
modprobe ip_conntrack
modprobe ip_conntrack_ftp
iptables -t filter -F //清空filter和nat表的规则
iptables -t nat –F
iptables -t filter -P FORWARD DROP //设置FORWARD链的默认策略为DROP
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
//在eth0接口做SNAT(eth0是动态ip,静态ip均可)
Iptables -t nat -A PREROUTING -i ath0 -p tcp -s 192.168.0.0/24 --dport 80 -j REDIRECT --to-ports 3128 //80端口的web数据走代理服务器squid
// Linux AP本地的SSH,PROXY, XWINDOW服务对公网阻断
iptables -A INPUT -p tcp --destination-port 22 -i eth0 -j DROP
iptables -A INPUT -p tcp --destination-port 3128 -i eth0 –j DROP
iptables -A INPUT -p tcp --destination-port 6000:6010 -i eth0 -j DROP
iptables -A INPUT -p icmp -f -j DROP //过滤icmp碎片
//允许公网的ftp,mail,DNS进入无线局域网
iptables -A FORWARD –s 0/0 –d 192.168.0.0/24 -p tcp –m multiport --sport 20,21,25 –j ACCEPT
iptables -A FORWARD –s 0/0 –d 192.168.0.0/24 –p udp –sport 53 -j ACCEPT
iptables –A FORWARD –s 0/0 –d 192.168.0.0/24 –p icmp ! -f -j ACCEPT //过滤icmp碎片
//使用状态检测功能,允许无线局域网相关和建立的数据包转发
iptables -A FORWARD -s 0/0 -d 192.168.0.0/24 -m state --state RELATED,ESTABLISHED -j ACCEPT
按shitf :wq存盘退出
chmod 0755 /usr/local/bin/fwsh,成为可执行程序。
执行防火墙
[root@Jack ~]#fwsh
Starting firewall now ......
防火墙配制完毕