AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-473183

lonix's questions

Martin Hope
lonix
Asked: 2023-08-07 12:12:52 +0800 CST

Firewalld 在全新的 Debian 12 服务器上失败

  • 5

我的 Debian 12 Bookworm VPS 运行防火墙 1.3.0-1 没有问题。由于不相关的问题,我不得不重建服务器,现在firewalld失败了。

我使用ansible,所以配置应该和之前的一样。也许一些适当的依赖关系在此期间发生了变化。

为了更轻松地排除故障,这里有一个重现:

  • 我与我的托管公司创建了一个全新的 VPS ;Debian 12
  • 我以 root 身份登录
  • $ apt install firewalld --yes
  • $ systemctl status firewalld.service
ERROR: 'python-nftables' failed: internal:0:0-0: Error: No such file or directory; did you mean chain ‘nat_PREROUTING’ in table inet ‘firewalld’?
Error: Could not process rule: No such file or directory
Error: No such file or directory; did you mean chain ‘nat_POSTROUTING’ in table inet ‘firewalld’?
Error: Could not process rule: No such file or directory
...etc.

我的目的是使用 iptables 而不是 nftables (docker 限制),所以:

  • 我编辑/etc/firewalld/firewalld.config并替换FirewallBackend=nftables为FirewallBackend=iptables
  • $ systemctl restart firewalld.service
  • $ systemctl status firewalld.service
ERROR: '/usr/sbin/iptables-restore -w -n' failed: iptables-restore v1.8.9 (nf_tables): 
CHAIN_ADD failed (No such file or directory): chain PREROUTING
RULE_APPEND failed (No such file or directory): rule in chain PREROUTING
RULE_APPEND failed (No such file or directory): rule in chain PREROUTING
CHAIN_ADD failed (No such file or directory): chain POSTROUTING
RULE_APPEND failed (No such file or directory): rule in chain POSTROUTING
RULE_APPEND failed (No such file or directory): rule in chain POSTROUTING
CHAIN_ADD failed (No such file or directory): chain OUTPUT
RULE_APPEND failed (No such file or directory): rule in chain OUTPUT
RULE_APPEND failed (No such file or directory): rule in chain OUTPUT
...etc.

我不明白,因为它之前工作过。正如您所看到的,这是一个全新的服务器,没有安装任何东西,也没有配置任何其他东西。我希望它能够“开箱即用”。

我做错了什么?

(也发布到repo。)

debian
  • 1 个回答
  • 54 Views
Martin Hope
lonix
Asked: 2023-06-03 08:56:46 +0800 CST

letsencrypt注册邮箱地址是否存储在证书中

  • 5

我以两种方式使用 letsencrypt:一种使用 certbot 的 docker 堆栈,另一种使用 traefik(使用 lego 自动执行证书管理)。在这两种情况下,都有一个注册电子邮件地址的设置。

该电子邮件地址是存储在证书中还是其他地方?任何人(letsencypt 除外)都可以发现该电子邮件地址吗?

ssl-certificate
  • 2 个回答
  • 45 Views
Martin Hope
lonix
Asked: 2023-05-27 22:12:44 +0800 CST

Traefik 作为 certbot / lego 的反向代理

  • 5

设置服务器时,我使用反向代理和 acme 工具来支持 dns01(我使用 nginx + certbot 或 nginx + lego)。我想改用 traefik。

不明白traefik是如何与certbot(或lego等)交互的,也找不到相关的例子。我找到了许多使用 traefik 本身获取证书的示例。

在 traefik 设置中根本不需要 certbot/lego 吗?它能做 certbot 能做的一切吗?

nginx
  • 1 个回答
  • 61 Views
Martin Hope
lonix
Asked: 2023-05-24 08:10:26 +0800 CST

firewalld 中的 INPUT_direct 链是什么?

  • 6

在许多 firewalld 配置示例中,我看到提到了正常的INPUTiptables 链,以及一个名为INPUT_direct.

例如

$ sudo firewall-cmd --direct --add-rule ipv4 filter INPUT_direct 0 \
  # etc...

$ sudo firewall-cmd --direct --add-rule ipv4 filter INPUT_direct 1 \
  # etc...

有什么意义INPUT_direct?我必须用它代替吗INPUT?

INPUT_direct 0, , 等之间有什么区别INPUT_direct 1?

linux
  • 1 个回答
  • 38 Views
Martin Hope
lonix
Asked: 2023-05-23 11:03:34 +0800 CST

使用 firewalld 记录“直接”iptables 规则

  • 5

我在 iptables 后端使用 firewalld。我为 ssh 连接限制添加了“直接”规则:

sudo firewall-cmd --add-port=22/tcp

