利用Linux实现冗余因特网链路_第1页
利用Linux实现冗余因特网链路_第2页
利用Linux实现冗余因特网链路_第3页
利用Linux实现冗余因特网链路_第4页
利用Linux实现冗余因特网链路_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

利用利用 Linux 实现冗余因特网链路 实现冗余因特网链路 1 随着因特网服务提供商 ISP 开始提供高速因特网链路 用户比较容易把服务放在自己的 家用计算机上 但如果 ISP 出现故障的话 该怎么办呢 一种显而易见的解决方法就是 使用另一个 ISP 的冗余因特网连接 为了帮助建立采用冗余因特网连接的 Linux 主机 本 文讨论了下列基本方面 1 配置主机 以便合理处理多个 ISP 的入站网络连接 2 出站网络连接的负载平衡 3 配置各种服务实现冗余 4 使用 ipchains 或者 iptables 配置防火墙 图 1 采用冗余因特网连接的 Linux 主机 图 1 描述了本文提到的家庭计算机网络配置结构 图 1 中的 Linux 充当因特网和内部局域 网不同连接之间的防火墙 在本例中 以太网接口 eth1 使用 DSL 以太网接口 eht2 使用 线缆调制解调器 Linux 主机对跨两个 ISP 的出站网络连接实现负载平衡 两个 ISP 的负载 平衡功能并不局限于高速网络链路 同样这种技术也可以用于两个拨号连接之间实现负载 平衡 图 1 中测试配置所用的主机是采用双处理器 Intel Celeron 533MHz 的计算机 运行的是 Linux 内核为 2 2 18 的 Red Hat 6 2 还在 Linux 内核为 2 4 13 的 Red Hat 7 2 环境中进行了 测试 本文中的配置不需要双处理器系统 也不需要 533MHz CPU 你可以重新使用配有 32MB RAM 的老式 Pentium 100 系统 充当防火墙 本文介绍的一些例子是 Red Hat 所特 有的 但稍微改动一下 就适用于其它版本的 Linux 本文并不提供以太网网卡配置 Linux 内核编译或 DNS 配置等方面的逐步讲解的详细内容 完成这些工作方面的信息在网上或者许多书里随处可得 http www linuxdoc org 就是个相 当好的信息资源 内核配置 Linux 内核 2 2 以及更高版本支持高级路由技术 为了提供 Linux 主机上的负载平衡及多条 缺省路由 需要这项技术 为了支持多个因特网连接 编译时必须加入下面几个内核网络 选项 CONFIG IP ADVANCED ROUTER y CONFIG IP MULTIPLE TABLES y CONFIG IP ROUTE MULTIPATH y 如果要使用新内核的高级路由特性 就必须安装 iproute 工具包 如今该工具包随 Red Hat 7 1 一同发行 可以从 ftp ftp inr ac ru ip routing 获得 iproute 工具包 Iproute 工具包为使用高级路由技术提供了两个特殊命令 ip 和 tc 有关 ip 命令的文档放在 http snafu freedom org linux2 2 docs ip cref ip cref html IP 源路由 利用 Linux 实现冗余因特网链路 3 4 iptables 1 2 4 make install 5 usr src linux make oldconfig 对作为补丁添加到内核的 CONFIG IP NF MATCH 选项回答 m 6 重新编译内核 并重新启动 注意 这些指令是 Linux 内核 2 4 13 和 iptables 1 2 4 所特有的 预计在将来某个时候 这 些试验性功能会成为主流内核版本的一部分 防火墙脚本 防火墙脚本的基本流程是依次配置 INPUT FORWARD 和 OUTPUT 链 iptables 防火墙脚 本还要配置 PREROUTING 和 POSTROUTING 链 每个脚本都有注释 描述哪些流量被接 收或被拒绝 REJECT 会忽略数据包 并且向发送者返回 ICMP 响应 通知发送者数据包 已被丢弃 DENY ipchains 或者 DROP iptables 索性丢弃数据包 不返回响应 这样有人探 测某个端口时 系统如同不存在 本文中的防火墙脚本被编写成丢弃 INPUT 和 FORWARD 链上的数据包 以便不向远程系统返回响应 脚本将拒绝接受 OUTPUT 链上 的数据包 这样如果是无效的出站数据包 本地系统就会收到响应 要将防火墙脚本安装在 Red Hat 7 1 系统上 就要把脚本放在 etc init d firewall 中 然后执 行下列命令 chkconfig firewall on 要为你的系统配置防火脚本 必须编辑下列两行 定义内部和外部接口 INT IFACE eth0 EXT IFACES eth1 eth2 INPUT 链为所允许的服务在防火墙上开了通道 其它服务一概拒绝 你要为特定系统编辑 服务列表 利用 ipchains 防火墙脚本中的下列几行 就可以允许入站连接 ACCEPT TCP connections for various services found in etc services for service in ftp ssh smtp domain http auth ldap https do ipchains A INPUT i EXT IFACE p tcp d IP service j ACCEPT done 防火墙脚本在主机允许的各种服务间进行循环 在本例中 这些服务是 FTP SSH Sendmail DNS 区域传送 HTTP ident LDAP 和 HTTPS 这些基于 TCP 的协议的名字和端口号可以在 etc services 文件中找到 利用 ipchains 防火墙脚本中的下列规则 INPUT 链还接收来自任何源自本地的连接的响应 返回 ACCEPT non SYN TCP packets on unprivileged ports returns ipchains A INPUT i EXT IFACE p tcp y d IP 1024 j ACCEPT ACCEPT all UDP packets on unprivileged ports ipchains A INPUT i EXT IFACE p udp d IP 1024 j ACCEPT ipchains 不支持状态防火墙 所以这是接受返回 TCP 流量的唯一方式 由于支持状态防火 墙功能 又叫作连接跟踪 iptables 大大加强了安全 这功能意味着数据包只有和源自本 地的活动连接相匹配 才会被接收 在 iptables 防火墙脚本中可以使用下列规则来处理 ACCEPT return TCP UDP traffic stateful firewall iptables t filter A INPUT m state state ESTABLISHED i EXT IFACE p tcp d IP dport 1024 j ACCEPT iptables t filter A INPUT m state state ESTABLISHED i EXT IFACE p udp d IP dport 1024 j ACCEPT 即使 UDP 是一种无状态协议 iptables 连接跟踪也能维持状态表 并且只对源自本地的流 量作出 UDP 端口上的响应 iptables 防火墙脚本接受入站连接 并利用下列规则将新连接加入到连接跟踪数据库中 ACCEPT inbound TCP connections for various services found in etc services for service in ftp ssh smtp domain http auth ldap https do iptables t filter INPUT m state state NEW ESTABLISHED i EXT IFACE p tcp d IP dport service j ACCEPT done 你可以通过查看 proc net ip conntrack 文件来查看连接跟踪数据库 下列 iptables 规则允许在 TCP 端口 20 上有主动模式的 FTP 连接请求 ACCEPT active FTP data connections on firewall iptables t filter A INPUT m state state RELATED i EXT IFACE p tcp d IP dport 1024 sport ftp data j ACCEPT 下列规则允许对 BIND 进行入站 DNS 查询 ACCEPT inbound DNS requests iptables t filter A INPUT I EXT IFACE p udp d IP dport domain j ACCEPT FORWARD 链利用网络地址转换 NAT 为内部网络上的系统对连接进行伪装 大多数 协议可以使用 NAT 只有几种协议需要一些帮助 使用重写 IP 地址的一种特殊模块 主 动模式的 FTP 连接需要帮助程序才能通过防火墙 你可以使用 modprobe 命令加载 ip masq ftp ipchains 或 ip nat ftp iptables 模块 除非它们编译后已经加入到内核中 以 便对主动 FTP 连接进行伪装 主动 FTP 连接上的远程机器通过防火墙要求连接本地机 以 传输数据 ip masq ftp 模块重写 FTP 连接中的数据包 以便内部机器看上去直接连在因特 网上 被动模式的 FTP 连接通过 TCP 端口 21 传输所有数据 从而避开了这个问题 如果 你决定支持 FTP 要记住 FTP 会以明文格式通过网络传输密码 所以并不安全 FTP 之外 的一种安全方案就是 sftp 它使用安全套接层作为通信方式 sftp 随 OpenSSH 客户端工具 一同发行 各种应用系统的其它伪装模块可以在 lib modules uname r ipv4 ipchains 或者 lib modules uname r kernel net ipv4 netfilter iptables 目录中找到 FORWARD 链使用下列 iptables 规则来伪装通过防火墙的数据包 ACCEPT new outbound traffic stateful firewall iptables t filter A FORWARD m state state NEW ESTABLISHED i INT IFACE s INT NET j ACCEPT ACCEPT return traffic stateful firewall iptables t filter A FORWARD m state state NEW ESTABLISHED RELATED i EXT IFACE s INT NET j ACCEPT Pass Internet traffic to internal network unmodified iptables t nat A POSTROUTING o INT IFACE j ACCEPT Masquerading outbound connections from internal network iptables t nat A POSTROUTING o EXT IFACE j MASQUERADE OUTPUT 链只接受通过正确接口发出去的网络流量 OUTPUT 链还可以通过配置服务类型 TOS 标识来确定某些流量的先后次序 譬如 TOS 标识可用来确定交互 SSH 流量 通过 FTP 的先后次序 TOS 标记有多种 Minimize Delay Maximize Throughput Maximize Reliability 和 Minimize Cost 许多 IPS 忽视数据包上的 TOS 标识 事实上 由于 CONFIG IP ROUTE TOS 内核选项判 断信息流顺序时正是基于这一标识 所以这一标识非常有用 这就意味着 当一个交互式 的应用程序 比如 SSH 运行时 你可以让高带宽的应用程序 比如 FTP 以最大的吞吐量运行 也不会使交互延迟 也就是说 可以让 FTP 不影响 SSH 连接的性能 TOS 标识在 mangle 表的 PREROUTING 和 OUTPUT 链中的 iptables 防火墙脚本内加以设置 PREROUTING 链确定了入站数据包的先后次序 OUTPUT 链则确定了出站数据包的先后 次序 可应用下列规则使 SSH 数据包的延迟最小 iptables t mangle A PREROUTING j TOS set tos Minimize Delay p tcp dport ssh iptables t mangle A OUTPUT j TOS set tos Minimize Delay p tcp sport ssh OUTPUT 链还限制了系统作以响应的 ICMP 信息的类型 用于 ping 和 traceroute 的 ICMP 消息被允许 用于操作系统识别的时间戳消息则被拒绝 使用 ipchains 防火墙脚本的下列 几行 就可以对 ICMP 响应进行配置 ACCEPT various ICMP messages for message in echo reply destination unreachable source quench redirect echo request time exceeded parameter problem do ipchains A OUTPUT p icmp s 0 0 message j ACCEPT done 防火墙脚本的最后几行配置了 IP 转发 伪装 NAT 启用了 TCP SYN cookie 帮助减小扫 描 TCP SYN 的拒绝服务攻击产生的影响 忽略了各种 ICMP 消息 启用了逆向路径路由 防欺骗 并记录具有虚假地址的意外数据包 防火墙维护 要检查防火墙规则的效率 必须使用下列命令执行防火墙脚本 firewall status 检查输出结果中前两列的数据 如果是零 表明没有数据包与规则匹配 这未必是件坏事 DENY 和 DROP 规则的零可能意味着 没有人试图利用这个特定规则非法攻击你的主机 ACCEPT 规则的零意味着没有流量被该规则所接受 如果你想查找防火墙规则的错误 定要确保 把 1 选项加入 ipchains 命令 这样每个 REJECT 和 DENY 规则可以写入 var log messages 文件 iptables 防火墙脚本会创建一个名 为 DROPLOG 的特殊链 它会记录丢弃的数据包 别忘了经常检查日志 看有无入侵者 fwlogwatch 就是一个监视防火墙日志的有用工具 可在 http cert uni stuttgart de projects fwlogwatch 中找到 这些防火墙脚本只允许非特权的端口上的返回 所以你可能需要编辑 ssh config 文件 然 后添加这一行 UsePrivilegedPort no 通过更新 SSH 配置来允许非特权的端口上的返回 总结 我采用这种配置已经运行了一年左右 性能令人满意 然而 一旦网络链路出故障 出站 连接存在几个问题 如果单一网络链路出故障 你仍能在应用层获得入站连接的冗余 源 自本地的出站连接时有时无 直到你对有故障的 ISP 的接口执行 ifdown 才会排除这种状 况 如果连接中断持续很长一段时间 你可能希望更新 DNS 这对接口执行 ifup 时就会出 现这问题 因为然后必须重新把路由条目加入辅助表 譬如 ip route add 0 0 via 63 89 102 1 table 1 修改 ifup routes 脚本后才能自动添加这些高级路由功能 如果在两个接口上都运 行了 ifdown 命令 缺少路由就要重新加入主路由表 譬如 ip route add default equalize nexthop via 至于处理不同故障替换情形的脚本 读者可以试着编写 缺省情况下 TCP IP 数据包的路由方式是 检查 IP 目的地址 然后在路由表中寻找到达 目的网络的一条路径 路由表可以利用 netstat r 命令来查看 如果发现了一条路径 数据 包就会被送到网络接口 否则数据包会被送到缺省网关 对直接在因特网上的大多数主机 而言 缺省网关是某一 ISP 在本例中 这意味着所有的出站因特网连接都经过 DSL 接口 在因特网冗余连接的环境下 这不是所希望发生的行为 如果你给系统添加了线缆调制解 调器 并不希望你的线缆调制解器连接利用 DSL 连接进行响应 为了解决这个问题 我们使用 ip 命令建立了多个多路由表 根据出站数据包的 IP 源地址 来选择路由表 利用下列命令可以做到这点 Setup source IP routing rules for DSL ip rule add from 63 89 102 157 lookup 1 ip route add 10 0 0 0 24 via 10 0 0 1 table 1 ip route add 0 0 via 63 89 102 1 table 1 Setup source IP routing rules for cable modem ip rule add from 65 3 17 133 lookup 2 ip route add 10 0 0 0 24 via 10 0 0 1 table 2 ip route add 0 0 via 65 3 17 1 table 2 如果出自数据包来自源地址 63 89 102 157 DSL 它就会查看含有两个条目的路由表 1 ip route list table 1 10 0 0 0 24 via 10 0 0 1 dev eth0 default via 63 89 102 1 dev eth1 第一行把本地流量发送到内部网络 第二行捕获所有剩余的数据包后 通过 DSL 接口发送 到 ISP 线缆调制解器接口的路由表 2 工作方式同样如此 负载平衡 为了平衡来自内部网络的出站网络连接的负载 就要用到 CONFIG IP ROUTE MULTIPATH 内核选项 它使你可以有多个缺省网关 办法就是 从 etc sysconfig network 文件中去除缺省网关 然后利用下列命令 设置使用高级路由特性的 缺省网关 ip route add default equalize nexthop via 63 89 102 1 dev eth1 nexthop via 65 3 17 1 dev eth2 要查看高级路由表 使用下列命令 ip route list 255 255 255 255 dev eth0 scope link 255 255 255 255 dev eth2 scope link 255 255 255 255 dev eth1 scope link 10 0 0 1 dev eth0 scope link 63 89 102 157 dev eth1 scope link 65 3 17 133 dev eth2 scope link 10 0 0 0 24 dev eth0 proto kernel scope link src 10 0 0 1 63 89 102 0 24 dev eth1 proto kernel scope link src 63 89 102 157 65 3 17 0 24 dev eth2 proto kernel scope link src 65 3 17 133 127 0 0 0 8 dev lo scope link default equalize nexthop via 63 89 102 1 dev eth1 weight 1 nexthop via 65 3 17 1 dev eth2 weight 1 CONFIG IP ROUTE MULTIPATH 内核选项会使 Linux 把所有的这些路径 缺省路由 看成 具有同等的 成本 然后利用不确定的方式从中选择一条路径 据 usr src linux Documentation Configure help 所述 Ip route 命令的 equalize 选项使 Linux 内核 可以基于 IP 地址对出站连接实现负载平衡 对某个 IP 地址而言 内核会选择一个用于传 输出站数据包的接口 然后内核会为这个 IP 地址在路由缓冲区中把这个决定记为条目 这 样 就可以通过同一接口实现进一步与该 IP 地址相连的连接 直到路由缓冲区中的该条目 失效为止 你可以使用 ip route list cache 命令查看路由缓冲区 利用 Linux 实现冗余因特网链路 2 配置服务 如果实施循环配置的 DNS 就可以实现各种服务 DNS SMTP HTTP LDAP SSH 等 的冗余 而实现 DNS 的冗余 只要列出两条权威性的 NS 记录 每个外部接口各一条 可 以减少每条 DNS 记录的生存时间 TTL 以便远程系统只能缓冲 30 分钟的 IP 信息 这 样就会使出站流量以循环方式分散在两个 IP 地址上 对入站 SMTP 连接而言 两条权重相 等 10 的 MX 记录添加到 DNS 当中 这样如果一个接口出了故障 入站电子邮件可以 通过另一个接口传送 你可以按照下列方式 使用 dig 命令 功能增强的 nslookup 核实你的 DNS 配置 dig alphapager org any DiG 8 2 alphapager org any res options init recurs defnam dnsrch got answer HEADER nslookup Server proxy in alphapager org Address 10 0 0 1 Name Addresses 65 3 17 133 63 89 102 157 对 Apache 而言 用 httpd conf 中的下列行可以支持多个指定虚拟主机 NameVirtualHost 63 89 102 157 80 NameVirtualHost 65 3 17 133 80 利用循环配置的 DNS 就可以分配入站的 LDAP 和 SSH 流量 不需要特别配置 启动脚本 为了支持我们的网络配置 许多启动脚本必须加以修改 这些脚本是 Red Hat 所特有的 但稍加修改就可以适用于其它版本的 Linux 系统启动后 ip rule 命令只须执行一次 把下 列几行添加到 etc rc d init d network 脚本的启动部分就可以做到这一点 Add non interface specific static rules if f etc sysconfig static rules then sh etc sysconfig static rules fi etc sysconfig static rules 文件包含 Setup source IP routing rules ip rule add from 63 89 102 157 lookup 1 ip rule add from 65 3 17 133 lookup 2 Setup load balancing ip route add default equalize nexthop via 63 89 102 1 dev eth1 nexthop via 65 3 17 1 dev eth2 每次对相应接口执行 ifup 后 都要执行 ip route 命令 往 etc sysconfig network scripts ifup routes 中添加下列几行 Add any advanced routes grep advanced etc sysconfig static routes while read ignore dev args do if dev 1 then sbin ip route add args fi done etc sysconfig static routes 文件包含 advanced eth0 10 0 0 0 24 via 10 0 0 1 table 1 advanced eth0 10 0 0 0 24 via 10 0 0 1 table 2 advanced eth1 0 0 via 63 89 102 1 table 1 advanced eth2 0 0 via 65 3 17 1 table 2 防火墙 如果你的主机连接到因特网上 就应该运行防火墙 阻止讨厌的流量进入主机 决定允许 哪些服务可以通过因特网访问 拒绝所有其它服务的连接 记住 运行防火墙并不意味着 你的系统就安然无恙 你允许通过防火墙的任何服务都有其自身的安全漏洞 会被黑客所 利用 所以你使用安全补丁确保应用系统最新非常重要 大多数防火墙的脚本只支持与内部网络相连的单一外部网络连接 为了支持多个外部网络 接口 就要自己编写一些防火墙脚本 第一个脚本使用名为 ipchains 的基于数据包的防火 墙 它随 Linux 2 2 内核一同交付 第二个脚本使用名为 iptables 的基于数据包的防火墙 它随 Linux 2 4 内核一同交付 在 Linux 2 4 内核环境下运行 ipchains 防火墙是有可能 但 你无法同时使用 ipchains 和 iptables iptables 是 ipchains 的后续版本 功能更为强大 因为它支持连接跟踪 这为 Linux 赋予了 状态防火墙功能 Iptables 也可以扩展 这意味着无须为 iptables 修改基本的源代码 就能 为其添加新功能 如字符串匹配 ipchains 和 iptables 都可以把流量分成几个不同的规则链 决定接受还是拒绝数据包 iptables 使用名为 filter nat 和 mangle 的三个链表来过滤数据 包 数据包经过一个链时 每个规则依次接受检查 直到发现匹配为止 Ipchains 中的三个标准链名为 INPUT FORWARD 和 OUTPUT 这些链还出现在过滤表内 的 iptables INPUT 链分析刚到达网络接口的数据包 FORWARD 链分析伪装的数据包 OUTPUT 链分析即将从网络接口发出去的数据包 图 2 描述了数据包通过 ipchains 防火墙 当中的不同链时所经过的路径 图 2 ipchains 数据包的传输路径 在 iptables 中 nat 表另有两个链 PREROUTING 和 POSTROUTING 这些链用于进行伪 装 又叫作网络地址转换 所有数据包到达网络接口后 但从网络接口发出去之前都会经 过这些链 在 iptables 中 INPUT 和 OUTPUT 链用于处理发往防火墙的数据包 FORWARD 链只处理伪装的数据包 图 3 描述了数据包通过 iptables 防火墙当中的不同链 时所经过的路径 图 3 iptables 数据包的传输路径 iptables 中和 mangle 表使用 PREROUTING 和 OUPUT 链 以便你修改数据包中的 IP 标识 如生存时间 TTL 或服务类型 TOS 若想知道数据包如何通过 ipchains 和 iptables 中的不同链方面更详细的介绍 请访问网址 http www linuxdoc org HOWTO IPCHAINS HOWTO 4 html http www linuxdoc org LDP nag2 x 087 2 firewall future html 防火墙内核配置 要建立使用 Linux 2 2 内核的 ipchains 防火墙 你必须在内核配置文件中激活下列功能 CONFIG IP FIREWALL y CONFIG IP MASQUERADE y CONFIG IP MASQUERADE ICMP y CONFIG IP ROUTE TOS y CONFIG SYN COOKIES y 而要建立使用 Linux 2 4 内核的 iptables 防火墙 你必须在内核配置文件中激活下列功能 CONFIG IP NF IPTABLES y CONFIG IP NF CONNTRACK y CONFIG IP NF MATCH LIMIT m CONFIG IP NF MATCH PSD m CONFIG IP NF MATCH STATE m CONFIG IP NF MATCH IPLIMIT m CONFIG IP NF MATCH STRING m CONFIG IP NF FILTER m CONFIG IP NF TARGET REJECT m CONFIG IP NF NAT m CONFIG IP NF TARGET MASQUERADE m CONFIG IP NF TARGET REDIRECT m CONFIG IP NF MANGLE m CONFIG IP NF TARGET TOS m CONFIG IP NF TARGET LOG m CONFIG IP ROUTE TOS y CONFIG SYN COOKIES y 截至写稿日期 这些内核功能的一部分并未出现在主流的 Linux 2 4 内核中 不过可以作为 补丁的方式添加进去 要把这些功能添加到内核中 应该安装 Linux 内核 2 4 13 和 iptables1 2 4 它们可在下列网址获得 http www kernel org pub linux kernel v2 4 linux 2 4 13 tar gz http netfilter filewatcher org iptables 1 2 4 tar bz2 按下列步骤把试验性的 iptables 补丁添加到内核中 1 把 Linux 2 4 13 安装到 usr src linux 并加以运行 2 把 iptables 1 2 4 tar bz2 解压到它自己的目录中 3 iptables 1 2 4 make patch o matic 对下列补丁回答 yes string psd port scan detection iplimit 不是每个补丁都兼容 所以只须选择你要用的补丁 利用利用 Linux 实现冗余因特网链路 实现冗余因特网链路 3 4 iptables 1 2 4 make install 5 usr src linux make oldconfig 对作为补丁添加到内核的 CONFIG IP NF MATCH 选项回答 m 6 重新编译内核 并重新启动 注意 这些指令是 Linux 内核 2 4 13 和 iptables 1 2 4 所特有的 预计在将来某个时候 这 些试验性功能会成为主流内核版本的一部分 防火墙脚本 防火墙脚本的基本流程是依次配置 INPUT FORWARD 和 OUTPUT 链 iptables 防火墙脚 本还要配置 PREROUTING 和 POSTROUTING 链 每个脚本都有注释 描述哪些流量被接 收或被拒绝 REJECT 会忽略数据包 并且向发送者返回 ICMP 响应 通知发送者数据包 已被丢弃 DENY ipchains 或者 DROP iptables 索性丢弃数据包 不返回响应 这样有人探 测某个端口时 系统如同不存在 本文中的防火墙脚本被编写成丢弃 INPUT 和 FORWARD 链上的数据包 以便不向远程系统返回响应 脚本将拒绝接受 OUTPUT 链上 的数据包 这样如果是无效的出站数据包 本地系统就会收到响应 要将防火墙脚本安装在 Red Hat 7 1 系统上 就要把脚本放在 etc init d firewall 中 然后执 行下列命令 chkconfig firewall on 要为你的系统配置防火脚本 必须编辑下列两行 定义内部和外部接口 INT IFACE eth0 EXT IFACES eth1 eth2 INPUT 链为所允许的服务在防火墙上开了通道 其它服务一概拒绝 你要为特定系统编辑 服务列表 利用 ipchains 防火墙脚本中的下列几行 就可以允许入站连接 ACCEPT TCP connections for various services found in etc services for service in ftp ssh smtp domain http auth ldap https do ipchains A INPUT i EXT IFACE p tcp d IP service j ACCEPT done 防火墙脚本在主机允许的各种服务间进行循环 在本例中 这些服务是 FTP SSH Sendmail DNS 区域传送 HTTP ident LDAP 和 HTTPS 这些基于 TCP 的协议的名字和端口号可以在 etc services 文件中找到 利用 ipchains 防火墙脚本中的下列规则 INPUT 链还接收来自任何源自本地的连接的响应 返回 ACCEPT non SYN TCP packets on unprivileged ports returns ipchains A INPUT i EXT IFACE p tcp y d IP 1024 j ACCEPT ACCEPT all UDP packets on unprivileged ports ipchains A INPUT i EXT IFACE p udp d IP 1024 j ACCEPT ipchains 不支持状态防火墙 所以这是接受返回 TCP 流量的唯一方式 由于支持状态防火 墙功能 又叫作连接跟踪 iptables 大大加强了安全 这功能意味着数据包只有和源自本 地的活动连接相匹配 才会被接收 在 iptables 防火墙脚本中可以使用下列规则来处理 ACCEPT return TCP UDP traffic stateful firewall iptables t filter A INPUT m state state ESTABLISHED i EXT IFACE p tcp d IP dport 1024 j ACCEPT iptables t filter A INPUT m state state ESTABLISHED i EXT IFACE p udp d IP dport 1024 j ACCEPT 即使 UDP 是一种无状态协议 iptables 连接跟踪也能维持状态表 并且只对源自本地的流 量作出 UDP 端口上的响应 iptables 防火墙脚本接受入站连接 并利用下列规则将新连接加入到连接跟踪数据库中 ACCEPT inbound TCP connections for various services found in etc services for service in ftp ssh smtp domain http auth ldap https do iptables t filter INPUT m state state NEW ESTABLISHED i EXT IFACE p tcp d IP dport service j ACCEPT done 你可以通过查看 proc net ip conntrack 文件来查看连接跟踪数据库 下列 iptables 规则允许在 TCP 端口 20 上有主动模式的 FTP 连接请求 ACCEPT active FTP data connections on firewall iptables t filter A INPUT m state state RELATED i EXT IFACE p tcp d IP dport 1024 sport ftp data j ACCEPT 下列规则允许对 BIND 进行入站 DNS 查询 ACCEPT inbound DNS requests iptables t filter A INPUT I EXT IFACE p udp d IP dport domain j ACCEPT FORWARD 链利用网络地址转换 NAT 为内部网络上的系统对连接进行伪装 大多数 协议可以使用 NAT 只有几种协议需要一些帮助 使用重写 IP 地址的一种特殊模块 主 动模式的 FTP 连接需要帮助程序才能通过防火墙 你可以使用 modprobe 命令加载 ip masq ftp ipchains 或 ip nat ftp iptables 模块 除非它们编译后已经加入到内核中 以 便对主动 FTP 连接进行伪装 主动 FTP 连接上的远程机器通过防火墙要求连接本地机 以 传输数据 ip masq ftp 模块重写 FTP 连接中的数据包 以便内部机器看上去直接连在因特 网上 被动模式的 FTP 连接通过 TCP 端口 21 传输所有数据 从而避开了这个问题 如果 你决定支持 FTP 要记住 FTP 会以明文格式通过网络传输密码 所以并不安全 FTP 之外 的一种安全方案就是 sftp 它使用安全套接层作为通信方式 sftp 随 OpenSSH 客户端工具 一同发行 各种应用系统的其它伪装模块可以在 lib modules uname r ipv4 ipchains 或者 lib modules uname r kernel net ipv4 netfilter iptables 目录中找到 FORWARD 链使用下列 iptables 规则来伪装通过防火墙的数据包 ACCEPT new outbound traffic stateful firewall iptables t filter A FORWARD m state state NEW ESTABLISHED i INT IFACE s INT NET j ACCEPT ACCEPT return traffic stateful firewall iptables t filter A FORWARD m state state NEW ESTABLISHED RELATED i EXT IFACE s INT NET j ACCEPT Pass Internet traffic to internal network unmodified iptables t nat A POSTROUTING o INT IFACE j ACCEPT Masquerading outbound connections from internal network iptables t nat A POSTROUTING o EXT IFACE j MASQUERADE OUTPUT 链只接受通过正确接口发出去的网络流量 OUTPUT 链还可以通过配置服务类型 TOS 标识来确定某些流量的先后次序 譬如 TOS 标识可用来确定交互 SSH 流量 通过 FTP 的先后次序 TOS 标记有多种 Minimize Delay Maximize Throughput

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论