内容摘录自极客时间课程《趣谈网络协议》,如有侵权,请及时联系删除。
云中的网络安全
共有云上的虚机,为了达到安全的目的,建议只开放需要的端口,并将其他端口关闭,然后配置安全措施对开放的端口进行管控。常采用ACL(Access Control List,访问控制列表)来控制IP和端口。
安全组:一系列限制IP和端口访问的规则合集。
TCP/IP包的处理阶段:
- PREROUTING
- INPUT
- FORWARD
- OUTPUT
- POSTROUTING
Nerfilter框架:在Linux内核中,它可以在以上节点插入 hook 函数。这些函数可以截获数据包,对数据包进行干预。例如做一定的修改,然后决策是否接着交给 TCP/IP 协议栈处理;或者可以交回给协议栈,那就是 ACCEPT;或者过滤掉,不再传输,就是 DROP;还有就是 QUEUE,发送给某个用户态进程处理。
内核模块ip_tables实现了在上述5个阶段进行打点,按功能分类为:
- 连接跟踪conntrack
- 数据包过滤filter
- 网络地址转换nat
- 数据包修改mangle
用户态程序iptables可通过命令行来修改内核ip_tables中的规则。
iptables的表有四种:raw–>mangle–>nat–>filter,优先级递减,每个表又可以设置多个链,如图:
具体运行过程如下:
- 数据包进入的时候,先进 mangle 表的 PREROUTING 链。在这里可以根据需要,改变数据包头内容之后,进入 nat 表的 PREROUTING 链,在这里可以根据需要做 Dnat,也就是目标地址转换。
- 进入路由判断,要判断是进入本地的还是转发的。
- 如果是进入本地的,就进入 INPUT 链,之后按条件过滤限制进入。
- 之后进入本机,再进入 OUTPUT 链,按条件过滤限制出去,离开本地。
- 如果是转发就进入 FORWARD 链,根据条件过滤限制转发。
- 之后进入 POSTROUTING 链,这里可以做 Snat,离开网络接口。