sudo firewall-cmd --direct --add-rule ipv4 filter INPUT_direct 0 \
  -p tcp --dport 22 \
  -m state --state NEW \
  -m recent --name ssh --set \
  -m comment --comment "limit ssh connections per ip"

sudo firewall-cmd --direct --add-rule ipv4 filter INPUT_direct 1 \
  -p tcp --dport 22 \
  -m state --state NEW \
  -m recent --name ssh --update --seconds 61 --hitcount 4 --rttl \
  -j REJECT --reject-with tcp-reset \
  -m comment --comment "limit ssh connections per ip"

# ...similarly for ipv6

我还想记录拒绝和丢弃,所以我跑了

$ sudo firewall-cmd --set-log-denied all

这主要是有效的——当我检查时,sudo journalctl --since today --identifier kernel我看到了那些连接……但不是那些被我的直接规则拒绝的连接。

在回购协议中,这被确认为预期行为,并且我必须添加更多直接规则来记录我的直接规则:

您必须使用 iptables 日志扩展,例如 -j LOG。... 不幸的是,您将需要两个直接规则,因为 iptables 不支持 -j LOG -j ACCEPT。

我怎么做?

linux
  • 1 个回答
  • 25 Views
Martin Hope
lonix
Asked: 2023-05-22 09:13:49 +0800 CST

在 firewalld 中测试速率限制规则

  • 6

我想对每个 IP到运行 firewalld 的服务器的 ssh 连接进行速率限制。

假设我的 sshd 在端口 2222 上侦听,并且我想将每个 IP 的 ssh 连接限制为每分钟 3 个。我试过:

sudo firewall-cmd --add-rich-rule \
  'rule port port="2222" protocol="tcp" accept limit value="3/m"'

然后在另一台机器上运行:

ssh myserver echo hello; \
ssh myserver echo hello; \
ssh myserver echo hello; \
ssh myserver echo hello; \  # should fail, but actually logs in
ssh myserver echo hello     # should fail, but actually logs in
...

它每次都登录。没有速率限制。

我的错误在哪里?

linux
  • 1 个回答
  • 51 Views
Martin Hope
lonix
Asked: 2023-05-16 11:36:07 +0800 CST

禁用密码验证

  • 5

假设我只想允许 SSH 身份验证,并禁用密码身份验证。

在/etc/ssh/sshd_config我通常这样做:

PasswordAuthentication no

但是在某些答案中,人们建议这样做:

PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no

这些有何不同?禁用密码验证的正确方法是什么?

linux
  • 1 个回答
  • 23 Views
Martin Hope
lonix
Asked: 2020-05-13 06:03:11 +0800 CST

将区域文件从注册商迁移到 DNS 提供商

  • 0

我拥有一个由我的“注册商”管理的域。我还有一个 VPS,由我的“主机”管理(例如 DigitalOcean 等)

我想使用主机的 DNS 服务,所以:

  • 我必须将 NS 记录(在注册商的区域文件中)从注册商的记录更改为托管商的记录
  • 我的区域文件包含许多其他记录(A、MX、TXT 等),所以我假设我必须在托管商的区域文件中重新创建它们

我必须从注册商的区域文件中删除这些记录吗?如果我离开他们会发生什么?

domain-name-system nameserver dns-zone
  • 1 个回答
  • 34 Views
Martin Hope
lonix
Asked: 2020-04-13 04:19:44 +0800 CST

当主机上不存在用户时,记录 docker 容器的日志

  • 1

我将容器的日志挂载到主机(例如/var/log/container1等)。现在我想使用主机的logrotate.

但假设我需要这样做:

create 660 mysql mysql

mysql主机上没有用户/组,因此 logrotate 失败并显示:

未知用户'mysql'

所以我尝试了:

create 660 999 999   # 999 is mysql user's uid/gid within container

但后来我得到:

未知用户'999'

所以我尝试了:

create 660 999 999
su 999 999

但这给出了同样的错误。

我怎么能做到这一点,而不在主机上创建一个虚拟用户?

(顺便说一句,在你告诉我依赖 docker 自己的日志轮换之前……这只是一个例子。我使用了各种不记录到 stdout/stderr 的容器,所以我需要自己进行日志轮换。)

linux logging docker logrotate log-rotation
  • 1 个回答
  • 332 Views
Martin Hope
lonix
Asked: 2020-04-04 00:02:56 +0800 CST

通过脚本信任 gpg 密钥

  • 3

在执行自动化服务器部署时,我可以通过脚本上传和导入 gpg 密钥。但我不能相信钥匙。

我试过了

gpg --batch --yes --edit-key keyname trust 5

和

echo 5 | gpg --batch --yes --edit-key keyname trust -

