禁止IP直接访问网站(含docker)

[MD]

引言

为了防范真实的IP地址暴露带来的危险,我们通常有以下做法:

  • WAF
  • 本机防火墙
  • CDN

万一IP真的暴露了呢?

使用 Firewalld 保护 Docker 端口

在docker容器中,我们采用反向代理,达到在浏览器中输入网址可以正常访问,输入IP地址(或IP+端口号)无法访问的目的。

1. 准备

清除所有 iptables 配置并重启 Docker。否则在启动 Nginx Docker 时可能会看到 failed: iptables: No chain/target/match by that name 错误

iptables -t filter -F
iptables -t filter -X
iptables -t nat -F
iptables -t nat -X
systemctl restart docker

设置 SELINUX 权限

setenforce Permissive

永久设置 SELINUX 权限

修改 /etc/selinux/config 文件,设置 SELINUX=permissive,使其永久生效(需要重启)

2. 配置 Firewalld

停止 Docker

systemctl stop docker

在 firewalld 中重建 DOCKER-USER iptables chain(请忽略任何警告)

firewall-cmd --permanent --direct --remove-chain ipv4 filter DOCKER-USER
firewall-cmd --permanent --direct --remove-rules ipv4 filter DOCKER-USER
firewall-cmd --permanent --direct --add-chain ipv4 filter DOCKER-USER

添加 iptables 规则到 DOCKER-USER chain

firewall-cmd --permanent --direct --add-rule ipv4 filter DOCKER-USER 1 \
  -m conntrack \
  --ctstate RELATED,ESTABLISHED -j ACCEPT \
  -m comment --comment 'Allow containers to connect to the outside world'

firewall-cmd --permanent --direct --add-rule ipv4 filter DOCKER-USER 1 \
  -j RETURN \
  -s 172.17.0.0/16 \
  -m comment --comment 'allow internal docker communication'

提示: 172.17.0.0/16 是 Docker 的默认子网地址, 也可以改为你实际的 Docker 子网地址

为机器 192.168.51.245(公网IP) 配置允许访问Docker的端口(本例为nginx的80、443),优先级为1(您可以在以后添加更多优先级为 0 的规则。请参见下文)

firewall-cmd --permanent --direct --add-rule ipv4 filter DOCKER-USER 1 \
  -o docker0 \
  -p tcp -m multiport \
  --dports 80,443 -s 192.168.51.245/32 -j ACCEPT \
  -m comment \
  --comment 'Allow IP 192.168.51.245 to access http and https docker ports'

提示:这里的端口是指的 Docker 的内部端口 80,443,而不是映射的外部端口 8080,8443

阻止所有其他IP。 此规则的优先级最低,您可以稍后在此规则之前添加规则

firewall-cmd --permanent --direct --add-rule ipv4 filter DOCKER-USER 10 \
  -j REJECT -m comment --comment 'reject all other traffic to DOCKER-USER'

激活规则

firewall-cmd --reload

启动 Docker

systemctl start docker

配置Nginx

http{}中加入

server {
    listen 80 default;
    listen 443 default_server;    #使用https/443时启用
    ssl_certificate    /www/cert/certificate.pem; #任意证书位置
    ssl_certificate_key    /www/cert/privatekey.pem; #任意的私钥位置
    server_name _;
    return 444;
}

原文链接:
https://zhuanlan.zhihu.com/p/371683318

零基础微软AI文本转语音

[MD] © Sunplace,2024

引言

  • 无需搭建服务器
  • 无需代码
  • 无需成本

1. 安装Microsoft Egde浏览器

https://azure.microsoft.com/zh-cn/free

Microsoft Azure规定,这是使用语音创作的先决条件之一。

先用Microsoft Edge的大声朗读功能读一遍文章,确定多音字、英文缩写等的发音是否正确。多音字可以用同音字替换,英文也可以用中文谐音替换。得到清洗后的发音文稿。

