Debian 10系统上,安装并配置vsftpd服务,及进阶配置 2021-7-26

需求描述

Debian 10系统上,安装并配置vsftpd服务,这个属于一个比较基础的内容

# apt-get update   //更新
# apt-get install vsftpd  //安装vsftpd
# cd /etc  
# cp vsftpd.conf  bak.vsftpd.conf.20210726   //备份配置文件
# vi vsftpd.conf   //修改配置文件
* anonymous_enable=NO   // 禁止匿名FTP
* local_enable=YES   // 允许本地用户
* write_enable=YES   // 允许写入
* local_umask=022    // 权限掩码 

# vi /etc/ftpusers  //修改禁止访问FTP的本地用户清单
* 注释掉root

# systemctl restart vsftpd  //重启服务

使用root账号从其他机器ftp登录即可

比如在Win平台上,在资源地址栏里,输入ftp://xx.xx.xx.xx,输入用户名,输入密码,登录后,可轻松复制文件。

Win登录ftp服务器示例

备注1,一般情况下,不要使用root账号为直接登录FTP服务器的默认账号

也可以使用ftp的客户端软件,进行文件传输,可以保存密码,不用每次登录都输入密码

推荐使用winscp软件 官网下载 https://winscp.net/eng/download.php

winscp客户端安装

如果只是个人内网使用,那么如上的内容已经足够了,下面介绍进阶部分的内容。

呀呀呀呀呀呀呀呀呀呀呀 – 咕咕咕咕咕咕咕咕咕咕咕
– – – 内容分割线 – – –
呀呀呀呀呀呀呀呀呀呀呀 – 咕咕咕咕咕咕咕咕咕咕咕

进阶章节1,配置一个单独可用的ftp账号,禁止root账号登录ftp,划分独立的磁盘空间给FTP使用

# mkdir -p /var/www/html    //创建一个ftp账号的目录
# useradd -U -s '/bin/sh' -d '/var/www/html' aftpuser    //创建一个FTP账号
# chown aftpuser:aftpuser /var/www/html    //权限
# passwd aftpuser  //修改密码

从宿主机划分100G磁盘到ftp的服务器, 将该磁盘格式化后,挂载到/var/www/html的FTP目录

增加100G空间到服务器VPS
完成增加100G的scsi 1磁盘到VPS
添加磁盘完成后,系统内可以看到对应大小的磁盘空间

使用LVM方式对新增加的分区进行格式化,参考文章链接 https://dasmz.com/?p=101

Refer : 动态分区LVM方式挂载两块新增的硬盘到系统 2021-05-18

配置增加的100G磁盘为LVM动态方式挂载
创建文件系统,并挂载
配置启动时候挂载
root@PVE-Debian-FTP-SAMBA:/var/www/html# cat /etc/ftpusers 
root
// 确保root在/etc/ftpusers 即可禁止root登录ftp server

这样,我们就有了一个100G空间的FTP Server服务器,且可以支持扩容

Donate
云乞讨

基于Mozilla的send,搭建简单的文件资料分享平台,从此跟用微信发文件的行为告别 2021-7-21

需求描述

日常,需要发送文件,图片,压缩包,链接等内容给朋友,大家常用的肯定是QQ/Wechat,这其实如同吉利公司老板说的,其实很不具备隐私,而且,想用微信发送超过100MB的文件,就直接被拒绝,无奈。

那么有什么简单可靠的分享资料的方式呢,哈哈,Mozilla的send的项目正适合你。

需要的资源

  1. 云服务器 x1
  2. Node.js环境 x1
  3. Git可访问 x1

安装部署步骤如下

Mozilla的send是基于Node.js 12.x开发的,故而需要先安装Node.js

Node.js官方网站 https://nodejs.org/

安装Node.js相对简单,直接参考Node.js官方的Github页面,里面包含多平台的简单脚本安装方式,进行对应系统版本的安装 https://github.com/nodesource/distributions

