我是一名初级系统管理员,想了解一些基本知识。我正在尝试为我的服务器设置 CloudFlare。有一些 IP 需要列入白名单,CloudFlare 建议在终端上使用以下命令来执行此操作:
iptables -I INPUT -p tcp -m multiport --dports http,https -s "$ip" -j ACCEPT
其中白名单 IP替换为 $ip。我的问题是语法问题。该命令是否应该
iptables -I INPUT -p tcp -m multiport --dports http,https -s "103.21.244.0/22" -j ACCEPT
或者应该省略" "
,即:
iptables -I INPUT -p tcp -m multiport --dports http,https -s 103.21.244.0/22 -j ACCEPT
或者说这无所谓?
我最近对 iptables 进行了一些调整,感觉不需要" "
,因此造成了混淆。抱歉,我问了个菜鸟问题。
答案1
如果您要扩展 shell 变量(如)$ip
,则引号非常可取,以避免错误和 shell 转义安全问题。如果它是显式字符串(如您所展示的),则它是可选的。
引号本身不是发送给 iptables 的参数的一部分;在 Linux 上,它们被 Shell 使用,以避免在空格上拆分参数(这在 Windows 中不起作用,因为 Windows 中的参数不是字符串向量)。
如果您的 IP 列表(白名单或黑名单)很长,请考虑使用 ipset,它的加载、卸载和执行速度比长链规则要快得多。