小编Wil*_*lem的帖子

Docker pull:TLS 握手超时

我一直得到这个(Ubuntu 16.04 LTS):

$ docker pull nginx
Using default tag: latest
Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: TLS handshake timeout
Run Code Online (Sandbox Code Playgroud)

但是 curl TLS 工作正常(除了身份验证错误):

$ curl https://registry-1.docker.io/v2/
{"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":null}]}
Run Code Online (Sandbox Code Playgroud)

甚至一个小的 golang 程序(模仿 docker)也能正常工作:

package main
import (
    "fmt"
    "io/ioutil"
    "net/http"
)
func main() {
    resp, err := http.Get("https://registry-1.docker.io/v2/")
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        panic(err)
    }
    fmt.Println("Got: ", string(body))
}
Run Code Online (Sandbox Code Playgroud)

docker TLS 超时请求的 pcap:

reading from file …
Run Code Online (Sandbox Code Playgroud)

linux-networking docker

31
推荐指数
5
解决办法
11万
查看次数

配置管理:基于推与拉的拓扑

更成熟的配置管理 (CM) 系统(如 Puppet 和 Chef)使用基于拉取的方法:客户端定期轮询集中主节点以获取更新。其中一些也提供了一种无主方法(因此,基于推送),但声明它“不适用于生产”(Saltstack)或“可扩展性较差”(Puppet)。我所知道的唯一一个从一开始就基于推送的系统是亚军 Ansible。

基于拉的系统的具体可扩展性优势是什么?为什么据说添加更多 pull-masters 比 push-agents 更容易?

例如,agiletesting.blogspot.nl写道:

在“拉”系统中,客户端相互独立地联系服务器,因此整个系统比“推”系统更具可扩展性

另一方面,Rackspace 证明他们可以使用基于推送的模型处理 15K 系统

infastructures.org写道:

我们发誓使用拉式方法来维护基础架构,使用 SUP、CVSup、rsync 服务器或 cfengine 等工具。不是将更改推送给客户端,每个单独的客户端计算机都需要负责在启动时轮询黄金服务器,并在之后定期轮询,以保持自己的 rev 级别。在采用这个观点之前,我们开发了大量基于 ssh、rsh、rcp 和 rdist 的基于推送的脚本。我们在 r-commands(或 ssh)中发现的问题是:当您运行基于 r-command 的脚本将更改推送到您的目标机器时,很可能如果您有 30 多个目标主机,其中一个将在任何给定的时间下来。维护委托机器的列表变成了一场噩梦。在编写代码来纠正这个问题的过程中,你最终会得到精心设计的包装器代码来处理:死主机超时;记录和重试死主机;分叉并运行并行作业以尝试在合理的时间内访问许多主机;最后检测并防止在所有出站 rsh 会话中耗尽源计算机上所有可用 TCP 套接字的情况。然后,您仍然面临着将您刚才所做的所有内容放入安装映像中的问题,以便将来安装所有新主机,以及为任何已死且明天必须重建的主机重复此操作。在我们为实现基于 r-command 的复制而遇到的麻烦之后,我们发现它只是不值得。我们不打算再次使用 r-commands 或任何其他推送机制来管理基础设施。它们的扩展性不如基于拉动的方法。分叉并运行并行作业以尝试在合理的时间内访问许多主机;最后检测并防止在所有出站 rsh 会话中耗尽源计算机上所有可用 TCP 套接字的情况。然后,您仍然面临着将您刚才所做的所有内容放入安装映像中的问题,以便将来安装所有新主机,以及为任何已死且明天必须重建的主机重复此操作。在我们实现基于 r-command 的复制遇到麻烦之后,我们发现它不值得。我们不打算再次使用 r-commands 或任何其他推送机制来管理基础设施。它们的扩展性不如基于拉动的方法。分叉并运行并行作业以尝试在合理的时间内访问许多主机;最后检测并防止在所有出站 rsh 会话中耗尽源计算机上所有可用 TCP 套接字的情况。然后,您仍然面临着将您刚才所做的所有内容放入安装映像中的问题,以便将来安装所有新主机,以及为任何已死且明天必须重建的主机重复此操作。在我们为实现基于 r-command 的复制而遇到的麻烦之后,我们发现它只是不值得。我们不打算再次使用 r-commands 或任何其他推送机制来管理基础设施。它们的扩展性不如基于拉动的方法。最后检测并防止在所有出站 rsh 会话中耗尽源计算机上所有可用 TCP 套接字的情况。然后,您仍然面临着将您刚才所做的所有内容放入安装映像中的问题,以便将来安装所有新主机,以及为任何已死且明天必须重建的主机重复此操作。在我们实现基于 r-command 的复制遇到麻烦之后,我们发现它不值得。我们不打算再次使用 r-commands 或任何其他推送机制来管理基础设施。它们的扩展性不如基于拉动的方法。最后检测并防止在所有出站 rsh 会话中耗尽源计算机上所有可用 TCP 套接字的情况。然后,您仍然面临着将您刚才所做的所有内容放入安装映像中的问题,以便将来安装所有新主机,以及为任何已死且明天必须重建的主机重复此操作。在我们实现基于 r-command …

