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 时也是要关掉防火墙的。