查看Linux服务器硬盘是固态硬盘(SSD)还是机械硬盘(HDD)

方法一,cat /sys/block/{fs_name}/queue/rotational

Linux 可以自动判定硬盘是否是 SSD,从 2.6.29 的内核版本之后,可以通过如下命令查看硬盘是不是 ssd:

cat /sys/block/{fs_name}/queue/rotational

其中,{fs_name} 是你的硬盘设备名称,例如 vda、vdb、sda 等等。

若上述命令返回 1 表示机械硬盘(hard disk),若返回 0,则表示固态硬盘(ssd)。

需要注意的是,如果设备是例如 RAID 这样的逻辑设备,上述命令可能不可用。

示例如下:

[[email protected] ~]$ cat /sys/block/vdb/queue/rotational
1
[[email protected] ~]$ grep ^ /sys/block/*/queue/rotational
/sys/block/vda/queue/rotational:1
/sys/block/vdb/queue/rotational:1

方法二,利用 lsblk 命令

使用 lsblk 命令进行判断,该命令属于 util-linux(一个 Linux 标准软件包)的一部分,参数 -d 表示显示设备名称,参数 -o 表示仅显示特定的列。

[[email protected] ~]$ lsblk -d -o name,rota
NAME ROTA
vda     1
vdb     1

其中 ROTA 表示 rotational device,1 代表是机械硬盘,0 则就是 ssd 了。

方法三,使用 fdisk 命令

使用 fdisk 命令,后面加 -l 选项表示查看磁盘详细信息,如果输出的详细信息中包含机械硬盘中有的 heads(磁头)、track(磁道)、cylinders(柱面)等概念,那表示是该磁盘是 HDD,否则很有可能是 SSD。

下面分别列出了 HDD 和 SSD 的示例:

Disk /dev/sda: 120.0 GB, 120034123776 bytes
255 heads, 63 sectors/track, 14593 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00074f7d
Disk /dev/nvme0n1: 238.5 GiB, 256060514304 bytes, 500118192 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos

方法四,使用第三方工具 smartctl

smartctl 是管理和监控存储硬件工具 smartmontools 的两个程序工具之一,另一个是 smartd 程序工具,可以通过如下命令查看磁盘信息:

smartctl -a /dev/{fs_name}

示例如下:

[[email protected] ~]$ smartctl -a /dev/disk1s1

如果看到如下一行信息,表示是固态硬盘(SSD)。

......
Rotation Rate:    Solid State Device
......
继续阅读

图片反盗链(外链图片出现403的解决方法)

解放方法:

在网页html代码head中添加如下代码:

<meta name="referrer" content="no-referrer" />

原理:

  • http请求体的header中有一个referrer字段,用来表示发起http请求的源地址信息,这个referrer信息是可以省略但是不可修改的,就是说你只能设置是否带上这个referrer信息,不能定制referrer里面的值。
  • 服务器端在拿到这个referrer值后就可以进行相关的处理,比如图片资源,可以通过referrer值判断请求是否来自本站,若不是则返回403或者重定向返回其他信息,从而实现图片的防盗链。上面出现403就是因为,请求的是别人服务器上的资源,但把自己的referrer信息带过去了,被对方服务器拦截返回了403。
  • 在前端可以通过meta来设置referrer policy(来源策略),具体可以设置哪些值以及对应的结果参考这里。所以针对上面的403情况的解决方法,就是把referrer设置成no-referrer,这样发送请求不会带上referrer信息,对方服务器也就无法拦截了。

参考:

继续阅读

套CDN后防止Censys泄露源站真实IP

网站即使是套了cloudflare等cdn,通过访问https://ip地址,会暴露域名。

有些无良爬虫可通过HTTPS访问扫描全网IP,暴露证书、同时暴露你的域名。即使你套了CDN也逃不掉。像censys.io和shodan就是提供这种服务的。

示范一下扫描IP命令:

curl -v -k https://35.186.1.1

curl -v -k https://35.186.1.1
* Rebuilt URL to: https://35.186.1.1/
*   Trying 35.186.1.1...
* TCP_NODELAY set
* Connected to 35.186.1.1 (35.186.1.1) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/certs/ca-certificates.crt
  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Client hello (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server accepted to use http/1.1
* Server certificate:
*  subject: CN=normal_domain.tld
*  start date: Nov 15 05:41:39 2019 GMT
*  expire date: Nov 14 05:41:39 2020 GMT
*  issuer: CN=normal_domain.tld
*  SSL certificate verify result: unable to get local issuer certificate (20), continuing anyway.
> GET / HTTP/1.1
> Host: 35.186.1.1
> User-Agent: curl/7.58.0
> Accept: */*
> 
* Empty reply from server
* Connection #0 to host 35.186.1.1 left intact
curl: (52) Empty reply from server