在非批处理模式下,它总是停止请求输入。在批处理模式下,它会忽略输入。

什么是正确的语法?

linux bash automation gpg
  • 2 个回答
  • 1027 Views
Martin Hope
lonix
Asked: 2020-04-01 03:00:57 +0800 CST

防止多个cron作业同时运行[重复]

  • 1
这个问题在这里已经有了答案:
防止重复的 cron 作业运行 11 个答案
2年前关闭。

我的服务器在午夜运行许多 cron 作业。每个作业都会创建一个备份,通过创建一个 tarball 并使用xz.

由于xz是 CPU 和内存猪,我为每个作业添加了随机延迟,因此它们“不应该”相互破坏。但是有时确实会发生这种情况,并且会给服务器带来沉重的负担。

假设:

  • 根据我的流量,午夜是进行备份的最佳时间 - 但仍然有流量(这就是我想避免过度负载的原因)
  • 每个面向公众的应用程序都与它自己的备份作业相关联,并且它们是解耦的(它们彼此不知道) - 所以我不能将备份 cron 作业合并到一个作业中,因为我需要那种粒度
  • 我不能硬编码每个人的开始时间,因为这会增加维护 - 将应用程序添加到服务器(通过 ansible),我只需部署它并将备份 cron 作业(计划在午夜)放入/etc/cron.d/,然后随机工作开始前的延迟通常就足够了
  • 我稍微限制了作业tar ... | pv --rate-limit ... | xz ...- 但是虽然这减少了每个作业的负载,但它也减慢了每个作业的速度,因此增加了多个作业同时运行的可能性(当它们加在一起时可能会占用 100% 的 CPU)

一个可能的解决方案是为每个作业创建一个临时文件,表明它正忙,然后将其删除。问题是如果一个作业检测到这个文件,它会做什么?睡觉?多长时间?我可以使用 让它随机休眠一段时间at,但是如果我的备份脚本出现问题,我可能会有大量的作业相互竞争。另一个维护难题。

那么,通常如何解决这个问题呢?基本上,这是一种安排相关 cron 作业的简单方法,不会让它们相互干扰,也不需要微调开始时间。

linux cron scheduling
  • 3 个回答
  • 2732 Views
Martin Hope
lonix
Asked: 2020-03-13 10:41:36 +0800 CST

匹配多个服务器块的 nginx 请求

  • 0

假设一个请求匹配了多个 nginx 服务器块https://www.example.com/bar:

server {
  listen      443;
  server_name www.example.com;
  location    /foo { }
}

server {
  listen      443;
  server_name www.example.com;
  location    /bar { }
}

所以/bar匹配第一个服务器块(即使没有default_server,因为它首先列出)。但它不会匹配一个位置。

我可以强制它以某种方式“通过”到下一个匹配的服务器块,它有一个匹配的位置吗?

我阅读了请求处理文档,但我不明白在这种情况下会发生什么。

nginx
  • 1 个回答
  • 130 Views
Martin Hope
lonix
Asked: 2019-11-13 05:06:39 +0800 CST

通过 nginx 提供 google 域验证文件

  • 0

要为 google 执行域验证,我必须在我的域的根目录中提供一个文件。文件名通常是googleXXXXXXXXXXXXX.html(那些 X 是十六进制子字符串)。

所以我将它复制到我的站点的根目录(/var/www/html/),并编辑了 nginx 的配置,如下所示:

location ~* /google.+\.html$ {
  alias /var/www/html/$1;
}    

虽然我得到了 404。我没有硬编码文件名,但即使我这样做也会失败。


请注意我知道这个广泛使用的技巧:

location = /googleXXXXX.html {
  rewrite ^/(.*) $1;
  return 200 "google-site-verification: $uri";
}

但我不想这样做,因为它不是未来的证据——我想按原样提供文件。

nginx
  • 1 个回答
  • 498 Views
Martin Hope
lonix
Asked: 2019-10-25 05:56:07 +0800 CST

通过 nginx 代理到搬运工

  • 1

我使用 nginx 将代理反向代理到多个 dockerized 应用程序,这些应用程序有效。但我无法让搬运工工作。

我的 nginx 配置包括:

location ^~ /apps/portainer {
  proxy_http_version 1.1;
  proxy_set_header   Connection "";
  set                $upstream portainer:9000;
  proxy_pass         http://$upstream;
}

页面未正确加载(css 和 js 未加载)。nginx错误日志:

[错误] open() "/var/www/html/apps/main.11b0c8b84d24581.js" 失败(2:没有这样的文件或目录),请求:"GET /apps/main.11b0c8b84d24581.js HTTP/2.0"

我不明白为什么 nginx 试图提供静态文件 - 一切都应该代理到 portainer。(并且路径是错误的,尽管无关紧要)。


