centos7查看iptables centos7查看iptables状态_linux 防火墙状态


概念

这里说的Linux防火墙是Linux下的Netfilter/iptables;

Netfilter是Linux内核模块,iptables是管理Netfilter防火墙的应用程序,但是iptables并没有一个守护进程,所以并不能算是真正意义上的服务,而应该算是内核提供的功能。

iptables不是真正的防火墙,可以把它理解成一个客户端代理,用户通过iptables这个代理,将用户的安全设定执行到对应的"安全框架"中(netfilter),这个"安全框架"才是真正的防火墙。

Netfilter是Linux操作系统核心层内部的一个数据包处理模块,它具有如下功能:

  • 网络地址转换(Network Address Translate)
  • 数据包内容修改
  • 以及数据包过滤的防火墙功能

iptables

iptables的语法是由表tables、链chains、规则rules组成


iptables [-t 表名] <-A| I | D | R> 链名 [-i | o 网卡名] [-p 协议] [-s 源ip地址 | 源子网] [--sport 源端口号 ] [-d 目标ip地址] [目标子网] [--dport 目标端口号] <-j 动作>

iptables <-P | nL >
P 是设置某条规则链的默认动作
nL 是查看当前运行的防火墙规则列表


何为链?何为表?

所有进出主机的报文都要通过"关卡",经过检查后,符合规则的才能放行,不符合规则的则需要被阻止,而关卡上可能不止有一条规则,把这些规则串到一个链条上,就在iptables中被称为"链";


centos7查看iptables centos7查看iptables状态_linux 防火墙_02


对每个"链"上都放置了一串规则,但是这些规则有些很相似,比如,A类规则都是对IP和者端口的过滤,B类规则是修改报文,把具有相同功能的规则的集合叫做"表"

有哪些表和链?

  • PREROUTING链可以存在于:raw表,mangle表,nat表
  • INPUT链可以存在于:mangle表,filter表,(centos7中还有nat表,centos6中没有)
  • FORWARD链可以存在于:mangle表,filter表
  • OUTPUT链可以存在于:raw表mangle表,nat表,filter表
  • POSTROUTING链可以存在于:mangle表,nat表

filter

是默认的表,主要用于对数据包进行过滤;这张表能处理上面提到的两个流向的数据报

  • INPUT链:INPUT针对那些目的地是本地的包
  • OUTPUT链:OUTPUT是用来过滤所有本地生成的包
  • FORWARD链:FORWARD过滤所有不是本地产生的并且目的地不是本地(即本机只是负责转发)的包

nat

修改数据包的IP地址、端口号等信息

  • PREROUTING链:在包刚刚到达防火墙时改变它的目的地址
  • POSTROUTING链:在包就要离开防火墙之前改变其源地址
  • OUTPUT链:改变本地产生的包的目的地址

mangle

用于修改数据包的TOS、TTL、以及为数据包设置Mark标记,需要相应的路由设备支持,因此应用并不广泛

根据"状态"来对iptables分为静态和动态

静态

对于数据报而言,它的几个流向如下:


centos7查看iptables centos7查看iptables状态_linux iptables_03


请时刻牢记这张路由次序图

设置iptables规则


centos7查看iptables centos7查看iptables状态_linux 防火墙_04


centos7查看iptables centos7查看iptables状态_linux iptables_05


动态

有状态的防火墙能够记住为发送或接收包所建立的连接状态,有4种状态:

  • NEW:该包想要开始一个连接(重新连接或将连接重定向)
  • RELATED:该包是属于某个已经建立的连接所建立的新连接
  • ESTABLISHED :只要发送并接到应答,一个数据连接从NEW变为ESTABLISHED,而且该状态会继续匹配这个连接的后续数据包
  • INVALID:数据包不能被识别属于哪个连接或没有任何状态比如内存溢出,收到不知属于哪个连接的ICMP错误信息,一般应该DROP这个状态的任何数据
    由于"状态"属于iptables的外挂模块,所以其语法:
iptables [-m stat] [--stat 状态] <-j 动作>


保存规则


1、iptables-save  > /etc/sysconfig/iptables 
2、service iptables save
两种方式都可以


示例


禁止某IP段访问80端口
iptables -t filter -A INPUT -p tcp -s 10.1.1.0/24 --dport 80 -j DROP


后续工作中遇到有趣的例子持续更新

注意

1、由于怕误操作iptables导致将自己拦截在外面,所以可以:


*/5 * * * * /etc/init.d/ipbables stop


2、centos7后引入了firewalld来管理防火墙规则,它在启动的时候不载入保存在/etc/sysconfig/iptables的规则


回退回 iptables 的办法
systemctl stop firewalld
systemctl mask firewalld
yum install iptables-services