主机和Centos 7虚拟机处在Nat网络环境下能互相ping通,CentOS 7虚拟机能访问自己开启的服务,但在主机上无法访问虚拟机开启的服务。
环境:
CentOS 7 Vmware虚拟机
Windows 10 主机
要访问虚拟机的Web服务地址:192.168.238.45:8080
解决方法:
在解决实验环境问题中,grey找到以下两种解决方法,其中SElinux是造成该问题的主要原因,grey通过关闭SElinux解决了实验中遇到的该问题,另一种方法则是关闭防火墙或者是在防火墙上放行相应的端口。
一、 关闭SElinux
SELinux(security enhanced linux)安全增强型linux系统,它是一个linux内核模块,也是linux的一个安全子系统。主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则),致使很多服务端口默认是关闭的。RedHat/CentOS或其他衍生工具时,SELinux服务是默认启用的,所以好多初学者明明配置文件正确,等验证时有时连ping也ping不通。建议初学者在未学到SELinux之前,配置服务器把SELinux关掉。
1. 查看SELinux状态
目前 SELinux 支持三种模式,分别如下:
enforcing:强制模式,代表SELinux运作中,且已经正确的开始限制domain/type了;
permissive:宽容模式:代表SELinux运作中,不过仅会有警告讯息并不会实际限制 domain/type 的存取。这种模式可以运来作为SELinux的debug 之用;
disabled:关闭,SELinux并没有实际运作。
1.1 getenforce
getenforce 命令是单词get(获取)和enforce(执行)连写,可查看selinux状态,与setenforce命令相反。
setenforce 命令则是单词set(设置)和enforce(执行)连写,用于设置selinux防火墙状态,如:setenforce 0用于暂时关闭selinux防火墙,但重启后会失效恢复到/etc/selinux/config下,也就是说setenforce的修改是不能持久的。
[root@localhost ~]# getenforce
1.2 /usr/sbin/sestatus
SELinux status:selinux防火墙的状态,enabled表示启用selinux防火墙
SELinuxfs mount:selinux的相关文件资料挂载点
Current mode:selinux防火墙当前的安全策略模式,enforcing表示强
Mode from config file:设定档指定的模式
2. 关闭SELinux方法
2.1 临时关闭
如果不想重启电脑又想关闭SELinux的话,可以使用setenforce命令。
setenforce 0 :转成 permissive 宽容模式,用于暂时关闭selinux防火墙,但重启电脑后失效;
setenforce 1 :转成 Enforcing 强制模式
[root@localhost ~]# setenforce 0
[root@localhost ~]# /usr/sbin/sestatus
2.2 永久关闭
修改selinux的配置文件,重启后生效。
打开 selinux 配置文件
[root@localhost ~]# vim /etc/selinux/config
修改 selinux 配置文件
将SELINUX=enforcing改为SELINUX=disabled,保存后退出。
[root@localhost ~]# getenforce
Enforcing
此时获取当前selinux防火墙的安全策略仍为Enforcing,配置文件并未生效。
必须重启电脑修改的配置才能生效
[root@localhost ~]# reboot
验证
[root@localhost ~]# /usr/sbin/sestatus
[root@localhost ~]# getenforce
二、 防火墙常见命令
防火墙守护 firewalld 服务引入了一个信任级别的概念来管理与之相关联的连接与接口。它支持 ipv4 与 ipv6,并支持网桥,采用 firewall-cmd (command) 或 firewall-config (gui) 来动态的管理 kernel netfilter 的临时或永久的接口规则,并实时生效而无需重启服务。
查看防火墙状态:
systemctl status firewalld
开启防火墙并设置开机自启:
systemctl start firewalld
systemctl enable firewalld
关闭防火墙并取消开机自启:
systemctl stop firewalld
systemctl disable firewalld
防火墙配置要开放端口,并重启防火墙:
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd –reload
查看下要开放的端口是否生效:
firewall-cmd --zone=public --query-port=8080/tcp
查看指定区域开放的所有端口:
firewall-cmd --zone=public --list-ports
批量开放端口:
firewall-cmd --zone=public --add-port=100-500/tcp --permanent
查看批量开放端口是否生效:
firewall-cmd --zone=public --list-rich-rules
本站文章由渡缘人原创,如若转载请注明原文及出处:
https://www.hygrey.com/can-ping-each-other-but-unable-to-access-service.html
Comments NOTHING