是否有一个不涉及正则表达式的常规修复?顺便说一句,如果您不介意在位置块中使用正则表达式,@EchoMike444 下面给出的答案非常好。

nginx
  • 1 个回答
  • 4395 Views
Martin Hope
lonix
Asked: 2019-10-21 01:50:45 +0800 CST

nginx 作为多个应用程序的反向代理

  • 1

我想使用 nginx 作为多个应用程序的反向代理(在 docker 中)。它们存在于 nginx 容器中的不同目录中:/var/www/app1、/var/www/app2等。

我的default.conf:

resolver 127.0.0.11 valid=15s;

server {
  listen 80;
  server_name www.example.com example.com;
  set $upstream phpmyadmin:9000;

  location ^~ /phpmyadmin {
   #alias /var/www/html/;                 # <----- this works
    alias /var/www/phpmyadmin/;
    index index.php;
    location ~ \.php$ {
      try_files     $uri = 404;
      fastcgi_pass  $upstream;
      include       fastcgi_params;
      fastcgi_param SCRIPT_FILENAME $request_filename;
    }
  }

}

如果我安装了 docker 应用程序(phpmyadmin),/var/www/html/那么上面的 nginx 配置就可以工作了。

但我真正想要的是将它安装在/var/www/phpmyadmin/. 当我这样做时,我会收到错误:

从上游读取响应标头时在标准错误中发送的 FastCGI:“主脚本未知”

nginx
  • 1 个回答
  • 239 Views
Martin Hope
lonix
Asked: 2019-10-19 01:14:38 +0800 CST

我应该在 docker 中为 wordpress 挂载哪个路径

  • 0

我是wordpress的新手。我试图让它在 docker 堆栈中运行。

我想像这样安装一个命名卷

-v wordpress_data:FOO

但我不确定要使用什么,FOO因为我不明白 wordpress 如何存储其数据。

/var/www/html/和 和有什么不一样/var/www/html/wp-content/?

docker
  • 1 个回答
  • 218 Views
Martin Hope
lonix
Asked: 2019-10-12 01:50:10 +0800 CST

为什么在 nginx 配置中硬编码域?

  • 2

我一直在阅读 nginx 配置文件中的内容,我们应该硬编码主机名而不是使用变量。

例如:

server_name www.example.com example.com;
return 301 https://www.example.com$request_uri;

代替

server_name www.example.com example.com;
return 301 https://$host$request_uri;

我发现令人惊讶的是 nginx 在启动时不会缓存静态配置。

是否有关于此的官方文档,或者只是轶事?

nginx
  • 1 个回答
  • 257 Views
Martin Hope
lonix
Asked: 2019-10-12 01:22:15 +0800 CST

用于 cert.pem 和 chain.pem 的 nginx ssl 配置

  • 1

certbot 文档对cert.pemand这么说chain.pem:

如果您将其中一个文件提供给 Web 服务器,则必须同时提供这两个文件,否则某些浏览器有时会为您的站点显示“此连接不受信任”错误。

这是典型的 nginx 配置:

ssl_certificate         /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key     /etc/letsencrypt/live/example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;

???                     /etc/letsencrypt/live/example.com/cert.pem;

我在哪里设置cert.pem?

nginx
  • 1 个回答
  • 1085 Views
Martin Hope
lonix
Asked: 2019-10-11 11:02:02 +0800 CST

在哪里为多个 nginx 服务器块定义 SSL 配置

  • 0

我想将 http 重定向到 https,并裸转到 www。

所以我的配置:

# http naked -> https www
# http www -> https www
server {
  listen 80;
  server_name example.com www.example.com;
  return 301 https://www.example.com$request-uri;
}


# https naked -> https www
server {
  listen 443 ssl http2;
  server_name example.com;
  #ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem     # <--- ??
  #ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem   # <--- ??
  return 301 https://www.$host$request-uri;
}


# https www
server {
  listen 443 ssl http2;
  server_name www.example.com;
  ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem
  ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem
}

我是否需要重复??中间块中显示的 SSL 内容?

nginx
  • 1 个回答
  • 54 Views
Martin Hope
lonix
Asked: 2019-10-10 23:46:59 +0800 CST

使用 nginx 将 http 重定向到 https

  • 1

我见过两种使用 nginx 将 http 重定向到 https 的方法:

server {
  listen 80;
  listen [::]:80;
  server_name example.com www.example.com
  location / {
    return 301 https://$host$request_uri;
  }
}

和

server {
  listen 80;
  listen [::]:80;
  server_name example.com www.example.com
  return 301 https://$host$request_uri;
}

这些有什么区别?有理由使用其中一个吗?

nginx
  • 1 个回答
  • 55 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve