检查:防火墙与 NAT
当我通过 SSH 连接并将输入链创建为policy drop时,会话冻结了。缺少什么?
tcp dport 22 accept放置在策略之后。- 我的会话数据包丢失是因为我没有将
ct state established,related accept放在第一位。 - 同样的政策也必须添加到输出链中。
- sshd 无法与自身通信,因为省略了 lo 权限。
在充当路由器的Linux中,阻止通过流量的规则有哪个钩子?
- 输入——所有进来的东西都是输入
- postrouting——因为它绝对是在离开之前
- 转发——只有数据包通过,而不是您自己的地址。
- 预路由——在路由之前应防止预路由以节省资源。
我添加了伪装规则,但私有命名空间在 Internet 上不可用。ip_forward是 1. 接下来看什么?
- 必须使用 snat to 而不是伪装来指定地址。
- 它应该放在路由前,而不是路由后。
- 未安装conntrack模块,未记录NAT。
- 正向链的策略是丢弃,所以在NAT之前就已经被丢弃了。
为什么将DNAT(端口转发)规则设置为预路由?
- 您必须在路由之前更改目的地才能找到到达更改目的地的路由。
- 由于先执行预路由,因此性能良好。
- 因为 nat 类型的链不能在 postrouting 中创建。
- 因为 conntrack 只在预路由中创建条目。
为什么Masquerade规则中的counter packets比实际丢包数小很多?
- 因为counter只统计字节数超过1500的数据包
- 因为 NAT 链只获取连接的第一个数据包,所以 conntrack 会处理其余的数据包。
- 由于 ICMP 不是 NAT 目标,因此不算在内。
- 因为响应数据包没有经过postrouting
命名空间中的规则nft … log在dmesg中没有留下任何内容。你需要什么?
- 允许使用
net.netfilter.nf_log_all_netns=1在命名空间之外进行日志记录 - 在netns中操作必须使用counter而不是log。
- 您必须在命名空间中单独运行 rsyslog。
- 日志规则应该放在预路由中,而不是输入中。