基础
Linux防火墙主要工作在网络层,属于典型的包过滤防火墙。
- redhat 6 使用的是iptables
- redhat 7 使用的是firewalld
- iptables服务会把配置好的防火墙策略交由内核层面的 netfilter 网络过滤器来处理
- firewalld服务则是把配置好的防火墙策略交由内核层面的 nftables 包过滤框架来处理
iptables和firewalld都是Linux配置内核防火墙的工具
systemctl 和 service 区别
- systemctl命令:是一个systemd工具,主要负责控制systemd系统和服务管理器。
- service命令:可以启动、停止、重新启动和关闭系统服务,还可以显示所有系统服务的当前状态。
- chkconfig命令:是管理系统服务(service)的命令行工具。所谓系统服务(service),就是随系统启动而启动,随系统关闭而关闭的程序。
systemctl命令是系统服务管理器指令,它实际上将 service 和 chkconfig 这两个命令组合到一起。 systemctl是RHEL 7 的服务管理工具中主要的工具,它融合之前service和chkconfig的功能于一体。可以使用它永久性或只在当前会话中启用/禁用服务。 所以systemctl命令是service命令和chkconfig命令的集合和代替。
firewalld
相较于传统的防火墙管理配置工具,firewalld 支持动态更新技术并加入了区域(zone)的概念。简单来说,区域就是 firewalld 预先准备了几套防火墙策略集合(策略模板),用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。 firewalld跟iptables比起来至少有两大好处:
- firewalld可以动态修改单条规则,而不需要像iptables那样,在修改了规则后必须得全部刷新才可以生效;
- firewalld在使用上要比iptables人性化很多,即使不明白“五张表五条链”而且对TCP/IP协议也不理解也可以实现大部分功能。
注:firewalld自身并不具备防火墙的功能,而是和iptables一样需要通过内核的netfilter来实现,也就是说firewalld和iptables一样,他们的作用都是用于维护规则,而真正使用规则干活的是内核的netfilter,只不过firewalld和iptables的结构以及使用方法不一样罢了。
**
区域管理
一个重要的概念:区域管理
firewalld将网卡对应到不同的区域(zone),zone 默认共有9个:
都保存在/usr/lib/firewalld/zones/
目录下。
区域 | 默认规则 |
---|---|
阻塞区域(block) | 任何传入的网络数据包都将被阻止。 |
工作区域(work) | 相信网络上的其他计算机,不会损害你的计算机。 |
家庭区域(home) | 相信网络上的其他计算机,不会损害你的计算机。 |
公共区域(public) | 不相信网络上的任何计算机,只有选择接受传入的网络连接。 |
隔离区域(DMZ) | 隔离区域也称为非军事区域,内外网络之间增加的一层网络,起到缓冲作用。对于隔离区域,只有选择接受传入的网络连接。 |
信任区域(trusted) | 所有的网络连接都可以接受。 |
丢弃区域(drop) | 任何传入的网络连接都被拒绝。 |
内部区域(internal) | 信任网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连接。 |
外部区域(external) | 不相信网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连接。 |
命令
目的 | 命令 |
---|---|
查看firewall服务状态 | systemctl status firewalld |
查看firewall的状态 | firewall-cmd —state |
开启防火墙,启动 firewall 服务 | systemctl start firewalld |
重启防火墙,重启 firewall 服务 | systemctl restart firewalld |
关闭防火墙,停止 firewall 服务 | systemctl stop firewalld |
开机启动服务 | systemctl enable firewalld.service |
查看防火墙规则 | firewall-cmd —list-all |
查询端口是否开放 | firewall-cmd —query-port=8080/tcp |
开放80端口 | firewall-cmd —permanent —add-port=80/tcp |
移除端口 | firewall-cmd —permanent —remove-port=8080/tcp |
重启防火墙(修改配置后要重启防火墙) | firewall-cmd —reload |
参数解释 1、firwall-cmd:是Linux提供的操作firewall的一个工具; 2、–permanent:表示设置为持久; 3、–add-port:标识添加的端口;
参数 | 作用 |
---|---|
—get-default-zone | 查询默认的区域名称 |
—set-default-zone=<区域名称> | 设置默认的区域,使其永久生效 |
—get-zones | 显示可用的区域 |
—get-services | 显示预先定义的服务 |
—get-active-zones | 显示当前正在使用的区域与网卡名称 |
—add-source= | 将源自此 IP 或子网的流量导向指定的区域 |
—remove-source= | 不再将源自此 IP 或子网的流量导向某个指定区域 |
—add-interface=<网卡名称> | 将源自该网卡的所有流量都导向某个指定区域 |
—change-interface=<网卡名称> | 将某个网卡与区域进行关联 |
—list-all | 显示当前区域的网卡配置参数、资源、端口以及服务等信息 |
—list-all-zones | 显示所有区域的网卡配置参数、资源、端口以及服务等信息 |
—add-service=<服务名> | 设置默认区域允许该服务的流量 |
—add-port=<端口号/协议> | 设置默认区域允许该端口的流量 |
—remove-service=<服务名> | 设置默认区域不再允许该服务的流量 |
—remove-port=<端口号/协议> | 设置默认区域不再允许该端口的流量 |
—reload | 让“永久生效”的配置规则立即生效,并覆盖当前的配置规则 |
—panic-on | 开启应急状况模式 |
—panic-off | 关闭应急状况模式 |
linux 系统中各种服务运行的概念
1. 运行级别概念的区分
System V init 运行级别 | systemd 目标名称 | 作用 |
---|---|---|
0 | runlevel0.target, poweroff.target | 关机 |
1 | runlevel1.target, rescue.target | 单用户模式 |
2 | runlevel2.target, multi-user.target | 等同于级别 3 |
3 | runlevel3.target, multi-user.target | 多用户的文本界面 |
4 | runlevel4.target, multi-user.target | 等同于级别 3 |
5 | runlevel5.target, graphical.target | 多用户的图形界面 |
6 | runlevel6.target, reboot.target | 重启 |
emergency | emergency.target | 紧急 Shell |
2. 管理服务的启动、重启、停止、重载、查看状态等常用命令区分
foo 表示各种具体服务名称,这里用foo当作替换符
作用 | System V init 命令(RHEL 6) | systemctl 命令(RHEL 7) |
---|---|---|
启动服务 | service foo start | systemctl start foo.service |
重启服务 | service foo restart | systemctl restart foo.service |
停止服务 | service foo stop | systemctl stop foo.service |
重新加载配置文件(不终止服务) | service foo reload | systemctl reload foo.service |
查看服务状态 | service foo status | systemctl status foo.service |
3. 设置服务开机启动、不启动、查看各级别下服务启动状态等常用命令
foo 表示各种具体服务名称,这里用foo当作替换符
作用 | System V init 命令(RHEL 6) | systemctl 命令(RHEL 7) |
---|---|---|
开机自动启动 | chkconfig foo on | systemctl enable foo.service |
开机不自动启动 | chkconfig foo off | systemctl disable foo.service |
查看特定服务是否为开机自动启动 | chkconfig foo | systemctl is-enabled foo.service |
查看各个级别下服务的启动与禁用情况 | chkconfig —list | systemctl list-unit-files —type=service |