Firewalld
Firewalld支持动态更新防火墙规则,并加入了区域(zone)的概念,zone是Firewalld预先准备的几套防火墙策略模板,用户可以根据不同生产场景选择合适的策略集合,从而实现防火墙策略之间的快速切换。
常用的区域
区域 | 默认策略 |
---|---|
trusted(信任) | 允许所有数据包 |
block(阻塞) | 拒绝所有数据包 |
drop(丢弃) | 丢弃所有数据包,并且不回复信息 |
home(家庭) | 仅接受与流出数据有关,或者与ssh、mdns、ipp-client、amba-client与dhcpv6-client服务相关的数据包 |
public(公共) | 仅接受与流出数据有关,或与ssh、dhcpv6-client服务相关的数据包 |
internal(内部) | 仅接受与流出数据有关,或与ssh、mdns、ipp-client、dhcpv6-client服务相关的数据包 |
work(工作) | 仅接受与流出的流量,或与ssh、ipp-client与dhcpv6-client服务相关的数据包 |
external(外部) | 仅接受与流出流量和ssh服务相关的数据包 |
DMZ(隔离) | 又称为非军事区域,内外网络之间增加的一层网络,起到缓冲作用,仅接受与流出的流量相关和ssh服务相关的数据包 |
firewalld默认提供了9个zone配置文件:block.xml、dmz.xml、drop.xml、external.xml、 home.xml、internal.xml、public.xml、trusted.xml、work.xml,文件位于/usr/lib /firewalld/zones/目录下。用户对区域进行修改后,会在/etc/firewalld/zones目录下生成对应的(用户自定义)配置文件。
防火墙开启与关闭
命令 | 说明 |
---|---|
systemctl start firewalld | 开启防火墙 |
systemctl stop firewalld | 关闭防火墙 |
systemctl enable firewalld | 开机自启动防火墙 |
systemctl disable firewalld | 禁止开机自启动 |
systemctl status firewalld | 查看防火墙状态 |
命令与参数
firewall-cmd [参数]
参数 | 说明 |
---|---|
--state | 查看防火墙是否在运行 |
--get-default-zone | 查看当前生效的防火墙区域 |
--set-default-zone=区域名 | 设置生效的防火墙区域 |
--get-zones | 显示所有可用的区域 |
--get-active-zones | 显示当前正在使用的区域与网卡名称 |
--zone=区域名 --list-all | 列出指定区域的所有配置参数 |
--list-all-zones | 显示所有区域的网卡配置参数、资源、端口以及服务等信息 |
--get-services | 查看当前域所有支持的服务(需要放行的服务需要自行添加) |
--list-services | 查看当前区域允许放行的服务列表 |
--add-service=服务名 | 设置当前区域允许该服务的流量通过 |
--add-port=端口号/协议 | 设置当前区域允许该端口的流量通过 |
--remove-service=服务名 | 设置默认区域禁止该服务的流量通过 |
--remove-port=端口号/协议 | 设置当前区域禁止该端口的流量通过 |
--add-source= | 将源自此IP或子网的流量导向指定的区域 |
--remove-source= | 不再将源自此IP或子网的流量导向某个指定区域 |
--add-interface=网卡名 | 将源自该网卡的所有流量都导向某个指定区域 |
--change-interface=网卡名 | 将某个网卡与区域进行关联 |
--list-all | 显示当前区域的网卡、资源配置,以及开放了哪些端口、服务 |
--reload | 让“永久生效”的配置规则立即生效,并覆盖当前的配置规则 |
--panic-on | 开启应急状况模式(关闭所有网络连接,包括远程ssh连接) |
--panic-off | 关闭应急状况模式 |
生效模式,更新防火墙规则
默认情况下,firewalld配置的防火墙策略为当前生效模式(Runtime),系统重启时会失效。想让配置策略永久生效,需要添加--permanent参数使用永久模式(Permanent),如:永久开放10800端口:firewall-cmd --add-port=10800/tcp --permanent ,但该模式配置的策略需要执行firewall-cmd --reload命令重新加载后才会生效。
命令 | 说明 |
---|---|
firewall-cmd --reload | 重新加载防火墙配置 |
firewall-cmd --complete-reload | 重新加载防火墙,不中断用户的连接,如远程连接(防火墙出严重故障时使用) |
示例
1. 查看区域信息
2. 放行端口
3. 为网卡绑定区域
一般情况下,一台主机会有多个网卡,比如一块对公网,一块对内网,因此网卡使用的防火墙策略也不一样,可以单独为某个网卡绑定某个区域。通过firewall-cmd –set-default-zone命令设置的区域会对所有网卡生效,但如果该网卡绑定了单独的区域,则单独绑定区域的优先级更高。
4. 查询服务是否放行
如:查询SSH和HTTPS协议的流量是否允许放行
5. 放行协议流量
把HTTPS协议的流量设置为永久允许放行
端口转发
端口转发命令格式如下,目标IP地址为所要访问服务器的IP地址:
firewall-cmd –permanent –zone=区域 –add-forward-port=port=源端口号:proto=协议:toport=目标端口号:toaddr=目标IP地址
富规则
富规则也叫复规则,表示更细致、更详细的防火墙策略配置,它可以针对系统服务、端口号、源地址和目标地址等诸多信息进行更有针对性的策略配置,它的优先级在所有的防火墙策略中也是最高的。
IPTables
早期的RHEL系列的操作系统,默认使用IPTables来配置防火墙。RHEL7之后的系统使用firewalld取代了IPTables防火墙,IPTables服务会把配置好的防火墙策略交由内核层面的netfilter网络过滤器来处理,而firewalld服务则是把配置好的防火墙策略交由内核层面的nftables包过滤框架来处理。
策略与规则链
IPTables会根据管理员书写的策略来决定防火墙是否放行数据包通过,基本的策略规则有四种:ACCEPT、REJECT、LOG、DROP。IPTables会按照从上到下的顺序来读取配置的策略规则,在找到匹配项后立即执行规则定义的行为(如:放行或阻止流量),若在读取完所有的策略规则之后没有匹配项,则会执行默认的策略。
IPTables服务把用于处理或过滤流量的策略条目称之为规则,多条规则可以组成一个规则链。由于防火墙策略规则是按照从上到下的顺序匹配执行的,因此一定要把允许规则放到拒绝规则前,否则所有的流量就将被拒绝,因此规则链最后一条往往为拒绝规则。
当防火墙的默认策略为拒绝时,需要添加相应的规则链来放行允许进入服务器的数据,否则服务器将拒绝所有数据包;而当防火墙的默认策略为允许时,则需要添加相应的拒绝规则链,否则防火墙就失去了它的作用。一般情况下,INPUT流量的默认策略为拒绝,OUTPUT流量默认策略为允许。
数据包分类与处理方式
根据数据包的不同处理位置,数据包分为
- 在进行路由选择前处理数据包(PREROUTING)
- 处理流入的数据包(INPUT)
- 处理流出的数据包(OUTPUT)
- 处理转发的数据包(FORWARD)
- 在进行路由选择后处理数据包(POSTROUTING)
数据包处理方式
语句 | 说明 |
---|---|
ACCEPT | 允许流量通过 |
REJECT | 拒绝流量通过并返回流量被丢弃的提示信息 |
LOG | 记录日志信息 |
DROP | 拒绝流量通过且不返回任何信息 |
REJECT会在拒绝流量后,告知流量发送方流量已收到,但服务器拒绝响应的信息
DROP会直接丢弃流量,使流量发送方不清楚流量是被拒绝还是主机不在线,一般能更好保护主机安全。
命令与参数
iptables [参数] [对象]
参数 | 作用 |
---|---|
-L | 查看当前的规则链,可以使用iptables -L –line-numbers命令显示规则链的序号 |
-P | 设置默认策略 |
-F | 清空规则链 |
-A | 在规则链末尾加入新规则 |
-I [序号] | 在指定序号规则前加入新规则,无序号默认在规则链首加入 |
-R 序号 | 替换指定规则,无序号默认替换第一条规则 |
-D 序号 | 删除指定规则 |
-s IP/主机名 | 匹配来源的IP和主机,加!号表示除该IP外,子网掩码可以使用/MASK的方式表示 |
-d | 匹配目标地址,类似于参数-s |
-J | 跳转到下一个处理规则,可能的值有:ACCEPT(允许数据通过), DROP(丢弃), QUEUE(进入队列), RETURN(返回上一个跳转规则)。也可以添加规则名跳转到指定规则 |
-i 网卡名 | 匹配从该网卡流入的数据 |
-o 网卡名 | 匹配从该网卡流出的数据 |
-p 协议 | 匹配协议,如:TCP、UDP等,all代表所有协议(一般不使用) |
--dport 端口号 | 匹配目标端口号 |
--sport 端口号 | 匹配来源端口号 |
保存规则
通过命令添加的规则链,会在系统重启后失效,因此需要写入配置文件使其永久生效,可以使用命令service iptables save保存
ipv4默认保存位置为/etc/sysconfig/iptables-config
ipv6默认保存位置为/etc/sysconfig/ip6tables-config