跳到主要内容

25、Linux 实战:Linux防火墙

防火墙

防火墙:防范网络攻击(选择性将请求通过以保证网络安全性)

1)Centos6.x的默认管理防火墙的工具为:iptables

2)Centos7.x的默认管理防火墙的工具为:firewalld

策略:防火墙基于流量的源地址、目的地址、端口号、协议和应用等信息所选的应对方式(接受/拒绝)

1)防火墙从上至下读取配置的策略(把优先级高的策略/规则放到上面),在匹配到对应项后就结束匹配工作,并按照策略进行处理(若匹配不到任何策略,就执行默认策略)

2)iptables服务将配置好的防火墙策略交由内核的netfilter网络过滤器处理,firewalld服务将配置好的防火墙策略交由内核的nftables包过滤框架处理

Iptables

规则:iptables服务中把用于处理和过滤流量的策略

规则链:由多条规则组成(针对特定数据包的各种规则)

规则链根据不同的数据包处理位置进行以下分类:

规则链 说明
INPUT 处理流入的数据包
OUTPUT 处理流出的数据包
FORWARD 处理转发的数据包
PREROUTING 在进行路由选择前处理的数据包
POSTROUTING 在进行路由选择后处理的数据包

//使用最多的是INPUT规则链

iptables服务根据流量的源地址、目的地址、传输协议、服务类型等信息匹配相关的规则链,匹配成功后根据对应的动作进行处理

动作 说明
ACCEPT 允许流量通过
LOG 允许流量通过,并记录相关信息
REJECT 拒绝流量通过(并回复“拒绝”)
DROP 拒绝流量通过(忽视)

//动作为DROP时,对方无法判断流量被拒绝或主机不在线

iptables命令:查看、添加、设置和删除系统中防火墙的策略/规则

指令格式1:iptables 选项 //查看规则

选项 含义
-L 列出系统中已有的针对规则链策略

如:列出系统中已有的规则链
 

指令格式2:iptables 选项 //添加规则

选项 含义
-A 在指定规则链的尾部加入该规则
-I 在指定规则链的头部加入该规则
-i 网卡名 匹配从该网卡流入的数据
-o 网卡名 匹配从该网卡列出的数据
-p 协议 匹配指定协议(tcp、udp和icmp)
-s IP 匹配该来源IP
--sport 端口号 匹配该来源端口号
-d IP 匹配该目标IP
--dport 端口号 匹配该目标端口号
-j 动作 指定匹配成功后所进行的动作

一般iptables添加规则参数的输入顺序和格式:
 

1)有对应的限制,则添加对应的参数(没有限制,则可省略对应的参数)

如:在INPUT规则链中添加允许ICMP流量进入的规则
 
//ICMP流量的进入就是允许ping命令检测

如:设置INPUT规则链只允许网段为“192.168.10.0/24”的主机访问本机的22端口(拒绝其他所有主机访问22端口)
 
//由于防火墙策略规则是从上到下顺序匹配的,所以允许动作需写在拒绝动作前

如:设置INPUT规则链中拒绝所有主机访问本机的3306端口
 
//若某一端口拒绝其他主机任何方式访问,则需同时拒绝tcp和upd两种协议

如:设置INPUT规则链中拒绝所有主机访问本机的1000~1024端口
 
//若设置顺序的端口时,用“:”连接两个端口号

如:设置INPUT规则链中拒绝192.168.10.5主机访问本机的80端口
 

指令格式3:iptables 选项 //设置规则

选项 含义
-P 规则链 动作 指定规则链中的默认动作

//规则链的默认拒绝动作只能是DROP,而不能是REJECT

如:设置INPUT规则链的默认动作为DROP
 

指令格式4:iptables 选项 //删除规则

选项 含义
-D 规则链 N 删除指定规则链中的第N个规则
-F 清空防火墙中已有的针对规则链策略(INPUT无效)

如:删除INPUT规则链中允许ICMP流量进入的规则
 

如:清空防火墙中已有的针对规则链的策略
 

iptables命令配置永久生效:service iptables save

//iptables命令配置的防火墙策略/规则都是临时设置(重启后便失效)

其他服务保存设置:/etc/init.d/服务名 save

//当使用临时修改某项服务时,可通过保存设置来达到永久修改

Firewalld

Firewalld(Dynamic Firewall Manager of Linux systems):Linux系统动态防火墙管理

1)Firewalld分为:CLI下的firewall-cmd、GUI下的firewall-config

1)区域(zone):Firewalld中防火墙策略集合

Firewalld中常用的区域如下:

区域 说明
trusted 允许所有的数据包/流量
home 拒绝流入的流量(除非该流量和流出流量有关) 若该流量与ssh、mdns、ipp-client、amba-client 或dhcpv6-client服务有关,则允许该流量
internal 拒绝流入的流量(除非该流量和流出流量有关) 若该流量与ssh、ipp-client 或dhcpv6-client服务有关,则允许该流量
work 等同于home区域
public 拒绝流入的流量(除非该流量和流出流量有关) 若该流量与ssh或dhcpv6-client服务有关,则允许该流量
external 拒绝流入的流量(除非该流量和流出流量有关) 若该流量与ssh服务有关,则允许该流量
dmz 拒绝流入的流量(除非该流量和流出流量有关) 若该流量与ssh有关,则允许该流量
block 拒绝流入的流量(除非该流量和流出流量有关)
drop 拒绝流入的流量(除非该流量和流出流量有关)

//Firewalld中最常见的区域为:public

firewall-cmd

firewall-cmd命令:Firewalld通过命令行界面配置防火墙

指令格式1:firewall-cmd 选项 //查询防火墙相关信息

选项 含义
--get-default-zone 列出默认区域
--get-zones 列出系统中可用的区域
--get-services 列出预先定义的服务
--get-active-zones 列出当前正在使用的区域和网卡
--list-all 列出当前区域调用网卡的配置参数、 资源、端口和服务等信息
--list-all-zones 列出所有区域调用网卡的配置参数、 资源、端口和服务等信息
--get-zone-of-interface=网卡 查询指定网卡所在区域
--query-service=服务名 查询指定服务在当前区域是否放行

如:列出默认区域、可用区域和预先定义的服务
 

如:查询ssh、dhcpv6-client和http服务在当前区域是否放行
 

如:列出当前区域调用网卡的相关信息
 

指令格式2:firewall-cmd 选项 //配置Firwalld服务

选项 含义
--zone 修改区域
--add-source=IP 将来自该IP的流量都导向指定区域
--remove-source=IP 取消该IP的流量导向指定区域
--add-interface=网卡 将该网卡的所有流量都导向指定区域
--chang-interface=网卡 设置指定网卡的默认区域为指定区域
--add-service=服务 设置默认区域允许该服务的流量
--remove-service=服务 设置默认区域不允许该服务的流量
--add-prot=端口号/协议 设置默认区域允许该端口的流量
--remove-port=端口号/协议 设置默认区域不允许该端口的流量
--reload 重读配置文件
--permanent 使后续配置永久生效(默认重启后生效)

//使用--permanent永久配置,配置不会立刻生效(默认是立刻生效),可通过--reload重读配置文件使永久配置立刻生效

如:设置eno16777736网卡的默认区域为external,并分别在当前模式和永久模式查看该网卡的默认区域
 

如:设置Firewalld服务的public中允许https服务的流量,并立即生效
 

如:设置Firewalld服务的public中允许8080和8081端口的流量(仅限当前)
 

指令格式3:firewall-cmd 选项 //修改Firewalld服务

选项 含义
--set-default-zone=区域 指定默认区域
--panic-on 开启应急状况模式
--panic-off 关闭应急状况模式

//应急状况模式下,系统会阻断一切网络连接

指令格式4:通过firewall-cmd命令配置流量转发
 

如:设置访问本机330端口的流量转发到335端口(且当前和永久生效)
 

指令格式5:firewall-cmd --zone=区域 --add-rich-rule=“富规则名 = 规则”

规则 说明
rule family=ipv4/ipv6 ip4或ip6的富规则
source address=IP 指定源IP
destination address 指定目的IP
service name=服务 指定服务
port port=端口号 指定端口号
protocol value=tcp/upd 指定协议
动作 accept(通过)、reject(拒绝并返回消息) drop(拒绝并不返回消息)、log(日志)

1)富规则:类似iptables设置针对用户、服务或端口的规则

2)多个规则之间使用空格分开;

//删除富规则为:firewall-cmd --zone --remove-rich-rule=“富规则名”

如:通过富规则设置拒绝192.168.10.0/24网段内所有用户访问本机的ssh服务
 

firewall-config

firewall-config命令:调用Firewall Configuration(图形界面)配置Firewalld服务

指令格式:firewall-config

1)在Firewall Configuration修改内容后不需保存(其自动保存);

2)Runtime模式下修改的内容会即刻生效,Permanent模式下修改的内容,需重启才能生效

//也可通过Option中的Reload Frewalld使其即刻生效

如:调用Firewall Configuration
 

SNAT(Source Network Address Translation):源网络地址转换

1)解决IP地址匮乏的技术,内网中多个用户通过一个外围IP接入Internet

如:比较开启SNAT技术前后

1)关闭SNAT技术
 

2)开启SNAT技术
 

如:通过Firewall Configuration开启SNAT
 

如:通过Firewall Configuration将访问本机3306端口的流量转发到8806端口
 

如:通过Firewall Configuration配置富规则
 

TCP Wrappers

Linux系统中有两个层面的防火墙:

1)基于TCP/TP协议的流量过滤;

2)TCP Wrappers通过是否允许Linux系统提供服务的防火墙(层面更高);

TCP Wrappers:是Centos7系统中默认启用的流量监控程序

1)可根据来访主机的地址和本机的目标服务程序判断是否允许操作

TCPWrappers有两个控制列表文件控制:/etc/hosts.allow和/etc/hosts.deny

1)/etc/hosts.allow:TCP Wrappers的白名单

2)/etc/hosts.deny:TCP Wrappers的黑名单

编写两个文件的参数如下:

客户端类型 示例 满足示例
单一主机 192.168.10.10 IP地址为192.168.10.10的主机
指定网段 192.168.10. IP段为192.168.10.0/24的主机
指定DNS后缀 .linuxprobe.com DNS后缀为.linuxprobe.com的主机
指定主机名称 www.linuxprobe.com 主机名www.linuxprobe.com的主机
指定所有客户端 ALL 所有主机均可

1)编写策略规则时,应使用服务名称(而非协议名称)

2)先编写拒绝策略规则(/etc/hosts.deny)再编写允许策略规则(/etc/hosts.allow)

如:使仅192.168.10.0/24网段的主机能访问本机的sshd服务

1)编写/etc/hosts.deny;
 
2)编写/etc/hosts.allow;
 

当一个流量访问本机时,系统执行以下操作:

1)系统先检索/etc/hosts.allow进行匹配,若匹配到对应项则放行该流量;

2)若匹配失败,检索/etc/hosts.deny进行匹配,若匹配到对应项则拒绝该流量;

3)若两个文件都匹配失败,则默认放行该流量

//优先级:/etc/hosts.allow > /etc/hosts.deny