小编tyl*_*erl的帖子

带有 SSL 的 Apache ProxyPass

我想通过非 SSL 站点代理来自 SSL 站点的请求。我的 Apache httpd.conf 如下所示:

<VirtualHost 1.2.3.4:80>
    ServerName foo.com
    ProxyPass / https://bar.com/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

因此,当我访问http://foo.com 时,我希望 apache 向https://bar.com发出请求并将其获取的页面发送给我。

相反,我收到了 500 错误,在错误日志中,我看到:

[error] proxy: HTTPS: failed to enable ssl support for 4.3.2.1:443 (bar.com)
Run Code Online (Sandbox Code Playgroud)

大概我在这里遗漏了一个指令。可能是哪个?

别介意安全隐患。我完全理解其中的风险。

ssl proxy proxypass apache-2.2

66
推荐指数
1
解决办法
18万
查看次数

使用 IPtables 或空路由将大约 100 万个 IP 地址列入黑名单?

我遇到过这样的情况,客户端需要将一组不到 100 万个单独的 IP 地址(无子网)列入黑名单,并且网络性能是一个问题。虽然我猜想 IPTables 规则对性能的影响比路由小,但这只是猜想。

有没有人有任何确凿的证据或其他理由支持 IPTables 或空路由作为将长 IP 地址列表列入黑名单的解决方案?在这种情况下,一切都是自动化的,因此易用性并不是真正的问题。

编辑 11 年 11 月 26 日

经过一些测试和开发,这些选项似乎都不可行。似乎路由查找和 iptables 都通过规则集进行线性搜索,并且处理这么多规则花费的时间太长。在现代硬件上,将 100 万个项目放入 iptables 黑名单会使服务器减慢到每秒大约 2 打数据包。所以IPTables和空路由都出来了。

ipset,正如 Jimmy Hedman 所推荐的那样,会很棒,只是它不允许您在一组中跟踪超过 65536 个地址,因此除非有人有任何想法,否则我什至无法尝试使用它。

显然,阻止这么多 IP 的唯一解决方案是在应用程序层中进行索引查找。不是这样吗?


更多信息:

此实例中的用例是阻止 IP 地址的“已知违规者”列表访问 Web 服务器上的静态内容。FWIW,通过 Apache 进行阻塞Deny from同样缓慢(如果不是更慢),因为它也进行线性扫描。


仅供参考:最终的工作解决方案是将 apache 的 mod_rewrite 与 berkeley DB 映射结合使用来对黑名单进行查找。伯克利数据库的索引性质允许列表以 O(log N) 性能扩展。

route iptables blacklist

23
推荐指数
3
解决办法
1万
查看次数

内核堆栈跟踪到源代码行

给定如下内核堆栈跟踪,您如何确定发生问题的特定代码行?

kernel:  [<ffffffff80009a14>] __link_path_walk+0x173/0xfb9
kernel:  [<ffffffff8002cbec>] mntput_no_expire+0x19/0x89
kernel:  [<ffffffff8000eb94>] link_path_walk+0xa6/0xb2
kernel:  [<ffffffff80063c4f>] __mutex_lock_slowpath+0x60/0x9b
kernel:  [<ffffffff800238de>] __path_lookup_intent_open+0x56/0x97
kernel:  [<ffffffff80063c99>] .text.lock.mutex+0xf/0x14
kernel:  [<ffffffff8001b222>] open_namei+0xea/0x712
kernel:  [<ffffffff8006723e>] do_page_fault+0x4fe/0x874
kernel:  [<ffffffff80027660>] do_filp_open+0x1c/0x38
kernel:  [<ffffffff8001a061>] do_sys_open+0x44/0xbe
kernel:  [<ffffffff8005d28d>] tracesys+0xd5/0xe0
Run Code Online (Sandbox Code Playgroud)

虽然我可以轻松找到函数调用——但将__link_path_walk加上偏移量转换为实际行号是困难的部分。

假设这是针对标准发行版提供的内核,我知道其确切版本和内部版本号,那么获取必要元数据并进行相应查找的过程是什么?

linux debugging kernel

22
推荐指数
3
解决办法
3万
查看次数

Linux ext4“范围”属性

我注意到e安装在 ext4 文件系统上的 Linux 机器上的几个文件/目录的属性。

[kelly@p2820887.pubip.serverbeach.com ~]$ lsattr -d /bin
-------------e- /bin
Run Code Online (Sandbox Code Playgroud)

根据chattr(1)

'e' 属性表示该文件正在使用范围来映射磁盘上的块。不能使用 chattr(1) 删除它。

这有什么不同,更重要的是,这个细节在什么方面很重要——特别是为什么这个细节足够重要以作为文件属性报告?在什么情况下我应该根据这个文件“正在使用范围来映射磁盘上的块”的知识来改变我的行为?想必这是我需要知道的,不然也不会说的这么明显吧?

linux filesystems ext4 attributes

10
推荐指数
1
解决办法
7943
查看次数

使用卷影复制的 SQL Server 备份

许多著名的 Windows 备份实用程序使用内置于较新版本 Windows 的卷影复制服务来创建磁盘的时间点快照,以便安全地备份打开的文件。

但是这种机制在 SQL Server 上的表现如何?我知道存在 SQL Server VSS Writer 以帮助备份系统与 SQL Server 互操作,但并非所有备份系统都了解 SQL Server 并利用它提供的与备份相关的 API。

所以我的问题是,那些对 SQL Server 一无所知的程序呢?

他们大概会获得 MDF 和 LDF 文件在某个时刻存在的时间点快照。并且大概 SQL Server 数据格式足够健壮,可以保证这样的快照是一致和可用的。

