Linux中“防火墙”详解

一.“防火墙”的概述

1、什么是“防火墙”

防火墙技术是通过有机结合各类用于安全管理与筛选的软件和硬件设备,帮助计算机网络与其内、外网之间构建一道相对隔绝的保护屏障,以保护用户资料与信息安全性的一种技术。
外网通过IP访问内网时,只有在防火墙同意情况下,用户才能够进入计算机内,如果不同意就会被阻挡于外。

2、“防火墙”的作用是什么

防火墙技术的功能主要在于及时发现并处理计算机网络运行时可能存在的安全风险、数据传输等问题,其中处理措施包括隔离与保护,同时可对计算机网络安全当中的各项操作实施记录与检测,以确保计算机网络运行的安全性,保障用户资料与信息的完整性,为用户提供更好、更安全的计算机网络使用体验。

3、可使用哪些软件管理“防火墙”

可使用firewalld以及iptables对防火墙进行管理,下面会介绍这两个软件如何管理防火墙。

4、“防火墙”其实由三张表构成

(1)filter表(数据过滤表)

(2)nat表(地址转换表)

(3)mangle表(附加表)

当filter表和nat表不够用时,才会启用mangle表

二.使用firewalld对防火墙的管理

1、firewalld的管理和存储方式

(1)firewalld的安装

命令 功能
yum search firewalld 查看firewalld相关安装包
yum install firewalld -y 安装firewalld
rpm -qa grep firewalld

(2)使用firewalld时的环境配置

firewalld不能与iptables共同开启,所以使用firewalld前应对iptables进行管理
命令 功能
systemctl stop iptables 关闭iptables
systemctl disable iptables 设定开机不启动iptables
systemctl mask iptables 将iptables锁住
systemctl start firewalld 开启firewalld
systemctl enable firewalld 设定开机自动启动firewalld

Linux中“防火墙”详解_第1张图片

(3)firewalld的管理与存储文件

命令 功能
/etc/firewalld/zones firewalld更改支持的服务时,所生成的文件放置在此目录
/etc/firewalld/zones/public.xml firewalld支持的服务的文件,当添加新的支持服务时,会生成新的该文件,且原先文件会自动重命名为public.xml.old
/usr/lib/firewalld/services firewalld存放服务配置的目录,该目录下为.xml文件
mv /usr/lib/firewalld/services/http.xml /usr/lib/firewalld/services/httpd.xml 给服务配置文件重命名,可以修改添加该服务时的服务名称
systemctl restart firewalld 修改文件名后需重启firewalld服务生效,若修改名称的服务是firewalld已添加的支持服务,则该服务从支持列表中消失,需重新添加

(4)firewalld的图形化管理

命令 功能
firewall-config 使用该命令打开firewalld的图形化管理界面,即可对firewalld进行图形化管理

2、使用firewalld命令行接口配置防火墙

(1)firewalld域信息概述

网络区名称 该区域默认的策略配置
drop(丢弃) 任何接收的网络数据包都被丢弃,没有任何回复,仅能有发送出去的网络连接
block(限制) 任何接收的网络连接都被IPv4的icmp-host-prohibited信息和IPv6的icmp6-adm-prohibited信息所拒绝
public(公共) 在公共区域内使用,不能相信网络内的其他计算机不会对你的计算机造成危害,仅接收经过选择的连接
external(外部) 特别是为路由器启用了伪装功能的外部网,你不能信任来自网络的其他计算机,仅接收经过选择的连接
dmz(非军事区) 用于你的非军事区的电脑,此区域内可公开访问,可以有限地进入你的内部网络,仅接收经过选择的连接
work(工作) 用于工作区,你可以基本相信网络内的其他电脑不会危害你的电脑,仅接收经过选择的连接
home(家庭) 用于家庭网络,可以基本信任网络内的其他电脑不会危害你的电脑,仅接收经过选择的连接
internal(内部) 用于内部网络,你可以基本上信任网络内的其他电脑不会危害你的电脑,仅接收经过选择的连接
trusted(信任) 可以接收所有的网络连接

(2)firewalld域的配置

