Skip to content

Commit c3c15f8

Browse files
authored
Add fail2ban section for public servers (#166)
1 parent d28fcc5 commit c3c15f8

File tree

1 file changed

+114
-4
lines changed

1 file changed

+114
-4
lines changed

guide/network/host-public-server.md

Lines changed: 114 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
用户可以使用自己的公网节点自建用于无公网 IP 组网的公共共享节点,方便其他无公网 IP 的用户组网。 需要不带任何参数启动 EasyTier,该节点就可作为公共服务器使用(不需要 root 权限):
44

5-
```
5+
```shell
66
easytier-core
77
```
88

@@ -18,16 +18,126 @@ easytier-core
1818

1919
EasyTier 可以做到不转发其他虚拟网的网络包,而是只帮助他们建立 P2P 链接,只需将白名单置空,并设置仅转发 RPC 流量即可。参考命令为:
2020

21-
```
21+
```shell
2222
easytier-core --relay-network-whitelist --relay-all-peer-rpc
2323
```
2424

2525
## 私有模式
2626

2727
如果你希望 EasyTier 仅在你的虚拟网络中提供服务,而不希望其他虚拟网的节点连接到你的节点,可以使用 `--private-mode true` 参数启动 EasyTier。
2828

29-
```
29+
```shell
3030
sudo easytier-core --private-mode true --network-name my-network --network-secret my-secret
3131
```
3232

33-
这会仅允许网络名为 `my-network` 且密钥为 `my-secret` 的节点连接到该 EasyTier 节点。
33+
这会仅允许网络名为 `my-network` 且密钥为 `my-secret` 的节点连接到该 EasyTier 节点。
34+
35+
## 配置 systemd 自启动
36+
37+
可以参考:[安装为 Linux systemd 服务](install-as-a-systemd-service)
38+
39+
值得注意的是,作为服务器运行时,由于 Linux 默认给用户配置的 fd 上限为 1024,可能会面临 fd 耗尽的问题。
40+
41+
此时应该配置 `LimitNOFILE` 在 serivce 文件中,如:
42+
43+
```shell
44+
LimitNOFILE=1048576
45+
```
46+
47+
配置好的 service unit 供参考:
48+
49+
```shell
50+
# cat /etc/systemd/system/easytier.service
51+
52+
[Unit]
53+
Description=EasyTier Service
54+
After=network.target syslog.target
55+
Wants=network.target
56+
57+
[Service]
58+
Type=simple
59+
ExecStart=/usr/local/bin/easytier-core --hostname <your-hostname> --network-name <your-network> --network-secret <your-secret> -p tcp://public.easytier.top:11010
60+
Restart=always
61+
RestartSec=3
62+
LimitNOFILE=1048576
63+
Environment=TOKIO_CONSOLE=1
64+
65+
[Install]
66+
WantedBy=multi-user.target
67+
```
68+
69+
## 配置 fail2ban
70+
71+
如您贡献了公共服务器,可能会遇到这样的问题:大量的节点尝试连接到您的服务器,但是无法建立连接
72+
73+
```plain
74+
connection error. local: udp://0.0.0.0:11010, remote: udp://***.***.***.***:14947, err: wait resp error: wait handshake timeout: Elapsed(())
75+
```
76+
77+
此时建议配置 `fail2ban`,以阻止这样的用户访问节点,可以有效的降低服务器的连接数,提高用户的访问质量。
78+
79+
以 Fedora 42 为例,配置方法如下:
80+
81+
```shell
82+
# install fail2ban
83+
sudo dnf install fail2ban
84+
85+
# enable and start
86+
sudo systemctl enable --now fail2ban
87+
```
88+
89+
配置日志过滤器:
90+
91+
```ini
92+
# cat /etc/fail2ban/filter.d/easytier.conf
93+
[Definition]
94+
failregex = remote: \S+://<HOST>:\d+, err: wait resp error:.+
95+
```
96+
97+
配置 jail:
98+
99+
```ini
100+
# cat /etc/fail2ban/jail.local
101+
[easytier]
102+
enabled = true
103+
filter = easytier
104+
backend = systemd
105+
journalmatch = '_SYSTEMD_UNIT=easytier.service'
106+
maxretry = 3
107+
bantime = 3600
108+
findtime = 600
109+
banaction = nftables-multiport
110+
```
111+
112+
此处的策略代表:`findtime=600s` 内尝试 `maxretry=3` 次失败,则会被关进小黑屋(阻止访问)`bantime=3600s` 一小时。
113+
114+
配置好后,重载 `fail2ban`
115+
116+
```shell
117+
sudo fail2ban-client reload
118+
# OK
119+
```
120+
121+
配置后,检查运行状态,可以看到已经阻止的客户端列表:
122+
123+
```shell
124+
sudo fail2ban-client status easytier
125+
```
126+
127+
```plain
128+
Status for the jail: easytier
129+
|- Filter
130+
| |- Currently failed: 11
131+
| |- Total failed: 4742
132+
| `- Journal matches: _SYSTEMD_UNIT=easytier.service
133+
`- Actions
134+
|- Currently banned: 99
135+
|- Total banned: 663
136+
`- Banned IP list: ***
137+
```
138+
139+
此时服务器连接数应该明显降低(可能需要等待一会儿才能看到效果):
140+
141+
```shell
142+
netstat -ntp | grep easytier
143+
```

0 commit comments

Comments
 (0)