# 我这里是Debian 9 系统,则对应安装Node.js 12.X的步骤为
root@debian:~# apt-get update
root@debian:~# apt-get install curl apt-transport-https ca-certificates gnupg2 software-properties-common git wget 
root@debian:~# curl -fsSL https://deb.nodesource.com/setup_12.x | bash -
root@debian:~# apt-get update
root@debian:~# apt-get install -y nodejs

root@debian:~# nodejs -v
v12.22.2
root@debian:~# 

在安装完成Node.js之后,部署Mozilla/send

项目地址https://github.com/mozilla/send

下载send的源包,https://github.com/mozilla/send/archive/refs/tags/v3.0.22.tar.gz

// 下载,解压,安装
root@debian:~# wget https://github.com/mozilla/send/archive/refs/tags/v3.0.22.tar.gz
root@debian:~# tar -zxvf v3.0.22.tar.gz
root@debian:~# cd /send-3.0.22
root@debian:~# npm install   // 需要比较久的时间
root@debian:~# npm audit fix   // 执行上一步,如果有失败,则运行该命令补充
// root@debian:~# npm run prod
root@debian:~# /usr/bin/node /usr/bin/npm run prod

困了,先睡觉,未完待续……

基于stairspeedtest-reborn的WEB页面方式,来进行代理检测 2021-7-21

需求描述
自己编写的编号P2FA项目的爬虫程序已经采集到三万多个V2ray代理了,循环检测,输出,使用的时候,需要检测一下代理的速度,手机客户端检测非常不便捷,这个时候,就可以使用到WEB页面的检测方式,来进行代理检测

采集的代理数量
采集的代理数量 2021-7-21

基于免费代理制作成的订阅,由于检测机制的不密集,常会出现,检测时候可用,实际想要用的时候,不可用,而且,手机上无法感知真实的服务器速度,这个时候,通过WEB方式检测线路,然后直接手机上使用即可。

本次,基于Github上的stairspeedtest-reborn项目,Linux环境,进行WEB部署。

本次部署到Debian 9 x64云主机上,下载对应到系统平台版本的 stairspeedtest-reborn-v0.7.1-release

# 下载
root@debian:~# wget https://github.com/tindy2013/stairspeedtest-reborn/releases/download/v0.7.1/stairspeedtest_reborn_linux64.tar.gz
# 解压
root@debian:~# tar -zxvf stairspeedtest_reborn_linux64.tar.gz
# 进入工作目录
root@debian:~# cd stairspeedtest
# 修改配置文件 pref.ini
修改test_file_urls项的内容为自定义的测速文件,一般3个不同地域的服务器,每个10MB左右的文件足够
# 修改启动项文件 webgui.sh 
修改默认端口到一个其他端口,一般不推荐用默认端口
# 启动
root@debian:~# nohup ./webgui.sh &

在上述的服务端启动后,在自己的本机的浏览器输入服务器的地址,即可访问

StairSpeedtes的页面

输入自己的订阅地址自定义组名,点击提交即可

执行完成后,页面自动刷新,输出一个表格,输出一个图片

完成测速的截图

可以看到,在自己修改了配置文件后,本次测速,只用了220MB的总流量,比较节约。免费节点的速度,也就如图,白嫖真快乐。

有了这样的神器,再也不用担心,手机上选择时候的困境了。

Dasmz的StairSpeedtest演示站点 http://125.3.8.244:1333/gui.html

备注1,一般不要使用别人提供的测速站点,会泄漏你自己的订阅地址

备注2,公网环境,诚挚建议把站点用HTTPS封装一下,保证数据安全

Donate
云乞讨

备份博客服务器的MySQL数据库 备份网站的资料 2021-7-13

需求描述
备份本博客网站的数据库,数据资料,备份频率1次/天,服务器源站位于美国,备份数据异地容灾,传输到中国一份,传输到日本服务器一份。
数据实现一主,两备份副本,即便主网站完全崩溃,可以实现,快速的数据恢复,网站重建。

博客网站的备份,分为两部分,数据库部分和网站文件部分。

备份脚本已上传Github,运行在源站服务器上

https://github.com/fdmove/BlockADS/blob/main/BackBlog.sh

预览