命令 功能
firewall-cmd --state 查看firewalld的状态
firewall-cmd --get-services 查看所有能添加的服务
firewall-cmd --get-zones 查看所有能使用的firewalld域
firewall-cmd --get-default-zone 查看当前默认的firewalld域
firewall-cmd --get-active-zones 查看当前在使用的firewalld域
firewall-cmd --list-all 列出当前域的策略信息
firewall-cmd --list-all --zone=xxx 列出指定域的策略信息
firewall-cmd --list-all-zones 列出所有域的策略信息
firewall-cmd --set-default-zone=xxx 设定默认的firewalld域为xxx

Linux中“防火墙”详解_第2张图片

(3)firewalld来源、网卡的配置

<1>firewalld网卡的配置与测试

一个网卡可以对应一个默认的firewalld域,可以实现不同网卡对应不同策略的控制
命令 功能
ifconfig 确认自己有几块网卡,并确认不同网卡对应的不同IP
firewall-cmd --list-all 查看默认域信息,确定策略(此时我设置的当前默认域为block),并查看当前域上的网卡(此时eth0、eth1均在)
firewall-cmd --remove-interface=eth1 --zone=block 将网卡eth1从block域上删除(即通过网卡eth1的IP访问时,不使用block的策略)
firewall-cmd --add-interface=eth1 --zone=trusted 将网卡eth1添加到trusted域上(即通过网卡eth1的IP访问时,使用trusted的策略)
firewall-cmd --list-all 查看默认域信息,确定网卡(此时只有eth0,eth1被删除)
firewall-cmd --list-all --zone=trusted 查看trusted域信息,确定网卡(此时eth1添加成功)
ssh [email protected](通过网卡eth0的IP访问) (在客户端测试)查看通过网卡eth0的IP是否可以访问,此时不可(因为eth0的域是block)
ssh [email protected](通过网卡eth1的IP访问) (在客户端测试)查看通过网卡eth1的IP是否可以访问,此时可以(因为eth1的域是trusted)
firewall-cmd --change-interface=eth1 --zone=block 改变网卡eth1的域为block
firewall-cmd --list-all 查看默认域信息,确定网卡(此时有eth0、eth1)
firewall-cmd --list-all --zone=trusted 查看trusted域信息,确定网卡(此时无eth1)
ssh [email protected](通过网卡eth1的IP访问) (在客户端测试)查看通过网卡eth1的IP是否可以访问,此时不可(因为eth1的域是block)

Linux中“防火墙”详解_第3张图片

<2>firewalld来源的配置与测试

配置了来源后,该来源访问本机时,将使用与该来源匹配的配置好的策略不使用默认策略
命令 功能
firewall-cmd --list-all 查看默认域信息,确定策略(此处我设置的默认域为block)
ssh [email protected] (在客户端测试)查看是否可以访问,此时不可(因为默认域为block)
firewall-cmd --permanent --add-source=172.25.254.54 --zone=trusted 永久添加来源IP:172.25.254.54(我的客户端IP),通过该IP访问时,策略为trusted域的策略
firewall-cmd --reload 加载改动
firewall-cmd --list-all --zone=trusted 查看trusted域信息,确定来源IP(此时172.25.254.54确认添加)
firewall-cmd --get-active-zones 查看当前在使用的域信息,此时有trusted域信息,且显示添加的来源IP
ssh [email protected] (在客户端测试)查看是否可以访问,此时可以(因为通过该IP访问时,策略为trusted域的策略)
firewall-cmd --permanent --remove-source=172.25.254.54 --zone=trusted 永久删除通过该IP访问时,策略为trusted域的策略的来源IP:172.25.254.54(我的客户端IP)
firewall-cmd --reload 加载改动
firewall-cmd --list-all --zone=trusted 查看trusted域信息,确定来源IP(此时172.25.254.54确认删除)
firewall-cmd --get-active-zones 查看当前在使用的域信息,此时无trusted域信息
ssh [email protected] (在客户端测试)查看是否可以访问,此时不可(因为默认域为block)

Linux中“防火墙”详解_第4张图片

(4)firewalld中服务和端口的管理与测试

