0x01 前言

我的服务器在家里,其中一台虚拟机作为DMZ主机,我并没有打开过多的端口。有时候又不想通过VPN连接家里的服务器,这时候就需要通过SSH或RDP连接。

如果使用默认的SSH和RDP端口进行通讯,这将会引发安全问题,那通过iptables对端口和流量进行管理就变得无比重要。

0x02 禁止与放行

我的使用环境对安全的要求并不是很严格,我直接将进站的所有数据包设为全部丢弃,对需要使用的端口逐一放行。

在此之前需要先检查iptables的状态与目前所存有的规则。无论是centos7还是之前的版本,都可以使用service进行启动与关闭:

将iptables设为开机启动并立即启动iptables:

检查iptables现有的规则:

在将入站数据包默认规则修改为丢弃之前,请确认你的SSH端口在放行规则之列。否则你将失去对系统的连接:

从上面两端代码高亮处可看出,默认的规则已经从ACCEPT修改为DROP。接下来需要将默认的两段reject-with icmp-host-prohibited删掉。

如果想开放某个端口或对某个IP开放某个端口,可以参考:

添加规则后如果不保存,在使用service iptables restart重启iptables服务后,未保存的规则将会被抹掉。如果想保存新加入的iptables规则,可使用如下命令:

0x03 转发

如果接触过VPN服务器,那么下面的命令你肯定了解:

因为VPN客户端所获的的IP是服务器分配的内网IP,那么只需要使用POSTROUTING进行源地址转换,而MASQUERADE则可以自动获取eth0网卡的IP,自动将10.10.1.0/24这个网段的IP进行SNAT。

如果像我的使用环境:外网–>[8443]DMZ(10.1.1.12)–>[22]Server1(10.1.1.16),就需要下面这两条规则:

因为我是处于DMZ主机外,不但要使用第一条规则将8443端口的数据包转发到10.1.1.16:22,还要将从10.1.1.1:22返还的数据包通过8443端口发出去。

0x04 结语

确实是有点复杂,但慢慢理解,也是能消化的。

上面的流程图说明了转发的过程。在VPN环境中,用户是处于路由规则之内,所以只需要用POSTROUTING;而在外网访问内网时,用户处于路由规则之外,就需要使用PREROUTING进行地址转换。

1 条评论 / 1 comment

  1. 可惜上年我在自学整kvm的时候没找到你这个站……就因为iptables的配置整了好久……

Comments are closed.