RedHat 7.1下Ipchains的经典应用

weixin_38088445 2003-03-19 01:43:31

RedHat 7.1下Ipchains的经典应用
                     作者:谢洁锐
                Email:tennic@21cn.com

摘要:
  网络的安全性是一个不可忽视的问题,Linux从早期版本的ipfwadm到2.2的ipch
ains和2.4的netfilter,提供了配置简单而强大的防火墙工具。本文以一个小企业网
络网络为例子,讲述了RedHat7.1下使用ipchains的几个实用配置,其中包括内外网
的IP隐藏(Masquerading)和口转发(Port forwarding);另外给出有效和安全的
rule配置规范。

一、基本知识和假设

1.选择防火墙策略
  防火墙一般只有两个策略:
     A.除了明确允许,否则拒绝
     B.除了明确拒绝,否则允许
  第一种更能保证网络的安全性,这也是我们实验采用的策略。

2.网络结构设计          
  我们的实验网络由一个防火墙和两个局域网组成,防火墙放在内部网和Internet
(专线上网)的中间。 FireWall所在的机器配置两个TpLink8139a/10m网卡,
只有外部网卡上使用合法IP202.116.0.1,其他均为 保留IP。第一个内部网(LAN1)
192.168.1.*局域网连接到网关192.168.1.1,第二个内部网(LAN2)192.168.2.*
局域网连接到网关192.168.2.1。企业的要求是内部网的机器能访问Internet,
并且对外提供www服务。

 网络结构图如下:

  
             INTERNET
                        |
-----------------[202.116.0.1]--------------------------
|                          |                               |          
|              FireWall                                 |       
|                        |                               |       
---------[192.168.1.1]-----------[192.168.2.1]-----------
               |                    |
      +-------------+         +-------------+
[92.168.1.2] [192.168.1.3]  [192.168.2.2] [192.168.2.3](www)


系统要求:
系统版本:RadHat7.1
Ipchains版本:1.3.10(已内置)

二、前期准备

1.安装网卡
   实验网络需要3个网卡,按照如下顺序配置:  
        A.添加配置外部网卡eth0:
                 #netconfig
                 IPADDR=202.116.0.1
                 NETMASK=255.255.255.0
                 DefalutGW=202.116.0.254
        B.添加配置LAN1网卡eth1:
                 编辑 /etc/sysconfig/network-scripts/ifcfg-eth1  
                 IPADDR=192.168.0.1
                 NETMASK=255.255.255.0
                 ONBOOT=yes
        C.添加配置LAN2网卡eth2:类似B.
       
        提示:如果没有找到ifcfg-eth1/2文件,可以copyifcfg-eht0进行修改.
             不要直接使用ifconfig,否则重启后的重新配置.       

2. 配置路由
        由于上面的配置只有一个默认网关,还没有完成全部必要的路由,所以还要
        手工配置。
        编辑 /etc/rc.d/rc.local
        在最后一个"fi"前添加如下命令,使得每次启动系统都能自动配置路由:
   echo "Setting routes......"
   /sbin/route add -net 127.0.0.0     
   /sbin/route add -net 202.116.0.1 netmask 255.255.255.0 eth0
   /sbin/route add -net 192.168.1.0 netmask 255.255.255.0 eth1
   /sbin/route add -net 192.168.2.0 netmask 255.255.255.0 eth2
   /sbin/route add -host 202.116.0.1 eth0
   /sbin/route add -host 192.168.1.1 eth1
   /sbin/route add -host 192.168.2.1 eth2
   /sbin/route add default gw 202.116.0.254
       
        提示:为了能保存配置,不使直接用route.
             配置eth1,eth2致关重要,否则本地数据报不可能别转发.
       
3.加入Ipchains
  虽然7.1内置了ipchains,为了保证能正确启动,最好完成下面步骤:
      
       A.添加模组
         #linuxconf
         选择[Control]->;[Control files and systems]->;[Configure Linuxconf modules],
         点选[firewall]模组。
       #reboot (重新开机)
       B.启用转发功能
         #linuxconf
         选择[Networking]->;[clinet tasks]->;[Routing and gateways]->;[Set Defaults],
         点选 [X] Enable routing
       C.启用规则链
       选择[Config]->;[Networking]->;[Firewalling]->;[Firewalling],
       启用选择下面三项
         Inputing rules (*) are active
         Outputing rules (*) are active
         Forwarding ules (*) are active
       D.启动ipchains
         # setup
         进入 System,services 选项里,选取ipchains,
         确保系统会自动启动防火墙.
       
        提示:B可以用下面方法代替
           #/etc/sysconfig/network中添加FORWARD_IPV4=yes
          或者:
           #echo '1' >;/proc/sys/net/ipv4/ip_forward  

三、初始化和规则规范

    1.虽然可以通过shell执行ipchains配置规则,但为了不小心通过命令行添加和
     删除规则,造成防火墙不全安全,也为了能保存已有规则,建议把所有规则
     放在一个可执行的shell脚本中,通过修改脚本管理规则,并且通过执行shell
     脚本添加规则。
        #touch /etc/rc.d/rc.myfirewall
        #chmod u+x /etc/rc.d/rc.myfirewall
   
        通过vi管理规则
        #./rc.myfirewall导入规则
        脚本的格式:
        /sbin/ipchains 规则

   2.定义全局变量
             EXTERNAL_INTERFACE="202.116.0.1"
             LAN1_INTERFACE="192.116.1.1"
             LAN2_INTERFACE="192.116.2.1"
             LOOPBACK_INTERFACE="lo"
   3.由于我们采用了"除了明确允许,否则拒绝"的策略,我们的防火墙的初始化部分
     如下:

        #Set the policy
        /sbin/ipchains -P input DENY
        /sbin/ipchains -P output DENY
        /sbin/ipchains -P forward DENY

        #Flush the chains
        /sbin/ipchains -F input
        /sbin/ipchains -F output
        /sbin/ipchains -F forward
   
        #other Firewall rules
   
    4.为了安全可以启动必要的日记记录;
       并通过添加用户自定义链优化规则。

