听起来您只想允许内部地址建立 TCP 连接。如果您使用从私有寻址网络到公共 Internet 的 NAT,它是有状态的,并且它以您想要的方式工作。
如果你的路由器两边都有公共地址,你可以做这样的事情(这可以有多种方式,具体取决于你想要做什么):
interface GigabitEthernet0/0
description WAN connection
ip address 17.35.32.66 255.255.255.224
ip access-group OUTBOUND_ONLY in
ip access-list extended OUTBOUND_ONLY
permit tcp any any established
这将允许内部主机发起到外部主机的 TCP 连接,并允许外部主机响应已建立的连接,但它将阻止来自外部的任何其他流量。
思科为这样的事情维护了许多文档(只需搜索)。例如,配置常用 IP ACL:
只允许内部网络发起 TCP 会话
此图显示从 NetA 发往 NetB 的 TCP 流量被允许,而从 NetB 发往 NetA 的 TCP 流量被拒绝。
此示例中 ACL 的目的是:
- 允许 NetA 中的主机启动并建立与 NetB 中的主机的 TCP 会话。
- 拒绝 NetB 中的主机发起和建立以 NetA 中的主机为目的地的 TCP 会话。
当数据报具有以下条件时,此配置允许数据报通过 R1 上的接口以太网 0 入站:
- 已确认 (ACK) 或重置 (RST) 位设置(指示已建立的 TCP 会话)
- 目的端口值大于 1023
R1
hostname R1
!
interface ethernet0
ip access-group 102 in
!
access-list 102 permit tcp any any gt 1023 established
由于大多数 IP 服务的知名端口使用小于 1023 的值,因此任何目标端口小于 1023 或未设置 ACK/RST 位的数据报都会被 ACL 102 拒绝。因此,当来自 NetB 的主机启动 TCP通过为小于 1023 的端口号发送第一个 TCP 数据包(未设置同步/启动数据包 (SYN/RST) 位)连接,它被拒绝并且 TCP 会话失败。从 NetA 发起的发往 NetB 的 TCP 会话是允许的,因为它们为返回数据包设置了 ACK/RST 位并使用大于 1023 的端口值。