centos7系统使用firewalld服务替代了iptables服务,但是依然可以使用iptables来管理内核的netfilter
但其实iptables服务和firewalld服务都不是真正的防火墙,只是用来定义防火墙规则功能的管理工具,将定义好的规则交由内核中的netfilter(网络过滤器来读取)从而实现真正的防火墙功能
在iptables命令中设置数据过滤或处理数据包的策略叫做规则,将多个规则合成一个链。
常见的控制类型
ACCEPT 允许通过
LOG 记录日志信息,然后传给下一条规则继续匹配
REJECT 拒绝通过,必要时给出提示
DROP 直接丢弃,不给出任何回应。
规则链则依据处理数据包的位置不同而进行分类
PREROUTING进行路由选择前处理数据包
INPUT 处理入站数据包
OUTPUT 处理出站数据包
FORWARD 处理转发的数据包
POSTROUTING 在进行路由选择后处理数据包
iptables中的规则表是用于容纳规则链,规则表默认是允许状态的,那么规则链就是设置被禁止的规则,而反之如果规则表是禁止状态的,那么规则链就是设置被允许的规则。
raw表:确定是否对该数据包进行状态跟踪
mangle表:为数据包设置标记
nat表:修改数据包中的源,目标IP地址或端口
filter表:确定是否放行该数据包(过滤)
规则表的先后顺序:raw-mangle-nat-filter
规则链的先后顺序:
入站顺序:PREROUTING-INPUT
出站顺序:OUTPUT-POSTROUTING
转发顺序:PREROUTING-FORWARD-POSTROUTING
注意事项
没有指定规则表则默认指filter表。
不指定规则链则指表内所有的规则链。
在规则链中匹配规则时会依次检查,匹配即停止(LOG规则除外),若没匹配项则按链的默认状态处理。
基本的命令参数
iptables命令用于管理防火墙的规则策略,格式为:“iptables [-t 表名] 选项[链名][条件] [-j 控制类型]”不指定表,默认netfilter
禁止所有的ping操作
iptables -I INPUT -p icmp -j DROP
firewalld防火墙
区域规则
firewall-cmd
很多人因为防火墙的设置太繁杂,所以经常直接systemctl stop firewalld关闭防火墙。
其实这样是不安全的,关闭防火墙之后,不法分子就可以轻易的攻击服务器了。
下面我以开启http为例子,展示如何让http能通过防火墙
firewall-cmd --list-all获取当前的防火墙规则
我的是dmz
firewall-cmd --add-service=http
如果是success,那么服务器上的http服务就能通过防火墙了。但是只是暂时的。
firewall-cmd --permanent --zone=dmz --add-service=http
如果是开放某个端口
firewall-cmd --permanent --zone=dmz --add-port=xxx/tcp