iptables作为路由器实现上网和访问控制

网友投稿 786 2023-02-13

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

iptables作为路由器实现上网和访问控制

作为公司上网的路由器需要实现的功能有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

1
2
3
4
5
6
7
8
9
10
11
12
yum install dhcp-3.0.5-31.el5
vim/etc/dhcp/dhcpd.conf
ddns-update-style interim;
ignore client-updates;
subnet10.0.0.0netmask255.255.255.0{
 option routers10.0.0.1;
 option subnet-mask255.255.255.0;
 option domain-name-servers10.0.0.1;
 range dynamic-bootp10.0.0.10010.0.0.200;
 default-lease-time21600;
 max-lease-time43200;
}

3、安装bind,实现dns缓存

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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;};
};

创建根域文件,默认有

1
2
dig-tNS.>/var/named/named.ca
chown:named/var/named/named.ca

创建本地正向解析文件,默认有

1
2
3
4
5
6
7
8
9
10
11
vim/var/named/named.localhost
$TTL1D
@INSOA@rname.invalid.(
                   0;serial
                  1D;refresh
                  1H;retry
                   1W;expire
                  3H);minimum
 NS    @
 A     127.0.0.1
chown:named/var/named/named.localhost

创建本地反向解析文件,默认有

1
2
3
4
5
6
7
8
9
10
11
12
vim/var/named/named.loopback
 $TTL1D
@INSOA@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源码打补丁,并重新编译iptables3、安装17proto

备份iptables脚本和配置文件

1
2
cp/etc/rc.d/init.d/iptables/root/iptables.sysv
cp/etc/sysconfig/iptables-config/root/iptables-config

2.6内核下载地址

netfilter下载地址

iptables源码下载地址

应用程序特征码库下载地址

1
2
3
xz-dlinux-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

#进入解压目录并创建软连接

1
2
cd/usr/src
ln-sv linux-2.6.28.10linux

#进入内核目录

1
cd/usr/src/linux

#为当前内核打补丁

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

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

1
cp/boot/config-2.6.18-164.el5/usr/src/linux/.config

编译内核

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
make menuconfig
Networking support->Networking Options->Network packet filtering framework->Core Netfilter Configuration
<M>Netfilter connection tracking support
<M>"lawyer7"match support
<M>"string"match support
<M>"time"match support
<M>"iprange"match support
<M>"connlimit"match support
<M>"state"match support
<M>"conntrack"connection match support
<M>"mac"address match support
<M>"multiport"Multiple port match support
Networking support->Networign options->Network packet filtering framework->IP:Netfiltr Configuration
<M>IPv4 connection tracking support(required forNAT)
<M>Full NAT
<M>MASQUERADE target support
<M>NETMAP target support
<M>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)

1
2
3
make
make modules_install
make install

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

卸载旧的iptables

1
rpm-eiptables-1.3.5-9.1.el5iptables-ipv6-1.3.5-9.1.el5iptstate-1.4-2.el5--nodeps

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

1
2
3
4
5
6
7
8
tar-jsvf iptables-1.4.6.tar.bz2-C/usr/src
cd/usr/src/iptables-1.4.6
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的文件

1
2
ls/usr/sbin|grep iptables
ls/usr/libexec/xtables

复制之前备份的配置文件和脚本

1
2
cp/root/iptables-config/etc/sysconfig/
cp/root/iptables.sysv/etc/rc.d/init.d/iptables

修改脚本中iptables的路径

1
2
vim/etc/rc.d/init.d/iptables
:.,$s@/sbin/$IPTABLES@/usr/sbin/$IPTABLES@g

让iptables服务开机自动启动

1
chkconfig--add iptables

修改iptables 配置文件将/etc/sysconfig/iptables-config中的IPTABLES_MODULES=”ip_conntrack_netbios_ns”    注释掉

安装协议特征码

1
2
tar xvf17-protocols-2009-05028.tar.gz
make install

完成后在/etc/l7-protocols会生成文件支持的协议/etc/l7-protocols/protocols

添加iptables策略,运行内部网络上网,禁止qq和视频

指定8点到12点无法上网

1
iptables-AFORWARD-mtime--timestart08:00--timestop12:00-jDROP

5、使用tc控制带宽

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

#在eth0网卡上创建一个根队列规则,队列规则的算法使用htb,default 2表示指定一个默认类别编号,默认的流量控制策略,如果ip没有在后面的filter中被匹配到就都是有这个策略

1
tc qdisc add dev eth0 root handle1:0htb default2

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

1
2
tc classadd dev eth0 parent1:0classid1:2htb rate200kbpsceil200kbpsprio2
tc classadd dev eth0 parent1:0classid1:3htb rate500kbpsceil500kbpsprio2

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

1
2
tc qdisc add dev eth0 parent1:2handle20sfq
tc qdisc add dev eth0 parent1:3handle30sfq

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

1
2
tc filter add dev eth0 parent1:0protocol ip prio1u32 match ip dst10.0.0.100flowid1:2
tc filter add dev eth0 parent1:0protocol ip prio1u32 match ip dst10.0.0.101flowid1:3

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

1
2
tc filter add dev eth0 parent1:0protocol ip prio1u32 match ip dst10.0.0.102flowid1:3
tc filter add dev eth0 parent1:0protocol ip prio1u32 match ip dst10.0.0.103flowid1:3

清除eth0上的规则

1
tc qdisc del dev eth1 root>/dev/null
上一篇:网络智能运维技术课程介绍(网络运维基础课程)
下一篇:linux下telnet安装与使用
相关文章

 发表评论

暂时没有评论,来抢沙发吧~