防火墙的概念
防火墙是指设置在不同网络之间,比如可信任的内部网和不可信的公共网,或者不同网络安全域之间的软硬件系统组合。它可通过检测、限制、更改跨越防火墙的数据流,尽可能地对外部屏蔽网络内部的信息、结构和运行状况,以此来保护企业内部网络的安全。防火墙是企业网络安全的屏障,它可以强化网络安全策略,对网络访问和内部资源使用进行监控审计,防止敏感信息的泄露。通常防火墙是由专门的硬件和软件来实现的,它的作用就像是门卫一样,管理进出的人员,防止可疑人员出入
动态防火墙后台程序 firewalld 提供了一个 动态管理的防火墙, 用以支持网络 “ zones” , 以分配对一个网络及其相关链接和界面一定程度的信任。它具备对 IP v4 和 IP v6 防火墙设置的支持。它支持以太网桥 , 并有分离运行时间和永久性配置选择。它还具备一个通向服务或者应用程序以直接增加防火墙规则的接口
防火墙是安装在内核上的插件,而firewalld和iptables都是在防火墙上配置安全策略的软件。而真正使用规则的是内核的netfilte
•系统提供了三种配置方法:
(1)图像化的配置工具 firewall-config (2) 命令行工具 firewall-cmd (3)直接编辑xml文件
fierwalld和iptables的区别
firewalld的默认区域是public,firewalld默认提供了九个zone配置文件,它们都是xml(可扩展性标志性语言)格式的,用来作数据封装,都保存在“/usr/lib/firewalld/zones/”目录下,所以使用firewalld来配置策略,有三种方法,一种使用图形化的管理,一种使用firewall-cmd方法,还可以直接修改zone文件。
• firewalld 和 iptables service 之间最本质的不同是 :
• iptables service 在 /etc/sysconfig/iptables 中储存配置
• firewalld 将配置储存在 /usr/lib/firewalld/ 和 /etc/firewalld/ 中的各种 XML 文件里
firewalld和iptables的比较:
在RHEL7系统中,默认使用firewalld来管理子系统,但底层调用的命令仍然是iptables。
firewalld跟iptables比较起来至少有两大好处:
1. firewalld可以动态修改单条规则
2. firewalld在使用上比iptables便利很多,即使不清楚TCP/IP协议也可以实现大部分的功能。
但是firewalld每个服务都需要配置才能通过,因为默认全部都是拒绝,而iptables默认全部是允许,需要拒绝的才会去限制。
防火墙实际就是三张表五条链
三张表:
fileter ##不经过内核的链组成
nat ##经过内核的链组成
mangle ##附加表
五条链:
INPUT ##输入
OUTPUT ##输出
FORWARD ##通过
PREROUTING ##目的地地址伪装
POSTROUTING ##源地址伪装
firewalld的管理方式
firewall-cmd --state //查看状态
firewall-cmd --get-active-zones //查看当前生效的域
firewall-cmd --get-default-zone //查看火墙默认生效的域
firewall-cmd --get-zones //查看所有的域
firewall-cmd --list-all //查看public的域的信息 ,默认的是public的域
firewall-cmd --get-services //列出系统中用名称表示的服务
firewall-cmd --list-all-zones //所有域的状态
firewall-cmd --list-all //列出所有域的规则
firewall-cmd --set-default-zone=trusted //修改默认的为trusted域
firewall-cmd --reload //更新防火墙规则
firewall-cmd --complete-reload
######它与--reload的区别就是第一个无需断开连接,第二个需要断开连接,类似重启服务
firewall-cmd -get-zone-of-interface=eth0 //查看eth0的域
firewall-cmd --change-interface=eth0 --zone=trusted //改变eth0的域
firewall-cmd --remove-interface=eth0 --zone=trused //移除
firewall-cmd --add-source=ip //临时添加一个ip源
firewall-cmd --permanent --add-source=ip //永久添加一个ip源
firewall-cmd --add-port=8080/tcp --zone=public //添加一个端口8080
firewalld显示的zone(域)
ROL 表示主机ip
firewalld-cmd --state //显示防火墙的状态
firewall-cmd --get-default-zone //显示防火墙默认生效的域
firewall-cmd --get-active-zones //显示防火墙目前生效的域
firewall-cmd --get-zone //显示防火墙所有的域
firewall-cmd --get-services //显示防火墙中可以添加的服务
firewall-cmd --list-all //查看public的域的信息 ,默认的是public的域
firrewall-cmd --zone=work --list-all //查看work域的所有信息,可以用这条命令查看所有域的信息
firewall-cmd --permanent --add-service=http //给防火墙添加http服务,-permanent表示永久添加,如果不加此条参数时
,当防火墙重启后,http服务就没有了
此时在浏览器中输入ip地址就可以进行访问了,防火墙允许进行http访问
firewall-cmd --permanent --remove-service= http //移除http服务 此时浏览器就不能进行访问了
firewall-cmd --permanent --zone=trusted --add-source=172.25.254.60 //将ip为172.25.254.60的主机设置成trusted,允许该主机进行任何操作。
拿http服务进行检测,此时防火墙是没有添加http服务的,但是主机ip为172.25.254.60的主机依旧可以进行访问
firewall-cmd --permanent --zone=trusted --remove-source=172.25.254.60 //移除主机ip为172.25.2554.60
此时浏览器就无法进行访问了
firewall-cmd --permanent --zone=block --add-source=172.25.254.60 //限制172.25.254.60主机进行访问
此时是ping不通的,但是有回应
firewall-cmd --permanent --zone=drop --add-source=172.25.254.60 //直接丢弃掉172.25.254.60的访问要求
如果是浏览器进行访问时,上面就一直显示正在连接,一直转,也不告诉你到底能不能连接
firewall-cmd -get-zone-of-interface=eth0 //查看eth0的域
firewall-cmd --change-interface=eth0 --zone=trusted //改变eth0的域
firewall-cmd --remove-interface=eth0 --zone=trused //移除
查看firewalld在系统中的文件,如果用命令添加一个服务,在文件中也会被写上,例如dhcp服务
文件修改方式将http设置允许穿过火墙;
[root@client ~]# cd /etc/firewalld/zones
[root@client zones]# vim public.xml
<service name="http"/>
[root@client zones]# vim /usr/lib/firewalld/http.xml
<port protocol="tcp" port="8080"/> //修改端口为8080
[root@client zones]# systemctl restart firewalld
[root@client zones]# firewall-cmd --list-all //设置允许http穿过火墙成功
[root@client ~]# firewall-cmd --add-port=8080/tcp --zone=public
[root@client ~]# firewall-cmd --list-all
地址伪装
首先,在这台虚拟机(server)添加第二块网卡eth1;
[root@server ~]# cd /etc/sysconfig/network-scripts/
[root@server ~]# cp ifcfg-eth0 ifcfg-eth1
cp: overwrite ‘ifcfg-eth1’? y
[root@server ~]# vim ifcfg-eth1
[root@server ~]# systemctl restart network
[root@server ~]# ifconfig //此时server主机上有两块网卡,相当于一个路由器
===============================================================
[root@client network-scripts]# sysctl -a | grep ip_forward
net.ipv4.ip_forward = 0
[root@client network-scripts]# vim /etc/sysctl.conf //在真机上写就可以让server主机上网,在server虚拟机上写,desktop 主机可以上网,写在你网关的主机上
net.ipv4.ip_forward = 1 //在末尾添加这一行;
[root@client network-scripts]# sysctl -p ##启动
net.ipv4.ip_forward = 1
================================================================
将server主机的路由功能打开
//desktop(单网卡主机)
[root@desktop ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 ##更改IP为1.1.1.241,网关设置成双网卡主机的eth1网卡的ip
[root@desktop ~]# systemctl restart network ##重启网络
[root@desktop ~]# ifconfig //查看ip是否更改
[root@desktop ~]# route -n //查看网关
[root@desktop ~]# ping 172.25.254.140 ##可以ping通
[root@desktop]# ssh [email protected] ##也可以连接
1.1.1.241和172.25.254.140因为不在一个网段里,网络是不能连通,这里为什么可以利用ssh服务可以连接呢?实际上是172.25.254.141登陆172.25.254.140,而不是1.1.1.241登陆172.25.254.140;这里也就完成了地址伪装。
当然,我们可以在172.25.254.140主机上利用w -i 查询真正登陆的ip;
跳转端口
[root@server ~]# firewall-cmd --permanent --add-masquerade success
[root@server ~]# firewall-cmd --reload
success
[root@server ~]# firewall-cmd --permanent --add-forward-port=port=22:proto=tcp:toport=22:toaddr=172.25.254.60
//ssh 的端口是 22;当ssh链接到172.25.254.160将会跳转到IP为172.25.254.60的主机
[root@server ~]# firewall-cmd --reload success
[root@server ~]# firewall-cmd --list-all
当我们闲置的虚拟机(desktop)中打开一个shell窗口,利用ssh服务连接172.25.254.160这台主机,会发现这台主机将会自动跳转到172.25.254.60
用 firewall-cmd --permanent --remove-forwardport=port=22:proto=tcp:toport=22:toaddr=172.25.254.60//删除