我的编程空间,编程开发者的网络收藏夹
学习永远不晚

iptables从入门到应用的实例分析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

iptables从入门到应用的实例分析

iptables从入门到应用的实例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

iptables从入门到应用

 一、简介

 1.1、是什么?

    iptables是隔离主机以及网络的工具,通过自己设定的规则以及处理动作对数据报文进行检测以及处理。 

 1.2、发展史

    防火墙的发展史就是从墙到链再到表的过程,也即是从简单到复杂的过程。为什么规则越来越多,因为互联网越来越不安全了,所有防火墙的的规则也越来越复杂。防火的工具变化如下:

    ipfirewall(墙)-->ipchains(链条)--iptables(表)

    2.0版内核中,包过滤机制是ipfw,管理工具是ipfwadm;

    2.2 版内核中,包过滤机制ipchain,管理工具是ipchains;

    2.4版及以后的内核中,包过滤机制是netfilter,管理工具iptables。

 二、原理

iptables [-t table] {-A|-C|-D} chain rule-specification

  iptables [-t table] -I chain [rulenum] rule-specification

  iptables [-t table] -R chain rulenum rule-specification

  iptables [-t table] -D chain rulenum

  iptables [-t table] -S [chain [rulenum]]

  iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]

  iptables [-t table] -N chain

  iptables [-t table] -X [chain]

  iptables [-t table] -P chain target

  iptables [-t table] -E old-chain-name new-chain-name

    rule-specification = [matches...] [target]

   match = -m matchname [per-match-options]

   target = -j targetname [per-target-options]

 3.4、语法结构解析

  语法结构解析如下。

    -N, --new-chain chain:新建一个自定义的规则链;

    -X, --delete-chain [chain]:删除用户自定义的引用计数为0的空链;

    -F, --flush [chain]:清空指定的规则链上的规则;

    -E, --rename-chain old-chain new-chain:重命名链;

    -Z, --zero [chain [rulenum]]:置零计数器;

      注意:每个规则都有两个计数器

      packets:被本规则所匹配到的所有报文的个数;

      bytes:被本规则所匹配到的所有报文的大小之和;

    -P, --policy chain target 制定链表的策略(ACCEPT|DROP|REJECT)

    -A, --append chain rule-specification:追加新规则于指定链的尾部; 

    -I, --insert chain [rulenum] rule-specification:插入新规则于指定链的指定位置,默认为首部;

    -R, --replace chain rulenum rule-specification:替换指定的规则为新的规则;

    -D, --delete chain rulenum:根据规则编号删除规则;

    -D, --delete chain rule-specification:根据规则本身删除规则;

    规则显示      

1

2

3

4

5

6

7

     -L, --list [chain]:列出规则;

     -v, --verbose:详细信息; 

     -vv 更详细的信息

     -n, --numeric:数字格式显示主机地址和端口号;

     -x, --exact:显示计数器的精确值,而非圆整后的数据;

     --line-numbers:列出规则时,显示其在链上的相应的编号;

     -S, --list-rules [chain]:显示指定链的所有规则;

 3.4.3、链

    五链的功能如图所示。   

iptables从入门到应用的实例分析

 3.4.4、条件匹配

    条件匹配分为基本匹配和扩展匹配,扩展匹配又分为显示匹配和隐式匹配。

    基本匹配的特点是:无需加载扩展模块,匹配规则生效;扩展匹配的特点是:需要加载扩展模块,匹配规则方可生效。

    隐式匹配的特点:使用-p选项指明协议时,无需再同时使用-m选项指明扩展模块以及不需要手动加载扩展模块;  

    显示匹配的特点:必须使用-m选项指明要调用的扩展模块的扩展机制以及需要手动加载扩展模块。

    基本匹配的使用选项及功能

1

2

3

4

5

6

-p 指定规则协议,tcp udp icmp all

-s 指定数据包的源地址,ip hostname

-d 指定目的地址

-i 输入接口

-o 输出接口                                              

! 取反

    隐式匹配的使用选项及功能 

-p tcp

  --sport 匹配报文源端口;可以给出多个端口,但只能是连续的端口范围 

  --dport 匹配报文目标端口;可以给出多个端口,但只能是连续的端口范围

  --tcp-flags mask comp 匹配报文中的tcp协议的标志位

