iptables 基础与案例配置

本文涉及的产品
公网NAT网关,每月750个小时 15CU
云防火墙,500元 1000GB
简介:
            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,如需转载请自行联系原作者
目录
相关文章
|
Web App开发 缓存 监控
Apollo插件:个性化你的开发流程
Apollo插件:个性化你的开发流程
|
8月前
|
人工智能 编解码 算法
VideoFusion:开源视频处理神器!一键去黑边水印,AI提升画质+批量剪辑全搞定
VideoFusion 是一款开源的AI视频剪辑工具,支持自动去除视频黑边、水印和字幕,提供批量处理、画质提升等功能,适合视频创作者和自媒体运营者使用。
1148 3
|
SQL XML Java
Mybatis:SQL注入问题 like模糊查询 多表查询 动态SQL
Mybatis:SQL注入问题 like模糊查询 多表查询 动态SQL
2425 0
|
缓存 监控 Java
|
Android开发 C++ 开发者
Android经典实战之跨平台开发方案:Kotlin Multiplatform vs Flutter
本文对比了Kotlin Multiplatform与Flutter两大跨平台开发框架,从技术特性、性能、开发效率、UI体验、可扩展性及适用场景等维度进行了详尽分析,帮助开发者根据项目需求和技术背景选择最优方案。
943 2
|
机器学习/深度学习 人工智能 运维
智能化运维:AI在IT管理中的创新应用
【7月更文挑战第15天】本文探讨了人工智能(AI)如何革新传统的IT运维模式,通过智能自动化、实时分析和预测性维护,显著提高运维效率和准确性。文章将深入分析AI技术在故障检测与解决、资源优化配置以及安全监控等方面的具体应用案例,并讨论实施AI时可能遇到的挑战和解决方案。
419 2
|
关系型数据库 MySQL 数据挖掘
MySQL 8窗口函数详解:高效数据处理的必备技能
MySQL 8窗口函数详解:高效数据处理的必备技能
658 3
|
前端开发
如何让url在新页面打开路由页面,并脱离vue-admin-template的壳,即不包裹在侧边栏和顶栏中
如何让url在新页面打开路由页面,并脱离vue-admin-template的壳,即不包裹在侧边栏和顶栏中
228 0
|
数据挖掘 Linux 测试技术
Linux中输入所有命令都提示“command not found”,bashrc环境变量异常的解决方案
Linux中输入所有命令都提示“command not found”,bashrc环境变量异常的解决方案
SAP 彻底刪除物料主数据操作
SAP彻底刪除物料主数据操作   工业标准版操作步骤: 1、先将要删除的物料标记删除(MM06) 2、运行程式MMREO001选择要删除的物料 3、运行程式MREO050 备份物料 4、运行程式REO110 删除物料也可以使用TCODE:SARA去删除物料,操作步骤基本同上。
2499 0