iptables 基础与案例配置

本文涉及的产品
公网NAT网关,每月750个小时 15CU
简介:
            Iptables
  IPTables 表与链的功能
      IPTables中一共有三张表,分别为filter表,nat表,mangle表
      1》filter表主要用于过滤的作用,在IPTables中几乎所以的过滤都在这个表内完成,它是IPTables中默认执行的表。
         filter表中一共有三条链:INPUT链,FORWARD链,OUTPUT链
               INPUT链:过滤所有目标地址是本机的数据包
               FORWARD链:过滤所有路过本机的数据包,也就是目的地址和源地址都还是本机的数据包。
               OUTPUT链:过滤所有由本机产生的数据包,也就是源地址是本机的数据包。
       2》nat表主要用于网络地址转换,对于一个流的数据包只会经过这个表一次,也就是说在如果一个包被允许了转换,那么它后面而来的数据包就不会再nat,而是直接自动的随第一个被转换的数据包流过。
         Nat主要有三个转换的方式:DNAT SNAT MASQUERADE
          DNAT: 改变数据包的目的地址,把外网的一个地址重定向到内网的一台主机上。
          SNAT: 改变数据包的源地址,使内网的用户可以连接到外网
          MASQUERADE:与SNAT功能相似,只是在NAT的时候,它会查找本机的一个地址池,而不像SNAT一样,只使用一个固定的地址。
          Nat也有三个链:PREROTING链  POSTROUTING链  OUTPUT链
              PREROUTING链:可以在数据包到达防火墙的时候改变包的目标地址
              POSTPUT链:    在数据包就要离开防火墙时改变数据包的源地址 
              OUTPUT链:可以改变产生的数据包的目标地址
       3》mangle表主要用于修改数据包,它可以修改数据包的TOS TTL MARK等,这个表平常使用不多,不再多做说明。  
案例配置
 