-p udp

  --sport 匹配报文源端口;可以给出多个端口,但只能是连续的端口范围

  --dport 匹配报文目标端口;可以给出多个端口,但只能是连续的端口范围

--icmp-type

  /0: echo reply 允许其他主机ping

  8/0echo request 允许ping其他主机

   

  • 1

    2

    3

    例子:

            iptables -I INPUT -d 172.16.100.7 -p tcp -m multiport --dports 22,80 -j ACCEPT

            iptables -I OUTPUT -s 172.16.100.7 -p tcp -m multiport --sports 22,80 -j ACCEPT

  •     2.iprange(ip范围)

         以连续地址块的方式来指明多IP地址匹配条件。

    1. 1

      2

      3

      例子:

          iptables -A INPUT -d 172.16.100.7 -p tcp --dport 23 -m iprange --class="lazy" data-src-range 172.16.100.1-172.16.100.100 -j ACCEPT

          iptables -A OUTPUT -s 172.16.100.7 -p tcp --sport 23 -m iprange --dst-range 172.16.100.1-172.16.100.100 -j ACCEPT

        3.time(时间范围)

         指定时间范围。

    1. 1

      2

      3

       例子:

              iptables -A INPUT -d 172.16.100.7 -p tcp --dport 901 -m time --weekdays Mon,Tus,Wed,Thu,Fri --timestart 08:00:00 --time-stop 18:00:00 -j ACCEPT

              iptables -A OUTPUT -s 172.16.100.7 -p tcp --sport 901 -j ACCEPT

        4.string(字符串)

         对报文中的应用层数据做字符串模式匹配检测(通过算法实现)。

    1. 1

      2

      3

          --algo {bm|kmp}:字符匹配查找时使用算法

          --string "STRING": 要查找的字符串

          --hex-string “HEX-STRING”: 要查找的字符,先编码成16进制格式

        5.connlimit(连接限制)

         根据每个客户端IP作并发连接数量限制。

    1

    2

        --connlimit-upto n  连接数小于等于n时匹配

        --connlimit-above n 连接数大于n时匹配

        6.limit(速率限制)

         报文速率控制。  

        7.state(状态)

         追踪本机上的请求和响应之间的数据报文的状态。状态有五种:INVALID, ESTABLISHED, NEW, RELATED, UNTRACKED.

    iptables从入门到应用的实例分析

    1.  法则:

    2.         1、对于进入的状态为ESTABLISHED都应该放行;

    3.         2、对于出去的状态为ESTABLISHED都应该放行;

    4.         3、严格检查进入的状态为NEW的连接;

    5.         4、所有状态为INVALIED都应该拒绝;  

       

     3.4.5、处理动作

        处理动作有内置的处理动作和自定义的处理动作。自定义的处理动作用的比较少,因此只介绍内置的处理动作。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    ACCEPT:允许数据包通过

     

    DROP:直接丢弃数据包,不给出任何回应信息

     

    REJECT:拒绝数据包通过,必要时会给数据发送端一个响应信息

     

    LOG:在日志文件中记录日志信息,然后将数据包传递给下一条规则

     

    QUEUE: 防火墙将数据包移交到用户空间

     

    RETURN:防火墙停止执行当前链中的后续Rules,并返回到调用链 

     

    REDIRECT:端口重定向  

     

    MARK:做防火墙标记

     

    DNAT:目标地址转换

     

    SNAT:源地址转换   

                                                     

    MASQUERADE:地址伪装

     3.5、保存和载入规则

        CentOS6和CentOS7保存和载入的规则稍有差异。

     

        保存:iptables-save > /PATH/TO/SOME_RULE_FILE   

       重载:iptabls-restore < /PATH/FROM/SOME_RULE_FILE    

        -n, --noflush:不清除原有规则    

        -t, --test:仅分析生成规则集,但不提交

     

        保存规则:service iptables save   #保存规则于/etc/sysconfig/iptables文件,覆盖保存;   

       重载规则:service iptables restart #默认重载/etc/sysconfig/iptables文件中的规则   

       配置文件:/etc/sysconfig/iptables-config

    四、iptables的实践应用

        iptables十分重要与网络的安全息息相关,我们理所应当掌握。不过我们大可不必死记硬背,一定结合实际项目,多多练习,效果才会更好。

     4.1、iptables常用规则

        1.放行sshd服务

    1

    2

     iptables -t filter -A INPUT -s 192.168.0.0/24 -d 192.168.0.1 -p tcp --dport 22 -j ACCEPT

     iptables -t filter -A OUTPUT -s 192.168.0.1  -p tcp --sport 22 -j ACCEPT

  •  iptables -I OUTPUT -s 192.168.0.1 -p tcp --sport 80 -j ACCEPT

     iptables -I INPUT -d 192.168.0.1 -p tcp --dport 80 -j ACCEPT

    1

    2

    3

      iptables -A  INPUT  -s 127.0.0.1 -d 127.0.0.1 -i lo -j ACCEPT

      iptables -A  OUTPUT  -s 127.0.0.1 -d 127.0.0.1 -o lo -j ACCEPT

      #不放行本机的流入与流出,访问本机的httpd服务,网页会出现Error establishing a database connection。

    1

    iptables -A INPUT -i ens33 -d 192.168.0.1 -p icmp --icmp-type 8 -m limit --limit 2/second --limit-burst 3 -j ACCEPT

     4.2、如何配置iptables

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    a) 1. 删除现有规则

    iptables -F

    b) 2. 配置默认链策略

    iptables -P INPUT DROP

    iptables -P FORWARD DROP

    iptables -P OUTPUT DROP

    c) 3. 允许远程主机进行SSH连接

    iptables -A INPUT -i eth0 -p tcp –dport 22 -m state –state NEW,ESTABLISHED -j ACCEPT

    iptables -A OUTPUT -o eth0 -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT

    d) 4. 允许本地主机进行SSH连接

    iptables -A OUTPUT -o eth0 -p tcp –dport 22 -m state –state NEW,ESTABLISHED -j ACCEPT

    iptables -A INPUT -i eth0 -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT

    e) 5. 允许HTTP请求

    iptables -A INPUT -i eth0 -p tcp –dport 80 -m state –state NEW,ESTABLISHED -j ACCEPT

    iptables -A OUTPUT -o eth0 -p tcp –sport 80 -m state –state ESTABLISHED -j ACCEPT

     4.3、iptables初始化脚本

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    #!/bin/bash

      

    echo &quot;Setting firewall . . . . start&quot;

      

    #--------RULESET INIT----------#

    iptables -F

    iptables -X

    iptables -P INPUT DROP

    iptables -P OUTPUT ACCEPT

    iptables -P FORWARD ACCEPT

    iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT

    #------------------------------#

    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    iptables -A INPUT -i eth0 -p tcp ! --syn -j ACCEPT

    iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

    #------------------------------#

    #zabbix

    iptables -A INPUT -p tcp --destination-port 10050 -j ACCEPT

    iptables -A INPUT -p udp --destination-port 10051 -j ACCEPT

    iptables -A OUTPUT -p tcp --destination-port 10050 -j ACCEPT

    iptables -A OUTPUT -p udp --destination-port 10051 -j ACCEPT

    #for web

    iptables -A INPUT -p tcp --destination-port 21 -j ACCEPT

    iptables -A INPUT -p tcp --destination-port 80 -j ACCEPT

    iptables -A OUTPUT -p tcp --destination-port 80 -j ACCEPT

    iptables -A OUTPUT -p tcp --destination-port 21 -j ACCEPT

    #for mysql

    iptables -A INPUT -p tcp --destination-port 3306 -j ACCEPT

    iptables -A OUTPUT -p tcp --destination-port 3306 -j ACCEPT

    #for mail

    iptables -A INPUT -p tcp --destination-port 25 -j ACCEPT

    iptables -A OUTPUT -p tcp --destination-port 25 -j ACCEPT

    iptables -A OUTPUT -p tcp --destination-port 110 -j ACCEPT

    #for ssh

    iptables -A INPUT -p tcp -s any/0 --destination-port 22 -j ACCEPT

    iptables -N icmp_allowed

    iptables -A icmp_allowed -p ICMP --icmp-type 11 -j ACCEPT

    iptables -A icmp_allowed -p ICMP --icmp-type 8 -j ACCEPT

    iptables -A icmp_allowed -p ICMP -j DROP

    iptables -A OUTPUT -p icmp -j ACCEPT

    iptables -A INPUT -p icmp -j ACCEPT

    iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

    iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

    iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT

    /etc/init.d/iptables save

限制ping 192.168.0.1主机的数据包数,平均2/s个,最多不能超过3个

放行本机端的流入流出

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网行业资讯频道,感谢您对编程网的支持。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

iptables从入门到应用的实例分析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

iptables从入门到应用的实例分析

iptables从入门到应用的实例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。iptables从入门到应用 一、简介 1.1、是什么? iptabl
2023-06-06

阿里云服务器应用实例从入门到精通

本文将详细介绍阿里云服务器的应用实例,包括如何搭建、管理及优化服务器。从入门到精通,本文将带您全面了解阿里云服务器。一、搭建阿里云服务器阿里云服务器是阿里云推出的一款高性能、高可用的云服务器产品,能够满足企业级用户的各种需求。首先,您需要在阿里云官方网站上注册并登录账号,然后选择服务器产品,根据您的需求选择相应的
阿里云服务器应用实例从入门到精通
2023-10-31

Android入门之AlertDialog用法实例分析

本文实例讲述的是AlertDialog,这种对话框会经常遇到。AlertDialog跟WIN32开发中的Dialog不一样,AlertDialog是非阻塞的,而阻塞的对话框用的是PopupWindow。 先贴出该程序运行的截图:main.x
2022-06-06

SpringCloud Eureka服务注册中心应用入门实例分析