可以看见,证书和域名都暴露了。

解放方法

1、如果使用的宝塔面板

新添加一个站点,以当前服务器ip为域名,自签IP证书(本文末尾会提供空白的自签证书,任何域名都可使用),打开 【站点设置->配置文件】,在如图位置加上return 444;

最后将该站点,设置为“默认站点”即可。

2、Nginx配置

Nginx 版本高于等于 1.19.4,才可以使用 ssl_reject_handshake 特性来防止 SNI 信息泄露。如果 Nginx 版本太低,可以看看姥爷的这篇文章自编译 Nginx

下面就来讲讲 ssl_reject_handshake 怎么用。只要新添加个443端口默认块就可以了。

#新添加的443端口块,如果使用了错误的 Hostname,SSL 握手会被拒绝
server {
    listen 443 ssl default_server;
    ssl_reject_handshake on;
}
#常规的443端口,包含正确的域名和证书。对于携带正确 Hostname 的请求,服务器会继续做后续处理
server {
    listen              443 ssl;
    server_name         example.com;
    ssl_certificate     example.com.crt;
    ssl_certificate_key example.com.key;
}

重启nginx即可。

3、CDN IP加白名单

给CDN IP添加到白名单,只有CDN IP才可以访问源站。如果套的是cloudflare,cloudflare IP为:https://www.cloudflare.com/ips/

4、屏蔽 censys.io和shodan 的IP段和UA

这种方法只能防君子不防小人,而且还有很多未知的类似服务的IP和UA。所以不推荐这种方法。

最后附上空白自签证书。

继续阅读

免费的网站uptime监控工具

记得我很早以前是用pingdom来监控网站uptime,现在收费了,很少用了,现在大家用的多主要有下面三款:

  1. UptimeRobot
    网站:https://uptimerobot.com/
    应该是用户量最多的uptime监控了吧,以前免费版还可以绑定自定义域名status page,现在不行了,不过也足够用了。
    免费版监控额度:
    Uptime Monitoring 50个
    每5分钟监控一次
  2. HetrixTools
    网站:https://hetrixtools.com/
    功能强大,多种通知方式。
    免费版额度:
    Uptime Monitoring 15个
    Blacklist Monitoring 32个
    最低1分钟监控一次
  3. Uptime Kuma
    地址:https://github.com/louislam/uptime-kuma
    免费开源。
  4. Zabbix
    网站:https://www.zabbix.com/
    免费开源,功能强大,专业!
  5. Nagios
    同样免费开源,不过部署相对较复杂。

找出服务器硬盘空间被大量占用的真凶

有一台服务器,今天登录上去一看,发现硬盘空间突然被大量占用了。之前只用了不到8G,今天发现陡增到38G,足足多了30G。

先用以下命令,依次查看硬盘占用前5的文件夹:

du -hm / --max-depth=1 | sort -nr | head -5

du -hm /xxxdir --max-depth=1 | sort -nr | head -5

最后发现是/www/server/data目录下,有很多mysql-bin-000000 数字文件,每个文件大小1G,合在一起占用了产不多30G空间。

在MySQL数据库中,mysql-bin.000001、mysql- bin.000002等文件是数据库的操作日志,例如UPDATE一个表,或者DELETE一些数据,即使该语句没有匹配的数据,这个命令也会存储到日志文件中,还包括每个语句执行的时间,也会记录进去的。