#!/bin/sh
# START
mkdir -p /root/sh /root/backup
v_date=`date '+%Y%m%d'`
DB_USER='root'
DB_PASS='DBPASS'
DB_NAME='DBNAME'
DB_HOST='127.0.0.1'

# 备份数据库
mysqldump -h ${DB_HOST} -u ${DB_USER} -p${DB_PASS} --databases ${DB_NAME} > /root/backup/Backup.myBlog.mysqldump.${v_date}.SQL

# 备份网站的文件
v_blog='dasmz.com'
cd /var/www/
tar -zcvf /root/backup/Backup.${v_blog}.${v_date}.tar.gz ${v_blog}

# 删除旧的备份
cd /root/backup
find . -name *.tar.gz -type f -ctime +90 -print | xargs rm 
find . -name *.SQL    -type f -ctime +90 -print | xargs rm

# END

备注1 依据服务器磁盘大小,选择保留的数据量

备注2 实际情况下,个人博客网站,一般一主一备就足够了,单体数据量全量和增量都比较小,不需要高密度备份

源站服务器,cron任务

# 备份数据库 和 网站的文件  20210713
10 0 * * * /root/sh/BackBlog.sh > /root/log/BackBlog.log

备份的文件在源站服务器生成后,可以用一些sync工具,定时同步到其他备份节点的磁盘上。

Donate
云乞讨

基于软路由的Dnsmasq屏蔽绝大部分的广告,给家里一个清净的网络环境 2021-7-12

需求描述,屏蔽电视广告,屏蔽手机广告,屏蔽网页广告,屏蔽视频前的广告

已将去除广告的Dnsmasq配置文件编辑完成,上传到Github

地址 https://raw.githubusercontent.com/fdmove/BlockADS/main/dnsmasq.conf

 # 测试修改后的Dnsmasq的配置文件语法
 root@Openwrt:~# dnsmasq --test
 dnsmasq: syntax check OK.

 # 重启Dnsmasq服务
 root@Openwrt:~# service dnsmasq restart
 udhcpc: started, v1.30.0
 udhcpc: sending discover
 udhcpc: no lease, failing
 root@Openwrt:~# 
DnsmasqRestart
DnsmasqRestart

参考链接 https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/reject.txt

Donate
云乞讨

Android 安卓手机虚拟定位 教程 2021-07-07

需求描述

在安卓Android型号的手机上,进行虚拟定位,给APP模拟其他位置的信息

本教程,仅供测试学习,请勿用于任何跟您当地法律冲突的行为,请完成功能验证后,尽快购买VMOS的正版授权,或者使用其他同类软件。

操作步骤1

安卓手机,下载VMOS的此版本VMOS APK

主用的下载地址CN http://121.4.236.89:18456/VMOS_Pro-v1.2.1.apk 已失效

备用的下载地址SG http://103.159.64.90:16801/VMOS_Pro_v1.2.1.apk 有效地址,需梯子

sha1sum 3cdccbf26e6eb8a45e7af3002c7f44e93515c0b1

使用手机自带的浏览器打开这个地址,即可以自动下载,下载安装即可。

如果日常使用中,提示要升级软件,暂不要升级!

操作步骤2

打开VMOS软件,点击首页的 +符号,添加虚拟机,选择“安卓7.1 精简版 64位”,进行下载

安卓7.1  精简版64位
安卓7.1 精简版64位

操作步骤3 “安卓7.1 精简版的设置”

3.1 开启 “超级用户” 的开关,非常重要

安卓7.1  精简版64位 ROOT权限
安卓7.1 精简版64位 ROOT权限

3.2 虚拟机信息修改,非常重要

把虚拟机信息里面的,厂家,型号,WIFI名称,WIFI BSSID,WIFI MAC,

序列号,AndroidID,SIM状态,SIM序列号,IMEI,IMSI,要么随机,要么尽量贴近真实的手机的信息,保证不会有侧漏。

vm虚拟机的信息
vm虚拟机的信息

截图只是一个填写安卓设备信息的范例,内容都是虚拟的信息。 表示的概念为,一定情况下,APP能够读取到这些数据,用以检验设备是否真实或其他用途。 实际填写时候,一般要求不高的场景,可以随意填写。 部分场景,需要参考物理设备的信息填写

