Linux运维 第三阶段 (一) 网络配置及openssl加密
主机接入网络:IP,netmask,gateway,hostname,DNS1,DNS2,DNS3,route,dhcp(dynamic hostconfiguration protocol)
169.254.0.0-169.254.255.255只能用于本地通信
#ifconfig(显示所有接口的配置信息)
#ifconfig eth0(显示指定接口的配置信息)
#ifconfig ethX IP/MASK [up|down](配置IP时必须指定子网掩码)
#ifconfig eth1 down
#ifconfig eth0:0 192.168.10.250/24(非主要地址不能使用DHCP动态获取)
#ifcofnig
#ifconfig eth0:0 down
#/etc/init.d/network {start|stop|restart|status}(RHEL5)
#/etc/init.d/NetworkManager {start|stop|restart|status}(RHEL6,功能不完善,通常禁用此功能)
#route add -net|-host ADDR netmask NETMASK gw GATEWAY
#route add -net 192.168.20.0 netmask 255.255.255.0 gw 192.168.10.1(此例用于场景:自己处于10网段,知道本网段的网关10.1,要访问20网段的主机)
#route add default gw NEXTHOP
#route -n(查询路由表,数字化显示路由信息,其中FLAGS:U表示路由是启动的up,H表示目标是一部主机,G表示需要通过外部主机来转递封包gateway)
#route del -net|-host ADDR netmask NETMASK
#route del -net 192.168.20.0/24 gw 192.168.10.1
#route del default
网络配置文件:/etc/sysconfig/network(其中NETWORKING=yes是本机使用网络功能的总开关,HOSTNAME指定主机名)
网络接口配置文件:/etc/sysconfig/network-scripts/ifcfg-INTERFACE_NAME
DEVICE=eth0(关联的设备名称,一定要与文件名后半部一致)
TYPE=Ethernet
ONBOOT=yes(开机时是否激活此网络接口)
HWADDR= (硬件地址,要与硬件中的地址保持一致,可省)
BOOTPROTO={static|none|dhcp|bootp}(引导协议,静态地址用static或none,动态获取IP使用dhcp)
IPADDR=192.168.1.222
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
USERCTL={yes|no}(是否允许普通用户控制此接口)
PEERDNS={yes|no}(是否在BOOTPROTO为dhcp时接受DHCP-SERVER指定的DNS地址)
注:修改配置文件不会立即生效,但重启网络服务或主机都会生效
配置路由:/etc/sysconfig/network-scritps/route-ethX
格式一:DEST via NEXTHOP
例:#vim /etc/sysconfig/network-scritps/route-eth1
192.168.20.0 via 192.168.10.1
#route -n
格式二:
第一条:
ADDRESS0=
NETMASK0=
GATEWAY0=
第二条:
ADDRESS1=
NETMASK1=
GATEWAY1=
例:#vim /etc/sysconfig/network-scritps/route-eth1
ADDRESS0=192.168.20.0
NETMASK0=255.255.255.0
GATEWAY0=192.168.10.1
#route -n
DNS服务器指定方法:/etc/resolv.conf(最多可指定三个)
nameserver DNS_IP_1
nameserver DNS_IP_2
nameserver DNS_IP_3
指定酵解析:/etc/hosts
格式:主机IP 主机名 主机别名
例:#vim /etc/hosts
192.168.10.222 www.magedu.com www
配置主机名:
#hostname www.magedu.com(仅当前生效,重启后失效)
#vim /etc/sysconfig/network
HOSTNAME=www.magedu.com
#setup(#system-config-network-tui仅用在字符界面下;#system-config-network-gui仅用在图形界面下)可视化配置网络及DNS
#ip --help(软件包iproute2)
#ip options OBJECT COMMAND
OBJECT:
link(配置网络接口属性)
addr(协议地址)
route(路由相关信息)
#ip link show
#ip -s link show(-statistics显示更详细的统计信息)
#ip link set eth1 up|down
#ip addr add IFADDR dev DEV
#ip addr add 192.168.10.250/24 dev eth0:0(辅助地址,secondary第二地址)
#ip addr show dev DEV to PREFIX
#ip addr show dev eth0 to 192.168.10/24(显示前缀192.168.101相同的地址行)
#ip addr del 192.168.10.250/24 dev eth0:0
#ip addr show
#ip route add to 192.168.20.0/24 dev eth0 via 192.168.10.1
#ip route show
#ping -c 2 -W 1 IP
-c COUNT(指定次数)
-W TIMEOUT(指定响应时间,单位秒)
#netstat -r|-n|-t|-u|-l|-p(Print network connections, routing tables, interface statistics,masquerade connections, and multicast memberships)
-r(--route显示路由表)
-n(--numeric以数字方式显示,不解析为域名)
-t(--tcp建立的tcp连接)
-u(--udp)
-l(--listening显示监听状态的连接)
-p(--program显示监听指定的套接字的进程及进程名)
协议报文分析器:sniffer(商业工具)、tcpdump
在同一交换机switch中,A-->B传输数据,C抓不到包(报文是基于MAC地址传送的),除非能控制switch;C若要想能抓到包(要么使用ARP欺骗(MAC欺骗);要么控制switch将其连在switch的口改为镜像口(switch要具有管理功能),这样switch上的任意两个口通信的数据都会传至镜像口),数据经网线到达C主机,主机要能接收数据,则要将网卡设为混杂模式(这样无论目标是不是这个接口都会被接收下来))
tcpdump(抓包并解码,任何一个抓包工具都要使用补包库才能工作起来)
wireshark(GUI抓包工具)
tshark(CLI抓包工具,比tcpdump更强大)
#tcpdump options 过滤条件
#tcpdump [options] [protocol] [direction] [host] [values] [logical operations] [other expression]([direction]表示流向,[values]表示替代关键字])
举例:direction
#tcpdump ip src 172.16.100.1(仅源是172.16.100.1)
#tcpdump ip src or dst 172.16.100.1(源和目的有一个满足172.16.100.1即可)
#tcpdump ip src and dst 172.16.100.1(自己到自己)
举例:values(net,port,host,portrange)
#tcpdump src 10.1.1.1(等同于#tcpdump src host 10.1.1.1)
#tcpdump dst net 172.16.0.0(镜像端口才有意义)
举例:logical operation(and,&&;or,||;not,!)
#tcpdump ip src [host] 172.16.100.1
#tcpdump tcp src or dst port 21
#tcpdump dst port 53
#tcpdump tcp or dst port 21 and src host 172.16.100.1
#tcpdump port 21 and host 172.16.100.1
举例:options(-i any,-n,-nn,-X,-XX,-v,-vv,-vvv)
-i any(指定在哪个网卡上抓包)
-n(不反解主机名)
-nn(既不反解主机名也不反解端口号)
-X(显示报文以16进制和ASCII码格式)
-XX(显示报文以16进制和ASCII码格式,还显示以太网首部)
-v(详细信息)
-vv
-vvv(更详细信息)
#tcpdump -i eth0 -X -nn -vv tcp port 110 and ip host 172.16.100.1
加密方法:
对称加密(加密和解密使用同一个密码);
公钥加密(每个密码都成对出现,一个为私钥secret key,一个为公钥public key,现代电子商务实现的基础,对称加密比公钥加密快3个数量级(1000倍),所以很少用公钥加密加密文件,常用来认证);
单向加密(指纹加密,散列加密,提取数据特征码,常用作数据完整性校验,两大特性:蝴蝶效应(雪崩效应,初始条件的微小改变将会引起结果的巨大变化)和定长输出,类型有:md5(message digest做摘要,128位定长输出)、SHA1(secure hash algorithm,160位定长输出),SHA256,SHA512(军用级别安全标准))
#whatis passwd
#man sslpasswd
#openssl passwd -1 -salt XXX PASSWORD(自动生成加密字串,-1表示使用md5加密;-salt表示添加杂质,位于两个$之间)
#openssl passwd -1 -salt 12345678 redhat(将密码redhat生成加密字串,生成的字串可直接粘贴至/etc/shadow第二个字段处)
#echo “redhat” | openssl passwd -stdin -1 -salt 12345678
nsswitch(network service switch)框架:/etc/nsswitch.conf,/lib/libnss*,/usr/lib/libnss*
/etc/passwd,/etc/shadow,/etc/group
NIS,LDAP,mySQL(libnss_file.so,libnss_nis.so,libnss_ldap.so)
openSSH(secure shell),C/S架构,用户认证过程加密,数据传输过程加密
server-side:进程sshd,配置文件/etc/sshd/sshd_config
client-side:进程ssh,配置文件/etc/ssh/ssh_config(windows下软件:putty,secureCRT,SSHsecureshellclient,Xmanager)
基于口令认证(默认);基于密钥认证
v1(早期版本,已废弃obsolete,对中间人***无法防范)
v2(使用此协议版本)
telnet远程登录tcp/23port,缺陷:明文传送
ssh,secure shell,tcp/22port
明文传输(ftp,http,smtp,telnet)
#rpm -qa | grep ssh(四个包都要安装)
#service sshd {start|stop|restart|reload|condrestart|status}
#netstat -tln|-tu|-tuln|-p|-tulnp
#ll /etc/ssh/(主机密钥,注意权限私钥及配置文件都为600)
ssh_config
sshd_config
ssh_host_dsa_key(dsa算法V2私钥,至关重要)
ssh_host_dsa_key.pub(V2公钥,至关重要)
ssh_host_key(V1)
ssh_host_key.pub(V1)
ssh_host_rsa_key(rsa算法V2私钥,至关重要)
ssh_host_rsa_key.pub(V2公钥,至关重要)
#man sshd_config
#vim sshd_config
基于密钥的认证步骤:
1、 生成一对密钥(使用#ssh-keygen -t rsa)
2、 将公钥传输至server-side某用户家目录下的.ssh/authorized_keys文件中(使用文件传输工具#ssh-copy-id或#scp,若用scp还要将文件内容导入指定文件中)
3、 测试登录
#ssh-keygen(key generate密钥生成器authenticationkey generation, management and conversion)
#ssh-keygen -t rsa(按默认在家目录下创建目录.ssh并创建私钥(id_rsa)及公钥(id_rsa.pub)文件,密码为空)
#ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ‘’
#ssh-copy-id(将公钥传输至远程服务器installyour identity.pub in a remote machine’s authorized_keys)
#ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.100.1(默认会放至远端主机root家目录下.ssh/authorization_keys文件中)
#scp(跨主机安全复制工具secure copy(remote file copy program))
#scp USERNAME@HOST:/PATH/TO/SOMEFILE /PATH/TO/LOCAL
#scp [-r|-a] /PATH/TO/LOCAL USERNAME@HOST:/PATH/TO/DIR
#ssh IP|HOST(未指用户,默认是对方主机正在登录的用户)
#ssh 172.16.100.1
#ssh USER@HOST
#ssh root@172.16.100.1
#ssh -l USER HOST(Specifies the userto log in as on the remote machine)
#ssh -l root 172.16.100.1
#ssh -l root 172.16.100.1 ‘COMMAND’(在远端主机上执行命令,显示结果在本地)
举例:
#ssh-keygen -t rsa(生成私钥和公钥,注意.ssh/目录权限为700,否则若建立双机互信此机作为服务器client不能登录)
#ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.222(主机间第一次联系交换密钥需输yes,不给私钥设密码为空即可)
#ssh root@192.168.1.222(以后均可直接联系不用输入对方密码)
#ifconfig(查看IP,确认已连接成功)
机密性、完整性、身份验证
机密性:
加密传输,靠密钥来保证数据的安全性;
plaintext-->转换规则-->ciphertext(加密),ciphertext-->转换规则—>plaintext(解密);
对称加密,加密和解密使用同一个密钥,速度快,安全性完全依赖于密钥,无法为用户解决密钥有效管理问题;
对称加密算法:DES(data encryption standard,56位,可暴力破解)、3DES、AES(advancedencryption standard,AES192、AES256、AES512位数越长速度越慢)、blowfish
完整性:
数据不能被被篡改,不一致时拒绝使用;
单向加密(提取数据特征码),输入一样输出必然相同,雪崩效应(输入的微小改变,将会引起结果的巨大改变,为避免暴力破解),定长输出(无论原始数据有多少,结果大小都是相同的),不可逆(无法根据特征码还原原来的数据);
单向加密算法:MD4、MD5(128位定长输出)、SHA1(SHA1(160位定长输出,SHA192、SHA256、SHA384输出长度)、CRC-32(不是加密算法,只是校验码,提供校验功能,不提供任何安全性)
A:plaintext:footprint-->B
E:plaintext2:footprint2-->B(中间人***)
A:plaintext:(footprint)-->B(对特征码footprint加密)
IKE(internet keyexchange)密钥交换,协商生成密码,密钥交换算法DH(diffie-hellman协议):互联网上可看到四个数,无法解决身份验证问题
A-->B
p g(p大素数,g生成数,internet可见)
x y(A和B自身知道)
g^x%p-->B(internet可见)
A<--g^y%p(internet可见)
A:(g^y%p)^x=g^xy%p
B:(g^x%p)^y=g^xy%p
身份验证:
公钥加密(非对称加密),很少用来加密数据,速度太慢,比对称加密慢三个数量级10^3倍,公钥来自于私钥,公钥加密只能用于私钥解密(public key公钥,secret key密钥1024/2048/4096bit);提供身份认证、数据加密、密钥交换;
公钥加密算法:RAS(既加密又签名,RAS既是算法又是公司名还是三个创始人名)、DSA(仅签名)、ELGamal(商业用)
发送方用自己的私钥加密数据,可以实现身份验证(常用此项),A:plaintext:footprint-->B(A用自己的私钥加密特征码);
发送方用对方的公钥加密数据,可以保证数据的机密性;
第三方机构(先为自己发证secret key,public key)为发送方的公钥做公证(数字签名),接收者拿着第三方机构的公钥解密,进而再用发送方的公钥解密数据
PKI(public keyinfrastructure)公钥基础设施:核心CA(certificate authority)证书颁发权威机构;A与B传输数据,彼此信任始于对方证书;CRL(certificate revoke list)证书吊销列表;有x509标准格式、pkcs12等。
A—>B两种方式传输数据:
双方通过IKE协议生成对称密钥,A用自己的私钥加密特征码(这样能保证B能验证A的身份及数据的完整性),但数据仍不是机密的,A再用生成的对称密钥对整个数据加密;
A加密整个数据的对称密钥不是协商生成的,而是用随机数当对称密码加密整个数据,然后A再用B的公钥加密。
x509标准格式,包含:公钥及其有效期限;证书的合法拥有者;证书该如何被使用;CA的信息;使用CA签名的校验码。
TLS/SSL使用的是x509(transportlayer secure,secure socket layer在使用的V2、V3)TLS的V1相当于SSL的V3,SSL(Netscape,在传输层及应用层间又添加一层SSL);
openGPG(PKI的另一实现)
www.openssl.org
工具openssl,SSL的开源实现,三部分组成:libcrypto.so、libssl.so(TLS/SSL的实现,基于会话实现了身份验证、数据机密性、会话完整性的库)、openssl(多用途命令行工具,单向加密、对称加密、公钥加密,实现私有证书颁发机构)
#rpm -ql openssl
/etc/pki/tls/openssl.cnf(私有CA)
#openssl version
#openssl ?(子命令实现不同的功能,enc,speed,rsa|dsa,rsautl,rand(伪随机数生成工具))
#openssl speed [DES3](算法评估)
#openssl enc
#whatis enc
#man enc
#openssl enc -des3 -e -salt -a -in inittab -out inittab.des3(-des3指定3des算法,-e加密encrypt不写默认就是加密,-salt(usea salt in the key derivation routines),-a(base64编码),-in输入文件,-out输出文件)
#openssl enc -des3 -d -salt -a -in inittab.des3 -out inittab(-d,dencrypt)
#md5sum inittab(提取特征码,默认128位)
#sha1sum inittab(提取特征码,默认160位)
#openssl dgst -sha1|md5 FILE(提取特征码)
#openssl passwd -1(直接回车,输入要生成加密字符串的密码)
#openssl passwd -1 -salt asdfghj chai(生成加密字符串,密码为chai)
/etc/pki/tls/certs(此目录下可快速生成测试用证书,#vim Makefile,如#make httpd.pem)
openssl实现私有CA:1、先生成一对密钥(genrsa,generate anrsa private key;gendsa注意文件权限是600);2、生成自签署证书;3、其它主机生成自身私钥并发起证书请求;4、CA服务器签署请求
1、#(umask 077;openssl genrsa -out /PATH/TO/KEY_FILENAME NUMBITS)(生成私钥模板,注意权限要为600)
#openssl rsa -in /PATH/TO/KEY_FILENAME -pubout(从私钥中提取公钥)
2、#openssl req -new -x509 -key /PATH/TO/KEY_FILENAME -out FILE [-days 365](生成自签署证书,-x509仅在生成自签证书时用)
3、#openssl req -new -key /PATH/TO/KEY_FILENAME -out FILE(其它服务器向CA服务器发起证书签署请求)
4、#openssl ca -in FILE -out FILE -days NUMBER
例:
#vim /etc/pki/tls/openssl.cnf(可修改路径及默认数据,如dir = /etc/pki/CA)
#cd /etc/pki/CA
#(umask 077;openssl genrsa -out private/cakey.pem 2048)
#ll private/
#openssl req -new -x509 -key private/cakey.pem -out cacert.pem
#mkdir certs newcerts crl
#touch index.txt
#touch serial
#echo 01 > serial
#cd /etc/httpd/ssl
#(umask 077;openssl genrsa -out httpd.key 1024)
#cat httpd.key
#openssl req -new -key httpd.key -out httpd.csr(certificatesignature request)
#openssl ca -in httpd.csr -out httpd.crt -days 365
#cat /etc/pki/CA/index.txt(若签署成功此文件会有一条记录)
#cat /etc/pki/CA/serial(若签署成功会变为02)
dropbear嵌入式系统专用的ssh(secureshell,tcp/22port)服务器和客户端工具:通信过程及认证过程都是加密的,且能实现主机认证
主机密钥,非对称加密,密钥交换,secret key(server-side),publickey(client-side)
认证过程:基于口令认证;基于密钥认证
dropbear默认使用nsswitch实现名称解析
#dropbear(server-side工具)
#dbclient(client-side工具)
#dropbearkey(密钥生成工具,server-side工具)
在小系统中使用ssh
#cp -d /lib/libnss_files* /mnt/sysroot/lib/
#cp -d /usr/lib/libnss_files* /mnt/sysroot/usr/lib/
#cp -d /usr/lib/libnss3.so /mnt/sysroot/usr/lib/
#vim /mnt/sysroot/etc/shells
/bin/sh
/bin/bash
/bin/ash
/bin/hush
#tty
/dev/pts/3
#vim /etc/fstab
devpts /dev/pts devpts mode=620 0 0
#ls /etc/dropbear/(主机密钥默认位置)
dropbear_rsa_host_key(RSA,长度可变,只要是8的整数倍,默认为1024)
dropbear_dss_host_key(DSS,长度固定,默认1024)
#dropbearkey -t rsa -f /path/to/key_file [-s SIZE]
#dropbearkey -t rsa -f /mnt/sysroot/etc/dropbear_rsa_host_key -s 2048
#dropbearkey -t dss -f /mnt/sysroot/etc/dropbear_dss_host_key
#/usr/local/sbin/dropbear -E -F(在小系统中执行,-E在前台运行)
以上是学习《马哥网络视频》做的笔记。
一、网络配置
1、#hostname (主机名查看
#hostname FQDN (临时修改主机名
#vi /etc/sysconfig/network
NETWORKING=YES (使用IPV4的主机名配置
HOSTNAME=FQDN (更改主机名,重启生效
2、#ifconfig (查看IP地址
#ifconfig 网络接口 ip地址 netmask 子网掩码(临时修改IP
#ifconfig 网络接口:虚拟接口号 ip地址 netmask 子网掩码(临时修改虚拟接口IP
#vi /etc/sysconfig/network-scripts/ifcft-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static/dhcp
IPADDR=IP地址
NETMASK=子网掩码
TYPE=Ethernet
NM_CONTROLER=yes/no (#serviceNetworkManager stop,添加虚拟接口有问题时关闭此服务)
#service network restart (修改配置文件后,需重启服务或系统使其生效
#ifdown eth0
#ifup eth0
3、#route -n (查看网关、路由信息
#route add default gw ip地址 (临时修改默认网关
#route add -net 目标网段/子网掩码 gw ip地址 (临时添加网段的默认路由
#vi /etc/sysconfig/network-scripts/ifcfg-eth0
GATEWAY=ip地址 (添加网关,重启服务即生效
4、#vi /etc/sysconfig/network-scripts/ifcfg-eth0
添加: DNS1=
DNS2= (配置DNS重启服务即生效
#vi /etc/resolv.conf
添加:nameserver DNS服务器IP
#nslookup 域名 (只可解析DNS的相关记录,对/etc/hosts不生效
5、#vi /etc/hosts
添加: IP地址 域名 (本地解析,添加后即时生效,不需重启
注:hosts文件和DNS服务器比较:默认系统首先从hosts文件中查找解析记录;hosts文件只对当前的主机有效;hosts文件可减少DNS查询过程,从而加快访问速度。
6、#netstat -anpt|-anpu
-a 显示所有端口信息
-n 数字显示,如:0.0.0.0
-p 显示PID
-t 显示有关tcp端口相关信息
-u 显示有关udp端口相关信息
7、#traceroute (跟踪路由,测试到目标主机经过和多少网络设备
8、#ping -c 3 -i 0.2 -W 3 ip地址 (连通性测试
-c (指定次数
-i (指定ping的间隔时间,单位秒
-W (指定等待时间
9、#arp -a|-d|-s (地址解析协议,将ip地址解析成MAC地址
-a (查看所有
-dip地址 (删除某条arp记录
-sip地址 MAC地址 (绑定IP地址
10、#nmap -sT 网段/子网掩码 (网络端口扫描
二、远程管理:
1、服务名称:ssh;端口号:22;
服务器端配置文件:/etc/ssh/sshd_config
客户端配置文件:/etc/ssh/ssh_config (客户端默认即可,不需更改
2、常见的配置项:
Port (端口号
Listenaddress (只监听来自某个IP的SSH联机,如不设置则默认所有接口均接受SSH联机
PermitRootLogin (是否允许root远程登录
PermitEmptyPasswords (是否允许空密码登录
MaxAuthTries (最大登录次数
LoginGraceTime (登录冻结时间
PasswordAuthentication (用户密码的认证方式,核对用户名密码是否匹配
PubkeyAuthentication (密钥对的认证方式,核对客户的私钥服务器的公钥是否匹配
AllowUser (允许个别拒绝所有
DenyUser (拒绝个别允许所有
3、功能模块:
#ssh -p 端口 服务器用户名@服务器地址 (远程连接
#scp -P 端口 本地路径 服务器用户名@服务器地址:/服务器有效路径 (远程上传
#scp -P 端口 服务器用户名@服务器地址:/文件存放路径 本地路径 (远程下载
#sftp -oport=端口 服务器用户名@服务器地址
sftp>put 文件名 (上传
sftp>get 文件名 (下载
4、密钥对验证:(注:客户端用户client,服务端用户server)
$ssh-keygen -t rsa (客户端client生成密钥对
$scp /home/client/.ssh/id_rsa.pub server@192.168.216.223:/tmp/ (客户端将公钥文件上传至服务器
#mkdir /home/server/.ssh (服务端用root创建.ssh目录
#cat /tmp/id_rsa.pub >> /home/server/.ssh/authorized_keys (服务端用root将文件导入至.ssh目录下的文件authorized_keys
#vi /etc/ssh/sshd_config (开启服务端的密钥对验证,关闭密码验证
PasswordAutentication no
PubkeyAuthentication yes
AuthorizedkeysFile .ssh/Authorized_keys
#service sshd restart
$ssh server@192.168.216.223 (客户端试登录,如没有提示输用户名密码则验证成功
7、TcapWrappers
配置文件:/etc/hosts.allow、/etc/hosts.deny
策略格式:服务列表:客户机地址列表
策略写法:服务列表和客户机地址列表若有多个则用逗号分隔;网段表示方法:192.168.1.或192.168.1.0/255.255.255.0;域名表示方法:.baidu.com或*.baidu.com
应用规则:没有配置时,默认全部允许访问;修改即时生效无需重启;先查看hosts.allow再查看hosts.deny,匹配即停止;配置拒绝个别允许所有时,hosts.allow文件不用添加任何内容。
注:本文由互联网收集整理(51CTO、360DOC、chinaunix、百度百科、兄弟连免费视频等)。
转载于:https://blog.51cto.com/jowin/1654826