这样做的目的是为了数据库恢复,或者主从服务器之间同步数据。

我不需要,所以直接注释掉数据库配置文件my.cnf中以下一行即可:

# log-bin=mysql-bin

删除所有 mysql-bin.00000 文件,重启mysql。

updtae:最好不要直接删除mysql-bin.文件,找到英文的解释。

简单来说是:不要直接删除,用mysqld来删除,可以通过修改/etc/my.cnf来设置数据库日志保存时间。

Please do not just delete them in the OS.

You need to let mysqld do that for you. Here is how mysqld manages it:

The file mysql-bin.[index] keeps a list of all binary logs mysqld has generated and auto-rotated. The mechanisms for cleaning out the binlogs in conjunction with mysql-bin.[index] are:

PURGE BINARY LOGS TO 'binlogname';
PURGE BINARY LOGS BEFORE 'datetimestamp';

These will clear all binary logs before the binlog or timestamp you just specified.

For example, if you run

PURGE BINARY LOGS TO 'mysql-bin.000223';

this will erase all binary logs before mysql-bin.000223.

If you run

PURGE BINARY LOGS BEFORE DATE(NOW() - INTERVAL 3 DAY) + INTERVAL 0 SECOND;

this will erase all binary logs before midnight 3 days ago.

If you want to have binlog rotated away automatically and keep 3 days woth, simply set this:

mysql> SET GLOBAL expire_logs_days = 3;

then add this to /etc/my.cnf

[mysqld]
expire_logs_days=3

and mysqld will delete them logs for you

update: 早上起来,发现硬盘空间又多了4G,真头疼,继续找。。。

这次发现是/www/server/data/168itw.com目录下wp_wpr_rucss_resources.ibd和 wp_wpr_rucss_unused.ibd两个文件占用了几个G,而且 wp_wpr_rucss_unused.ibd还在一直增大。

Google看到这篇文章:

https://stackoverflow.com/questions/68347966/wp-wpr-rucss-resources-table-with-huge-size

原来是wordpress插件wp rocket惹的祸,不要勾选插件中Optimize CSS delivery选项,保存。

删除上述两个文件,删除数据库中的这两个table。搞定!

文章参考:https://blog.51cto.com/6226001001/1597205

感谢hostloc大佬提供查看命令帮助。

甲骨文(非ARM)dd出现Error, Not found interfaces config

甲骨文dd用的傻瓜式一键dd脚本:

或者也可以直接用:https://www.cxthhhhh.com/network-reinstall-system-modify

但是都出现了错误:Error, Not found interfaces config

网上找到的解决方案,运行如下两条命令:

mkdir /etc/network/interfaces.d
echo "# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug ens3
iface ens3 inet dhcp

" > /etc/network/interfaces

重装后SSH登录,用户名root,密码:cxthhhhh.com

别忘记修改root密码:

[email protected]:~# passwd
Enter new UNIX password:
继续阅读

宝塔反代+CDN后Nginx日志获取不到真实IP

将源站反代,同时套上了cloudflare后,发现源站Nginx网站日志,获取不到用户的真实IP,日志中记录到的都是反代服务器IP,或者是cloudflare的IP。

查看反代服务器Nginx日志,发现记录的也都是cloudflare的IP。

