iptables/netfilter入门

  iptables是Linux中的重要组件,它是对报文进行过滤,在2001年的1月Linux 2.4内核发布以来,就已经是Linux的一部分了。  
  现在的iptbales已经成为了功能很大的防火墙,具备了专有的商业防火墙的大多数的功能了。

1、防火墙简介

  防火墙是我们在外网接收数据进行过滤的第一道防线,也可能是最后一道防线,它是一个隔离工具,工作在主机或网络的边缘,对经由的报文根据预先定义好的规则或者说是识别标准进行检测,对于能够匹配到的报文则根据预先生成的规则进行处理的一套组件。防火墙也有分类,其分类主要以下两种:  
  硬件防火墙:主要在硬件级别上实现部分功能。  
  软件防火墙:主要在应用软件逻辑在通用硬件的基础上实现。

防火墙拓扑.png

2、iptables/netfilter简介

iptables是一个生成规则,可以保存到文件重载使用的一个用户命令,工作在应用层当中,它解析命令行并将防火墙策略传递给内核。而在netfilter中,它是一个防火墙的框架,将iptables的规则承载并生效,本身并不对数据包进行过滤,它只是允许可以过滤数据包的函数挂接到内核中适当位置。

3、规则链与策略

  众所周知,内核是面向硬件从而用来对硬件进行管理和驱动,它也有不同的功能,进程管理、内存功能、网络协议栈功能、安全功能、文件系统、驱动程序等。那么防火墙就工作在网络协议栈上,它是安全功能的一种,其功能在内核中共分为五个,分别是路由前(prerouting)、路由后(postrouting)、导入(input)、导出(output)和转发功能(forward)。使其规则生效,我们称之为钩子函数,工作在netfilter之上。我们可以自己定义一个规则链,而后手动关联至指定的钩子上,使其生效。  
  在iptables命令当中对以上功能是一样的,不过是要在netfilter当中生效,对于在iptables当中来说,我们称之为"规则链",我们自己定义规则是要写到上面去的,而每个链都有属于它的功能,其功能分为四个,我们称之为"表",优先级我们也是由高而低。分别是:

raw::关闭nat表上启用的链接追踪机制 
mangle:拆解报文,做出修改,而后重新封装
NAT:负责地址解析转换。修改数据包中的源、目标IP地址或端口
filter:对数据包进行过滤

  每一个功能对应一个钩子函数,分别是:

raw:prerouting、output 
mangle:prerouting、forward、postrouting、input、output nat:
prerouting、input、output、postrouting
filter:input、forward、output

默认的表和链的示意图.png

4、iptables命令使用

  我们知道,我们的操作都是在shell界面下来进行的,根本无法直接接触内核,对于防火墙来说也是一样,它也是有用户命令的,可以定义不同的表,每个表都包含几个内部的链,也能包含用户定义的链。
 每个链都是一个规则列表,对对应的包进行匹配:每条规则指定应当如何处 理与之相匹配的包。这被称作'target'(目标),也可以跳向同一个表内的用户定义的链。安装netfilter位于内核中的tcp/ip协议栈报文处理框架,对于iptables来说,在CentOS
 5/6中用来生成规则,可保存于文件中以反复装载生效。  
iptables的命令格式如下:

# iptables [-t table] COMMAND [chain] [PARAMETERS] [-m matchname [per-match-options]][-j targetname [per-target-options]]

  以上就是命令的格式,使用iptables管理时,都会有它的子命令,其子命令如下:  
  COMMANDs:  
  链管理:

-N, --new-chain chain    新建一个自定义的链 
-X, --delete-chain [chain]    删除用户自定义的引用计数器为0的链
-F, --flush [chain]    清空指定规则链上的规则 
-E, --rename-chain old-chain new-chain 重命名链
-Z, --zero [chain [rulenum]]    置零计数器 
-P, --policy chain target   设置规则链的默认值,默认值有:ACCEPT、DROP

  需要注意的是:每个规则都由两个计数器,一个是packets,它是被本规则所匹配到的所有报文的个数;另一个是bytes,被本规则所匹配到的所有报文的大小之和。

  除了链管理之外,还有规则管理以及规则显示,其子命令如下:  
规则管理:

-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   根据规则本身删除规则

  规则显示:

-L, --list [chain]    列出规则     
    -v, --verbose  详细信息    
    -n, --numberic  数字格式显示主机地址和端口号     
    -x,--exact    显示计数器的精确值     
    --line-numbers  列出规则时,显示其在链上的相应的编号 
-S, --list-rules [chain]  显示指定链上的所有规则

  以上就是对于子命令的规则介绍,但是添加添加规则时,还需考量一下因素:  
  1、实现的功能:用于判定规则添加至那个表中。  
  2、报文流经的位置:用于判定规则添加至那个链当中。  
  3、报文的流向:判断规则何为"源",何为"目标"。  
  4、匹配条件:用于编写正确的匹配规则,条件如下:  
    (1) 专用于某种应用的同类规则,匹配交小的放前面。  
    (2) 专用于某种应用的不用泪规则,匹配较大的放在后面。  
    (3) 用于通用目的的规则放在前面。  
  以上就是我们添加规则时所考量的因素,其中filter表就是防火墙的核心所在,那么在所有的规则编辑或者定义完成之后,自然少不了它的匹配条件,那么匹配条件也分为两种,一种是通用匹配和扩展匹配,另一种是跳转目标,归结如下:

[!] -s, --source address[/mask][,...]  检查报文的源IP地址是否镀铬此处指定的范围,或是否等于此处给定的地址。
[!] -d, --destination address[/mask][,...]  检查报文的目标IP地址是否符合此处的指定范围,或是否等于此处。 
[!] -p, --protocol protocol     匹配报文中的协议,可用值为tcp, udp, icmp等,或者"all",亦可以数字格式指明协议。 
-m, --match match  调用指定的扩展匹配模块来匹配条件检查机制。 
[!] -i, --in-interface name  限定报文仅能够从指定的接口流入。
[!] -o, --out-interface name  限定报文仅能够从指定的接口流出。

  以上就是通用匹配,接下来介绍跳转目标,选项为-j,那么跳转目标每个意义都不一样,归结如下:  
  1、ACCEPT允许通过。  
  2、LOG:记录日志信息。  
  3、REJECT:拒绝通过,给出提示。  
  4、DROP:直接丢弃,不给出任何回应。  
  其中REJECT和DROP的操作都是将数据包拒绝,但REJECT会再回复一条“您的信息我已收到,但被扔掉了”,那通过ping命令测试REJECT如下:

[root@localhost ~]# ping -c 4 192.168.10.10 
PING 192.168.10.10 (192.168.10.10)56(84) bytes of data.
From 192.168.10.10 icmp_seq=1 Destination Port Unreachable
From 192.168.10.10 icmp_seq=2 Destination Port Unreachable 
From 192.168.10.10 icmp_seq=3 Destination Port Unreachable 
From 192.168.10.10 icmp_seq=4 Destination Port Unreachable 
--- 192.168.10.10 ping statistics --- 
4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 3002ms

  好的,对于选项的匹配规则注意事项已经介绍的差不多了,那么接下来我们该做一小例子了,在做试验要注意一点,都必须将22好端口开启通过,不然的话,你的远程会话就连接不上去了。  
在下一篇当中我们接触iptables进阶。

原创文章,作者:刘 祥宇,如若转载,请注明出处:http://www.178linux.com/67309

(0)
刘 祥宇刘 祥宇
上一篇 2017-01-30
下一篇 2017-01-31

相关推荐

  • Samba服务

    一 服务端配置 1 安装所需软件 [root@centos7 ~]# yum install samba samba-common -y samba主要提供SMB服务所需的各项服务程序、相关的文件及其他和Samba相关的设置等 samba-common提供服务端和客户端都会用的的数据,包括主配置文件、语法检查等 2 添加Samba用户 添加smb1、smb2…

    Linux干货 2017-06-13
  • 系统基础之压缩归档工具详解

    压缩和解压缩工具 概论  在使用操作系统时,我们常会遇到大文件,会使我们很头疼.在面对时间和空间上的选择,只能选择空间,这就要用到压缩工具和归档工具,下面为大家一一介绍.  压缩文件只压缩文本格式的文件,通常不压缩已经是压缩的文件.  压缩文件就会涉及到压缩比:    原理:通过了解文本文件的数据形式,运用压…

    Linux干货 2016-08-18
  • find查找命令及压缩

    文件查找     在文件系统上查找符合条件的文件;     文件查找: locate, find         非实时查找(数据库查找): locate    &nbs…

    Linux干货 2016-08-18
  • 从Linux小白到大牛——与狼共舞的日子11

    马哥教育网络班21期+第10周课程练习 1、详细描述一次加密通讯的过程,结合图示最佳。 加密过程 1.使用单向加密算法,提取A的文件的特征码。 2.使用A的私钥对提取出来的特征码进行加密,把加密后的特征码附加在A的文件的后面。 3.使用对称加密对刚刚的A的文件和加密后的特征码进行加密,生成对称加密密钥 4.使用B的公钥对第3步骤的对称加密的密钥进行加密,加密…

    Linux干货 2016-12-05
  • 硬盘分区MBR和GPT选哪个好?有什么区别?

    当前主流的硬盘分区方式有两种:MBR和GPT。 一、MBR与GPT简介与结构 什么是MBR?         MBR,全称为Master Boot Record,即硬盘的主引导记录。是对IBM兼容机的硬盘或者可移动磁盘分区时,在驱动器最前端的一段引导扇区。 MBR的组成部分       &…

    Linux干货 2016-08-29
  • 马哥linux0803作业内容

    1. 创建sysadmins组 将用户user1,user2,user3加入sysadmins组中 将user3设置为sysadmins的管理员 用user3登录,将user2从组中移除 设置sysadmins的密码centos 设置user1 在创建新文件时,文件的所属组为sysadmins 删除user1…3 删除sysadmins 2、三种权限rwx对…

    Linux干货 2016-08-05