这篇文章主要介绍“SpringCloud Eureka服务注册中心应用入门实例分析”,在日常操作中,相信很多人在SpringCloud Eureka服务注册中心应用入门实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希
2023-07-02

Java泛型使用入门实例分析

本文小编为大家详细介绍“Java泛型使用入门实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java泛型使用入门实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1、什么是泛型?泛型其实就是将类型作为
2023-06-29

从入门到精通:探索Go语言range的实战应用

Go语言是一门由Google开发的编程语言,它具有性能高、易学易用等优点,因此备受开发者青睐。在Go语言中,range是一个非常常用的关键字,用于迭代数组、切片、通道和映射等数据结构。在本文中,我们将从入门到精通,探索range在Go语言中
从入门到精通:探索Go语言range的实战应用
2024-03-12

Apache Spark SQL入门及实践的实例分析

Apache Spark SQL入门及实践的实例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Apache SparkSQL是一个重要的Spark模块,我们
2023-06-02

从零到一,操作系统日志分析的入门指南

操作系统日志分析是系统管理员和安全专业人员用来识别和调查系统问题的基本工具。本文将介绍操作系统日志分析的基础知识,包括日志文件的位置、结构和常见工具,并提供一些日志分析的实际示例。
从零到一,操作系统日志分析的入门指南
2024-02-06

java中MyBatis-plus入门使用的示例分析

小编给大家分享一下java中MyBatis-plus入门使用的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、初始化 SpringBoot 项目首先使用
2023-06-15

Redis入门基础常用操作命令实例分析

今天小编给大家分享一下Redis入门基础常用操作命令实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Redis基础Re
2023-06-30

入门Go语言必备知识:从环境搭建到实战应用

入门 go 语言必备知识:环境搭建:安装 go 发行版并设置环境变量。go 基础:了解 go 程序结构、变量声明、控制流和函数。数据结构:掌握切片、映射和结构。实战案例:构建一个简单的 http 服务器来理解 go 的特性。入门 Go 语言
入门Go语言必备知识:从环境搭建到实战应用
2024-04-08

Android之从IO到NIO的模型机制实例分析

这篇文章主要讲解了“Android之从IO到NIO的模型机制实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android之从IO到NIO的模型机制实例分析”吧!1 Basic IO模
2023-07-05

CMS 移动应用支持的终极指南:从入门到精通

在当今移动为先的世界中,拥有一个强大的内容管理系统 (CMS) 移动应用至关重要。它使组织能够从移动设备有效地管理其内容,并提供无缝的用户体验。本指南将提供从入门到精通的全面指南,以帮助您建立和维护一个成功的 CMS 移动应用程序。步骤 1:选择合适的 CMS选择一个具有移动支持功能的 CMS 是第一步。以下是一些流行
CMS 移动应用支持的终极指南:从入门到精通
2024-04-03

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录