2. 创建Microsoft账户

3. 创建Microsoft Azure免费订阅

2.1 使用微软账户登陆https://azure.microsoft.com/zh-cn/free

2.2 验证信用卡,获取免费订阅,无需信用卡的版本

https://azure.microsoft.com/zh-cn/free/students/

前提你拥有学生资格。

学生额度:$100

普通用户额度:$200

3. 登陆Microsoft Azure

https://azure.microsoft.com/zh-cn/free

大陆地区登陆需要很久…

4. 创建应用

4.1 访问:https://portal.azure.com/#home

4.2 创建语音服务

资源组初始时没有,需要新建一个,随便取一个名称

定价层参考:https://azure.microsoft.com/zh-cn/pricing/details/cognitive-services/speech-services/

5. 使用文字转语音

5.1 转到Speech Studio

文本转语音项目组中,找到有声内容创作

5.2 点击我的文件

上传txt文本文件或者创建,每个文件不能超过 20000 个字符,超过了系统自动拆分为多个文件。导出时可以选择按段落或者按拆分后的文件个数导出,不能自动合并。

5.3 打开已经上传的文件

在右侧调音(可按喜好选择):

  • 语言:中文(普通话,简体)
  • 角色:晓伊
  • 说话风格:温柔
  • 发音-朗读规则:数字(.)

直接播放也会消耗额度。

5.4 调整完成后点击保存

5.5 点击导出

选择导出到本地磁盘

音频格式可选wav或mp3

本次用例备注

  • 全文字数: 24674
  • 消费额度: ¥ 20.77
  • 导出总时长: 约 1:25:00
  • 导出文件数: 2

导出的音频也不是完全正常的,用例有多处卡顿。所以大量文字需要试听以识别。

acme.sh部署、续期、吊销

© Sunplace,2024 本文使用的是ZeroSSL的ECC证书
# 安装acme.sh
curl https://get.acme.sh | sh
# 设置自动更新
acme.sh --upgrade --auto-upgrade
# 设置ZeroSSL
acme.sh --set-default-ca --server zerossl
# 设置Cloudflare参数
export CF_Key="Cloudflare的Global API Key"
export CF_Email="CF账户"
# 注册用户
acme.sh --register-account -m ZeroSSL账户邮箱 --server zerossl
# 申请证书(Cloudflare DNS)
acme.sh --dns dns_cf --issue -d 域名或泛域名 --nginx
# 更新证书(强制)
acme.sh --renew -d 域名或泛域名 --force --ecc
# 域名或泛域名 is not a issued domain, skip.
# 解决方法:acme.sh --dns dns_cf --issue -d 域名或泛域名
# 吊销证书
acme.sh --revoke -d 域名或泛域名 --ecc
# Cert for 域名或泛域名 /root/.acme.sh/域名或泛域名_ecc/域名或泛域名.cer is not found, skip.
# 解决方法:acme.sh --install-cert -d 域名或泛域名 --ecc
# 删除证书
acme.sh --remove -d 域名或泛域名 --ecc
关于吊销的补充说明: 1. acme.sh无法吊销没有安装在本地的ZeroSSL证书。 3. 如遇到证书泄露,必须进行吊销的情况,可以直接申请新的证书。

非root密钥登陆ssh

ssh-keygen -t rsa -C "xxx@domain" 
# 将生成的密钥放到相应的位置
mkdir /home/username/.ssh 
touch /home/username/.ssh/authorized_keys
# Enter file in which to save the key (/root/.ssh/id_rsa):/home/username/.ssh/id_rsa
cd /home/username/.ssh
cat id_rsa.pub > authorized_keys
# 修改权限
cd ..
chown -R username:username .ssh 
chmod -R 700 .ssh
chmod 600 .ssh/authorized_keys
登陆的用户名为:username 登陆的密钥为/home/username/.ssh/id_rsa的内容