是 Linux 自带的防火墙程序,可以对网络流量进行管理和过滤,来保障网络的安全。Iptables 可以被运用于 IPv4/IPv6 网络,支持网络地址转换(NAT)、端口转发、数据包过滤等功能。
在 CentOS 上,Iptables 防火墙系统默认已安装。如果没有,可以通过 yum 命令进行安装。
安装完成后,通过以下命令启动 Iptables 服务:
Iptables 有三个分类,分别是表、链和规则。
表:一个表就是一个数据结构,可以提供不同的处理方式。Linux 操作系统默认提供了三个表:
- 表: 是默认的表,用于过滤网络数据包。
- 表:用于网络地址转换(NAT)。
- 表:这个表可以修改报文头,而不是过滤数据报。比如可以修改某个特定的IP地址,修改TTL值等。
链: 链是表的组成部分,它能够执行指定的动作。CentOS 默认选择了五个主要的链。
- 链:用于处理输入数据报。所有进入到本地计算机的网络数据包都要进入该链。
- 链:用于处理输出数据报。所有发出本地计算机的网络数据包都要通过该链。
- 链:用于处理转发数据报。当本地计算机作为路由器或者网关,数据必须经过本机的时候,就走这个链。
- 链:用于在数据报到达本地计算机之前修改该数据报,能够修改报文头中的一些内容。
- 链:用于在数据报将离开本地计算机之前修改该数据报,能够修改报文头中的一些内容。
规则: 规则是链的组成部分,每个规则定义了 Iptables 命令如何对数据包执行一个动作。 Iptables 命令用一些规则对链进行定义,设置这些规则可以限制、转发、修改、丢弃或允许流量通过这些链。
通过 命令可以查看规则,其中 参数表示查看所有的规则,如果想查看针对某个表的规则,可以加上表的名称,如下:
下列命令表示:通过实现 DROP 动作,从输入连接中丢弃所有的 ICMP ,因为所有的 ICMP 连接都来源于外部网络,我们不能让外部网络访问内部网络。
删除规则可以通过 命令,规则的编号可以从中找到。
修改规则可以先利用 删除原有规则,再使用 添加新规则。
重置规则可以通过下面的命令实现,默认的规则是允许所有的流量通过。
如何允许 Ping 呢?可以加入下面的规则:
如何允许SSH?可以加入下面的规则:
上面的命令中,第一条规则代表只有在状态为 NEW,来源为 TCP,目标端口为22的时候才允许连接通过。
下面是一些开源服务的 Iptables 配置示例:
上面的命令是将所有端口 80 的请求转发到端口 8080 上,如果是本地访问,则需要在 OUTPUT 链进行配置。
下面的规则可以防御基于 SYN 的攻击:
上面的命令表示只有 SYN 请求的 TCP 数据包才被接受,其他的都需要被丢弃。