这是事情的运作方式,还是我错过了什么?使用这种备份机制是否存在“问题”,或者我会安全吗?

windows backup vss sql-server

9
推荐指数
2
解决办法
1万
查看次数

虚拟磁盘映像 - 文件或分区

我正在研究在 VM 使用中使用文件与分区来存储虚拟磁盘映像之间的差异。的常识是,基于分区的图像是不是因为一个基于文件的图像更快的开销降低。这是有道理的,但我从未见过任何实际数字。

我自己的测试证实了不同的结果。当我标杆直接到分区的虚拟磁盘,然后格式化ext4的是同一个分区,创建存储上的ext4文件系统上的虚拟磁盘映像,然后基准,我看不出有任何加速在所有的直接到分区的虚拟盘。相反,在某些系统上,基于文件的映像甚至更快(可能是由于主机操作系统缓存或类似的原因)。该测试在许多系统上重复多次,结果相当一致。

因此,也许抛开性能理由,使用分区而不是虚拟磁盘映像是否仍然被认为更好?直接分区访问比图像文件更好还有其他原因吗?

或者也许有什么理由反过来?也许是原始分区映像无法获得的一种虚拟磁盘文件格式的优势?

virtualization linux performance virtual-machines kvm-virtualization

8
推荐指数
1
解决办法
686
查看次数

名称服务器间接寻址是否有官方限制?

如果域及其名称服务器不共享 TLD,胶水记录通常不可用,如果它们不共享相同的二级域,则技术上不需要,这可能导致解析域的额外步骤。解析器必须首先查找名称服务器的地址,然后才能找到您的域的地址。但从理论上讲,您可以在其中添加更多步骤,而不仅仅是这两个步骤。

这里的问题是,这条链允许有多长

如果xyz.com使用 nameserver ns1.xyz.info
然后xyz.info使用 nameserver ns1.xyz.co
然后xyz.co使用 nameserver ns1.xyz.cc
然后xyz.cc使用 nameserver ns1.xyz.co.uk,...等等

...在解析器解析您最初想要的名称之前,您可能会得到一个很长的链供解析器解开。

大概有一个实际限制——BIND 应该只愿意遍历这么多链接,否则可能会出现拒绝服务。但是有官方限制吗?官方不需要解析器继续进行的某些步骤?

domain-name-system rfc

8
推荐指数
1
解决办法
475
查看次数

插入磁盘时运行命令 (Linux)

我想在 Linux 下每次插入驱动器时自动运行我自己的命令(例如,包括 USB 驱动器)。显然,最简单的解决方案是定期轮询和检查 /proc/partitions 或 /dev/disk 的更改,但我希望有比这更优雅的东西。

编辑

我知道这是可能的,因为 GNOME 就是这样做的;每当插入新驱动器时,GNOME 都会运行它自己的“自动播放”机制来执行某些操作。(“您要查看此 SD 卡上的图片吗? ”)

我可以想出两个用途:第一个是在我管理的 Amazon EC2 集群中,自动检测和初始化新连接的 EBS 存储卷。

另一种用法是在基于 Linux 的家庭文件服务器设备上;当我将 SD 卡插入设备时,它应该安装卡,将卡中的图片移动到内部硬盘驱动器上,卸载卡,然后发出哔声让我知道它已完成。

linux autorun

6
推荐指数
2
解决办法
7564
查看次数

SSH 会话记录

我们有一项政策,即出于 CYA 目的与我们的客户记录所有 SSH 会话活动。使用 Windows 下的 PuTTY,这是微不足道的,因为我们可以使用 PuTTY 的内置日志记录工具将每个会话记录到一个文件中。但是当在 Linux 工作站上工作时,就没有那么简单了。

请注意,服务器端日志虽然由于其他原因很重要,但并不是我们在这里所做的工作的一部分。这些会话日志仅供我们自己参考。

到目前为止,我们已经研究了以下选项:

  • 使用在 .bash_profile 中触发的脚本或作为登录 shell 的包装器记录所有终端活动(远非理想)
  • 用启动每个会话日志的包装器替换 /usr/bin/ssh(更好,但可能有副作用)
  • 强制所有员工从命令行使用 PuTTY for Linux 而不是 ssh(也非常不理想)

日志记录需要完全自动化,理想情况下我们希望能够将不同的会话分离到单独的文件中。

有关的:

linux ssh logging

6
推荐指数
1
解决办法
3341
查看次数

仅显示进程子树

我想显示单个进程及其当前子进程的列表。因此,给定以下进程树:

想象一下以下流程清单:

  PID TTY      STAT   TIME COMMAND
    2 ?        S      0:00 [kthreadd]
    3 ?        S      0:06  \_ [ksoftirqd/0]  
  ...snip...
 1292 ?        Ss     0:06 /usr/sbin/gpm -m /dev/input/mice -t exps2
 1426 ?        Ss     0:00 /usr/lib/postfix/master
 9785 ?        S      0:00  \_ qmgr -l -t fifo -u
12301 ?        S      0:00  \_ pickup -l -t fifo -u -c
 1545 ?        Ss     0:05 /usr/sbin/apache2 -k start
 1570 ?        S      0:00  \_ /usr/sbin/apache2 -k start  
  ...snip...
Run Code Online (Sandbox Code Playgroud)

我只想显示进程 1426 及其子进程。像这样:

  PID TTY      STAT   TIME COMMAND
 1426 ? …
Run Code Online (Sandbox Code Playgroud)

linux command-line-interface

5
推荐指数
2
解决办法
3501
查看次数