LabHub
学习 学习路径 课程

网络基础 — 在 Linux 虚拟机里动手

用 nftables 锁住一台服务器

在 LabHub 中继续学习

这个实习在VM中进行

名称空间srv去服务器,cli是客户端。防火墙规则是**srv 写在里面**。如果锁定VM自己的输入链,连评分代理也会被阻止。 请不要在根名称空间中插入规则。

目标

用nftables创建“默认关闭,只打开必要的内容”。响应状态跟踪 允许数据包,在端口和来源处打孔,计数被丢弃的数据包,并制定规则 保存为文件。

为什么重要

防火墙不是规则列表,而是顺序和基本值。如果默认是drop,就忽略了。 被堵住了,掉下accept面就能打开。而且如果不知道状态跟踪的话 我开始使用“可以出去但没有收到回复”的规则——实际上是最 常见的自我锁定是通过SSH连接,打开防火墙,甚至阻止自我会话的响应。 是的。nftables是iptables的后续,Kubernetes、Docker、systemd都是 因为在上面的基础上制定规则,所以必须会读才能找到“是谁放了这个规则”。

阶段

  1. 名称空间cli·srv哇vethcli0srv0制作10.70.0.2/24·10.70.0.1/24请粘上并让它变成ping。
  2. srv10.70.0.1:80听的python3 -m http.server10.70.0.1:2222听的nc -lk请发布。
  3. srv在桌子上inet fwinput钩链(政策drop制作)cli让它什么都做不了。
  4. input在链子上lo允许,ct state established,related允许,icmp请输入允许的三个规则,让ping再次正常运行。
  5. tcp dport 80输入允许规则cli让网变成在,2222仍然不能。
  6. ip saddr 10.70.0.2来自的tcp dport 2222请输入允许的规则。
  7. 在链条的尽头counter drop制定规则cli在...中按下3333端口后,看到那个显示器的nft list chain输出**/root/fw/dropped.txt**请保存到。
  8. srv的全部规则**/root/fw/ruleset.nft**请保存到。nft -c -f语法必须通过。

参考

服务器和客户端

名称空间cli·srv哇vethcli0srv0制作10.70.0.2/24·10.70.0.1/24请粘上并让它变成ping。

cli0cli在10.70.0.2,srv0srv到10.70.0.1. lo UP。ip netns exec cli ping -c 1 10.70.0.1.

两个服务

srv10.70.0.1:80听的python3 -m http.server10.70.0.1:2222听的nc -lk请发布。

两者都ip netns exec srv setsid … > 로그 2>&1 < /dev/null &罗。ip netns exec srv ss -ltn在80和2222之间必须连续LISTEN,ip netns exec cli curl -s http://10.70.0.1/应该还回这个东西。

基本是阻止

srv在桌子上inet fwinput钩链(政策drop制作)cli让它什么都做不了。

nft add table inet fw后面nft 'add chain inet fw input { type filter hook input priority 0; policy drop; }'. 如今cli的ping和curl都必须在没有响应的情况下超时(而不是refused)。

基本三行

input在链子上lo允许,ct state established,related允许,icmp请输入允许的三个规则,让ping再次正常运行。

nft add rule inet fw input iifname "lo" accept… ct state established,related accept… ip protocol icmp accept三、这三者几乎是所有防火墙的第一排。

80万年

tcp dport 80输入允许规则cli让网变成在,2222仍然不能。

nft add rule inet fw input tcp dport 80 accept.确认:curl -s -m 2 http://10.70.0.1/成为银子,nc -z -w 2 10.70.0.1 2222必须失败。

根据来源缩小范围

ip saddr 10.70.0.2来自的tcp dport 2222请输入允许的规则。

nft add rule inet fw input ip saddr 10.70.0.2 tcp dport 2222 accept. 打开端口,但仅限于特定来源——管理端口是这样狭窄的。ip netns exec cli nc -z -w 2 10.70.0.1 2222必须成为。

感受到被抛弃的感觉

在链条的尽头counter drop制定规则cli在...中按下3333端口后,看到那个显示器的nft list chain输出**/root/fw/dropped.txt**请保存到。

nft add rule inet fw input counter drop后面ip netns exec cli nc -z -w 1 10.70.0.1 3333做一两遍。ip netns exec srv nft list chain inet fw input > /root/fw/dropped.txtcounter packets N这个必须大于0。在netns中log要使用的话net.netfilter.nf_log_all_netns=1也请记住这一点是有必要的。

把规则作为文件

srv的全部规则**/root/fw/ruleset.nft**请保存到。nft -c -f语法必须通过。

ip netns exec srv nft list ruleset > /root/fw/ruleset.nft.如果是实际服务器的话,这个文件/etc/nftables.conf成为启动时nft -f读作罗。nft -c -f /root/fw/ruleset.nft如果什么都没说就结束了,就通过了。