原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://powermichael.blog.51cto.com/12450987/1952049

iptables从入门到应用

一、简介

1.1、是什么?

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

1.2、发展史

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

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

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

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

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

 二、原理

2.1、组成

linux的防火墙由netfilter和iptables组成。用户空间的iptables制定防火墙规则,内核空间的netfilter实现防火墙功能。

netfilter(内核空间)位于Linux内核中的包过滤防火墙功能体系,称为Linux防火墙的“内核态”。

iptables(用户空间)位于/sbin/iptables,是用来管理防火墙的命令的工具,为防火墙体系提供过滤规则/策略,决定如何过滤或处理到达防火墙主机的数据包,称为Linux防火墙的“用户态”。

2.2、实现方式

Linux系统的防火墙功能是由内核实现的,包过滤防火墙工作在TCP/IP的网络层。

用户空间的iptables制定相应的规则策略控制内核空间的netfilter处理相应的数据访问控制。

iptables有四表五链(其实有五表,是后来加进来的),四表分别是下图的的raw,mangle,nat,filter表。五链分别是PREROUTING,INPUT,OUTPUT,FORWARD,POSTROUTING链。表有什么用?链又有什么用呢?其实表决定了数据报文处理的方式,而链则决定了数据报文的流经哪些位置。

你可以从图中看出规则表的优先级:raw-->mangle-->nat-->filter。

四表的介绍如图(ps:由于现在有五表了,所以我把另一个表也加了进来)。

五链的介绍如图。

制作防火墙规则通常有两种基本策略。一是黑名单策略;二是白名单策略。

黑名单策略指没有被拒绝的流量都可以通过,这种策略下管理员必须针对每一种新出现的攻击,制定新的规则,因此不推荐。

白名单策略指没有被允许的流量都要拒绝,这种策略比较保守,根据需要,逐渐开放,目前一般都采用白名单策略,推荐。

2.3、数据包过滤匹配流程

如图,我们可以分析数据报文进入本机后应用了哪些表规则以及链规则,根据表规则和链规则我们分析数据包的过滤匹配流程。

比如我们制定一个filter表的规则,filter表决定是否放行数据包通过,那如果通过,则必须经由INPUT链流入数据包,INPUT链是处理入站数据的,如果没问题,继续放行到用户空间,再经由OUTPUT链将数据包流出。

那如果是nat表的规则,nat表主要实现转发功能,数据包先经由PREROUTING链进行路由选择,选择好路线后再经由FORWARD链转发数据,然后再进行一个路由选择,最后由POSTROUTING链流出数据。

其他表规则的数据包流程不做介绍,图中介绍的十分详尽。

三、iptables命令

3.1、制定iptables表规则思路

(1)选择一张表(此表决定了数据报文处理的方式)

    (2)选择一条链(此链决定了数据报文的流经哪些位置)

    (3)选择合适的条件(此条件决定了对数据报文做何种条件匹配)

    (4)选择处理数据报文的动作,制定相应的防火墙规则。

3.2、基本语法结构

结构:

iptables [ -t 表名 ] 管理选项 [ 链名 ] [ 条件匹配 ] [ -j 目标动作或跳转 ]

几个注意事项:

不指定表名时,默认表示filter表,不指定链名时,默认表示该表内所有链,除非设置规则链的缺省策略,否则需要指定匹配条件。

3.3、详细语法

1
2
3
4
5
6
7
8
9
10
11
12
13
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、语法结构解析

语法结构解析如下。

注意:本导图是按照iptables语法结构的使用的先后顺序制作的,如果按照此种方式能够很快地帮助我们记忆以及掌握iptables规则的制定。

3.4.1、表

其实表的介绍,在上面已经介绍了。这里我们可以再来回顾以下五张表的功能。

3.4.2、管理选项

管理选项分为三大类,分别为:规则的显示,规则链管理以及规则管理。我们可以通过man帮助查看iptables的用法,大多选项用法都见名知意。

链管理

1
2
3
4
5
6
7
8
9
    -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)

规则管理

1
2
3
4
5
    -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、链

五链的功能如图所示。

3.4.4、条件匹配

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

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

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

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

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

1
2
3
4
5
6
-p 指定规则协议,tcp udp icmp all
-s 指定数据包的源地址,ip hostname
-d 指定目的地址
-i 输入接口
-o 输出接口                                              
! 取反

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

1
2
3
4
5
6
7
8
9
10
-p tcp
  --sport 匹配报文源端口;可以给出多个端口,但只能是连续的端口范围 
  --dport 匹配报文目标端口;可以给出多个端口,但只能是连续的端口范围
  --tcp-flags mask comp 匹配报文中的tcp协议的标志位
-p udp
  --sport 匹配报文源端口;可以给出多个端口,但只能是连续的端口范围
  --dport 匹配报文目标端口;可以给出多个端口,但只能是连续的端口范围
--icmp-type
  0/0: echo reply 允许其他主机ping
  8/0echo request 允许ping其他主机

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

显式匹配的选项特别多,所以使用思维导图的方式梳理一下。我们可以使用命令:man iptables-extensions查看具体用法。

1.multiport(多端口)

开放多个端口。

  1. 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 --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.

  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保存和载入的规则稍有差异。

3.5.1、CentOS 7

1
2
3
4
    保存:iptables-save > /PATH/TO/SOME_RULE_FILE   
   重载:iptabls-restore < /PATH/FROM/SOME_RULE_FILE    
    -n, --noflush:不清除原有规则    
    -t, --test:仅分析生成规则集,但不提交

3.5.2、CentOS 6

