荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: zzt (好好学习,天天向上), 信区: Linux
标  题: Linux中的防火墙 IPCHAINS和/proc/sys
发信站: BBS 荔园晨风 (Thu Sep 16 08:55:54 1999), 站内信件

                               Linux中的防火墙

                              IPCHAINS和/proc/sys

    ipchains是linux中的新一代防火墙配置方式, 在ipchains中, 将防火墙规则
整理成chains,  一个 chains 中可以包含多条规则. 系统缺省建立了三条chains
: input output forward.

    规则的样子象下面这样:
    例如
           -p tcp -d 192.168.1.7 80 -j ACCEPT
           -p tcp -s 192.168.1.1 !80 -j DENY

    -p指定协议 -d 指定目的地址 -s 指定源地址  -j 指定如何处理匹配该条规则
的ip包.

    任何一个进入的包都要经过input的处理 任何出去的包都要经过output的处理
任何穿过该机器的包都要经过forward的处理.


    一个穿过该机器的ip包
     ip packet ----> input --------> forward -------> output ---->
                     chains          chains           chains

    一个发往本机的ip包
     ip packet ----> input ---->
                     chains

    如果你不希望你的机器响应ping包括你可以这样作:

    ipchains -A input -p icmp -j REJECT

    -A是指在指定的chains中加入一条规则 这条规则是说所有进来的包如果它的协议
类型是icmp的话就抛弃它

    ipchains -A input -p icmp -s 192.168.1.0/255.255.255.0 -j REJECT
    这一条规则可以使192.168.1.0/255.255.255.0的机器ping不通你 其中的源地址
也可以写成 192.168.1.0/24

    下面介绍一些常用的参数
        -N chains_name         new一个新的chains
        -X chains_name         delete一个空的chains
        -A chains_name         在指定的chains中加入一条规则
        -F chains_name         删除指定chains中的全部规则
        -D chains_name         删出一条规则
        -p protocol_name       协议的名字(tcp udp icmp)
        -i interface_name      接口的名字
                               对于input来说是指包进入的接口
                               对于output来说是指包出去的接口
                               对于forward来说是指包出去的接口
        -P chains rule         改变指定chains的策略(是指它的缺省处理方式)

    下面讲一讲目标 就是-j后面的参数 它们可以是下列值
        ACCEPT         接受 也就是说按正常方式处理它
        REJECT         抛弃 好象根本没有收到过它
        DENY           拒绝 有点象REJECT 但发送icmp包 报错
        MASQ           作ip 伪装
        REDIRECT       重定向到本地的一个端口(只限于tcp, udp)
        RETURN         立即结束本chains的处理
        Other_chains   跳到其他chains中继续处理

    大家可以看到 正是由于 可以在chains之间跳来跳去的才使得它很方便

    在指定协议后可以指定一些与协议相关的参数 例如tcp udp 中的端口号 icmp中的包文
类型
        icmp
            0   echo-reply
            3   destination-unreachable
            5   redirect
            8   echo-request
            11  time-exceeded
    例如你只想拒绝ping的数据包 你可以这样
            ipchains -A input -p icmp -s 192.168.1.7 0 -j DENY


    下面看一看ip伪装
    它通常用于这种情况  你只有少量的合法ip 却希望很多台机器可以上网  你使用一台
机器作
伪装 而其它的机器将他设成网关  这样大家就都可以上网了   实际上 这个网关起了一个
代理服
务器的作用 linux中还专门写了几个模块用于一些特殊的服务 如 FTP
(/lib/modules/2.2.5-15/ipv4/ip_masq_ftp.o). 注意 目标为MASQ的规则只能加在
forward中.
    大家看一下下面的图

                                  Internet
                                     |
                                     | eth0
                            --------------------     eth1
                            |  202.118.67.254
|---------------------202.118.67.252
                            -------------------- 202.118.67.253        WWW
server
                         192.168.1.1 | eth2
                                     |
                  -----------------------------------------
                       subnet 192.168.1.0/255.255.255.0

    这里用一台装了三块网卡的 Linux box 作网关 三快网卡的ip地址分别为
                        eth0 : 202.118.67.254  接internet
                        eth1 : 202.118.67.253  接非军事区
                        eth2 : 192.168.1.1     接内网

    设定ipchains :
        ipchains -P input REJECT
        ipchains -P forward REJECT
        ipchains -P output REJECT

        ipchains -A input -i eth2 -s 192.168.1.0/24 -j ACCEPT
        ipchains -A input -p tcp -i eth1 -s 202.118.67.252 80 -j ACCEPT
        ipchains -A input -p tcp -d 202.118.67.252 80 -j ACCEPT

        ipchains -A forward -s 192.168.1.0/24 -j MASQ

    这样就足够了  对内部作伪装  又允许 外部同自己的www server通信.
    不要忘了插入模块ip_masq_ftp
            insmod  /lib/modules/2.2.5-15/ipv4/ip_masq_ftp.o

    下面是一些细节
        指定端口号
            -p tcp -s 192.168.1.1 80
            -p tcp -s 192.168.1.1 !80
            -p tcp -s 192.168.1.1 80:1000
        注意第二个 !80是指除了80以外端口 第三条是指从80 到1000 之间的端口
        '!' 的用法很广 如
            -s !192.168.1.1
        另外在指定端口号时也可以用符号名 如 www ftp telnet等

        注意在使用icmp的类型时不可以用'!'.
        还可以用下面的参数
            --source-port [!] [port [: port]]
            --destation-port [!] [port [: port]]

        控制syn包 (相当于控制tcp的连接方向)
        [!] -y
        如:
            -p tcp -s 192.168.1.0/24 -y -d 192.168.0.0/24 -j DENY
            这一条相当于使192.168.1.0无法连向192.168.0.0


    在配制linux的防火墙时经常要对 linux 的 tcp/ip 作特殊控制
    /proc是linux中的一个特殊目录 它可以提供很多的统计信息 也可以对内核作控制
/proc/sys就是用于控制的
    许多文件中只包含了一个0或1, 用于表示真或假.

    /proc/sys/net/ipv4目录下的一些文件
         icmp_echo_ignore_all           是否忽略所有的ping包
         icmp_echo_ignore_broadcasts    是否忽略广播的ping包
         ip_always_defrag               是否处理分片
         ip_forward                     是否作IP forward 实际上这于
/etc/sysconfig/network
                                        中的FORWARD_IPV4是一样的
         ip_local_port_range            本地使用的端口范围(在不指定本地端口的情
况下)
                                        文件中包含了两个整数指明了范围
         ipfrag_time                    处理一个分片的最长时间以秒为单位

    /proc/sys/net/ipv4/conf下有几个目录 其中all对应于所有的网络设备
         accept_redirects               是否接受重定向包
         forwarding                     是否允许forward
         send_redirects                 是否发送重定向包
         accept_source_route            是否接受源路由
         rp_filter                      是否只允许直接连接的网络通信
         shared_media                   是否是共享介质
         secure_redirects               是否允许安全重定向(只接受由网关来的)

--
☆ 来源:.BBS 荔园晨风 bbs.szu.edu.cn.[FROM: bbs@192.168.1.144]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店