四、实验设计和测试               
      下面按照上面的要求,设计了实验的案例。请注意,实验过程基本上是顺序进
    行,因为后一个案例可能依赖于前一个的完成。

   1.本地环路访问
     原理:由于我们的默认为拒绝所有包,环路接口的数据包也被拒绝,为了能使用
          系统日记、X Windows和其他本地UNIX域及基于socket的服务,
          必须允许这些数据报通过。
     规则:
          ipchains -A input -i $LOOKBACK_INTERFACE -j ACCEPT
          ipchains -A output -i $LOOKBACK_INTERFACE -j ACCEPT
     测试:
           ping  202.116.0.1  [ok]
           ping  127.0.0.1    [ok]
               
   2.允许内部机器访问Internet
     原理:由于内部网使用的不是合法IP,所以无法直接访问Internet,数据包会
          被eth0被丢弃。我们使用用到Ip隐藏或Ip欺骗技术,实现单个IP的共享,
          即NAT(Net Address Transporting)。其原理是:LAN的数据
          报从内部网关上的输出队列转到外部网卡的输入队列前,数据报的源地址
          被替换为外部网卡IP即202.116.0.1,再传到Internet上。
     规则:  
           #只允许Internet对外部卡的访问:
            ipchains -A output -i eth0 -s EXTERNAL_INTERFACE all -d 0/0 all -j ACCEPT
            ipchains -A input  -i eth0 -s 0/0 all -d EXTERNAL_INTERFACE all -j ACCEPT
           #外部卡上的IP隐藏:
            ipchains -A forward -i eth0 -s $LAN1_INTERFACE/24 -j MASQ
            ipchains -A forward -i eth0 -s $LAN2_INTERFACE/24 -j MASQ

           #允许LAN1访问所有外部IP:       
            ipchians -A output -i eth1 -s 0/0 all -d 0/0 all -j ACCEPT
            ipchians -A input -i  eth1 -s 0/0 all -d 0/0 all -j ACCEPT

            #允许LAN2访问所有外部IP:       
            ipchians -A output -i eth2 -s 0/0 all -d 0/0 all -j ACCEPT
            ipchians -A input  -i eth2 -s 0/0 all -d 0/0 all -j ACCEPT
      测试:
           【192.168.1.2】:ping InternetIP               [ok]
           【192.168.2.2】:ping InternetIP               [ok]

     3.内部多个LAN的相互访问
        原理:要求LAN1,LAN2能不需要Ip隐藏地互相访问,只要网关支持转发就可
             以。
       
        规则:
          #允许从内部网1到内部网2访问:
          ipchains -A output -i eth1 -s $LAN1_INTERFACE/24 -d $LAN2_INTERFACE/24 -j ACCEPT
          ipchains -A input  -i eth1 -s $LAN2_INTERFACE/24 -d $LAN1_INTERFACE/24 -j ACCEPT
          ipchains -A forward -i eth1 -s $LAN1_INTERFACE/24 -d $LAN2_INTERFACE/24 -j ACCEPT

          #允许从内部网2到内部网1访问:
          ipchains -A output  -i eth2 -s $LAN1_INTERFACE/24 -d $LAN2_INTERFACE/24 -j ACCEPT
          ipchains -A input   -i eth2 -s $LAN2_INTERFACE/24 -d $LAN1_INTERFACE/24 -j ACCEPT
          ipchains -A forward -i eth2 -s $LAN1_INTERFACE/24 -d $LAN2_INTERFACE/24 -j ACCEPT

               测试:
          【192.168.1.2上】:ping 192.168.2.3               [ok]
          【192.168.2.2上】:ping 192.168.1.3               [ok]

     4.允许Internet对内部服务www的访问
        原理:外部机器无法访问到内部服务,可以使用代理;另种方法就是利用端
             口转发了。端口转发是在IP层内核一级重写数据包,所以应用级代理
             更加稳定可靠,速度更快。而且可以在防火墙外部地址上使用IP别名
             处理更多的端口转发请求(如若有多台WWW服务器).
        
             在访问过程中分为(见下图),外部机器对内部机器的服务请求及外部机
             器对请求的相应, 所以同时用到前面的Masquareding和
             Port Forwarding。
        

LAN 数据报                     |---MASQ---|      Internet数据报
(www相应)[srcIP:192.168.0.1]-->;| Firewall |-->; [srcIP:202.116.0.1]
(www请求)[dIP:192.168.0.1]<-|-Port FW--|<-[srcIP:202.116.0.1]

           Linux7.1已经有一个端口转发模块ip_masq_portfw,但是配置和管
           理却是通过第三方程序ipmasqadm,可以在下面FTP上找到           ipmasqadm RPM包。
            ftp://ftp.redhat.com/pub/contrib/libc6/i386/
            ipmasqadm-0.4.6.i386.rpm
           
      规则:
          由于有了前面“允许内部机器访问Internet”的配置,我们所要做的就是启
          动外部接口的端口转发规则:   
          /usr/sbin/ipmasqadm portfw -a -P tcp /
          - L EXTENAL_INTERFACE 80 -R 192.168.1.2 80
五、后记
   ipchains配置比较简单,安全性也比较强,但是随着netfilter的出现,尤其是
由于netfilter 允许建立状态防火墙,能够过滤TCP标志任意组合报文,还能够过滤
MAC地址,所以比ipchains具有的优势。所以会有越来越多的管理员转而使用
Netfilter.


参考资料:
.....
...全文
14 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

430

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