前言:
1.购买阿里云轻量应用服务器,系统镜像为CentOS8.2(建议安装Cnetos版本在7-8之间)
2.安装宝塔面板,参考【宝塔面板手册】
# Centos安装脚本
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
- 安装完成后,获得面板访问地址和用户名密码
==================================================================
外网面板地址: http://121.196.***.176:8888/c4c*****
内网面板地址: http://172.17.**.6:8888/c4c*****
*以下仅为初始默认账户密码,若无法登录请执行bt命令重置账户/密码登录
username: qbtr****
password: ebc*****
If you cannot access the panel,
release the following panel port [8888] in the security group
若无法访问面板,请检查防火墙/安全组是否有放行面板[8888]端口
==================================================================
- 退出远程连接工具之后,也可以通过 /etc/init.d/bt 查看面板信息
4.配置安全组端口8888
配置地址:https://ecs.console.aliyun.com/
配置方式:创建安全组
5.面板无法访问
[解决方案]
1.配置阿里云防火墙端口
配置地址:https://swas.console.aliyun.com/
防火墙默认开放的端口为80、443、22,需要手动配置8888端口
2.访问面板地址,输入账号密码即可登录
如果登录问题已经解决,不妨听我讲述我的处理过程,希望对你也有帮助
[小结]
- 购买服务器后,通过远程连接工具连接服务器地址,想着傻瓜式操作部署服务器环境,就安装了一个宝塔面板,按照说明去阿里云安全组添加了开发端口8888,但是面板地址却没法访问
- 百度搜索这个问题,发现得到的答案都是配置了安全组,就能够访问宝塔面板了
- 花了大半天的时间还是没得到合适的答案,于是尝试直接通过远程终端连接服务器,用linux命令进行操作
- 随后我就将目光转向服务器的防火墙上
开放防火墙操作流程
- 开放防火墙指定端口;
firewall-cmd --zone=public --add-port=8888/tcp --permanent
# –zone 作用域
# –add-port=8888/tcp 添加端口,格式为:端口/通讯协议 # 关掉为remove-port
# –permanent 永久生效,没有此参数重启后失效
- 查看防火墙开放端口列表,这里我添加了好几个开放端口;
[root@iZbp14ipv1te4ldugsfs07Z ~]# firewall-cmd --list-ports
20/tcp 21/tcp 22/tcp 80/tcp 8888/tcp 39000-40000/tcp 8080/tcp
- 重新加载防火墙设置,使其生效;
firewall-cmd --reload
- 通过telnet ip 端口发现还是不能访问;(如果telnet命令不可用,也可以通过[站长工具]在线监测端口状态)
- 直接关闭防火墙,并查看防护墙状态;
#关闭防火墙 stop 开启 start # 运行状态 active(running) 关闭状态 loaded
[root@iZbp14ipv1te4ldugsfs07Z ~]#systemctl stop firewalld.service
[root@iZbp14ipv1te4ldugsfs07Z ~]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Fri 2020-12-25 20:13:03 CST; 43s ago
Docs: man:firewalld(1)
Process: 7326 ExecStart=/usr/sbin/firewalld --nofork --nopid $FIREWALLD_ARGS (code=exited, status=0/SUCCESS)
Main PID: 7326 (code=exited, status=0/SUCCESS)
- telnet ip 端口 还是不能打开面板
- 开始怀疑人生,就觉得阿里云上能添加的安全组规则和服务器防火墙相关的端口及禁用都做了,还是不能访问,那问题只能出在安装的宝塔那边了;
- 想过卸载宝塔重装,然后又去查了宝塔相关的linux命令,但是还是没有任何帮助;
# /etc/init.d/bt restart 重启宝塔
[root@iZbp14ipv1te4ldugsfs07Z ~]# bt
===============宝塔面板命令行==================
(1) 重启面板服务 (8) 改面板端口
(2) 停止面板服务 (9) 清除面板缓存
(3) 启动面板服务 (10) 清除登录限制
(4) 重载面板服务 (11) 取消入口限制
(5) 修改面板密码 (12) 取消域名绑定限制
(6) 修改面板用户名 (13) 取消IP访问限制
(7) 强制修改MySQL密码 (14) 查看面板默认信息
(22) 显示面板错误日志 (15) 清理系统垃圾
(23) 关闭BasicAuth认证 (16) 修复面板(检查错误并更新面板文件到最新版)
(24) 关闭谷歌认证 (17) 设置日志切割是否压缩
(25) 设置是否保存文件历史副本 (18) 设置是否自动备份面板
(0) 取消
===============================================
请输入命令编号:
- 下面这句话让我更加相信问题出在防火墙上;
- 于是又去阿里云上面仔细查找跟安全相关的模块,终于找到了这个,看到这几个默认的端口整个人豁然开朗;
[总结]
阿里云服务器提供对外访问的指定端口,需要在安全组、防火墙这两个地方都添加规则
- 安全组端口添加(可以一次性选择多个端口、授权ip,0.0.0.0/0表示所有ip都能访问);
- 防火墙端口添加,直接添加指定端口即可;
直接通过远程工具操作服务器防火墙端口和配置和在阿里云上设置防火墙端口是两个不同的操作,可以理解为,阿里云是一个总控开关。Centos虚拟机是它的一个子类,里面就算关闭防火墙,但是还是要在阿里云上开通端口才能对外提供访问。(如果理解的有错误,欢迎指正!)
====================================================================================================================
附言:
firewall是Centos7里的新的防火墙命令,实际上也是调用了iptable的command去执行内核的netfilter,底层还是使用 iptables 对内核命令动态通信包过滤,下面是iptables的常用命令。
#安装iptables
yum install iptables-services
service iptables status #查看iptable防火墙状态
iptables -L -n -v #查看iptable防火墙规则
systemctl start iptables #打开iptable防火墙
systemctl stop firewalld #关闭iptable防火墙
yum install iptables -y #安装iptable防火墙
systemctl enable iptables #开机自启iptable防火墙
systemctl disable firewalld #开机自动关闭iptable防火墙
iptables -F #清空iptable的规则
service iptables save #保存iptable防火墙规则
iptables -A INPUT -p tcp --dport 80 -j REJECT #禁止来自80端口访问的数据包
iptables -A INPUT -p tcp --dport 80 -j ACCEPT #允许来自80端口访问的数据包
iptables -A OUTPUT -p tcp --sport 80 -j REJECT #禁止从80端口出去的数据包
iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT #允许从80端口出去的数据包
晚上又花了一点时间去研究了下各个文件夹里面的文件
# 在 /etc/firewalld/zones 下有个public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
<service name="ssh"/>
<service name="dhcpv6-client"/>
<service name="cockpit"/>
<port port="20" protocol="tcp"/>
<port port="21" protocol="tcp"/>
<port port="22" protocol="tcp"/>
<port port="80" protocol="tcp"/>
<port port="8888" protocol="tcp"/>
<port port="39000-40000" protocol="tcp"/>
<port port="8080" protocol="tcp"/>
</zone>
这个应该是阿里云安全组配置的端口,防火墙的那个配置是vi /etc/sysconfig/iptables,但是没有看到我添加的那几个端口。
# Generated by iptables-save v1.8.4 on Fri Dec 25 09:37:52 2020
*security
:INPUT ACCEPT [35238:4545393]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [26581:17947704]
COMMIT
# Completed on Fri Dec 25 09:37:52 2020
# Generated by iptables-save v1.8.4 on Fri Dec 25 09:37:52 2020
*raw
:PREROUTING ACCEPT [34819:4503635]
:OUTPUT ACCEPT [26240:17737018]
COMMIT
# Completed on Fri Dec 25 09:37:52 2020
# Generated by iptables-save v1.8.4 on Fri Dec 25 09:37:52 2020
*mangle
:PREROUTING ACCEPT [34819:4503635]
:INPUT ACCEPT [34819:4503635]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [26240:17737018]
:POSTROUTING ACCEPT [26240:17737018]
COMMIT
# Completed on Fri Dec 25 09:37:52 2020
# Generated by iptables-save v1.8.4 on Fri Dec 25 09:37:52 2020
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
# Completed on Fri Dec 25 09:37:52 2020
# Generated by iptables-save v1.8.4 on Fri Dec 25 09:37:52 2020
*filter
:INPUT ACCEPT [34819:4503635]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [26240:17737018]
COMMIT
# Completed on Fri Dec 25 09:37:52 2020
~
"/etc/sysconfig/iptables" 37L, 1074C
/usr/lib/firewalld/services这里面放了很多xml,里面有mysql、redis、docker-swarm等端口配置信息
# mysql
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>MySQL</short>
<description>MySQL Database Server</description>
<port protocol="tcp" port="3306"/>
</service>
# redis
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>redis</short>
<description>Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker.</description>
<port protocol="tcp" port="6379"/>
</service>
# docker-swarm
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>Docker integrated swarm mode</short>
<description>Natively managed cluster of Docker Engines (>=1.12.0), where you deploy services.</description>
<port port="2377" protocol="tcp"/>
<port port="7946" protocol="tcp"/>
<port port="7946" protocol="udp"/>
<port port="4789" protocol="udp"/>
<protocol value="esp"/>
</service>