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-30592

cdauth's questions

Martin Hope
cdauth
Asked: 2024-02-01 01:01:28 +0800 CST

systemctl --enable 启用套接字而不是服务

  • 5

正如常见的那样,lxd提供了两个 systemd 单元:lxd.socket和lxd.service。lxd.socket启动时,lxd.service只要任何应用程序(例如lxc)尝试访问 lxd 守护程序,它就会启动。

我想lxd在启动时启动,而无需运行任何命令。但是,当我尝试启用 时lxd.service,它会启用lxd.socket:

# systemctl enable lxd.service
Created symlink /etc/systemd/system/sockets.target.wants/lxd.socket → /usr/lib/systemd/system/lxd.socket.

这里发生了什么?我怎样才能启用lxd.service?


系统运行的是 Fedora 39。这些是单元文件:

/usr/lib/systemd/system/lxd.service:

[Unit]
Description=LXD - main daemon
After=network-online.target openvswitch-switch.service lxcfs.service lxd.socket
Requires=network-online.target lxcfs.service lxd.socket
Documentation=man:lxd(1)

[Service]
Environment=LXD_DOCUMENTATION=/usr/share/doc/lxd-doc/html
Environment=LXD_OVMF_PATH=/usr/share/edk2/ovmf
Environment=LXD_UI=/usr/share/lxd-ui/ui
ExecStart=/usr/bin/lxd --group lxd
ExecStartPost=/usr/bin/lxd waitready --timeout=600
KillMode=process
TimeoutStartSec=600s
TimeoutStopSec=30s
Restart=on-failure
LimitNOFILE=1048576
LimitNPROC=infinity
TasksMax=infinity

[Install]
Also=lxd-containers.service lxd.socket

/usr/lib/systemd/system/lxd.socket:

[Unit]
Description=LXD - unix socket
Documentation=man:lxd(1)

[Socket]
ListenStream=/var/lib/lxd/unix.socket
SocketGroup=lxd
SocketMode=0660
Service=lxd.service

[Install]
WantedBy=sockets.target
systemd
  • 1 个回答
  • 34 Views
Martin Hope
cdauth
Asked: 2022-02-28 14:26:02 +0800 CST

对于通过 Wireguard 进入的连接,通过同一设备发回响应

  • 0

我有一个在我的私有 LAN 中运行的服务器,它使用 Wireguardlanserver连接到公共服务器。使用 iptables规则通过 Wireguard 连接将 TCP 连接转发到某些端口。publicserverpublicserverlanserverDNAT

在 上lanserver,Wireguard 设置为 NetworkManager 连接。它通过 Wireguard 使用AllowedIPs = 0.0.0.0/0, ::/0. 这会导致设置以下 ip 规则lanserver:

[root@lanserver ~]# ip rule show
0:      from all lookup local
31100:  from all lookup main suppress_prefixlength 0
31101:  not from all fwmark 0xcb2e lookup 52014
32766:  from all lookup main
32767:  from all lookup default
[root@lanserver ~]# ip route show table 52014
default dev wg0 proto static scope link metric 50

此设置工作正常。使用 iptables 规则将传入的 TCP 连接publicserver转发到。由于 ip 规则与之匹配,因此lanserver将响应发回。publicserver31101

有一个例外:当我尝试publicserver从我的个人计算机打开 TCP 连接以使用 IPv6 时pc,它也位于我的私有 LAN 中,它不起作用。问题似乎是两者在同一个公共子网pc中lanserver都有一个 IPv6 地址。publicserver成功转发连接lanserver,但响应不是通过 Wireguard 连接路由回,而是直接pc由于 ip rule 31100。

如何确保通过 Wireguard 接口进入的连接的所有响应lanserver也通过 Wireguard 接口发回,无论它们的源 IP 是否在本地子网中?

我可以从以下几个方向思考解决方案:

  • 在 上禁用 IPv6 lanserver,导致它与 不在同一子网中pc。不是一个很好的解决方案。
  • 用于端口转发SNAT。publicserver不是一个可接受的解决方案,因为转发端口后面的一些服务需要知道真正的源 IP。
  • AllowedIPs在 Wireguard 对等体中明确提及本地 IPv6 子网。这不起作用,因为 IPv6 子网每 24 小时更改一次。
  • 添加一个自定义 IP 规则,该规则以某种方式匹配所有传入的连接wg0并为它们使用路由表52014。我不确定如何准确指定这样的规则。此外,问题在于每次重新启动 Wireguard 连接时,路由表的数量都会发生变化。创建此类规则的正确位置可能是PostUp脚本,但 NetworkManager 似乎不允许指定一个。
linux-networking wireguard iproute2
  • 1 个回答
  • 103 Views
Martin Hope
cdauth
Asked: 2022-02-10 21:18:39 +0800 CST