操作步骤4 “进入安卓7.1 精简版虚拟机,安装定位等软件”

该款虚拟机里面,有一个常用工具的配套工具包,进入,搜索并安装如下的软件

4.1 Fake Location (作用是,虚拟定位)

4.2 权限狗 (作用是,控制APP的权限,防止有权限层面的侧漏)

4.3 常规APP (需要给其虚拟定位的常规APP)

操作步骤5 “配置权限”

5.1 进入Fake Location,进行位置模拟,如果严格需要基站/WIFI验证的,页面上有相应的选项。

模拟位置时,提示需要Root超级权限,这里点击总是允许。

特殊备注: 一般的软件,免费用这个定位就可以了,如果是针对国内某钉软件,它会使用读取软件列表包名字的方式,检测系统内,是否安装了定位的软件,图省事的孩子们,可以注册Fack Location成为会员,然后,点击左侧的反检测选项,即可生成一个随机名字的Fake Location的APK安装包,重新安装随机名字的APK安装包,删掉旧的,即可完成防某钉的包名字探测。不得不感叹,某钉软件,这个做法真的很聪明。

5.2 进入权限狗,对常规APP,进行权限限制,尽量保持常规APP的权限最小化,且不得给予其Root超级权限。

5.3 打开常规APP,进行位置验证,看刚刚的虚拟定位是否生效了。

超级用户 Fake Location 权限狗
超级用户 Fake Location 权限狗

备注1 VMOS是一款收费软件,有经济条件的,务必购买正版。

备注2 鉴于此root权限或者xposed框架,需要一定的技术基础,有一定的风险,普通人请酌情使用。

Donate
云乞讨

项目编号~/project/PAF5 之 PostgreSQL 13.3数据库设计 核心数据表设计 2021-6-22

项目编号~/project/PAF5 之 数据库设计
项目数据库 PostgreSQL 13.3
核心数据表设计

CREATE TABLE mdata (
idx bigserial not null primary key,         // 自增的大范围整数 大序列数字 1 到 9223372036854775807
server_ip inet not null,                    // 重要★ 服务器IP地址 网络地址inet类型  xx.xx.xx.xx/32 如果其他类型的数据库 该字段修改为text
server_port integer not null,               // 重要★ 服务器端口 数字 -2147483648 到 +2147483647
vtype varchar(6) not null,                  // 重要★ 限制长度为6个字符 字符串 枚举 http https socks4 socks5 
auth varchar(6) not null default 'NoAuth',  // 是否需要认证 长度为6个字符 枚举 NoAuth Auth 暂时不考虑需要认证的数据
auth_name text,                             // 认证需要的用户名 可为空 类型文本
auth_pass text,                             // 认证需要的密码 可为空 类型文本
status varchar(1) not null default 'N',     // 重要★ 限制长度为1个字符 表示可用状态 字符串 枚举 Y N 默认值为N 
cnt integer not null default 0,             // 重要★ 检测总次数 数字 1 到 +2147483647
y_cnt integer not null default 0,           // 重要★ 检测成功次数 数字 1 到 +2147483647
n_cnt integer not null default 0,           // 重要★ 检测失败次数 数字 1 到 +2147483647
constncnt integer not null default 0,       // 重要★ 连续检测到失败的次数 如果当次检测status是Y 该值置0 如果是N 该值减1
rsp_time real default 0.0,                  // 响应时间 单位ms 默认值 0.0
download_speed real default 0.0,            // 下载速度 单位kB/s 参考值 86.32KB/s 默认值 0.0
upload_speed real default 0.0,              // 下载速度 单位kB/s 默认值 0.0
location varchar(6),                        // 重要★ 国家地区 参考ISO-3166-1 两位字母代码  https://zh.wikipedia.org/wiki/%E5%9C%8B%E5%AE%B6%E5%9C%B0%E5%8D%80%E4%BB%A3%E7%A2%BC
location_more text,                         // 国家地区 更多信息的说明 比如标记城市的信息
isp text,                                   // IP所属的运营商信息
anonymity varchar(1) default 'N',           // 是否为高匿名 字符串 枚举 Y N  默认值为N 
insert_time timestamp without time zone default (now()),   // 重要★ 记录数据记录入库的时间 格式样式 YYYY-MM-DD HH-MI-SS
update_time text,                           // 重要★ 记录数据记录更新的时间 格式样式 YYYY-MM-DD HH-MI-SS
remark text                                 // 其他必要的备注信息
);

