CentOS 7 防火墙

文章主要介绍防火墙的使用,和遇到的一些问题

CentOS 防火墙 命令

  • CentOS 6 系列使用 iptables
  • Centos 7使用firewalld代替了原来的iptables。

查看防火墙的状态:

Centos 7 firewall 命令:

  • firewall-cmd --zone=public --add-port=80/tcp --permanent ##开启端口

    • zone #作用域

    • add-port=80/tcp #添加端口,格式为:端口/通讯协议

    • permanent #永久生效,没有此参数重启后失效

firewall-cmd --state                           ##查看防火墙状态,(关闭后显示notrunning,开启后显示running)
firewall-cmd --reload                          ##重启firewall,重新载入配置,比如添加规则之后,需要执行此命令
firewall-cmd --list-ports                      ##查看已经开放的端口
firewall-cmd --get-zones                       ##列出支持的zone
firewall-cmd --get-services                    ##列出支持的服务,在列表中的服务是放行的
firewall-cmd --query-service ftp               ##查看ftp服务是否支持,返回yes或者no
firewall-cmd --add-service=ftp                 ##临时开放ftp服务
firewall-cmd --add-service=ftp --permanent     ##永久开放ftp服务
firewall-cmd --remove-service=ftp --permanent  ##永久移除ftp服务
firewall-cmd --add-port=80/tcp --permanent     ##永久添加80端口 
iptables -L -n                                 ##查看规则,这个命令是和iptables的相同的
man firewall-cmd                               ##查看帮助

systemctl 命令操作防火墙

启动一个服务:systemctl start firewalld.service
关闭一个服务:systemctl stop firewalld.service
重启一个服务:systemctl restart firewalld.service
显示一个服务的状态:systemctl status firewalld.service
在开机时启用一个服务:systemctl enable firewalld.service
在开机时禁用一个服务:systemctl disable firewalld.service
查看服务是否开机启动:systemctl is-enabled firewalld.service;echo $?
查看已启动的服务列表:systemctl list-unit-files|grep enabled

由防火墙产生的问题

问题一:

两台PC
A:192.168.1.88 centOS
B:192.168.1.100

在PC A使用docker运行,spring cloud开发微服务的时候,运行了一个eureka服务,映射端口8761,

运行PC B 上的spring cloud 应用,注册到192.168.1.88:8761,一直注册不到eureka服务,提示

com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server

但是B可以成功连接A的8761

关闭防火墙,发现服务B可以正常注册。(难道是防火墙屏蔽了,端口的出方向)

此时,发现PC A 中docker的docker容器启动不了了,提示:

/usr/bin/docker-current: Error response from daemon: driver failed programming external connectivity on endpoint xxxx (4509dc5c1fe2ad23848f6098edb0f6df694c001179ea4c8fa866335eb5f4f11f): iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 3247 -j DNAT --to-destination 172.17.0.2:3306 ! -i docker0: iptables: No chain/target/match by that name.

为了能正常注册服务,正常连接公网的服务,只能打开防火墙,开启指定的端口

问题二:

docker 无法通过宿主机ip 访问mysql docker 容器

两台PC
A:192.168.1.108 centOS
B:192.168.1.100

1、PC A 上运行着 mysql docker容器,容器ip 172.17.0.3 端口 3306->3306
2、PC B 运行 程序JAR1 可以通过 192.168.1.108:3306 连接数据库
3、PC A 在docker 运行JAR1 ,可以通过 172.17.0.3:3306连接数据库
3、PC A 在docker 运行JAR1 ,但是却无法通过 192.168.1.108:3306连接数据库

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

Caused by: java.net.NoRouteToHostException: No route to host (Host unreachable)

解决:

打开防火墙,开启指定的端口

参考:

CentOS 6和CentOS 7防火墙的关闭
CentOS 7 开放防火墙端口命令
Centos 7 firewall 命令:
docker无法启动问题

关注我的公众号,轻松了解和学习更多技术
这里写图片描述

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 撸撸猫 设计师:设计师小姐姐 返回首页