<span id='gc59y'></span>
    1. <tr id='gc59y'><strong id='gc59y'></strong><small id='gc59y'></small><button id='gc59y'></button><li id='gc59y'><noscript id='gc59y'><big id='gc59y'></big><dt id='gc59y'></dt></noscript></li></tr><ol id='gc59y'><table id='gc59y'><blockquote id='gc59y'><tbody id='gc59y'></tbody></blockquote></table></ol><u id='gc59y'></u><kbd id='gc59y'><kbd id='gc59y'></kbd></kbd>
    2. <acronym id='gc59y'><em id='gc59y'></em><td id='gc59y'><div id='gc59y'></div></td></acronym><address id='gc59y'><big id='gc59y'><big id='gc59y'></big><legend id='gc59y'></legend></big></address>

      <fieldset id='gc59y'></fieldset>

        <i id='gc59y'></i>
        <dl id='gc59y'></dl>

          <code id='gc59y'><strong id='gc59y'></strong></code>

          <i id='gc59y'><div id='gc59y'><ins id='gc59y'></ins></div></i>

          1. <ins id='gc59y'></ins>

            Linux下针对路由功能配置iptables的方法详解

            • 时间:
            • 浏览:5
            • 来源:124软件资讯网

                作为公司上网的路由器需要实现的功效有nat地址转换、dhcp、dns缓存流量控制、应用法式控制  ,nat地址转换通过iptables可以直 接实现 ,dhcp服务需要安装dhcpd ,dns缓存功效需要使用bind  ,流量控制可以使用tc  ,应用法式控制:例如对qq的封锁可以使用 netfilter-layer7-v2.22+17-protocols-2009-05-28.tar.gz来实现

                1、网络计划

                操作系统是centos5.8

                2、安装dhcpd

                代码如下:

                yum install dhcp-3.0.5-31.el5

                vim /etc/dhcp/dhcpd.conf

                ddns-update-style interim;

                ignore client-updates;

                subnet 10.0.0.0 netmask 255.255.255.0 {

                option routers 10.0.0.1;

                option subnet-mask 255.255.255.0;

                option domain-name-servers 10.0.0.1;

                range dynamic-bootp 10.0.0.100 10.0.0.200;

                default-lease-time 21600;

                max-lease-time 43200;

                }

                3、安装bind ,实现dns缓存

                代码如下:

                yum install bind97.i386 bind97-libs.i386 bind97-utils.i386

                vim /etc/named.conf

                options {

                directory "/var/named";

                allow-recursion { 10.0.0.0/24; };

                recursion yes;

                forward first; #将所有请求都举行转发

                forwarders { 114.114.114.114; }; #界说转发服务器地址

                };

                zone "." IN {

                type hint;

                file "named.ca";

                };

                zone "localhost" IN {

                type master;

                file "named.localhost";

                allow-transfer { none; };

                };

                zone "0.0.127.in-addr.arpa" IN {

                type master;

                file "named.loopback";

                allow-transfer { none; };

                };

                建立根域文件 ,默认有

                代码如下:

                dig -t NS . > /var/named/named.ca

                chown :named /var/named/named.ca

                建立当地正向剖析文件  ,默认有

                代码如下:

                vim /var/named/named.localhost

                $TTL 1D

                @ IN SOA @ rname.invalid. (

                0 ; serial

                1D ; refresh

                1H ; retry

                1W ; expire

                3H ) ; minimum

                NS @

                A 127.0.0.1

                chown :named /var/named/named.localhost

                建立当地反向剖析文件  ,默认有

                代码如下:

                vim /var/named/named.loopback

                $TTL 1D

                @ IN SOA @ rname.invalid. (

                0 ; serial

                1D ; refresh

                1H ; retry

                1W ; expire

                3H ) ; minimum

                NS @

                A 127.0.0.1

                PTR localhost.

                chown :named /var/named/named.loopback

                检查主设置文件

                代码如下:

                named-checkconf

                检查根区域设置文件

                代码如下:

                named-checkzone “.” /var/named/named.ca

                检查区域文件

                代码如下:

                named-checkzone “localhost” /var/named/named.localhost

                启动服务

                代码如下:

                service named start

                4、重新编译编译内核和iptables以支持应用层过滤

                由于实验防火墙功效的是netfilter内核模块 ,以是需要重新编译内核  ,需要下载新的内核源码  ,并使用netfilter-layer7-v2.22作为内核的补丁一起编译到内核中 。而控制netfiler的是iptables工具 ,因此iptables也必须重新编译安装 ,最后再安装应用法式过滤特征码库17-protocols-2009-05028.tar.gz

                1、给内核打补丁  ,并重新编译内核

                2、给iptables源码打补丁 ,并重新编译iptables

                3、安装17proto

                备份iptables剧本和设置文件

                代码如下:

                cp /etc/rc.d/init.d/iptables /root/iptables.sysv

                cp /etc/sysconfig/iptables-config /root/iptables-config

                2.6内核下载地址

                https://www.kernel.org/pub/linux/kernel/v2.6/

                netfilter下载地址

                http://download.clearfoundation.com/l7-filter/

                iptables源码下载地址

                http://www.netfilter.org/projects/iptables/downloads.html

                应用法式特征码库下载地址

                http://download.clearfoundation.com/l7-filter/

                代码如下:

                xz -d linux-2.6.28.10.tar.xz

                tar -xvf linux-2.6.28.10.tar.gz -C /usr/src #新的内核源码  ,用于重新编译

                tar -zxvf netfilter-layer7-v2.22.tar.gz -C /usr/src #内核补丁和iptables补丁  ,只支持到2.6.28

                #进入解压目录并建立软毗连

              < p>cd /usr/src

                ln -sv linux-2.6.28.10 linux

                #进入内核目录

              < p>cd /usr/src/linux

                #为当前内核打补丁

              < p>patch -p1 < ../netfilter-layer7-v2.22/kernel-2.6.25-2.6.28-layer7-2.22.path

                #为了利便编译内核将系统上的内核设置文件复制过来

              < p>cp /boot/config-2.6.18-164.el5 /usr/src/linux/.config

                编译内核

                代码如下:

                make menuconfig

                Networking support -> Networking Options -> Network packet filtering framework -> Core Netfilter Configuration

                 Netfilter connection tracking support

                 "lawyer7" match support

                 "string" match support

                 "time" match support

                 "iprange" match support

                 "connlimit" match support

                 "state" match support

                 "conntrack" connection match support

                 "mac" address match support

                 "multiport" Multiple port match support

                Networking support -> Networign options -> Network packet filtering framework -> IP:Netfiltr Configuration

                 IPv4 connection tracking support (required for NAT)

                 Full NAT

                 MASQUERADE target support

                 NETMAP target support

                 REDIRECT target support

                在Networking support中选择 Networking options

                查找Network packet filtering framework(Netfilter)–>Core Netfiler Configrationg–>Netfilter connection tracking support(NEW),”layer7″ match support(NEW),”time” match support(NEW),”iprange”

                查找IP:Netfilter Configuration–>IPv4 connection tracking support,Full NAT(NEW)

                代码如下:

                make

                make modules_install

                make install

                重启操作系统选择新内核登录

                卸载旧的iptables

                代码如下:

                rpm -e iptables-1.3.5-9.1.el5 iptables-ipv6-1.3.5-9.1.el5 iptstate-1.4-2.el5 --nodeps

                安装新的iptables  ,以支持新的netfiler模块

                代码如下:

                tar -jsvf iptables-1.4.6.tar.bz2 -C /usr/src

                cd /usr/src/netfilter-layer7-v2.23

                cd iptables-1.4.3forward-for-kernel-2.6.20forward

                cp * /usr/src/iptables-1.4.6/extensions/

                cd /usr/src/iptables-1.4.6/

                ./configure --prefix=/usr --with-ksource=/usr/src/linux

                make

                make install

                检察安装后的iptables的文件

                代码如下:

                ls /usr/sbin |grep iptables

                ls /usr/libexec/xtables

                复制之前备份的设置文件和剧本

                代码如下:

                cp /root/iptables-config /etc/sysconfig/

                cp /root/iptables.sysv /etc/rc.d/init.d/iptables

                修改剧本中iptables的路径

                代码如下:

                vim /etc/rc.d/init.d/iptables

                :.,$s@/sbin/$IPTABLES@/usr/sbin/$IPTABLES@g

                让iptables服务开机自动启动

                代码如下:

                chkconfig --add iptables

                修改iptables 设置文件

                将/etc/sysconfig/iptables-config中的

                IPTABLES_MODULES=”ip_conntrack_netbios_ns” 注释掉

                安装协议特征码

                代码如下:

                tar xvf 17-protocols-2009-05028.tar.gz

                make install

                完成后在/etc/l7-protocols会天生文件

                支持的协议/etc/l7-protocols/protocols

                添加iptables计谋 ,运行内部网络上网  ,克制qq和视频

                代码如下:

                iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j SNAT --to-soure 192.168.6.67

                iptables -A FORWARD -m layer7 --l7proto qq -j DROP

                iptables -A FORWARD -m layer7 --l7proto httpvideo -j DROP

                iptables -A FORWARD -m layer7 --l7proto httpaudio -j DROP

                指定8点到12点无法上网

                复制代码

                代码如下:

                iptables -A FORWARD -m time --timestart 08:00 --timestop 12:00 -j DROP

                5、使用tc控制带宽

                例如公司出口带宽是10Mbps ,个用户A分配500KB的最大下载带宽  ,给用户B 分配分配的最大下载带宽是200KB

                A用户ip:10.0.0.100

                B用户ip:10.0.0.101

                代码如下:

                #在eth0网卡上建立一个根行列规则 ,行列规则的算法使用htb  ,default 2表现指定一个默认种别编号 ,默认的流量控制计谋  ,若是ip没有在后面的filter中被匹配到就都是有这个计谋

                tc qdisc add dev eth0 root handle 1:0 htb default 2

                #在eth0网卡上界说一个类  ,prant 1:0中的1对应根行列规则中的handle 1:0  ,classid 1:2表现当前这个类的标识  ,用于应用在后面的获得filter中  ,rate 200kbsp表现带宽为200KB/s ,ceil 200kbps表现最大带宽也为200KB/s  ,prio 2是优先级

                tc class add dev eth0 parent 1:0 classid 1:2 htb rate 200kbps ceil 200kbps prio 2

                tc class add dev eth0 parent 1:0 classid 1:3 htb rate 500kbps ceil 500kbps prio 2

                #将两个类的默认的fifq行列规则改为sfq

                tc qdisc add dev eth0 parent 1:2 handle 20 sfq

                tc qdisc add dev eth0 parent 1:3 handle 30 sfq

                #在网卡eth0上的1:0节点(对应qdisc中的handle 1:0)添加一个u32过滤规则 ,优先级为1  ,通常目的地址是10.0.0.100的数据包都使用1:2类(对应classid为1:2的类)

                tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst 10.0.0.100 flowid 1:2

                tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst 10.0.0.101 flowid 1:3

                若是另有其他用户例如用户C和D的ip是102、103  ,要求的下载带宽也要求500那么在加入

                代码如下:

                tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst 10.0.0.102 flowid 1:3

                tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst 10.0.0.103 flowid 1:3

                扫除eth0上的规则

                代码如下:

                tc qdisc del dev eth1 root> /dev/null