命令 功能
firewall-cmd --add-service=https --permanent --zone=public 在public域的策略中永久添加https服务
firewall-cmd --reload 加载
firewall-cmd --list-all --zone=public 列出public域的策略,查看https服务是否添加(此时成功添加)
firewall-cmd --remove-service=https --permanent --zone=public 在public域的策略中永久删除https服务
firewall-cmd --reload 加载
firewall-cmd --list-all --zone=public 列出public域的策略,查看https服务是否删除(此时成功删除)
firewall-cmd --add-port=1234/tcp --permanent --zone=public 若想添加的服务不在服务列表里,可以通过添加该服务的端口的方式,将功能添加入策略中,此处将1234/tcp端口永久添加入public域的策略中
firewall-cmd --reload 加载
firewall-cmd --list-ports --zone=public 查看public域的策略中的端口策略,也可查看所有策略来确认端口是否添加(此时成功添加)
firewall-cmd --remove-port=1234/tcp --permanent --zone=public 在public域的策略中永久删除端口1234/tcp
firewall-cmd --reload 加载
firewall-cmd --list-all --zone=public 查看public域的策略信息
firewall-cmd --set-default-zone=public 将public域设为默认域
ssh [email protected] (在客户端测试)连接至该机,此时可以连接上,连接后先不退出
firewall-cmd --remove-service=ssh --permanent 将ssh服务从public域上永久删除
firewall-cmd --reload 加载
123 (在客户端测试)此时ssh服务已经删除并reload了,但已使用ssh连接上时仍可以操作输入123
firewall-cmd --complete-reload 完全加载(此时将先断开客户端连接,再加载服务改动,再重新进行客户端连接,若改动后无连接权限,则客户端将无法连接
456 (在客户端测试)尝试输入456测试是否连接,此时已不能操作,说明已断开连接

Linux中“防火墙”详解_第5张图片

3、firewalld的高级策略配置(direct rules)

命令 功能
firewall-cmd --direct --get-all-rules 查看当前的所有添加的rule
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -s 172.25.254.250 -p tcp --dport 80 -j ACCEPT 添加rule:ipv4,添加到filter表的INPUT字段中的第一行,针对IP172.25.254.250生效,协议为tcp协议,端口为80端口,IP符合条件时为ACCEPT,通过(意为给该IP添加的特殊策略,符合IP时80端口开启)
firewall-cmd --direct --add-rule ipv4 filter INPUT 2 -s 172.25.254.250 -p tcp --dport 22 -j REJECT 添加rule:ipv4,添加到filter表的INPUT字段中的第二行,针对IP172.25.254.250生效,协议为tcp协议,端口为22端口,IP符合条件时为REJECT,拒绝(符合条件时22端口拒绝)
firewall-cmd --direct --remove-rule ipv4 filter INPUT 1 -s 172.25.254.250 -p tcp --dport 80 -j ACCEPT 删除该rule
firewall-cmd --direct --remove-rule ipv4 filter INPUT 2 -s 172.25.254.250 -p tcp --dport 22 -j REJECT 删除该rule

4、firewalld的地址伪装

此实验需要三台机,提供目的地地址的、提供路由功能的(需两块网卡,两个不同网段)、提供原地址的。

目的地地址转换 |目的地地址的转换是在陆游前做的
原地址转换 |原地址的转换是在陆游后做的

此处设定的原地址为:
172.25.54.254,网关为172.25.54.1(路由器的一个IP)
路由器的两个IP为:
172.25.54.1172.25.254.154
目的地IP为:
172.25.254.54

在原地址端设置:

命令 功能
vim /etc/sysconfig/network-scripts/ifcfg-eth0 修改该文件
IPADDR=172.25.54.254 将IP设定为与路由器一个IP同网段,但与目的地IP不同网段的IP
GATEWAY=172.25.54.1 设置网关为路由器上的一个IP,该IP与本机IP在同一网段
systemctl restart network 设定完成后重启服务
route -n 查看网关是否设置成功,此时应成功

在路由器上设置:

命令 功能
firewall-cmd --add-forward-port=port=22:proto=tcp:toport=22:toaddr=172.25.54.254 给firewall添加伪装:将来自端口22的对本机IP(172.25.254.154)的访问转化为:通过22端口,以tcp协议对IP172.25.54.254的访问
firewall-cmd --permanent --add-masquerade 永久开启masquerade
firewall-cmd --list-all 列出当前默认域的策略,查看masquerade是否开启(此时应为yes)

在目的地上测试目的地地址转换:

命令 功能
ssh [email protected] 在目的地访问路由器上与目的地同网段的IP(172.25.254.154)
ifconfig 登陆成功后,查看IP,此时经过目的地地址转换,实际访问的真实地址应显示是原地址(172.25.54.254)

在原地址端测试原地址转换:

命令 功能
w -i 在原地址端查看连接本机的IP是谁,此时经过原地址转换,查看到的访问本机的IP是路由器的一个IP(172.25.54.1),但真实访问本机的IP应是目的地IP(172.25.254.54)

Linux中“防火墙”详解_第6张图片

三.使用iptables对防火墙的管理

1、iptables的管理和存储方式

(1)iptables的安装

命令 功能
yum install iptables -y 安装iptables

(2)使用iptables的环境配置

命令 功能
systemctl stop firewalld 关闭firewalld
systemctl disable firewalld 开机不启动firewalld
systemctl mask firewalld 给firewalld上锁
systemctl unmask iptables 解锁iptables
systemctl start iptables 开启iptables
systemctl enable iptables 开机自动启动iptables

(3)iptables的管理

命令 功能
iptables -nL n:numeric,L:list,列出表的策略信息,不指定时默认列出filter表
iptables -F F:flush,刷新,将表中策略刷新删除
iptables -nL 再次查看策略,此时无策略
systemctl restart iptables 重启服务
iptables -nL 再次查看时,因为重启服务,保存的策略被再次加载出来
iptables -F 再次刷新删除
service iptables save 保存此时的策略
cat /etc/sysconfig/iptables 查看策略保存的文件
systemctl restart iptables 重启服务
iptables -nL 再次查看时,重启服务,保存的策略为无策略,所以此时没有策略被加载出来
iptables -A INPUT -s 172.25.254.54 -p tcp --dport 80 -j REJECT -A为添加,INPUT为想要添加的chain(链)名称,-s指定IP,若指所有人,则不加该参数,-p指定协议,–dport指定端口,-j指定执行的动作,此处为REJECT
iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT -I为插入,此处指将该策略插入至INPUT的第1条
iptables -D INPUT 1 删除INPUT中的第1条策略,-D为指定删除某链下的某个策略
iptables -N abc 添加自定义链,名为abc
iptables -E abc zxc 修改自定义链abc名为zxc
iptables -X zxc 删除自定义链zxc
iptables -P INPUT DROP 更改INPUT链的默认规则为DROP
iptables -t nat -nL -t为指定表,此处为查看nat表的策略信息,当不指定时,默认指定的是filter表
iptables -L INPUT 列出filter表下的INPUT链的策略信息

Linux中“防火墙”详解_第7张图片

2、在iptables中做SNAT(原地址转换)和DNAT(目的地地址转换)

此实验需要三台机,提供目的地地址的、提供路由功能的(需两块网卡,两个不同网段)、提供原地址的。

此处设定的原地址为:
172.25.54.254,网关为172.25.54.1(路由器的一个IP)
路由器的两个IP为:
172.25.54.1(eth1网卡IP)和172.25.254.154(eth0网卡IP)
目的地IP为:
172.25.254.54

(1)SNAT

<1>在路由器上设置

命令 功能
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.154 给nat表的POSTROUTING链中添加策略,指定网卡为eth0网卡,执行SNAT,转换的IP为172.25.254.154
iptables -t nat -nL 查看是否添加成功
sysctl -a grep ip_forward
vim /etc/sysctl.conf 修改该文件
net.ipv4.ip_forward = 1 开启路由功能
sysctl -p 修改完成后加载修改的设定,立即开启路由功能

<2>在原地址端测试

命令 功能
ping 172.25.254.54(目的地地址) 可ping通,说明原地址转换成功
ssh [email protected](目的地地址) 连接目的地地址

<3>在目的地查看

命令 功能
w -i 查看连接自己的IP,此时经过原地址转换,所以看到的IP应是路由器的eth0网卡IP172.25.254.154

<4>还原设定,使实验环境纯净

命令 功能
iptables -t nat -D POSTROUTING 1 删除设定,还原实验环境

(2)DNAT

<1>在路由器上设置

命令 功能
iptables -t nat -A PREROUTING -i eth1 -j DNAT --to-dest 172.25.254.54 给nat表的PREROUTING链中添加策略,指定网卡为eth1网卡,执行DNAT,转换的IP为172.25.254.54
iptables -t nat -nL 查看

<2>在原地址端测试

命令 功能
ssh [email protected](目的地地址) 连接目的地地址

<3>在目的地查看

命令 功能
w -i 查看连接自己的IP,此时经过目的地地址转换,所以看到的IP应是原地址IP172.25.54.254

Linux中“防火墙”详解_第8张图片

你可能感兴趣的:(Linux,Linux,防火墙)