logo资料库

用Linux+Iptables构建防火墙实例.doc

第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
资料共7页,全文预览结束
用 Linux+Iptables 构建防火墙实例 前言 用 Linux+iptables 做防火墙具有很高的灵活性和稳定性(老兄我的防火墙 自从做了之 后还一直没有重启过),但安装和设定起来比较麻烦,而且容易出错,本文旨在用为公司做 防火墙的实例,让大家对 Linux+iptables 做防 火墙的安装和配置有一个大致的了解,希望 能起到抛砖引玉的作用。 系统环境与网络规化 先了解一下公司的环境,公司利用 2M ADSL 专线上网,电信分配公用 IP 为 218.4.62.12/29,网关为 218.4.62.13 ,公司有电脑五十多台,使用 DHCP,IP 是 192.168.2.XXX,DHCP Server 建在 iptables Server 上;另公司有一电脑培训中心,使用 指定固定 IP,IP 为 192.168.20.XXX,为了更加快速的浏览网页,我们架了一台 Squid Server, 所有电脑通过 Squid Server 浏览网页,公司还另有一台 WEB Server+Mail Server+Ftp Server。其 IP 为 218.4.62.18。以上电脑和服务器要求全架在防火墙内。我们规化如下: Iptables Server 上有三块网卡,eth0 上加有二个 IP,218.4.62.14 和 218.4.62.18。 其中 218.4.62.14 为共享上网,218.4.62.18 为 WEB Server 专用,Eth1 的 IP 为 192..168.2.9;为了使培训中心 PC 与公司 PC 之间互不访问,所以直接从 Iptables Server 接到 Switch-B,eth2 接至 Switch-A,连接培训中心 PC 和 Squid Server, Web Server。 网络规化好了后,就开始装服务器了,Iptables Server 用的系统为 Redhat Linux V7.3。在装服务器时要注意选上防火墙的安装包。 IPTABLES 基础 Iptables 语法: Iptables [-t TABLE] ACTION [PATTERN] [-j TARGET] TABLE: 有 filter,nat,mangle;若无指定,预设为 filter table. ACTION(对 Chains 执行的动作): ACTION 说明 -L Chain 显示 Chain 中的所有规则 -A Chain 对 Chain 新增一条规则 -D Chain 删除 Chain 中的一条规则
-I Chain 在 Chain 中插入一条规则 -R Chain 替换 Chain 中的某一条规则 -P Chain 对 Chain 设定的预设的 Policy -F Chain 清除 Chain 中的所有规则 -N Chain 自订一个 Chain -X 清除所有的自订 Chain CHAINS: Iptables 有五条默认的 Chains(规则链),如下表: Chains 发生的时机 PREROUTING 数据包进入本机后,进入 Route Table 前 INPUT 数据包通过 Route Table 后,目地为本机 OUTPUT 由本机发出,进入 Route Table 前 FORWARD 通过 Route Table 后,目地不是本机时 POSTROUTING 通过 Route Table 后,送到网卡前 PATTERN(设定条件部份): 参数 内容 说明 -p Protocol 通讯协议,如 tcp,udp,icmp,all 等。。。 -s Address 指定的 Source Address 为 Address -d Address 指定的 Destination Address 为 Address -I Interface 指定数据包进入的网卡 -o Interface 指定数据包输出的网卡 -m Match 指定高级选项,如 mac,state,multiport 等。。。 TARGET(常用的动作): TARGET 说明
ACCEPT 让这个数据包通过 DROP 丢弃数据包 RETURN 不作对比直接返回 QUEUE 传给 User-Space 的应用软件处理这个数据包 SNAT nat 专用:转译来源地址 DNAT nat 专用:转译目地地址 MASQUERADE nat 专用:转译来源地址成为 NIC 的 MAC REDIRECT nat 专用:转送到本机的某个 PORT 用/etc/rc.d/init.d/iptables save 可在/etc/sysconfig/中产生一 iptables 文件, 大家可以看到,它有三个*号开始的行,其每一个以*号开始的行对应一个 table,以 COMMIT 表示此 table 的结束。可将要定的规则加入到对应的 table 中,如下: [root@jiaoyuang init.d]# ./iptables saveSaving current rules to /etc/sysconfig/iptables: [ OK ][root@jiaoyuang init.d]# cat /etc/sysconfig/iptables # Generated by iptables-save v1.2.4 on Sat Sep 28 16:51:22 2002 *mangle :PREROUTING ACCEPT [61522:8074850] :OUTPUT ACCEPT [1079:79301] COMMIT # Completed on Sat Sep 28 16:51:22 2002 # Generated by iptables-save v1.2.4 on Sat Sep 28 16:51:22 2002 *nat :PREROUTING ACCEPT [31850:5091703] :POSTROUTING ACCEPT [20:1240] :OUTPUT ACCEPT [12:776]
COMMIT # Completed on Sat Sep 28 16:51:22 2002 # Generated by iptables-save v1.2.4 on Sat Sep 28 16:51:22 2002 *filter :INPUT ACCEPT [61444:8070296] :FORWARD ACCEPT [34:1984] :OUTPUT ACCEPT [1079:79301] COMMIT 安装并启动 IPTABLES 在安装 RedHat Linux V7.3 后,iptables 就已经被安装了,但默认启动的是 ipchains。 你在安装时所定义的一些规则也在 /etc/sysconfig/ipchains 中被定义。我们需要将其停 止,才能启动 iptables(注意:虽然不停止 ipchains 也可以启动 iptables,但这时 iptables 并没有真正的起作用。Ipchains 和 iptables 是两个防火墙,你只能选择一个)。 service ipchains stop (停止 ipchains) chkconfig --level 2345 ipchains off (使 ipchains 系统启动时不自动启动) chkconfig --level 2345 iptables on (使 iptables 在系统启动时自动启动) vi /etc/rc.d/rc.local (编辑 rc.local,将下面四行加到最后) ifconfig eth0 add 218.4.62.18 netmask 255.255.255.248 modprobe ip_conntrack_ftp modprobe ip_nat_ftp echo “1” > /proc/sys/net/ipv4/ip_forward (第一行是在 eth0 上再加一个 IP:218.4.62.18,因在安装时只能设一个 IP: 218.4.62.14。Ip_conntrack_ftp 和 ip_nat_ftp 为 iptables 运得必须的两个模块;最后一 行为使开启服务器 IP 转发功能。) (如果你将 iptables 的模块加到了内核中,以上第二,三行可省略。)
配置 DHCP Server,以便让公司 PC 自动获得 IP 和网关,网关为 192.168.2.9。具体的 方法请参见相关资料,本文不作详述。 reboot 重新启动服务器后,Iptables 就已经开始运行了。 配置 IPTABLES 对 iptables 有了一个基本的了解后,我们就可以来配置我们的服务器了。首先要发布 我们的 WEB Server,将以下二行加入/etc/sysconfig/iptables 中的 nat table 内: -A PREROUTING -d 218.4.62.18 -j DNAT --to-destination 192.168.20.254 -A POSTROUTING -s 192.168.2.254 -j SNAT --to-source 218.4.62.18 第一行为将至服务器的所有目地地址为 218.4.62.18 的包都 NAT 为 192.168.2.254,第 二行为将至服务器的所有源地址为 192.168.2.254 的包为 NAT 到 218.4.62.18。请把 WEB Server 的网关设为 192.168.20.9。 下面我们将所有从服务器共享出去的包都 SNAT 为 218.4.62.14,就可完成共享上网的 功能了: -A POSTROUTING -s 192.168.0.0/16 -j SNAT --to-source 218.4.62.14 将下面的规则加入到/etc/sysconfig/iptables 中的 filter tables 内: -A INPUT -p icmp -m icmp --icmp-type 8 -m limit --limit 6/min --limit-burst 2 -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type 8 -j REJECT --reject-with icmp-port-unreachable 以上两行是为了防止 Dos 攻击做的一个简单的处理,大家对于各种攻击可做出相应的 处理。 -A INPUT –i eth0 –m state –state ESTABLISHED,RELATED –j ACCEPT-A INPUT –i eth0 –j DROP 以上两行是做了一个 INPUT 状态防火墙的处理,其主要作用为防止外部的连接和攻击, 因其接受 ESTABLISHED,RELATED 状态(一个包分为 NEW,ESTABLISHED,RELATED,INVALID 四 种状态)的包,故又不妨碍从本机出去的连接。 由于并不是所有的电脑都可以上网,所以还要对共享上网的电脑做一个限制: IP 限制:
-A FORWARD –s 192.168.2.0/29 –p udp –m multiport –port 53 –j ACCEPT -A FORWARD –s 192.168.2.0/29 –p tcp –m multiport –port 3128,110,25 –j ACCEPT -A FORWARD –s 192.168.20.253 –j ACCEPT 充许 192.168.2.0~192.168.2.7 和 192.168.20.253(squid server)的电脑可上网和发 邮件。3128 是 squid server 的 proxy port。我们用它去共享上网,110 为 pop3,25 为 smtp。 Udp 的 53 为 DNS 所要的 port。不过由于使用的是 DHCP,可能每次得到的 IP 都不一样,所 以我们就要用下面一种 MAC 限制的方法了。 MAC 限制: -A FORWARD –m mac -–mac XX:XX:XX:XX:XX:XX –p udp –m multiport –port 53 –j ACCEPT -A FORWARD –m mac -–mac XX:XX:XX:XX:XX:XX –p tcp –m multiport –port 3128,110,25 –j ACCEPT 如上就可通过网卡来控制上网了,但现在电脑高手多多,改一个 MAC 的地址好像也不 是什么难事了,怎么办呢?那就用我们的第三种方法吧。 MAC+IP 限制: 更改/etc/dhcpd.conf,如果 MAC 与 IP 绑定: subnet 192.168.2.0 netmask 255.255.255.0{ range 192.168.2.30 192.168.2.230; option broadcast-address 192.168.2.255; option routers 192.168.2.9; option domain-name-servers 212.132.16.163; host meeting-room { hardware ethernet 00:50:ba:c8:4b:3a; fixed-address 192.168.2.35; }}
我们的 Iptables 改为:0 -A FORWARD –s 192.168.2.35 –m mac -–mac XX:XX:XX:XX:XX:XX –p udp –m multiport –port 53 –j ACCEPT -A FORWARD –s 192.168.2.35 –m mac -–mac XX:XX:XX:XX:XX:XX –p tcp –m multiport –port 3128,110,25 –j ACCEPT 这样做之后,高手也无能为力了,不过公司有位 MM 是兄台的 GF,上班的时候想和她聊 聊天,培养培养感情;怎么办呢?我们知道 QQ 用的是 udp 的 4000 端口,如占用则 4002,4003。。。那么就如下了: -A FORWARD –s 192.168.2.35 –m mac -–mac XX:XX:XX:XX:XX:XX –p udp –m multiport –port 53,4000,4001,4002,4003,4004,4005 –j ACCEPT -A FORWARD –s 192.168.2.35 –m mac -–mac XX:XX:XX:XX:XX:XX –p tcp –m multiport –port 3128,110,25 –j ACCEPT 最后加一句: -A FORWARD –s 192.168.0.0/16 –j DROP 由于前面应该开的都开了,所以最后全部禁止。 总结 世界上没有绝对安全的防火墙,安全永远是相对的。配置 iptables 的思路是先 ACCEPT 再 DROP。共享上网的办法还有一个就是用 iptables server 的 Owner,但由于 linux 没有像 win2k 那样的验证模式,在验证 owner 时有些困难。
分享到:
收藏