L o a d i n g . . .
SHIWIVI-文章

//sunny forever
while(life<end){
love++;
beAwesome :)}

    <
  • 主题:
  • + -
  • 清除背景
  • 禁用背景

Redhat防火墙

字数:7507 写于:2022-02-23
最新更新:2022-02-23 阅读本文预计花费您22分钟
本文不涉及Debian系列操作系统使用的ufw(Uncomplicated FireWall)防火墙

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. 查看区域信息

查看public区域的所有信息 # firewall-cmd --zone=public --list-all 返回值的含义: Target:default //目标 icmp-block-inversion:yes/no //是否允许ICMP协议类型的数据包通过防火墙 Interfaces: //关联的网卡 sources: //来源,可以是IP地址或mac地址 services: //允许的服务 ports: //允许的端口,即本地开放的端口 protocols: //允许通过的协议 masquerade: yes/no //是否允许伪装,可改写来源IP地址及mac地址 forward-ports: //允许转发的端口 source-ports: //允许的来源端口 icmp-blocks: //可添加的ICMP类型,当icmp-block-inversion为no时,这些ICMP类型被拒绝;当icmp-block-inversion为yes时,这些ICMP类型被允许 rich rules: //富规则,即更细致、更详细的防火墙规则策略,它的优先级在所有的防火墙策略中也是最高的。

2. 放行端口

永久放行10800-10805端口的tcp数据 # firewall-cmd --permanent --add-port=10800-10805/tcp 重新加载防火墙配置 # firewall-cmd --reload

3. 为网卡绑定区域

一般情况下,一台主机会有多个网卡,比如一块对公网,一块对内网,因此网卡使用的防火墙策略也不一样,可以单独为某个网卡绑定某个区域。通过firewall-cmd –set-default-zone命令设置的区域会对所有网卡生效,但如果该网卡绑定了单独的区域,则单独绑定区域的优先级更高。

将网卡eth0默认区域修改为external # firewall-cmd --permanent --zone=external --change-interface=eth0

4. 查询服务是否放行

如:查询SSH和HTTPS协议的流量是否允许放行

查询public区域中SSH协议的流量是否被放行 # firewall-cmd --zone=public --query-service=ssh 查询public区域中https协议的流量是否被放行 # firewall-cmd --zone=public --query-service=https

5. 放行协议流量

把HTTPS协议的流量设置为永久允许放行

在public区域中放行https协议的流量 # firewall-cmd --permanent --zone=public --add-service=https 重新加载防火墙配置 # firewall-cmd --reload

端口转发

端口转发命令格式如下,目标IP地址为所要访问服务器的IP地址:
firewall-cmd –permanent –zone=区域 –add-forward-port=port=源端口号:proto=协议:toport=目标端口号:toaddr=目标IP地址

将9000端口转发到22端口,使得用户能通过9000端口使用ssh远程连接服务 # firewall-cmd --permanent --zone=public --add-forward-port=port=9000:proto=tcp:toport=22:toaddr=192.168.0.1 重新加载防火墙配置 # firewall-cmd --reload

富规则

富规则也叫复规则,表示更细致、更详细的防火墙策略配置,它可以针对系统服务、端口号、源地址和目标地址等诸多信息进行更有针对性的策略配置,它的优先级在所有的防火墙策略中也是最高的。

拒绝192.168.0.1/24网段的所有用户访问本机的ssh服务 # # firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.0.1/24" service name="ssh" reject" 重新加载防火墙配置 # firewall-cmd --reload

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 端口号 匹配来源端口号
防火墙命令均需要root权限
如:查看当前规则链 iptables -L 返回结果: Chain INPUT (policy ACCEPT) //INPUT数据包,默认策略为ACCEPT num target prot opt source destination 1 ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED 2 ACCEPT all -- anywhere anywhere 3 INPUT_direct all -- anywhere anywhere 4 INPUT_ZONES_SOURCE all -- anywhere anywhere 5 INPUT_ZONES all -- anywhere anywhere 6 DROP all -- anywhere anywhere ctstate INVALID 7 REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
示例: 1. 修改INPUT规则链默认配置为拒绝,并允许允许ICMP流量进入(允许服务器被ping后返回信息) # iptables -P INPUT DROP # iptables -I INPUT -p icmp -j ACCEPT 2. 拒绝所有人访问本机10800端口 # iptables -I INPUT -p tcp --dport 10800 -j REJECT # iptables -I INPUT -p udp --dport 10800 -j REJECT 3. 拒绝192.168.10.5主机访问本机80端口 iptables -I INPUT -p tcp -s 192.168.10.5 --dport 80 -j REJECT 4.拒绝所有主机访问本机1000~1024端口 # iptables -A INPUT -p tcp --dport 1000:1024 -j REJECT # iptables -A INPUT -p udp --dport 1000:1024 -j REJECT 5.只允许192.168.10.0主机访问本机的22端口,拒绝来自其他所有主机的流量。 # iptables -I INPUT -s 192.168.10.0 -p tcp --dport 22 -j ACCEPT # iptables -A INPUT -p tcp --dport 22 -j REJECT
如同第5条命令,由于防火墙策略规则是按照从上到下的顺序匹配的,因此需要把允许规则放到拒绝规则前,否则所有的流量就将被拒绝
网口转发,如将公网的数据包转发到内网,假设eth0连接内网,eth1连接公网 iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

保存规则

通过命令添加的规则链,会在系统重启后失效,因此需要写入配置文件使其永久生效,可以使用命令service iptables save保存

ipv4默认保存位置为/etc/sysconfig/iptables-config

ipv6默认保存位置为/etc/sysconfig/ip6tables-config

上一篇:Nginx笔记(上)
下一篇:Shell脚本语言
z z z z z