如何用Ubuntu Linux创建SOHO路由器
Joff Thyer //
本文交叉发布于Packet Header(2016年3月1日)。
在Security Weekly第452集中,我演示了如何构建自有小型办公室/家庭办公室有线路由器的技术环节。本篇博客将列出核心组件并扩展技术细节。目标是构建支持IPv4网络地址转换(NAT)、运行ISC Bind9域名服务及ISC DHCP服务的内网多网段有线路由器。
注意:相关配置文件可在 https://bitbucket.org/jsthyer/soho_router 获取。
硬件要求与系统安装
选择支持Ubuntu 14.04.4 LTS服务器的双网卡或多网卡计算机,建议至少1024MB内存和16GB硬盘空间。推荐硬件包括Soekris Net6501或Netgate RCC-VE 2440。首先安装Ubuntu 14.04.4 LTS服务器(64位),然后安装以下软件包:
|
|
启用IP转发与内核配置
关键步骤是启用内核IP转发,否则无法路由数据包。在/etc/sysctl.conf
文件末尾添加以下行并重启系统(同时禁用IPv6):
|
|
网络接口配置
路由器配置核心是正确设置网络接口和IPTABLES规则。假设公网地址为静态255.1.1.2(子网掩码/30),ISP设备地址为255.1.1.1。WAN接口为eth0,内部网络使用三个网段:10.1.1.0/24、10.1.2.0/24和10.1.3.0/24。配置文件/etc/network/interfaces
需包含:
- eth0的静态/IPDHCP配置
- RFC1918网络流量的空路由
- 组播流量(224.0.0.0/4)丢弃规则
- 引用IPTABLES规则文件
/etc/iptables.rules
IPTABLES规则配置
NAT配置
在/etc/iptables.rules
中,NAT部分仅需一行命令(假设内网为10.0.0.0/8,公网接口为eth0)。可选添加Squid代理重定向规则(TCP 80→3128)。
过滤规则
过滤规则分为四部分:
- INPUT:路由器接收流量
- 接受环回接口流量
- 接受DNS(bind9)流量
- 接受内网DNS/DHCP/NTP/Squid流量
- 接受ICMP协议
- OUTPUT:路由器发送流量
- 允许DNS、WHOIS(TCP 43)、软件更新(HTTP/HTTPS)、NTP、DHCP INFORM及ICMP
- FORWARD:跨路由器转发流量
- 允许所有IPv4 TCP/UDP/ICMP流量至互联网
- LOG_DROPS:记录丢弃流量
- 丢弃eth0源地址为0.0.0.0/8、RFC1918地址、组播地址的流量
- 丢弃分片IP流量、TTL<4的包、TCP/UDP端口0的包及无效TCP标志包
最终通过syslog LOCAL7设施记录丢弃数据包,需配置/etc/rsyslog.d/30-iptables.conf
实现日志写入。
DHCP与DNS服务
DHCP配置
在/etc/dhcp/dhcpd.conf
中为三个内网接口(eth1/eth2/eth3)提供IP服务:
- 地址池从x.x.x.50开始(保留静态地址空间)
- 租期30天(2,592,000秒)
DNS配置
默认Bind9为缓存服务器,可选配置:
- 向上游DNS(如Google DNS 8.8.8.8)转发查询
- 限制递归查询客户端范围
- 集成dshield恶意域名列表(解析至127.0.0.1)
通过脚本get_malware_domains.sh
获取https://isc.sans.edu/feeds/suspiciousdomains_Low.txt 并转换为Bind9配置格式。
所有配置文件示例均提供压缩包支持。祝部署顺利!