如何使用 iptables 在特定端口上实施白名单?

如何使用 iptables 在特定端口上实施白名单?

我正在尝试使用 iptables 实现一组规则,默认情况下会阻止给定的传入流量dport,但如果源 IP 或 MAC 地址位于某个白名单上,则允许传入流量。

到目前为止,我只知道能够将全局DROP策略应用于链(INPUT/OUTPUT等),但我不确定如何将这种策略仅应用于某个端口上的传入连接。

答案1

从你的描述来看,这是 iptables 中一个相当简单的问题。我会分三步来实现。

为您的策略添加新链:

iptables -N MYCHAIN

INPUT在链中为要处理的目标端口定义端口列表:

iptables -A INPUT -p <protocol, either tcp or udp> -m <again, protocol, match the '-p' switch value> --dport <portnum> -j MYCHAIN

其作用是定义特定端口,然后“跳转”到指定链(在本例中为 MYCHAIN)的规则。

现在,在 MYCHAIN 中设置规则以允许/拒绝流向所述端口的流量。

iptables -A MYCHAIN -s <source_IP> -j ACCEPT
iptables -A MYCHAIN -s <other_source_IP> -j ACCEPT
iptables -A MYCHAIN -j DROP

在最后一条规则中,您当然可以使用REJECT, 代替DROP。用户手册 ( man iptables) 应向您显示可用于记录或限制您所看到的流量的其他参数。还有一些在线教程可用于更高级的规则。

答案2

设置您的默认策略。默认情况下,不匹配以下给定规则的数据包将被丢弃:

iptables -P INPUT DROP

创建自定义链。我们将把满足给定条件的数据包(例如源地址为 10.0.0.1)传递到该链:

iptables -N CUSTOM

接受已经启动的连接并接受环回接口上的连接:

iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT

将新的 TCP 连接从 10.0.0.1(到达接口 eth0)传递到 CUSTOM 链:

iptables -s 10.0.0.1 -i eth0 -p tcp -m conntrack --ctstate NEW -j CUSTOM

将规则附加到接受特定端口的自定义链:

iptables -A CUSTOM -p tcp -m multiport --dports 22,80 -j ACCEPT

相关内容