目录
注意:在这里我使用MobaXterm(一个ssh客户端)对虚拟机进行远程操作。
下载网址:MobaXterm free Xserver and tabbed SSH client for Windowshttps://mobaxterm.mobatek.net/
同个主机同个模式的虚拟机一开始可以直接ping通。因为我这里只有一台主机,我通过改变虚拟机的模式来使虚拟机一开始无法ping通。
由于CentOS 7没有iptables这个服务,只有firewalld。我们需要关闭firewalld,下载iptables并使用。
关闭firewalld,下载iptables并使用。
1、关闭firewalld,systemctl stop firewalld
2、禁止firewalld开机自启动,systemctl disable firewalld
3、下载安装iptables服务(yum install iptables-services),图中显示已经安装
更改虚拟机的网关(从NAT模式变为仅主机模式)
ping不通网关的原因有3点:(1)网关配置不对(没有与主机的VMnet1的IPv4地址一致)(2)NetManager没有关闭(使用systemctl stop NetworkManager关闭)(3)主机的防火墙没有关闭,影响了虚拟机的数据包传递(在网络与Internet设置中关闭windows防火墙)。
1、在虚拟机的设置中将网络适配器改为VMnet1(仅主机模式)
2、查看主机VMnet1的网关和子网掩码
(1)进入网络和Internet设置,点击更改适配器选项,双击VMnet1,查看详细信息
(2)图中IPv4地址即虚拟机网关为169.254.62.138(本地IP【DHCP没办法分配到ip】,原因是没有有效的ip配置),子网掩码为255.255.0.0
(3)重启虚拟机,编辑/etc/sysconfig/network-scripts中的ifcfg-ens33文件,如图
(4)关闭NetworkManager,重启网络服务
(5)ping网关169.254.62.138和目的虚拟机192.168.146.141
在此,你会发现ping不通192.168.146.141,本质原因是两台虚拟机不在同个网段中。可以通过防火墙解决。
使用iptables配置防火墙
注意:白名单是所有的主机不能访问,唯独我们配置的主机可以访问,因此要修改默认的INPUT为DROP状态,使用iptables -t filter -P INPUT DROP。
黑名单是所有的主机能访问,唯独我们配置的主机不可以访问,因此要修改默认的INPUT为ACCEPT状态,使用iptables -t filter -P INPUT ACCEPT。
现有三台虚拟机:192.168.146.141-143,进行操作前需要关闭NetworkManager服务。
配置白名单
我们要实现192.168.146.141ping通192.168.146.142。(ping用得协议是ICMP,ICMP没有端口)
在192.168.146.141的iptables中编辑。
1、使用cd /etc/sysconfig进入sysconfig文件夹,ls查看所有文件列表
2、输入iptables -t filter -P INPUT DROP,修改默认的INPUT为DROP状态,并采用iptables -L -v -n查看此时INPUT的policy为DROP。
3、service iptables save保存刚刚的更改
4、使用vi iptables在文件中加入白名单主机(192.168.146.142)
(1)vi iptables
(2)将-A INPUT -p icmp -j ACCEPT改为-A INPUT -s 192.168.146.142 -p icmp -j ACCEPT。
-s 192.168.146.142表示ip 192.168.146.142。-s 192.168.146.142/24表示的是192.168.146.XXX的所有主机。
(3)输入wq!保存文件
5、输入service iptables restart重启iptables服务
6、(1)用192.168.146.141和192.168.146.142互ping,发现两边都可以ping通
(2)用192.168.146.141可以ping通192.168.146.143,但192.168.146.143无法ping通192.168.146.141。原因:192.168.146.141只限制了INPUT,没有限制OUTPUT,而且141的iptables文件中-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT允许接受回包,因此141可以ping通143,143不能ping通141。
注意:如果要使141不可以ping通143,可以删除回包语句,但这会影响业务的运行。
配置黑名单
我们要实现192.168.146.142ping通192.168.146.141。
1、使用cd /etc/sysconfig进入sysconfig文件夹,ls查看所有文件列表
2、输入iptables -t filter -P INPUT ACCEPT,修改默认的INPUT为ACCEPT状态,并采用iptables -L -v -n查看此时INPUT的policy为ACCEPT。
3、service iptables save保存刚刚的更改
4、使用vi iptables在文件中加入黑名单主机(192.168.146.142)
(1)vi iptables
(2)在-A INPUT -p icmp -j ACCEPT语句后加入-A INPUT -s 192.168.146.142 -p icmp -j DROP限制192.168.146.142连接141。(如果删除-A INPUT -p icmp -j ACCEPT这条语句,143ping141的包会因为只能匹配到最后一条语句而被拒绝)。
注意:-A INPUT -p icmp -j ACCEPT必须在-A INPUT -s 192.168.146.142 -p icmp -j DROP语句之前。
-s 192.168.146.142表示ip 192.168.146.142。-s 192.168.146.142/24表示的是192.168.146.XXX的所有主机。
(3)输入wq!保存文件
5、输入service iptables restart重启iptables服务
6、(1)用192.168.146.141和192.168.146.143互ping,发现两边都可以ping通
(2)用192.168.146.141可以ping通192.168.146.142,但192.168.146.142无法ping通192.168.146.141。原因:192.168.146.141只限制了INPUT,没有限制OUTPUT,而且141的iptables文件中-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT允许接受回包,因此141可以ping通142,142不能ping通141。
注意:如果要使141不可以ping通143,可以删除回包语句,但这会影响业务的运行。
参考文献: