$ ip和iptables在Linux中有什么区别?

时间:2019-05-01 16:50:26

标签: linux iptables

我正在做一个保护Linux系统安全的项目。我们将进入VI,以更改系统允许的脚本。它已部分完成。

在下面的屏幕截图中,您可以看到它已经被填充以允许端口22,但是该行以$ip开头。我们使用的语句以iptables开头。这些是相同的命令吗?还是它们的含义完全不同?

我无法在网上找到太多解释这些差异的原因。

screenshot

2 个答案:

答案 0 :(得分:0)

iptables是命令。脚本中以iptables开头的每一行都运行iptables命令。

$ip是一个环境变量,大概包含要运行的命令的名称。脚本中以$ip开头的每一行都运行命令,其名称包含在$ip变量中。

您要我们告诉您变量设置为什么。我们不知道。

答案 1 :(得分:0)

检查提供的文件片段,您正在编辑的文件可能是Shell脚本(bash,sh等)。由于iptables是有效的linux命令,因此可能是这种情况。该文件也可以是perl,php或其他支持$ variable语法的语言。

看看文件的第一行,它是否以#!(sh-bang)开头?例如:

#!/bin/bash

取决于用于解释文件的脚本语言,$ip令牌可以解析为$ ip当前值所包含的内容。假设ip=iptables。然后,您给提供的文件片段应该等效于以下内容:

iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
# put your dport ACCEPT rules here
iptables -A INPUT -p tcp -m tcp --dport 3398 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

这似乎是多余的,因为第四行重复了第一行。

由于必须以root用户身份运行命令iptables才能更改系统防火墙,因此iptables$ip的区别是很大的。安全。

如果该文件可由恶意行为者写入,则恶意行为者可以修改该文件以产生恶意行为。但是这些变化将被检测到。

假设不良行为者能够更改$ ip变量的值?不良行为者可以将恶意行为注入该脚本。

例如,假设将变量设置为命令,

export ip='echo beat me bad ||iptables'

然后用户天真地将sudo root并执行脚本(文件)

$ sudo -u root
$ $ip
beat me || <iptables runs here>

您可以阅读有关编辑iptables规则here

的信息。

政策规则:对于需要root特权(或可以以root用户身份运行的脚本)(例如上述脚本(文件))之类的安全敏感文件,切勿使用命令插值。

假设错误的参与者可以更改您的PATH环境变量,并在路径中注入另一个名为iptables的可执行文件。当以根用户身份运行命令和脚本时,需要注意路径。考虑对命令使用完整的路径名(或检查PATH是否未损坏);例如:

/usr/sbin/iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
# put your dport ACCEPT rules here
/usr/sbin/iptables -A INPUT -p tcp -m tcp --dport 3398 -j ACCEPT
/usr/sbin/iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

策略规则:要么以root身份运行时显式检查PATH,要么使用命令的完整路径来确保命令不被重定向。