公司有三个部门
工程部门   2 .1 1 -- 2 .20
软件部门   2 .21- 2 .30
经理办     2 .31- 2 .40
上班时间 (周一---周五 08:20:00) 
      工程部门   上班时间ftp 不允许http  qq  迅雷  下班后无限制
      软件部门    上班时间 允许 http   不允许非法站点sina  ,也不允许浏览图片 ,不允许使用迅雷 ,连接数 最多3个 , 下班后无限制
       经理办公室   http  qq 都可以,下班后无限制
   拓扑图
 注:本实验在开始时,系统已经重新编译了内核模块,并且加入也time iprange layer7等功能,如果没有重新编译内核加入上面的功能,一些功能会不能实现的。
    1.首先关闭防火墙,我们不需要使用防火墙的默认规则,不必开启防火墙,关闭之后,系统只会匹配我们自己设置的iptables规则。
    2.我们在做实验室之前要做到全网的互通,在通信的基础之上才能对其进行控制,达到实验的目的
    因为我们的网络是内网需要与外网相连接,所以要对其进行SNAT转换
    [root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eth1 -j MASQUERADE 
因为我们这台服务器上有多个网卡接口,所以指定与远程网络相接的接口eth1,让所有的流量从这个接口出去。
    3.先允许ssh,我们使用ssh连接进入系统
[root@localhost ~]# iptables -A INPUT -s 192.168.101.114 -p tcp --dport 22 -j ACCEPT[root@localhost ~]# iptables -A OUTPUT -d 192.168.101.114 -p tcp --sport 22 -j ACCEPT
    4.现在我们把各个表都设置成为拒绝状态,在全部拒绝的状态下,我们再根据要求开启各个功能。
[root@localhost ~]# iptables -t filter -P INPUT DROP
[root@localhost ~]# iptables -t filter -P OUTPUT DROP
[root@localhost ~]# iptables -t filter -P FORWARD DROP
我们按照实例要求进行分解完成
(1)  上班时间 (周一---周五 08:20:00) 
      工程部门   上班时间ftp 不允许http  qq  迅雷  下班后无限制
     1》上班时间允许FTP
         [root@localhost ~]# iptables -t filter -A INPUT  -m iprange --src-range 192.168.2.11-192.168.2.20 -m time --timestart 8:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --dport 21 -j ACCEPT
          [root@localhost ~]# iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT                 //对请求做回应
          [root@localhost ~]# modprobe ip_nat_ftp     //加载ftp模块
2》不允许HTTP QQ 迅雷
   在上面的设置中因为没有允许通信,所以本身就不能上qq等,但为了学习与实验,我就把代码直接写出来,仅供参考。
禁止HTTP:   [root@localhost ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.2.11-192.168.2.20 -m time --timestart 8:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --dport 80 -j DROP
 禁止QQ,对QQ的禁止,一般的iptables功能是很难实现的,我们需要使用7层的功能,这需要在编译内核使用系统支持此功能
  [root@localhost ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.2.11-192.168.2.20 -m time --timestart 8:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -m layer7 --l7proto qq -j DROP  
禁止迅雷
  [root@localhost ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.2.11-192.168.2.20 -m time --timestart 8:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -m layer7 --l7proto xunlei -j DROP 
      3》 下班后无限制
         [root@localhost ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.2.11-192.168.2.20 -m time --timestart 20:01 --timestop 07:59 -j ACCEPT
  (2) 软件部门    上班时间 允许 http   不允许非法站点sina  ,也不允许浏览图片 ,不允许使用迅雷 ,连接数 最多3个 , 下班后无限制  
       1》上班时间允许http,但是不允许sina也不允许图片
         对于这类的限制,在iptables上实现起来比较困难,但是如果把它使用代理服务器squid来实现的话,可能就会容易很多。Squid服务器安装就不在陈述,自己实现,我们直接进行要求的实现。
我们先在squid上配置好要实现的内容
        [root@localhost ~]# vim /etc/squid/squid.conf
         加入如下内容
            acl soft src 192.168.2.21-192.168.2.30
            acl worktime time MTWHF 8:00-20:00
            acl pic urlpath_regex -i \.jpg$
            acl url  url_regex -i sina     
            http_access allow soft worktime !pic !Url
           dns_nameservers 222.88.88.88 222.85.85.85
           visible_hostname 192.168.101.129 
      并且还要在squid服务器上设置透明代理,在配置文件中修改成下面的一句
    http_port 3128 transparent 
 
    在 iptables 上对来自内网的流量进行端口的转换,把端口80上的流量全都代理到squid服务器的3128端口上,再转发出去。
       [root@localhost ~]# iptables -t nat -R PREROUTING 1 -m iprange --src-range 192.168.2.21-192.168.2.30 -m time --timestart 8:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri  -p tcp --dport 80 -j REDIRECT --to-ports 3128 
       我们在连接外网的时间,都是使用域名对外进行连接,因此要使内网用户能够解析到域名,这就需要使用DNS服务器,所以我们要在iptables 上进行nat,使用DNS可以直接nat出去,这样就可以进行DNS的解析了。在第一步已经允许了所有数据包的nat,所以这步可以不要,写上只是为了了解其中的一些原理,它是没有数据包的匹配的。
       [root@localhost ~]# iptables -t nat -A POSTROUTING -m iprange --src-range 192.168.2.21-192.168.2.30 -m time --timestart 8:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -o eth1 -p udp --dport 53 -j MASQUERADE
      现在你解析一下DNS,你会发现,你仍然不能对DNS进行解析,因为在对DNS进行NAT之后,你的iptables 并没有允许你可以进行53端口流量的通行,所以凡是到达53端口的流量,仍然会全部仍掉,也就是达不到目的网络。我们可以对端口53的DNS流量进行转换,使其能够通过。
       [root@localhost ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.2.21-192.168.2.30 -m time --timestart 8:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p udp --dport 53 -j ACCEPT
       做过这一步,你应该可以对域名进行解析,但是你会发现你还是不能连通外网,这是因为,当我们的数据包发送出去的时候,它是要先进入本服务器的3128端口的,但是iptables我们设置的是阻止全部的流量,所以在我们没有指定的允许它通过的时候,数据包是被阻止的,我们可以定义规则,让其数据包通过,这个时候我们使用的链是表filter中的INPUT与OUTPUT链,数据包是直接进入3128端口,没有进行转发,我们不能使用FORWARD链。
       [root@localhost ~]# iptables -t filter -A INPUT -p tcp --dport 3128 -j ACCEPT
       [root@localhost ~]# iptables -t filter -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
       还在还要做一步,因为现在做的只是让内网用户可以与squid进行访问,但是,如果squid中没有缓存的话,那么squid会使用自己的80端口与外网进行互通,外网的数据发送到squid中,squid服务器再把数据发送给客户端,但是现在squid还不被允许从80端口发送及收取数据包,所以我们要下定义允许它们收发的规则
        [root@localhost ~]# iptables -t filter -A OUTPUT -p tcp --dport 80 -s 192.168.101.129 -j ACCEPT     //因为是在本地发送的,所以使用squid服务器外网ip
         [root@localhost ~]# iptables -t filter -A INPUT -m state --state ESTABLISHED -j ACCEPT
       
   2》 不允许使用迅雷 ,连接数最多3个
        对于不使用迅雷,我们还是要使用iptables layer7来实现
         [root@localhost ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.2.21-192.168.2.30 -m time --timestart 8:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -m layer7 --l7proto xunlei -j DROP
        设置连接数
         设置连接数时在iptables 上总是设置不正确,不知道怎么回事,还请大神们帮忙给说下,所以我这在squid代理服务器上写了下面的一句规则
          acl connlimit maxconn 3
          http_access deny  connlimit
 但是这写我的不知道是不是因为缓存的作用,总是在打开三个网页之前就不能再打开网页了。
   3》 下班后无限制
         [root@localhost ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.2.21-192.168.2.30 -m time --timestart 20:01 --timestop 07:59 -j ACCEPT
(3) 经理办公室   http  qq 都可以,下班后无限制 ,这也就是说,对经理办公室不用进行设置  ,一条命令就可以了
     [root@localhost ~]# iptables -A FORWARD -m iprange --src-range 192.168.2.31-192.168.2.40 -j ACCEPT









本文转自 guodong810 51CTO博客,原文链接:http://blog.51cto.com/guodong810/1097499,如需转载请自行联系原作者
目录
相关文章
|
9月前
|
运维 网络协议 网络安全
【运维知识进阶篇】iptables防火墙详解(iptables执行过程+表与链概述+iptables命令参数+配置filter表规则+NAT表实现共享上网、端口转发、IP映射)(二)
【运维知识进阶篇】iptables防火墙详解(iptables执行过程+表与链概述+iptables命令参数+配置filter表规则+NAT表实现共享上网、端口转发、IP映射)(二)
243 0
|
9月前
|
运维 Shell 网络安全
【运维知识进阶篇】iptables防火墙详解(iptables执行过程+表与链概述+iptables命令参数+配置filter表规则+NAT表实现共享上网、端口转发、IP映射)(三)
【运维知识进阶篇】iptables防火墙详解(iptables执行过程+表与链概述+iptables命令参数+配置filter表规则+NAT表实现共享上网、端口转发、IP映射)(三)
1412 0
|
9月前
|
运维 网络协议 Linux
【运维知识进阶篇】iptables防火墙详解(iptables执行过程+表与链概述+iptables命令参数+配置filter表规则+NAT表实现共享上网、端口转发、IP映射)(一)
【运维知识进阶篇】iptables防火墙详解(iptables执行过程+表与链概述+iptables命令参数+配置filter表规则+NAT表实现共享上网、端口转发、IP映射)
801 0
|
网络协议 网络安全 网络虚拟化
|
网络协议 安全 Linux
Linux防火墙--IPtables配置策略思路
Linux防火墙--IPtables配置策略思路 防火墙定义:是通过有机结合各类用于安全管理与筛选的软件和硬件设备,帮助计算机网络于其内、外网之间构建一道相对隔绝的保护屏障,以保护用户资料与信息安全性的一种技术。 防火墙发展应用:最早是ipfwadm和ipchains(Redhat7.0), 其次是iptables,Centos7开始后friewalld迅速发展,对iptables进行了 改良,目前还是iptables用的比较多。
380 0
Linux防火墙--IPtables配置策略思路
|
网络协议 Linux 网络安全
|
Web App开发 网络协议 测试技术
|
网络协议 关系型数据库 网络安全