Linux端口复用工具sslh

sslh简介

sslh可以在同一端口上接受HTTP,HTTPS,SSH等多种协议的连接,然后转到其他不同的内部端口。
这样做的意义不仅是减少对外开放的端口数量,还能满足一些特殊的应用场合,如:

  • 实现网页和ssh共用443端口
  • 外部端口转内部端口的特殊应用

sslh安装

以centos为例:

yum install epel-release
yum install sslh

配置

安装好后,sslh的配置文件在/etc/sslh.conf。以两个示例说明配置方法

实现网页和ssh共用443端口

些配置假设nginx配置HTTPS监听的内部端口为8001。配置sslh监听443端口,将ssh的服务转到内部22端口,把其他443的访问转到8001端口:

# This is a basic configuration file that should provide
# sensible values for "standard" setup.

verbose: false;
foreground: true;
inetd: false;
numeric: false;
transparent: false;
timeout: 2;
user: "sslh";

# Change hostname with your external address name.
listen:
(
    { host: "0.0.0.0"; port: "443"; }
);

protocols:
(
     { name: "ssh"; service: "ssh"; host: "localhost"; port: "22"; },
     { name: "anyprot"; host: "localhost"; port: "8001"; }
);

外部端口转内部端口的特殊应用

如我需要将外部8003的访问都转到8883,可以用以下配置:

# Change hostname with your external address name.
listen:
(
    { host: "0.0.0.0"; port: "8003"; }
);

protocols:
(
     { name: "anyprot"; host: "localhost"; port: "8883"; }
);

开启sslh

因为sslh自带服务配置文件。所以直接用systemctl使能和启用便可:

systemctl enable sslh
systemctl start sslh

这样就启用SSLH了,且重启后服务也自动启动。

MySQL的基础操作

数据库

创建数据库

创建数据库my_db

mysql> CREATE DATABASE my_db;

删除数据库

删除数据库my_db

mysql> DROP DATABASE my_db;

查看数据库列表

mysql> show databases;

查看数据存放位置

mysql> show global variables like "%datadir%";

查看数据库编码

show variables like 'character_set_%';

可以看到如下结果:

character_set_client为客户端编码方式;
character_set_connection为建立连接使用的编码;
character_set_database数据库的编码;
character_set_results结果集的编码;
character_set_server数据库服务器的编码;

只要保证以上四个采用的编码方式一样,就不会出现乱码问题。

set character_set_client = xxxxx

用户管理

查看用户状态

mysql> use mysql;
mysql> select host,user from mysql.user;

创建用户

在localhost上创建上个名叫user_a,密码为a_password的用户:

mysql>create user user_a@'localhost' identified by 'a_password';

删除用户

删除localhost上的user_a用户

mysql> drop user user_a@'localhost';

查看权限

查看用户user_a的权限:

mysql> show grants for user_a;

赋予权限

赋予用户user_a在数据库my_db上的所有权限

mysql> grant all privileges on my_db.* to user_a@'localhost' identified by 'a_password';
mysql> flush privileges;

回收权限

回收user_a的所有权限

mysql> revoke all on *.* from user_a@'%';

设置用户密码

设置用户user_a的密码为new_passwd

mysql> set password for user_a = password('new_passwd');