在源服务器和反代服务器Nginx配置http{ 段中,添加以下3行代码,问题顺利解决:

set_real_ip_from 0.0.0.0/0;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
  • set_real_ip_from:定义接受从哪个信任前代理处获得真实用户ip,可以定义多行,可定义为ip,ip段,支持ipv4和ipv6
  • real_ip_header:定义从接收到报文的哪个http头部去获取前代理传送的用户ip,默认为X-Real-IP
  • real_ip_recursive:递归搜索,默认为off

以下为引用:

继续阅读

傻瓜式一键dd多合一脚本

安装重装系统的前提组件:
Debian/Ubuntu:

apt-get install -y xz-utils openssl gawk file wget screen && screen -S os

RedHat/CentOS:

yum install -y xz openssl gawk file glibc-common wget screen && screen -S os

如果出现异常,请刷新Mirrors缓存或更换镜像源。
RedHat/CentOS:

yum makecache && yum update -y

Debian/Ubuntu:

apt update -y && apt dist-upgrade -y

使用:

wget --no-check-certificate -O AutoReinstall.sh https://git.io/betags && chmod a+x AutoReinstall.sh && bash AutoReinstall.sh

如为CN主机,可能出现报错或不能下载脚本的问题,可执行以下命令开始安装.

wget --no-check-certificate -O AutoReinstall.sh https://cdn.jsdelivr.net/gh/fcurrk/[email protected]/AutoReinstall.sh && chmod a+x AutoReinstall.sh && bash AutoReinstall.sh

25合一系统密码:
1、CentOS 7.7 (已关闭防火墙及SELinux,默认密码[email protected])
2、CentOS 7 (默认密码cxthhhhh.com)
3、CentOS 8 (默认密码cxthhhhh.com)
4、CentOS 6 (默认密码Minijer.com)
5、Debian 11 (默认密码Minijer.com)
6、Debian 10 (默认密码Minijer.com)
7、Debian 9 (默认密码Minijer.com)
8、Debian 8 (默认密码Minijer.com)
9、Ubuntu 20.04 (默认密码Minijer.com)
10、Ubuntu 18.04 (默认密码Minijer.com)
11、Ubuntu 16.04 (默认密码Minijer.com)
12、Windows Server 2019 (默认密码cxthhhhh.com)
13、Windows Server 2016 (默认密码cxthhhhh.com)
14、Windows Server 2012 (默认密码cxthhhhh.com)
15、Windows Server 2012 Lite (默认密码nat.ee)
16、Windows Server 2008 (默认密码cxthhhhh.com)
17、Windows Server 2008 Lite (默认密码nat.ee)
18、Windows Server 2003 (默认密码cxthhhhh.com)
19、Windows Server 2003 Lite (默认密码WinSrv2003x86-Chinese)
20、Windows 10 LTSC Lite (默认密码www.nat.ee)
21、Windows 7 x86 Lite (默认密码Windows7x86-Chinese)
22、Windows 7 Ent Lite (默认密码nat.ee)
23、Windows 7 Ent Lite (UEFI支持甲骨文)(默认密码nat.ee)
24、Windows Server 2008 Lite (UEFI支持甲骨文)(默认密码nat.ee)
25、Windows Server 2012 Lite (UEFI支持甲骨文)(默认密码nat.ee)
99、自定义镜像

记得装完修改密码,Linux:

sudo passwd root

或者直接用root运行:

passwd
继续阅读

腾讯轻量云更换apt镜像源

腾讯轻量云无忧,在dd或者安装宝塔的时候,都会提示没有unzip的错误,需要替换掉腾讯的apt镜像源。

vim /etc/apt/sources.list

自带的源如下:

deb http://mirrors.tencentyun.com/debian buster main contrib non-free
# deb-src http://mirrors.tencentyun.com/debian buster main contrib non-free
deb http://mirrors.tencentyun.com/debian buster-updates main contrib non-free
# deb-src http://mirrors.tencentyun.com/debian buster-updates main contrib non-free
deb http://mirrors.tencentyun.com/debian-security buster/updates main contrib non-free

# deb-src http://mirrors.tencentyun.com/debian-security buster/updates main contrib non-free
# deb http://mirrors.tencentyun.com/debian buster-backports main contrib non-free
# deb-src http://mirrors.tencentyun.com/debian buster-backports main contrib non-free
# deb http://mirrors.tencentyun.com/debian buster-proposed-updates main contrib non-free
# deb-src http://mirrors.tencentyun.com/debian buster-proposed-updates main contrib non-free

替换为tuna清华apt镜像源:

deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free
 
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free
 
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free

再执行下面命令更新apt源后重新安装unzip:

apt-get update
apt install unzip -y

腾讯云一键dd debian或者win,看之前的文章:

继续阅读