通过 SSH 登录时如何限制用户使用 rbash

  • 1

我想限制我服务器上的某些用户只能执行某些命令。为此,我能找到的最常见的方法是使用rbash.

虽然我可以找到许多谈论 rbash 的网站,但我很难找到如何正确使用它的任何信息。我能找到的最常见的方法是从 to 创建一个符号链接/bin/rbash,/bin/bash将受限用户的登录 shell 设置为/bin/rbash,然后在用户主目录中设置一个自PATH定义~/.bash_profile。

然而,我很震惊地发现,通过这个设置,用户仍然可以使用 复制文件到服务器scp,他们甚至可以使用ssh user@host -t bash!打开一个不受限制的 shell。似乎正在发生的事情是 SSH 服务器正在使用 将命令传递给服务器上的登录 shell -c,因此ssh user@host -t bash导致服务器运行/bin/rbash -c bash,因为.bash_profile尚未执行以限制路径,所以它起作用了。scp同样导致服务器运行/bin/rbash -c scp。

现在我遇到了ForceCommandsshd 的指令。该指令基本上总是导致配置的命令被传递-c给登录 shell,忽略客户端指定的任何命令。因此,如果ForceCommand设置为rbash,则将始终/bin/rbash -c rbash在服务器上执行命令,而不管客户端是用-t bash还是 asscp或其他方式调用的。不幸/bin/rbash -c rbash的是,导致.bash_profile不被执行,所以我们最终得到了一个受限的 shell 但一个正常的PATH,所以我们可以调用bash那里来逃避它。

我想达到的目标:

  • 应该没有办法避免通过 SSH 连接的用户的受限 shell
  • 理想情况下,仍然可以通过使用执行受限 shell 中允许的命令ssh user@server permitted_command
  • 配置不应仅限 SSH,因此也应限制在 TTY 上登录的用户。
ssh
  • 0 个回答
  • 244 Views
Martin Hope
cdauth
Asked: 2015-12-16 17:42:03 +0800 CST

如何使用 iptables 对通过网桥返回其源的数据包进行 DNAT 处理?[复制]

  • 0
这个问题在这里已经有了答案:
从本地网络环回转发的公共 IP 地址 - Hairpin NAT 12 个答案
6年前关闭。

我有host1一个 WAN 接口eth0( 1.2.3.4) 和一个 LAN 接口eth1( 10.41.82.1)。局域网里面是一个host2带有IP地址的10.41.82.2。

传入的连接1.2.3.4:22被转发到host2使用以下 iptables 规则host1:

root@host1:~# iptables -t nat -A OUTPUT     -d 1.2.3.4 -p tcp --dport 22 -j DNAT --to 10.41.82.2:22
root@host1:~# iptables -t nat -A PREROUTING -d 1.2.3.4 -p tcp --dport 22 -j DNAT --to 10.41.82.2:22

这工作正常,除非host2尝试访问1.2.3.4:22:

root@host2:~# telnet 1.2.3.4 22
Trying 1.2.3.4...

root@host2:~# ping 1.2.3.4
PING 1.2.3.4 56(84) bytes of data.
64 bytes from 1.2.3.4: icmp_seq=1 ttl=64 time=0.125 ms
64 bytes from 1.2.3.4: icmp_seq=2 ttl=64 time=0.279 ms

root@host2:~# tcptraceroute 1.2.3.4 22
traceroute to 1.2.3.4, 30 hops max, 60 byte packets
 1  * * *
 2  * * *
 3  * * *
 4  * * *
 5  * * *
(and so on)

似乎数据包正在循环转发。如您所见,ping 可以正常工作,因此路由和 IP 转发设置正确。

我做错了什么,我该如何解决这个问题?


更新:

正如 BillThor 的回复中所述以及DNAT 上的 frozentux 教程中所述,我需要添加一条SNAT规则。我现在已经这样做了(请注意,我已经添加了host2for的 LAN 地址-d,因为此规则适用于POSTROUTING数据包的目的地已更改的位置):

root@host1:~# iptables -t nat -A POSTROUTING -d 10.41.82.2 -p tcp --dport 22 -j SNAT --to 10.41.82.1

不幸的是,这并没有解决问题,一切仍然和上面描述的一样。有趣的SNAT是,根据运行时显示的计数器,该规则似乎永远不会匹配iptables -t nat -nvL。


更新 2:

我发现当我运行时tcpdump -i eth1,即使我使用与这种情况无关的参数运行它,例如tcpdump -i eth1 port 34238,它也会突然起作用。但只有 whiletcpdump正在运行。

到目前为止我没有提到因为我认为它无关紧要的是它eth1实际上是一座桥梁,并且host2是一个 Xen 域。我开始怀疑我的问题可能与此有关。

iptables
  • 2 个回答
  • 2220 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