我正在尝试使用 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