在 CentOS 中的 firewalld 是基于 iptables 和一些其它程序构建的,firewalld 使用了一些更加友好的配置方式来实现了对 iptables 操作。同时还扩展了一些 iptables 本身不支持的功能,例如定时防火墙规则。完整的程序以及库依赖见 firewalld 官网 https://firewalld.org/。
iptables 通过操作 Linux 内核 netfilter 模块来针对网络包处理。
在操作命令之前请临时关闭机器的 firewalld 防火墙,同时需要确保有物理机的访问权限(或者虚拟机中的物理终端操作权限),有些规则会屏蔽 SSH 22 端口的访问导致无法后续操作。
# 停用 firewalld systemctl stop firewalld
iptables 基础概念和操作
策略链 (Policy Chain)
iptables 的过滤规则是通过匹配策略链上的规则来决定不同情况下对包的处理,包含了三种策略链:
INPUT: 通过此链来控制传入的连接和包,例如允许来自某些 IP 的 SSH 传入连接。
FORWARD: 转发控制链接,如果你需要在机器上配置路由功能时会用到此链。
OUTPUT: 传出链,当前主机发送请求到外部时匹配此链,通常没有特殊需求时也不会给它配置特殊规则。
可以通过下列命令来查看当前设置的 iptables 规则:
~]# iptables -S -P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT
策略链默认行为
对应的策略链会有默认的行为。意味着定义了未匹配任何规则的时,链对数据包的处理。
使用如下命令查看当前策略链的行为(同时输出了未匹配此链的数据包数量和流量)。
~]# iptables -L -v | grep policy Chain INPUT (policy ACCEPT 0 packets, 0 bytes) Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) Chain OUTPUT (policy ACCEPT 821 packets, 293K bytes)
如果当前的策略链的行为不是如上所示,可以通过下列命令来设置接受所有数据的行为:
iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT
可以尝试如下命令丢弃所有情况下的包:
iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP
注意:此时外部主机将无法访问主机,同时主机内部也无法访问外部。