1
2
3
    保存规则: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
  1. 2.放行httpd/nginx服务

1
2
 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. 3.放行本机端的流入流出

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. 4.限制ping 192.168.0.1主机的数据包数,平均2/s个,最多不能超过3个

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

本文出自 “有点意思!” 博客,请务必保留此出处http://powermichael.blog.51cto.com/12450987/1952049

iptables 从入门到应用的更多相关文章

  1. iptables从入门到掌握

    防火墙简述 防火墙(firewall)一词本是建筑用于,本意是为了保护建筑物不受火灾侵害的.被借鉴到了在网络通信领域中,表示保护局域网或主机不受网络攻击的侵害. 防火墙: 工作在主机或者网络边缘,对于 ...

  2. Linux数据包路由原理、Iptables/netfilter入门学习

    相关学习资料 https://www.frozentux.net/iptables-tutorial/cn/iptables-tutorial-cn-1.1.19.html http://zh.wik ...

  3. Linux iptables 从入门到放弃

    iptables表(iptables)和链(chains)    描述完iptables术语后,相信大家对iptables的表和链有了初步的了解.默认情况下,Iptables根据功能和表的定义划分包含 ...

  4. iptables防火墙入门

    一.iptables基本管理 iptables运行前提:关闭firewalld防火墙再开启iptables,不然造成冲突. 基本指令: 1.部署iptables服务 yum –y install ip ...

  5. iptables技术入门

    1- 概述 ___ netfilter/iptables: IP 信息包过滤系统,实际由两个组件netfilter和iptable组成.可以对流入和流出服务器的数据包进行很惊喜的控制.主要工作在OSI ...

  6. 快速入门linux系统的iptables防火墙 1 本机与外界的基本通信管理

    概述 iptables是一种运行在linux下的防火墙组件,下面的介绍可以快速的学习iptables的入门使用. 特点(重要) 它的工作逻辑分为 链.表.规则三层结构. 数据包通过的时候,在对应表中, ...

  7. (一)洞悉linux下的Netfilter&iptables:什么是Netfilter?

    转自:http://blog.chinaunix.net/uid-23069658-id-3160506.html 本人研究linux的防火墙系统也有一段时间了,由于近来涉及到的工作比较纷杂,久而久之 ...

  8. 洞悉linux下的Netfilter&iptables:什么是Netfilter?

    本人研究linux的防火墙系统也有一段时间了,由于近来涉及到的工作比较纷杂,久而久之怕生熟了.趁有时间,好好把这方面的东西总结一番.一来是给自己做个沉淀,二来也欢迎这方面比较牛的前辈给小弟予以指点,共 ...

  9. iptables系列教程(一)| iptables入门篇

    一个执着于技术的公众号 前言 在早期的 Linux 系统中,默认使用的是 iptables 配置防火墙.尽管新型 的 firewalld 防火墙已经被投入使用多年,但是大量的企业在生产环境中依然出于各 ...

随机推荐

  1. Java中往zip压缩包追加文件

    有个需求,从某个接口下载的一个zip压缩包,往里面添加一个说明文件.搜索了一下,没有找到往zip直接添加文件的方法,最终解决方法是先解压.再压缩. 具体过程如下: 1.一个zip文件的压缩和解压工具类 ...

  2. Linux Ipsec

    准备环境 1 主机ip:192.168.0.107 2 VPN服务器: ens32:192.168.0.102 ens33:127.16.1.10 环境测试 modprobe ppp-compress ...

  3. Dockerfile制作镜像

    Dockerfile简介 dockerfile 是一个文本格式的配置文件, 用户可以使用 Dockerfile 来快速创建自定义的镜像, 另外,使用Dockerfile去构建镜像好比使用pom去构建m ...

  4. Mysql中处理JSON字段

    处理json字段,可以用json_extract函数: select * from (select json_extract(ext_value,'$.high')+0 highx,batch_id ...

  5. C#开发微信小程序(二)

    导航:C#开发微信小程序系列 关于小程序项目结构,框架介绍,组件说明等,请查看微信小程序官方文档,关于以下贴出来的代码部分我只是截取了一些片段,方便说明问题,如果需要查看完整源代码,可以在我的项目库中 ...

  6. less 学习笔记

    一.介绍 Less (Leaner Style Sheets 简洁的样式表) 是一门向后兼容的 CSS 预处理语言,它扩展了CSS 语言. less is more. 好处: 1.具有部分编程语言的功 ...

  7. SecureCRT远程连接The remote system refused the connection问题

    今天用SecureCRT远程连接Linux(Centos 7)时,连不上,报错The remote system refused the connection.于是就百度,首先查看sshd服务有没有启 ...

  8. Redis 数据淘汰机制

    为了更好的利用内存,使Redis存储的都是缓存的热点数据,Redis设计了相应的内存淘汰机制(也叫做缓存淘汰机制) 通过maxmemory 配置项来设置允许用户使用的最大内存大小,当内存数据集大小达到 ...

  9. 大部分人都会忽略的Python易错点总结

    python中复数实现(-2) 0.5和开根号sqrt(-2)的区别** (-2)**0.5和sqrt(-2)是不同的,前者是复数后者是会报错的. print((-2)**0.5) #输出:(8.65 ...

  10. 推荐一款好看的Hexo主题Ayer

    介绍 Ayer 是一个干净且优雅的Hexo主题,自带响应式,加载速度很快,该有的功能都有,可配置项也很多,非常适合作为你的博客主题,主题内还附送了6张精美的高清壁纸.欢迎使用和Star支持,如果你在使 ...