我希望以这样的方式设置我的 IPTables 防火墙:
connect()
接受任何新内容- 一旦收到数据:
- 如果目标端口在白名单中,则继续允许该连接和任何
RELATED
连接 - 否则,关闭/重置连接
- 如果目标端口在白名单中,则继续允许该连接和任何
我四处寻找,甚至尝试了一些自己的配置,但我对 IPTables 不太熟悉,而且没有成功。我的第一次尝试是这样的:
iptables -F
iptables -A INPUT -I lo -j ACCEPT
iptables -A INPUT -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT //example of allowed port
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j DROP
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
据我了解,应该执行以下操作:
- 接受所有本地主机流量
- 接受所有
NEW
连接 - 接受到端口的所有流量
22
- 丢弃所有未经端口
22
规则处理的流量 INPUT
(为、FORWARD
和OUTPUT
链设置默认规则)
但是,与 的端口 22 的连接仍然会失败connect()
。理想情况下,与 的通信22
应该畅通无阻,并且与任何其他端口的连接都会成功,但是一旦调用connect()
,连接就会关闭。send(...)
答案1
你的设置可能会按照你的意愿进行,一旦你有一个服务在相关端口上监听。Iptables 是一个数据包过滤器,而不是连接端点。