增加表的归属,数据唯一索引等关键权限步骤

CREATE UNIQUE INDEX idx_mdata_main on mdata (server_ip, server_port, vtype);   // 创建唯一的关键字段索引
ALTER TABLE public.mdata OWNER TO apguser;  // 安全需要 更改数据到普通用户

实际落地的操作

postgres@pve-debian-server-02:~$ psql -d apgdb
psql (13.3 (Debian 13.3-1.pgdg100+1))
apgdb=# \d
Did not find any relations.
apgdb=# CREATE TABLE mdata (
apgdb(# idx bigserial not null primary key,
apgdb(# server_ip inet not null,
apgdb(# server_port integer not null,
apgdb(# vtype varchar(6) not null,
apgdb(# auth varchar(6) not null default 'NoAuth',
apgdb(# auth_name text,
apgdb(# auth_pass text,
apgdb(# status varchar(1) not null default 'N',
apgdb(# cnt integer not null default 0,
apgdb(# y_cnt integer not null default 0,
apgdb(# n_cnt integer not null default 0,
apgdb(# constncnt integer not null default 0,
apgdb(# rsp_time real default 0.0,
apgdb(# download_speed real default 0.0,
apgdb(# upload_speed real default 0.0,
apgdb(# location varchar(6),
apgdb(# location_more text,
apgdb(# isp text,
apgdb(# anonymity varchar(1) default 'N',
apgdb(# insert_time timestamp without time zone default (now()),
apgdb(# update_time text,
apgdb(# remark text
apgdb(# );
CREATE TABLE
apgdb=# \d
 public | mdata         | table    | postgres
 public | mdata_idx_seq | sequence | postgres

apgdb=# CREATE UNIQUE INDEX idx_mdata_main on mdata (server_ip, server_port, vtype);
CREATE INDEX
apgdb=# ALTER TABLE public.mdata OWNER TO apguser;
ALTER TABLE
apgdb=# 
apgdb=# 
apgdb=# \d
 public | mdata         | table    | apguser
 public | mdata_idx_seq | sequence | apguser

apgdb=# 
apgdb=# insert into mdata(server_ip, server_port, vtype) values('37.49.127.234',1080,'socks5');
INSERT 0 1
apgdb=# select server_ip, server_port, vtype, status, cnt, y_cnt, n_cnt, constncnt, location, insert_time, update_time from mdata limit 3;
   server_ip   | server_port | vtype  | status | cnt | y_cnt | n_cnt | constncnt | location |        insert_time         | update_time 
---------------+-------------+--------+--------+-----+-------+-------+-----------+----------+----------------------------+-------------
 172.21.22.3   |        8080 | socks5 | N      |   0 |     0 |     0 |         0 |          | 2021-06-22 12:12:59.439876 | 
 175.1.22.3    |        8080 | http   | N      |   0 |     0 |     0 |         0 |          | 2021-06-22 12:12:59.447857 | 
 24.249.199.12 |        4145 | socks5 | N      |   0 |     0 |     0 |         0 |          | 2021-06-22 12:12:59.451406 | 
(3 rows)

apgdb=# 

注释1 如果需要学习PostgreSQL的安装,则请参考”在Debian10系统上,安装和使用PostgreSQL数据库 2021-06-15 https://dasmz.com/?p=168

Donate
云乞讨

Ubuntu和Debian系统上编译安装proxychains4,使用proxychains4进行多IP跳转 2021-6-21

需求说明
SOCKS5-SG,服务器位于新加坡SG,承载SOCKS5/NoAuth业务,面向亚太地区
SOCKS5-CA,服务器位于加拿大CA,承载SOCKS5/NoAuth业务,面向美欧地区
本地系统上使用proxychains4 进行多IP跳转

编译安装proxychains4
root@local:~# apt-get update
root@local:~# apt-get install gcc make git
root@local:~# mkdir $HOME/src
root@local:~# cd $HOME/src
root@local:~# git clone https://github.com/rofl0r/proxychains-ng.git
root@local:~# cd proxychains-ng
root@local:~# ./configure --prefix=/usr --sysconfdir=/etc
root@local:~# make
root@local:~# make install
root@local:~# make install-config
root@local:~# /etc/proxychains.conf #默认的配置文件

加拿大和新加坡两台服务器的SOCKS5配置

配置加拿大服务器
root@server:~# wget -N --no-check-certificate -O /root/gost-linux-amd64-2.11.1 https://github.com/ginuerzh/gost/releases/download/v2.11.1/gost-linux-amd64-2.11.1.gz 
root@server:~# apt-get update
root@server:~# apt-get -y install screen
root@server:~# chmod +x /root/gost-linux-amd64-2.11.1
root@server:~# screen -dmS okSocks5 /root/gost-linux-amd64-2.11.1 -L=socks5://:6402

配置新加坡服务器
root@server:~# wget -N --no-check-certificate -O /root/gost-linux-amd64-2.11.1 https://github.com/ginuerzh/gost/releases/download/v2.11.1/gost-linux-amd64-2.11.1.gz
root@server:~# apt-get update
root@server:~# apt-get -y install screen
root@server:~# chmod +x /root/gost-linux-amd64-2.11.1
root@server:~# screen -dmS okSocks5 /root/gost-linux-amd64-2.11.1 -L=socks5://:16802


修改本地的配置文件 /etc/proxychains.conf 
socks5 127.0.0.1 10808
socks5 192.99.6.25 6402
socks5 103.159.8.173 16802

验证是否OK
proxychains4 curl https://ipv4.icanhazip.com/
Donate
云乞讨

使用Nginx 1.18.0对HTTP业务进行负载均衡的配置 2021-6-16

需求说明
WEB-SG,服务器位于新加坡SG,承载HTTP/WEB业务,面向亚太地区
WEB-CA,服务器位于加拿大CA,承载HTTP/WEB业务,面向美欧地区
两个地区的WEB服务器,提供相同的功能和数据
本次使用的Nginx版本为1.18.0,使用面向大中华区域路由更好的阿里云/腾讯云服务器,对HTTP业务进行负载均衡的配置

root@server:~# nginx -v
nginx version: nginx/1.18.0
root@server:~# 

1. 写入如下的配置到 /etc/nginx/conf.d/webHTTP.conf

upstream backends {
    server 103.159.3.51:16801;
    server 192.99.101.19:6401;
}

server {
    listen       8080;
    server_name  localhost;

    location / {
        proxy_pass http://backends;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

2. 完成配置后,重启Nginx服务,从本机进行验证测试

fd@PC:~$ curl http://121.4.1.101:8080/
No.CA
fd@PC:~$ curl http://121.4.1.101:8080/
No.SG
fd@PC:~$ 
Donate
云乞讨

配置PostgreSQL 13.3的远程连接 2021-6-15

需求描述
PostgreSQL 13.3默认是监听在本地的5432端口的,现在修改其监听到同VLAN其他机器可访问

1. 修改 配置文件 /etc/postgresql/13/main/postgresql.conf
修改

listen_addresses = '0.0.0.0'		# what IP address(es) to listen on;

2. 修改 认证文件 /etc/postgresql/13/main/pg_hba.conf
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# host 需要访问的数据库名字 数据库对应的用户名 对应的网段 md5

host    pdatabase             puser           10.11.11.0/24           md5

# 意味着在10.11.11.0/24这个网段可以通过用户puser访问数据库pdatabase

3. 重启服务,并从同网段其他机器进行连接验证

root@server:~# systemctl restart postgresql 
root@server:~# psql -d pdatabase -h 10.11.11.240 -p 5432 -U puser -W 
Donate
云乞讨