标签: 控制流量

  • 使用FreeBSD组建控制流量的网关

    FreeBSD在网络服务器的领域里占有一席之地,不管是在高端应用,还是小型企业里,使用FreeBSD做服务器都是不错的选择。

     

    首先我们来安装Gateway,Gateway要使用的Internet的IP为x.x.x.x网卡为vr1,内部 IP为 192.168.1.1网卡为vr0,由于Gateway起到网关的作用,所以为了安全性,在该服务器上做安全是非常重要的,FreeBSD有自带了一个 ipfirewall防火墙,既然有,我们当然要利用上了,首先编译内核:

     

    cd /usr/src/sys/i386/conf

     

    cp GENERIC ./kernel_IPFW

     

    用编辑器打开kernel_IPFW这个文本文件,在该文件里加入以下内容:

     

    options QUOTA #添加磁盘限额

     

    options IPDIVERT #启用由ipfw divert使用的转向IP套接字。

    options IPSTEALTH #隐藏防火墙

     

    #以缺省的、拒绝所有数据包方式启动IPFW

    options IPFIREWALL

    options IPFIREWALL_VERBOSE #向系统的注册程序发送注册信息包。

    options IPFIREWALL_VERBOSE_LIMIT=100 #限制一台机器注册的次数。

     

    # 接受过滤器中的静态连接

    options ACCEPT_FILTER_DATA

    options ACCEPT_FILTER_HTTP

     

    options DUMMYNET #启用流量功能

     

    把以上参数加入以后保存kernel_IPFW文件。

     

    # cd /usr/src

    # make buildkernel KERNCONF=kernel_IPFW

     

    ….

     

    # make installkernel KERNCONF=kernel_IPFW

     

    # reboot

     

    这种编译方法将保留原来的kernel为kernel.old,这样如果你做错了什么,就有机会通过boot:出现时输入kernel.old来恢复。

     

    以上完成以后,你就可以重新启动系统使用新的内核了。

     

    使用新内核以后,如果该系统本来是连在网络上的,那么这时他的网络部分已经完全丧失,这表示系统新的内核已经起作用了,防火墙也起作用了,但由于 FreeBSD的防火墙默认情况下是不允许任何机器访问,所以该机器的任何网络功能都暂时丧失。不过不要着急,接着往下看,你就会觉得非常有意思了。

     

    既然该服务器担当是的网关,那么让网关启动起来是必须的。我们现在再:

     

    cd /etc

     

     

    用编译器编辑rc.conf

     

    加入如下参数:

     

    gateway_enable=”YES” //启动网关

     

    ##########IP-firewall#################

     

    firewall_enable=”YES” //激活firewall防火墙

     

    firewall_script=”/etc/ipfw.conf” //firewall防火墙的规则脚本

     

    firewall_type=”open”

     

    firewall_quiet=”NO” //起用脚本时,是否显示规则信息。

     

    firewall_logging_enable=”YES” //启用firewall的log记录。

     

    ##########NATD#######################

     

    natd_interface=”vr1″ //NATD服务启用在哪块网卡。

     

    natd_enable=”YES” //激活NATD服务

     

    natd_flags=”-config /etc/natd.conf” //NATD服务参数设置文件。

     

    firewall_type说明::

    open-不限制IP访问;

    closed-禁止除通过lo0进行的之外的所有IP服务;

    client-对工作站的基本保护;

    simple-对LAN的基本保护;

    如果给的是一个指定的文件名,则必须使用全路径名firewall_script=”/etc/ipfw.conf”。

     

    设置完成后我们再编译/etc/syslog.conf文件。

     

    加入以下行:

     

    !ipfw

     

    *.* /var/log/ipfw.log

     

    好了rc.conf文件设置完毕,然后就是其他文件了。

     

    上面我们设置了firewall_type=”open”

    这个是让防火墙完全开放,现在我们来具体设置防火墙的规则:

    # ee /etc/ipfw.conf

    填写下面内容:

     

    #!/bin/sh

    cmd=”ipfw -q add”

    iif=”vr0″

    lif=”vr1″

     

    ipfw -q -f flush

     

    ipfw pipe 100 config mask dst-ip 0x000000ff bw 8Kbit/s delay 0ms

    ipfw pipe 101 config mask src-ip 0x000000ff bw 8Kbit/s delay 0ms

     

    ipfw pipe 200 config mask dst-ip 0x000000ff bw 256Kbit/s delay 0ms

    ipfw pipe 201 config mask src-ip 0x000000ff bw 256Kbit/s delay 0ms

     

    ipfw pipe 300 config mask dst-ip 0x000000ff bw 2Mbit/s delay 0ms

    ipfw pipe 301 config mask src-ip 0x000000ff bw 2Mbit/s delay 0ms

     

    ipfw pipe 400 config mask dst-ip 0x000000ff bw 100Mbit/s delay 0ms

    ipfw pipe 401 config mask src-ip 0x000000ff bw 100Mbit/s delay 0ms

     

    $cmd pipe 400 all from any to me in

    $cmd pipe 401 all from me to any out

     

    $cmd pipe 400 all from any to 192.168.1.80 in

    $cmd pipe 401 all from 192.168.1.80 to any out

     

    $cmd pipe 100 all from any to 192.168.1.88 in

    $cmd pipe 101 all from 192.168.1.88 to any out

     

    $cmd pipe 300 all from any to 192.168.1.147 in

    $cmd pipe 301 all from 192.168.1.147 to any out

     

    $cmd pipe 200 all from any to 192.168.1.0/23 in

    $cmd pipe 201 all from 192.168.1.0/23 to any out

    $cmd allow all from any to any

    好了,重新启动一下系统让防火墙生效,到此整个Gateway服务器就已经完全设置完毕。