为所有必需的端口创建单独的规则
# iptables -I INPUT -s 192.168.0.0/24 -p tcp --dport 389 -j ACCEPT # iptables -I INPUT -s 192.168.0.0/24 -p tcp --dport 88 -j ACCEPT # iptables -I INPUT -s 192.168.0.0/24 -p tcp --dport 53 -j ACCEPT # iptables -I INPUT -s 192.168.0.0/24 -p tcp --dport 445 -j ACCEPT # iptables -I INPUT -s 192.168.0.0/24 -p tcp --dport 135 -j ACCEPT # iptables -I INPUT -s 192.168.0.0/24 -p tcp --dport 5722 -j ACCEPT # iptables -I INPUT -s 192.168.0.0/24 -p tcp --dport 464 -j ACCEPT # iptables -I INPUT -s 192.168.0.0/24 -p tcp --dport 9389 -j ACCEPT # iptables -I INPUT -s 192.168.0.0/24 -p tcp --dport 139 -j ACCEPT # iptables -I INPUT -s 192.168.0.0/24 -p udp --dport 389 -j ACCEPT # iptables -I INPUT -s 192.168.0.0/24 -p udp --dport 88 -j ACCEPT # iptables -I INPUT -s 192.168.0.0/24 -p udp --dport 53 -j ACCEPT # iptables -I INPUT -s 192.168.0.0/24 -p udp --dport 445 -j ACCEPT # iptables -I INPUT -s 192.168.0.0/24 -p udp --dport 464 -j ACCEPT # iptables -I INPUT -s 192.168.0.0/24 -p udp --dport 138 -j ACCEPT # iptables -I INPUT -s 192.168.0.0/24 -p udp --dport 67 -j ACCEPT # iptables -I INPUT -s 192.168.0.0/24 -p udp --dport 2535 -j ACCEPT # iptables -I INPUT -s 192.168.0.0/24 -p udp --dport 137 -j ACCEPT
可以看到,我将规则分为 2 部分,其中第一部分允许从 192.168.0.0/24 连接 tcp 端口,第二部分包含接受 udp 端口连接的规则
现在规则部分已经完成,但是如何验证规则是否有效以及如何调试防火墙规则的任何类型的问题?
建议为 iptables 配置一个单独的日志文件。
在这里,我们将使用包含 iptables 的所有日志规则的单独链将规则划分为子链
# iptables -N LOGGER # iptables -I INPUT 1 -s 192.168.0.0/24 -j LOGGER
使用上述 2 条规则,我们创建了一个新链,它将被 INPUT 链用作参考。
因此,进入 INPUT 链的任何流量都会查看 LOGGER 链中的任何适用规则,并将相应地记录在日志文件中,对我们来说是 /var/log/firewall.log
# iptables -I LOGGER -p tcp --dport 389 -j LOG --log-prefix="LDAP: " # iptables -I LOGGER -p tcp --dport 88 -j LOG --log-prefix="Kerberos: " # iptables -I LOGGER -p tcp --dport 53 -j LOG --log-prefix="DNS :" # iptables -I LOGGER -p tcp --dport 445 -j LOG --log-prefix="SMB: " # iptables -I LOGGER -p tcp --dport 135 -j LOG --log-prefix="RPC: " # iptables -I LOGGER -p tcp --dport 5722 -j LOG --log-prefix="SYSVOL: " # iptables -I LOGGER -p tcp --dport 464 -j LOG --log-prefix="Kerberos pswd: " # iptables -I LOGGER -p tcp --dport 9389 -j LOG --log-prefix="SOAP: " # iptables -I LOGGER -p tcp --dport 139 -j LOG --log-prefix="NetLogon: "
# iptables -I LOGGER -p udp --dport 389 -j LOG --log-prefix="LDAP: " # iptables -I LOGGER -p udp --dport 88 -j LOG --log-prefix="Kerberos: " # iptables -I LOGGER -p udp --dport 53 -j LOG --log-prefix="DNS: " # iptables -I LOGGER -p udp --dport 445 -j LOG --log-prefix="SMB :" # iptables -I LOGGER -p udp --dport 464 -j LOG --log-prefix="Kerberos pswd: " # iptables -I LOGGER -p udp --dport 138 -j LOG --log-prefix="Group Policy: " # iptables -I LOGGER -p udp --dport 67 -j LOG --log-prefix="DHCP: " # iptables -I LOGGER -p udp --dport 2535 -j LOG --log-prefix="DHCP: " # iptables -I LOGGER -p udp --dport 137 -j LOG --log-prefix="NetBIOS: "
如果我们想拒绝所有其他流量连接域服务器,除了 192.168.0.0/24
注意:此规则在任何生产环境中都可能是危险的,因为它会阻止来自上述范围以外的所有其他网络范围的流量
# iptables -I INPUT ! -s 192.168.0.0/24 -j DROP
下面是可以在域服务器上应用的 iptables 规则。
Samba 4 域服务器所需的端口如下所示(从微软页面收集)
协议和端口 | 用法 | 类型 |
---|---|---|
TCP and UDP 389 | 目录,复制,用户和计算机身份验证,组策略,信任 | LDAP. |
TCP and UDP 88 | 用户和计算机身份验证,森林级信任 | Kerberos. |
TCP and UDP 53 | 用户和计算机身份验证,名称解析,信任 | DNS. |
TCP and UDP 445 | 复制,用户和计算机身份验证,组策略,信任 | SMB,CIFS,SMB2 |
TCP 135 | 复制 | RPC. |
TCP 5722 | 文件复制 | RPC,DFSR(SYSVOL) |
UDP 123 | Windows时间,信任 | Windows时间 |
TCP and UDP 464 | 复制,用户和计算机身份验证,信任 | Kerberos更改/设置密码 |
UDP Dynamic | 组策略 | DCOM,RPC,EPM |
UDP 138 | DFS,组政策 | DFSN,NetLogon,NetBIOS数据报服务 |
TCP 9389 | ADDS Web服务 | 肥皂 |
UDP 67 and UDP 2535 | DHCP. | DHCP. |
UDP 137 | 用户和计算机身份验证, | Netlogon,NetBIOS名称解析 |
TCP 139 | 用户和计算机身份验证,复制 | DFSN,NetBIOS会话服务,NetLogon |
现在有两种方式来配置规则
- 为每个端口创建单独的规则
- 为所有端口创建一个规则
第一种方法非常冗长乏味,好处是它对排除故障和调试问题会更有帮助,但仅出于测试目的,我们可以使用第二种更简单的方法。
为多个端口创建单个规则
# iptables -I INPUT -s 192.168.0.0/24 -p tcp -m multiport --dport 389,88,53,445,135,5722,464,9389,139 -j ACCEPT # iptables -I INPUT -s 192.168.0.0/24 -p udp -m multiport --dport 389,88,53,445,464,138,67,2535,137 -j ACCEPT
可以看到,我们对所有端口使用单一规则(分离 tcp 和 udp 端口)减少了复杂性。
为了记录,我们可以使用上述规则(单独端口的单独规则:建议)或者以下规则
# iptables -I INPUT -s 192.168.0.0/24 -p tcp -m multiport --dport 389,88,53,445,135,5722,464,9389,139 -j LOG --log-prefix="TCP_LOG: "
# iptables -I INPUT -s 192.168.0.0/24 -p udp -m multiport --dport 389,88,53,445,464,138,67,2535,137 -j LOG --log-prefix="UDP_LOG: "
为了测试目的,我在我的服务器上应用了这些规则,您可以验证下面的日志
# cat /var/log/firewall.log Sep 24 15:07:31 test kernel: TCP_LOG: IN=eth0 OUT= MAC=00:50:56:9e:79:17:00:50:56:8a:71:2b:08:00 SRC=192.168.0.30 DST=192.168.0.61 LEN=40 TOS=0x00 PREC=0x00 TTL=128 ID=3224 DF PROTO=TCP SPT=1181 DPT=389 WINDOW=64912 RES=0x00 ACK FIN URGP=0 Sep 24 15:07:32 test kernel: TCP_LOG: IN=eth0 OUT= MAC=00:50:56:9e:79:17:00:50:56:8a:71:2b:08:00 SRC=192.168.0.30 DST=192.168.0.61 LEN=40 TOS=0x00 PREC=0x00 TTL=128 ID=3262 DF PROTO=TCP SPT=65107 DPT=53 WINDOW=65460 RES=0x00 ACK FIN URGP=0 Sep 24 15:07:32 test kernel: TCP_LOG: IN=eth0 OUT= MAC=00:50:56:9e:79:17:00:50:56:8a:71:2b:08:00 SRC=192.168.0.30 DST=192.168.0.61 LEN=40 TOS=0x00 PREC=0x00 TTL=128 ID=3248 DF PROTO=TCP SPT=1173 DPT=445 WINDOW=64343 RES=0x00 ACK URGP=0
日期:2020-06-02 22:18:35 来源:oir作者:oir