iptables 单个multiport规则最多只能指定15个端口问题的解决方法

问题描述

我想通过iptables允许以下这20个端口通过:

iptables -A INPUT -p tcp -i eth0 -m multiport --dports 22,80,443,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46 -j ACCEPT

执行后报错,iptables: too many ports specified

原因

查看iptables官方文档, 发现iptables单条multiports规则最多只支持15个端口。 原文如下:

multiport

This module matches a set of source or destination ports. Up to 15 ports can be specified. A port range (port:port) counts as two ports. It can only be used in conjunction with -p tcp or -p udp.

解决方法

每15个端口新增一条multiport的rule即可, 代码参考:

#!/bin/bash

all_ports="22,80,443,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46"
ports_array=($(echo $all_ports | tr ',' ' '))
ports=""
for (( i=0; i<${#ports_array[@]}; i++ )); do
    ports+="${ports_array[$i]},"
    # One iptables multiports rule supports at most 15 ports
    if (( (i + 1) % 15 == 0 || i == ${#ports_array[@]} - 1 )); then
        ports=${ports%,}
        echo "ports: ${ports}"
        sudo iptables -I INPUT -p tcp -m multiport --dports ${ports} -j ACCEPT
        sudo iptables -I INPUT -p tcp -m multiport --dports ${ports} -j ACCEPT
        ports=""
    fi
done

参考

https://linux.die.net/man/8/iptables

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pcj_888

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值