不管软硬件防火墙,主要功能都是依据策略对穿越防火墙自身的流量进行过滤。
防火墙的策略可以基于流量的源目地址、端口号、协议、应用等信息来定制,然后防火 墙使用预先定制的策略规则监控出入的流量,若流量与某一条策略规则相匹配,则执行相应的处理,反之则丢弃。
iptables与firewalld都不是真正的防火墙,只是防火墙管理工具而已。或是一种服务。
iptables服务会把配置好的防火墙策略交由内核层面的netfilter网络过滤器来处理;
firewalld服务则是把配置好的防火墙策略交由内核层面的nftables包过滤框架来处理。
#### iptables
iptables服务把用于处理或过滤流量的策略条目称之为规则,多条规则可以组成一个规则链,而规则链则依据数据包处理位置的不同进行分类。
- 在进行路由选择前处理数据包(PREROUTING);
- 处理流入的数据包(INPUT);
- 处理流程的数据包(OUTPUT);
- 处理转发的数据包(FORWARD);
- 在进行路由选择后处理数据包(POSTROUTING)。
iptables服务术语:ACCEPT(允许流量通过)、REJECT(拒绝流量通过)、LOG(记录日志信息)、DROP(拒绝流量通过)。
REJECT与DROP的不同:DROP就是直接将流量丢弃且不响应;REJECT拒绝流量后再回复信息,从而让流量发送方清晰看到数据被拒绝的响应信息。
注意:规则链的默认拒绝动作只能是DROP,不能是REJECT。
防火墙策略规则的匹配顺序是从上至下,要把较为严格、优先级较高的策略规则放到前面,以免发生错误。
iptables中常用的参数及作用
参数
作用
-P
设置默认策略
-F
清空规则链
-L
查看规则链
-A
在规则链的末尾加入新规则
-I num
在规则链的头部加入新规则
-D num
删除某一条规则
-s
匹配来源地址IP/MASK,加叹号“!”表示除这个IP外
-d
匹配目标地址
-i 网卡名称
匹配从这块网卡流入的数据
-o 网卡名称
匹配从这块网卡流出的数据
-p
匹配协议,如TCP、UDP、ICMP
\--dport num
匹配目标端口号
\--sport num
匹配来源端口号
举例:
\# iptables -L (查看规则链)
\# iptables -F (清空规则链)
\# iptables -L (再次查看规则链,是否清空)
\# iptables -P INPUT DROP (把input规则链默认策略设置为拒绝)
\# iptables -L (查看设置的情况)
\# ping -c 4 192.168.10.10 (ping不通)
\# iptables -I INPUT -p icmp -j ACCEPT (向INPUNT链中添加运行ICMP进入,实际是允许 PING)
\# ping -c 4 192.168.10.10 (可以ping通)
\# iptables -D INPUT 1 (删除刚刚加入的那条策略)
\# iptables -P INPUT ACCEPT (把INPUT默认策略设置为允许)
\# iptables -L (看下设置的结果)
\# iptables -I INPUT -s 192.168.10.0/24 -p tcp --dport 22 -j ACCEPT (只允许指定网段的主机访问本机的22端口)
\# iptables -A INPUT – p tcp --dport 22 -j REJECT (在规则链末尾添加拒绝其他所有主机访问)
\# iptables -L
\# ssh 192.168.10.10 (这个22端口是SSH服务使用的。测试连接)
\# ssh 192.168.10.10 (这个地方使用另一个网段的机器连接,测试失败)
\# iptables -I INPUT -p tcp --dport 12345 -j REJECT
\# iptables -I INPUT -p udp --dport 12345 -j REJECT
(上面是拒绝所有人访问本机12345端口的策略,tcp和udp协议)
\# iptables -L (再次查看配置策略信息)
\# iptables -I INPUT -p tcp -s 192.168.10.5 --dport 80 -j REJECT
(拒绝192.168.10.5访问本机80端口(web服务))
\# iptables -A INPUT -p tcp --dport 1000:1024 -j REJECT
\# iptables -A INPUT -p udp --dport 1000:1024 -j REJECT
(拒绝所有主机访问本机1000~1024端口)
\# service iptables save (保存防火墙的配置,永久生效。不然重启就失效)
#### firewalld
firewalld(Dynamic Firewall Manager of Linux System,Linux系统的动态防火墙管理器)是RHEL7默认的防火墙配置管理工具,拥有CLI(命令行界面)和基于GUI(图形用户界面)的两种管理方式。
firewalld支持动态更新技术并加入了区域(zone),区域就是firewalld预先准备了几套防火墙策略集合(相当于策略模板),用户可以根据生产场景的不同选择合适的策略集合,从而实现防火墙策略之间的快速切换。
**firewalld中常用的区域名称及策略规则**
区域
默认策略规则
trusted
允许所有的数据包
home
拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、mdns、ipp-client、amba-client与dhcpv6-client服务相关,则允许流量
internal
等同于home区域
work
拒绝流入的流量,除非与流出的流量数相关;而如果流量与ssh、ipp-client与dhcpv6-client服务相关,则允许流量
public
拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、dhcpv6-client服务相关,则允许流量
external
拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量
dmz
拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量
block
拒绝流入的流量,除非与流出的流量相关
drop
拒绝流入的流量,除非与流出的流量相关
**firewall-cmd命令中使用的参数及作用**
参数
作用
\--get-default-zone
查询默认的区域名称
\--set-default-zong=<区域名称>
设置默认的区域,使其永久生效
\--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
关闭应急状况模式
firewalld配置的防火墙策略默认运行时(Runtime)模式,又称为当前生效模式,重启就会失效,需要成为永久;则在用firewall-cmd命令时添加--permanent参数,但是必须系统重启之后才能自动生效;如果想立即生效,需要手动执行firewall-cmd --reload命令。
举例:
# firewall-cmd --get-default-zone (查看firewalld服务当前所使用的区域)
\# firewall-cmd --get-zone-of-interface=eno16777728 (查询eno16777728网卡区域)
# firewall-cmd --permanent --zone=external --change-interface=eno16777728
(把网卡eno16777728的默认区域修改为external,永久模式下)
# firewall-cmd --get-zone-of-interface=eno16777728 (查看当前模式下的区域名称)
# firewall-cmd --permanent --get-zone-of-interface=eno16777728
(查看永久模式下的区域名称)
\# firewall-cmd --set-default-zone=public (设置当期默认区域为public)
\# firewall-cmd --get-default-zone
\# firewall-cmd --panic-on (启动防火墙的应急模式)
\# firewall-cmd --panic-off (关闭防火墙的应急模式)
\# firewall-cmd --zone=public --query-service=ssh (查询public区域是否允许ssh)
\# firewall-cmd --zone=public --query-service=https (查询public区域是否允许https)
\# firewall-cmd --zone=public --add-service=https (允许public区域https流量)
\# firewall-cmd --permanent --zone=public --add-service=https (永久允许https)
\# firewall-cmd --reload (永久允许立即生效)
\# firewall-cmd --permanent --zone=public --remove-service=http (永久拒绝http)
\# firewall-cmd --reload (永久拒绝立即生效)
\# firewall-cmd --zone=public --add-port=8080-8081/tcp
(允许访问8080和8081端口,仅限当前生效)
\# firewall-cmd --zone=public --list-ports (查看端口信息)
\# firewall-cmd --permanent --zone=public -add-forward-port=port=888:proto=tcp:
toport=22:toaddr=192.168.10.10 (把原本访问本机888端口的流量转发到22端口,当前与长期均有效)
注意:
流量转发命令格式为firewall-cmd --permanent --zone=<区域> --add-forward-port=port=<源端口号>:proto=<协议>:toport=<目标端口号>:toaddr=<目标IP地址>
\# firewall-cmd --reload
\# ssh -p 888 192.168.10.10 (用ssh访问192.168.10.10主机的888端口,成功的)
firewalld中的富规则表示更细致、更详细的防火墙策略配置,它可以针对系统服务、端口号、源地址和目标地址等诸多信息进行更有针对性的策略配置。它的优先级在所有防火墙策略中也是最高的。
\# firewall-cmd --permanent --zone=public --**add-rich-rule**= “rule family=
“ipv4”source address= “192.168.10.0/24”service name= “ssh”reject”
(拒绝192.168.10.0/24网段的所有用户访问本机的ssh服务)
\# firewall-cmd --reload
\# ssh 192.168.10.10 (访问失败)
#### 图形管理工具
firewall-config功能:
- 1、选择运行时(Runtime)模式或永久(Permanent)模式的配置
- 2、可选的策略集合区域列表
- 3、常用的系统服务列表
- 4、当前正在使用的区域
- 5、管理当前被选中区域中的服务
- 6、管理当前被选中区域中的端口
- 7、开启或关闭SNAT(源地址转换协议)技术
- 8、设置端口转发策略
- 9、控制请求icmp服务的流量
- 10、管理防火墙的富规则
- 11、管理网卡设备
- 12、被选中区域的服务,若勾选了相应服务前面的复选框,则表示运行与之相关的流量
- 13、firewall-config工具的运行状态
注:SNAT是一种为了解决IP地址匮乏而设计的技术,它可以使得多个内网中的用户通过同一个外网IP接入Internet(互联网)。
#### 服务的访问控制列表
TCP Wrappers是RHEL7系统的默认启用的一款流量监控程序,它能够根据来访主机的地址与本机的目标服务程序作出允许或拒绝的操作。
TCP Wrappers服务的防火墙策略由两个控制列表文件所控制,用户可以编辑允许控制列表文件来放行对服务的请求流量,也可以编辑拒绝控制列表文件来阻止对服务的请求流量。生效后,先检查允许控制列表文件(/etc/hosts.allow),如匹配则放行;没找到,则进一步检查拒绝控制列表文件(/etc/hosts.deny),如找到则拒绝。如两个都没有找到则默认放行。
**TCP Wrappers服务的控制列表文件中常用的参数**
客户端类型
实例
满足示例的客户端列表
单一主机
192\.168.10.10
IP地址为192.168.10.10的主机
指定网段
192\.168.10.
IP段为192.168.10.0/24的主机
指定网段
192\.168.10.0/255.255.255.0
IP段为192.168.10.0/24的主机
指定DNS后缀
.linuxprobe.com
所有DNS后缀为.linuxprobe.com的主机
指定主机名称
[www.linuxprobe.com](http://www.linuxprobe.com)
主机名称为[www.linuxprobe.com](http://www.linuxprobe.com)的主机
指定所有客户端
ALL
所有主机全部包括在内
**配置TCP Wrappers服务时需要遵循的两个原则:**
- 编写拒绝策略规则时,填写的是服务名称,而非协议名称;
- 建议先编写拒绝策略规则,再编写允许策略规则,以便直观地看到相应的效果
\# vi /etc/hosts.deny (加一行:sshd:\*)
\# vi /etc/hosts.allow (加一行: sshd:192.168.10.)
- 常用的RPM软件包命令
- 常见的Yum命令
- Linux开机过程
- Systemd初始化进程服务的劣势:
- system 与 system V init 的区别以及作用
- systemctl管理服务的启动、重启、停止、重载、查看状态等常用命令
- systemctl设置服务开机启动、不启动、查看各级别下服务启动状态等常用命令
- 主流 Linux 系统选择 Bash 解释器作为命令行终端主要有以下 4 项优势
- 常见执行Linux命令的格式:
- man命令中常用按键以及用途
- man命令帮助信息的接个欧以及意义
- 常用系统命令(10)
- 系统状态检测命令(8)
- 工作目录切换命令(3)
- 文本文件编辑命令(9)
- 文件目录管理命令(7)
- 打包压缩与搜索命令(3)
- 输入输出重定向
- 管道命令符
- 命令行的通配符
- 常用的转义字符
- 重要的环境变量
- Vim文本编辑器
- 编写Shell脚本
- 流程控制语句
- 计划任务服务程序
- 用户身份与文件权限
- 文件权限与归属
- 文件的隐藏属性
- 文件访问控制列表
- su命令与sudo服务
- 存储结构与磁盘划分
- 使用RAID与LVM磁盘阵列技术
- iptables与firewalld防火墙
- 使用SSH服务管理远程主机