iptables 入门

2019-08-18网络

关键字:iptables、Linux 防火墙运维


 

iptables 是 Linux 上的一款防火墙配置软件。ssh

 

防火墙的基本概念tcp

防火墙是指工做在计算机设备系统边缘或网络设备边缘,能根据既定的规则对数据报文进行检测并作出相应处理的模块。这一模块既能够是软件也能够是硬件。iptables 是属于软件防火墙的范畴。工具

 

在 cent os 中防火墙分为内核态组件与用户态组件。其中,内核态的组件是真正用于定义规则并检测数据报文的模块,而用户态的防火墙一般只直到配置内核态的规则的做用。内核态的防火墙名称为 netfilter,用户态的就是 iptables。但这些组件的名称在不一样版本的 cent os 上会有不一样的叫法。这种 netfileter 和 iptables 的名称是在 cent os 6 上的名称。但一般,咱们就简单地认为 iptables 就是 Linux 的防火墙就能够了。post

 

Linux 防火墙的简介学习

对于计算机设备而言,只有它须要与外界进行数据交换时它才有必要去安装防火墙模块。而数据报文的流转方向无非就三种:一、从外部流至本机应用;二、从本机应用发送至外部网络环境;三、从外部经由本机发送至外部网络环境。所以,防火墙最基本的几道“检查门坎”就是输入、输出与转发了。而在 Linux 防火墙中,检查门坎有专有词汇,称为“链”。即“输入链”、“输出链”与“转发链”。但真实的数据报文流转又远不止这么简单,因此还有另一些有其它用途的链。在 Linux 防火墙中,它们被称为“四表五链”。spa

 

四表:命令行

一、raw 表日志

二、mangle 表

三、nat 表

四、filter 表

 

五链:

一、Input Chain

二、Output Chain

三、Forward Chain

四、PreRouting Chain

五、PostRouting Chain

 

不一样的表中记载的是用于不一样场景下的过滤规则。raw表下的规则是用于肯定是否对该数据包进行状态跟踪的,它一般涉及到 prerouting chain 和 output chain。mangle表则用于为数据包设置标记,它一般涉及到所有的五个链。nat表则用于修改数据包中的源、目标地址或端口,它一般涉及到 prerouting chain, postrouting chain 与 output chain。而 filter 表则用于肯定是否放行 该数据包,它一般涉及到 input chain, forward chain 与 output chain。

 

在这四张表中,filter 表是用的最多的表,它也是 iptables 默认的表,在你不指定表名时,所写的规则就默认应用到 filter 表下。而对咱们非 Linux 运维人员来讲,就更是只用的上 filter 表了,甚至于大多数时候都是将防火墙给关掉的。

 

Linux 的防火墙在检查数据包时是按表按链顺序检查的,而且采用一种“匹配即中止”的检查方式,若所配置的规则列表中没有匹配的项,则按默认策略处理。Linux 防火墙表检查顺序为:raw表、mangle表、nat表、filter表。链检查顺序就不说了。

 

iptables语法规则

首先必再次强调,iptables 其实仅仅只是一个配置工具而已,真正起到数据包过滤做用的实际上是运行于内核态的 netfilter 模块。咱们对 iptables 的操做仅仅是配置过滤规则而已。iptables 的基本语法以下所示

iptables [-t 表名] 选项 [链] [条件] [-j 控制类型]

 

可选择的选项有如下几种:

一、-A

  在指定链的末尾添加一条规则。

二、-I

  在指定链的开头或指定序号处插入一条规则。

三、-L

  列出全部的规则条目。

四、-n

  以数字形式显示IP地址与端口。

五、-v

  以更详细的形式显示当前规则信息。

六、--line-numbers

  显示规则的序号。

七、-D

  删除指定序号的规则。

八、-F

  清空指定表内的全部规则。

九、-P

  为指定的链设置默认的规则。

 

可选择的控制类型有如下几种:

一、ACCEPT

  容许数据包经过。

二、DROP

  丢弃数据包,但不会给出任何回应。

三、REJECT

  丢弃数据包,而且给源端发送回应。

四、LOG

  记录日志信息,而后传递给下一条规则继续匹配。

五、SNAT

  修改数据包源端地址。

六、DNAT

  修改数据包目的端地址。

七、REDIRECT

  重定向。

 

DROP 与 REJECT 选项对于本机来讲效果彻底同样,都是丢弃数据包。但这两个选项对源端来说就有很大区别了。DROP 与 REJECT 惟一的区别就是会不会给源端做出回应。而源端在发出一个数据包时一般都会等待目的端的响应信息。若目的端对数据包采起的是 DROP 操做,则源端就只能在那苦等,直至超时。而若目的端采起的是 REJECT,源端就能当即获得响应结果。目的端的两种处理方式对源端的体验就有很大的差异了。

 

iptables 语句要输入的参数还挺多的,但它有一些选项有默认值,在某些状况下能够减小输入量。例如,默认的表名是 filter 表,默认的链是全部链。

 

iptables实例

iptables -t filter -A INPUT -p tcp -j ACCEPT

上面命令表示,在 filter 表中的 input chain 追加一条规则,放行全部的 tcp 入站请求数据包。

 

iptables -I INPUT -p udp -j ACCEPT

上面命令表示,在 filter 表中的 input chain 插入一条规则,放行全部的 udp 入站请求。而若要在指定位置插入规则,则直接在 INPUT 后面加序号便可。在 iptables 的规则中,序号是从 1 开始的。假设咱们要将上面的规则插入到第 2 条的位置上,则能够用:

iptables -I INPUT 2 -p udp -j ACCEPT

 

一样地,删除规则也是直接在链名后面加要删除的规则序号便可,假设咱们如今要删除规则列表中的第 3 条规则,则:

iptables -D INPUT 3 

 

若是规则比较多,数序号很差数,则能够在查询时经过 --line-numbers 参数来列出每条规则的序号,例如:

[chorm@cos101 ~]$ sudo iptables --line-numbers -L


Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
2    ACCEPT     tcp  --  anywhere             anywhere            

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

 

查看当前全部规则信息可使用 iptables -L 命令,加多一个 -v 参数会多显示几列数据出来。

iptables -L -v

[chorm@cos1 ~]$ sudo iptables -L -v
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
 1157 79453 ACCEPT     all  --  any    any     anywhere             anywhere             state RELATED,ESTABLISHED
    0     0 ACCEPT     icmp --  any    any     anywhere             anywhere            
    0     0 ACCEPT     all  --  lo     any     anywhere             anywhere            
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             state NEW tcp dpt:ssh
   14   862 REJECT     all  --  any    any     anywhere             anywhere             reject-with icmp-host-prohibited
    0     0 DROP       tcp  --  any    any     anywhere             anywhere            

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 REJECT     all  --  any    any     anywhere             anywhere             reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT 99 packets, 12603 bytes)
 pkts bytes target     prot opt in     out     source               destination 

加多一个 -v 参数多显示出来的几列数据,值得咱们关注的是最前面两列 pkts 与 bytes。它们表示的是当前规则匹配过的包数量与字节数量(不论是否成功匹配)。一般运维人员能够经过这些信息来调整规则顺序,将比较少出现的数据包类型移到后面,高频类型数据包规则移到前面,这样能够减小规则匹配次数,从而减小系统资源的浪费状况。

 

经过命令行设置的过滤规则都是一次性生效的。在你重启系统之后这些规则就没有了。若是想要让本身配置的规则永久生效,则须要将当前规则导出到外部配置记录文件中。这个用于记录 iptables 配置规则的外部文件位于

/etc/sysconfig/iptables

而保存规则的命令为

service iptables save

 

 

还有更多高级规则的设置暂时就不列了,例如 iptables 的通用匹配规则、隐含匹配规则与显式匹配规则。有须要的话再自行查询详细用法就行了,笔者这边关于 Linux 的防火墙也仅仅是出于拓展知识面的目的来学习的,能达到扫盲的效果就能够了,反正我平时用 Linux 时也是要关掉防火墙的。

相关文章
相关标签/搜索