configuration-management puppet chef ansible saltstack

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

Linux:防止传出 TCP 泛洪

我在负载均衡器后面运行数百个网络服务器,托管许多不同的站点,其中包含大量应用程序(我无法控制其中的应用程序)。大约每月一次,其中一个网站被黑客入侵,并上传洪水脚本以攻击某些银行或政治机构。过去,这些都是 UDP 泛洪,通过阻止单个 Web 服务器上的传出 UDP 流量可以有效解决。昨天,他们开始使用许多 TCP 连接到端口 80 来从我们的服务器淹没一家大型美国银行。由于这些类型的连接对我们的应用程序完全有效,仅仅阻止它们是不可接受的解决方案。

我正在考虑以下替代方案。你会推荐哪一个?您是否实施了这些,以及如何实施?

  • 限制带有源端口的网络服务器(iptables)传出 TCP 数据包!= 80
  • 相同但有排队 (tc)
  • 每台服务器每个用户的速率限制传出流量。相当大的管理负担,因为每个应用程序服务器可能有 1000 个不同的用户。也许是这样:我如何限制每个用户的带宽?
  • 还要别的吗?

当然,我也在寻找方法来最大限度地减少黑客进入我们托管站点的机会,但由于该机制永远不会 100% 防水,我想严格限制入侵的影响。

更新:我目前正在使用这些规则进行测试,这可以防止这种特定的攻击。你会如何建议让它们更通用?当我只对 SYN 数据包进行速率限制时,我是否错过了已知的 TCP DoS 攻击?

iptables -A OUTPUT -p tcp --syn -m limit --limit 100/min -j ACCEPT
iptables -A OUTPUT -p tcp --syn -m limit --limit 1000/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
iptables -A OUTPUT -p tcp --syn -j REJECT --reject-with tcp-reset
Run Code Online (Sandbox Code Playgroud)

干杯!

networking linux debian denial-of-service

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

tcpdump:“以太类型未知”?

在调试 DNS 问题(显然 UDP 数据包在网络上丢失)时,我遇到了许多(但不是全部)“ethertype Unknown”消息,如下所示。Tcpdump 使用“-n -i 任何端口 53”运行

17:34:43.826196 IP 127.0.0.1.46508 > 127.0.0.1.53: 57861+ A? collector-123.newrelic.com. (44) 17:34:43.826221 IP 127.0.0.1.46508 > 127.0.0.1.53: 20016+ AAAA? collector-123.newrelic.com. (44) 17:34:43.826314 IP 127.0.0.1.53 > 127.0.0.1.46508: 57861 1/0/0 A 50.31.164.223 (60) 17:34:43.826505 IP 82.94.181.250.38280 > 208.78.70.21.53: 4554 AAAA? collector-123.newrelic.com. (44) 17:34:43.826510 Out 00:25:90:4b:94:dc ethertype Unknown (0x0067), length 92: 0x0000: 0000 0800 4500 0048 ef3d 4000 4011 2cab ....E..H.=@.@.,. 0x0010: 525e b5fa d04e 4615 9588 0035 0034 1f02 R^...NF....5.4.. 0x0020: 11ca 0000 0001 0000 …

domain-name-system linux

5
推荐指数
1
解决办法
8787
查看次数

Nginx:1M 地图的最佳 map_hash_max_size 和 map_hash_bucket_size?

我有 1M 静态重写规则并使用此映射配置。如何确定的最佳值map_hash_max_sizemap_hash_bucket_size?我想优化内存消耗。关于这一点的文档非常少。

别人在 Nginx 论坛上问过,但没有回应。

performance nginx memory-usage

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

Linux:强制数据包的源地址到本地绑定的 IP

我有 10.1.1.1 和 10.2.2.2 绑定到 eth0。

# ip address show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 04:01:05:ff:42:01 brd ff:ff:ff:ff:ff:ff
    inet 10.2.2.2/24 brd 10.2.2.255 scope global eth0
    inet 10.1.1.1/32 scope global eth0
    inet6 fe80::601:5ff:feff:4201/64 scope link 
       valid_lft forever preferred_lft forever
# ip route get 10.1.1.1
local 10.1.1.1 dev lo  src 10.1.1.1 
Run Code Online (Sandbox Code Playgroud)

问题A:为什么IP绑定到eth0时使用“dev lo”?

我想强制本地连接到 10.1.1.1 的源地址为 10.2.2.2。所以我尝试:

# ip route add 10.1.1.1/32 dev eth0 src 10.2.2.2
# ip route show
default via 10.2.2.1 …
Run Code Online (Sandbox Code Playgroud)

linux routing

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