Linux下针对路由功能配置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

  代码如下:

  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

时间: 2024-08-04 04:04:13

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

linux下防DDOS攻击软件及使用方法详解

  互联网如同现实社会一样充满钩心斗角,网站被DDOS也成为站长最头疼的事.在没有硬防的情况下,寻找软件代替是最直接的方法,比如用 iptables,但是iptables不能在自动屏蔽,只能手动屏蔽. 一.什么是DDOS攻击? DDoS也就是分布式拒绝服务攻击.它使用与普通的拒绝服务攻击同样的方法,但是发起攻击的源是多个.通常攻击者使用下载的工具渗透无保护的主机,当获得该主机的适当的访问权限后,攻击者在主机中安装软件的服务或进程(以下简侈怔理).这些代理保持睡眠状态,直到从它们的主控端得到指令,

Java Spring MVC 上传下载文件配置及controller方法详解_java

下载: 1.在spring-mvc中配置(用于100M以下的文件下载) <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <!--配置下载返回类型--> <bean class="or

linux下配置yum源方法详解_Linux

本人使用的方法一,成功配置,方法二没测过,可以作为参考 方法一: 1.确保RHEL5中已经安装了yum [root@lvs-master ~]# rpm -qa |grep yum yum-metadata-parser-2-el5 yum-updatesd-9-el5 yum-22-el5 yum-security-16-el5 yum-rhn-plugin-4-el5 2.修改源配置文件 #vim /etc/yum.repos.d/CentOS-Base.repo (如果目录下没有.repo

Linux下重启oracle服务及监听器和实例详解_Linux

一.在Linux下重启Oracle数据库及监听器: 方法1: 用root以ssh登录到linux,打开终端输入以下命令: cd $ORACLE_HOME #进入到oracle的安装目录 dbstart #重启服务器 lsnrctl start #重启监听器 cd $ORACLE_HOME #进入到oracle的安装目录 dbstart #重启服务器 lsnrctl start #重启监听器 ----------------------------------- 方法2: Sql代码 cd $OR

基于Linux系统中查看硬件等信息的方法详解_Linux

本文介绍下,linux下查看硬件信息的命令与方法,包括主板序列号.cpu信息.内存信息.硬盘信息.网卡信息等.1,主板信息.查看主板的序列号 #使用命令dmidecode | grep -i 'serial number'#查看板卡信息cat /proc/pci 2,cpu信息 #通过/proc文件系统1) cat /proc/cpuinfo#通过查看开机信息2) dmesg | grep -i 'cpu'#3)dmidecode -t processor3,在linux系统中查看硬盘信息,常用

在Linux下实现路由功能的原理及实验

一:原理:软路由是指利用台式机或服务器配合软件形成路由解决方案,主要靠软件的设置,达成路由器的功能.软路由通常使用普通计算机充当,使用通用的操作系统,如linux或windows,因此路由设置事实上是windows或  linux的设置,或者是对计算机的配置,现在以Linux主机为例实现路由功能. 二:案例:拓扑方案如图所示. 在Linux主机上有双网卡eth0和eth1,eth1对应外网接口,eth0对应内网接口,在Linux主机上通过配置路由功能实现到达192.168.1.0/24和192.

基于linux与windows平台下 如何下载android sdk源代码的方法详解_Android

本文主要分2部份.第1部份介绍如何下载android sdk的源代码:第2部份介绍如何把android sdk的源代码加入到eclipse里 第1部份如何下载android sdk的源代码  1.环境. Linux 2.6 ,Python 2.4.3 或windows XP 2.工具.主要使用git工具,下载android sdk source. (1)Linux下git工具可以到 http://git-scm.com/ 下载,此工具是linux的核心代码管理工具. 安装过程如下: tar -x

基于linux与windows平台下 如何下载android sdk源代码的方法详解

本文主要分2部份.第1部份介绍如何下载android sdk的源代码:第2部份介绍如何把android sdk的源代码加入到eclipse里 第1部份如何下载android sdk的源代码 1.环境. Linux 2.6 ,Python 2.4.3 或windows XP 2.工具.主要使用git工具,下载android sdk source. (1)Linux下git工具可以到 http://git-scm.com/ 下载,此工具是linux的核心代码管理工具. 安装过程如下: tar -xv

Linux下安装jdk报Permission denied以及chmod详解

一.发现问题 在Linux中安装jdk.bin的时候发现问题,报错./config.sh: line 103: /home/jdk.bin : Permission denied 修改权限:chmod 775 /home/jdk.bin 二.chmod命令详解 文件/目录权限设置命令:chmod 用于改变文件或目录的访问权限 用法1:其语法格式为:chmod [who] [opt] [mode] 文件/目录名         其中who表示对象,是以下字母中的一个或组合: u:表示文件所有者 g