防火墙就是用来阻挡外部不安全因素影响的内部网络屏障,其目的就是防止外部网络用户未经授权的访问。它是一种计算机硬件和软件的结合,使Internet与Internet之间建立起一个安全网关(Security
Gateway),从而保护内部网免受非法用户的侵入
阻塞区域(block):任何传入的网络数据包都将被阻止。
firewalld
火墙管理
火墙的域简介
火墙图形界面
[root@des etc]# yum install firewall-config
###下载图形管理软件
[root@des etc]# firewall-config
###打开图形管理界面
###在图形界面可以编辑火墙域,也可以查看允许的服务等
基本命令
[root@des etc]# firewall-cmd --state
###查看火墙状态
[root@des etc]# firewall-cmd --get-active-zones
###查看火墙正在运行的域
[root@des etc]# firewall-cmd --get-default-zone
###查看火墙默认域
[root@des etc]# firewall-cmd --get-zones
###查看火墙全部的域
[root@des etc]# firewall-cmd --zone=public --list-all
###列出public域中的全部信息
[root@des etc]# firewall-cmd --get-services
###查看火墙支持的所有应用软件
[root@des etc]# firewall-cmd --list-all-zones
###列出所有域中的所有信息
[root@des etc]# firewall-cmd --set-default-zone=trusted
###修改默认域
实验环境
服务端(172.25.254.101)(1.1.1.101)
在虚拟机中添加网卡
使一个虚拟机具有两个不同ip的网卡
并重启网络使其生效
1.添加网卡
virt-manger
修改网卡配置文件
[root@localhost ~]# cd /etc/sysconfig/network-scripts/ifcfg-eth0
[root@localhost ~]# ls
[root@localhost ~]# cp ifcfg-eth0 ifcfg-eth1
[root@localhost ~]# vim ifcfg-eth1
[root@localhost ~]# systemctl restart network
[root@localhost ~]# ifconfig
####修改成功
[root@localhost ~]# hostnamectl set-hostname des
###修改主机名
客户端(1.1.1.201)
修改ip使与服务端两个ip中的一个处于同一网端
同上,只用拥有一个网卡(默认)
[root@localhost ~]# cd /etc/sysconfig/network-scripts/ifcfg-eth0
[root@localhost ~]# vim ifcfg-eth0
客户端(172.25.254.1)
真机,不做修改
ip与服务端另一ip( 172.25.254.70)处于同一网端
实验过程
在trusted域添加某一相同网端ip
服务端
[root@des ~]# firewall-cmd --list-all
[root@des ~]# firewall-cmd --add-source=172.25.254.1 --zone=trusted
[root@des ~]# firewall-cmd --list-all
[root@des ~]# firewall-cmd --list-all --zone=trusted
客户端只是被暂时添加,重新加载后失效
排错
不小心添加到public域(默认)
[root@des ~]# firewall-cmd --add-source=172.25.254.1
[root@des ~]# firewall-cmd --list-all
[root@des ~]# firewall-cmd --add-source=172.25.254.1 --zone=trusted
Error: ZONE_CONFLICT
###再次添加有报错
[root@des ~]# firewall-cmd --reload
[root@des ~]# firewall-cmd --list-all
###172.25.254.1被移除
[root@des ~]# firewall-cmd --add-source=172.25.254.1 --zone=trusted
[root@des ~]# firewall-cmd --list-all --zone=trusted
###在tursted域中添加成功
客户端(172.25.254.1)
测试
添加后
将某一网卡添加到trusted域
服务端
[root@des ~]#firewall-cmd --list-all
[root@des ~]#firewall-cmd --remove-interface=eth1 --zone=public
[root@des ~]#firewall-cmd --list-all
###移除public域中的eth1
[root@des ~]# firewall-cmd --add-interface=eth1 --zone=trusted
[root@des ~]# firewall-cmd --list-all --zone=trusted
客户端(1.1.1.201)
访问服务端eth1
还原
[root@des ~]# firewall-cmd --change-interface=eth1 --zone=public
###默认域不能删除后重新添加
将某一文件从允许列表中移除,终止服务
[root@des ~]# firewall-cmd --list-all
[root@des ~]# firewall-cmd --permanent --remove-service=ssh
###因为我一直在ssh中进行实验,而此时连接没有中断,说明此时没有生效
[root@des ~]# firewall-cmd --list-all
[root@des ~]# firewall-cmd --reload
[root@des ~]# firewall-cmd --list-all
###服务被移除但是依然没有生效
[root@des ~]# firewall-cmd --complete-reload
###依然不生效
因为一直**ssh连接服务端**,在服务端主机直接进行reload
[root@des ~]# firewall-cmd --reload
[root@des ~]# firewall-cmd --complete-reload
###reload与complete reload的区别:
reload刷新之后不会中端连接,complete-reload刷新之后会中断连接。
###ssh连接断开
真机
[kiosk@foundation1 ~]$ killall -9 ssh
###恢复
drop域与block域
二者都表示拒绝
drop只拒绝不回应
block不仅拒绝并且会回应
一般企业使用block域来有回应的拒绝,因为这样将不会再接收到被拒绝方发送来的任何数据
@将真机ip添加到drop域查看效果
[root@des ~]# firewall-cmd --add-source=172.25.254.70 --zone=drop
###ssh链接断开
[root@localhost html]# killall -9 ssh
[root@des ~]# firewall-cmd --list-all --zone=drop
###在真机ping服务端不通且无报错
[root@localhost html]# ping 172.25.254.101
还原
[root@des ~]# firewall-cmd --remove-sources=172.25.254.70 --zone=drop
[root@des ~]# firewall-cmd --list-all --zone=drop
@将真机添加到block域
[root@des ~]# firewall-cmd --add-source=172.25.254.70 --zone=block
[root@des ~]# firewall-cmd --list-all --zone=block
###在真机ping服务端不通且有报错
还原
[root@des ~]# firewall-cmd --remove-sources=172.25.254.70 --zone=block
[root@des ~]# firewall-cmd --list-all --zone=drop
firewall默认文件
firewalld默认提供了九个zone配置文件: block.xml、dmz.xml、drop.xml、external.xml、
home.xml、internal.xml、public.xml、trusted.xml、work.xml
他们都保>存在“/usr/lib/firewalld/zones/”目录下。
永久删除服务(ssh)
合理运用火墙命令
[root@des ~]# firewall-cmd --permanent --remove-service=ssh
###--permanent指永久性的
[root@des ~]# firewall-cmd --list-all
###依然存在
[root@des ~]# firewall-cmd --reload
###重新载入
[root@des ~]# firewall-cmd --list-all
还原
端口修改
[root@des services]# cd /lib/firewalld/services/
[root@des services]# ls
[root@des services]# vim ssh.xml
[root@des services]# firewall-cmd --reload
[root@des services]# systemctl restart firewalld.service
[root@des services]# logout
[root@localhost Desktop]# ssh root@172.25.254.101
###退出后再次连接失败
还原
黑白名单的设定
白名单
##仅允许70主机仅可以访问ssh;ssh的端口22
[root@des ~]# firewall-cmd --list-all
[root@des ~]# firewall-cmd --permanent --remove-service=ssh
[root@des ~]# firewall-cmd --reload
[root@des ~]# firewall-cmd --list-all
###从默认public域允许ssh服务中删除ssh
[root@des ~]# firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -p tcp --dport 22 -s 172.25.254.70 -j ACCEPT
success
[root@des ~]# firewall-cmd --direct --get-all-rules
ipv4 filter INPUT 1 -p tcp --dport 80 -s 172.25.254.26 -jACCEPT
参数的含义:
--direct #direct规则
filter #filter表
INPUT 1 #第一条链
-p tcp #tcp协议
--dport 80 #目的地端口为80
-s #设定被允许访问的ip
-j #要执行的动作,ACCEPT表示接受,DROP表示丢弃,REJECT表示拒绝,
REJIEC有反馈
DROP无反馈
ACCEPT接收
测试
真机可连接,虚拟机ssh不通
还原
[root@des ~]# firewall-cmd --direct --remove-rule ipv4 filter INPUT 1 -p tcp --dport 22 -s 172.25.254.70 -j ACCEPT
success
[root@des ~]# firewall-cmd --direct --get-all-rules
黑名单
##仅拒绝70主机ssh连接本机
[root@des ~]# firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -p tcp --dport 22 -s 172.25.254.70 -j REJECT
success
##查看所有的direct规则
[root@des ~]# firewall-cmd --direct --get-all-rules ipv4 filter INPUT 1 -p tcp --dport 22 -s 172.25.254.70 -j REJECT
测试
[root@localhost Desktop]# ssh root@172.25.254.101
ssh: connect to host 172.25.254.101 port 22: Connection refused
另一客户端
[root@localhost Desktop]# ssh root@1.1.1.101
还原
[root@localhost Desktop][root@des ~]# firewall-cmd --direct --remove-rule ipv4 filter INPUT 1 -p tcp --dport 22 -s 172.25.254.70 -j REJECT
端口转发与在地址伪装
服务端充当路由器,之前已经配置两块不同ip的网卡
客户端(172.25.254.70)充当外网
客户端(1.1.1.201)充当内网
服务端
###开启内核路由伪装
[root@des ~]# vim /etc/sysctl.conf
[root@des ~]# systemctl restart network
[root@des ~]# sysctl -a |grep ip_forward
net.ipv4.ip_forward = 1
###开启火墙伪装
[root@des ~]# firewall-cmd --list-all
###查看
[root@des ~]# firewall-cmd --permanent --add-masquerade
######开启火墙伪装
[root@des ~]# firewall-cmd --reload
[root@des ~]# firewall-cmd --list-all
客户端(1.1.1.201)
配置网关
[root@localhost Desktop]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
###配置网关
[root@localhost Desktop]# systemctl restart network
###重启网络
[root@localhost Desktop]# route -n
查看网关是否添加成功
测试
[root@localhost Desktop]# ping 172.25.254.70