IP表错误

IP表错误

我正在做一个项目。我正在尝试编写 iptables 规则来控制网络流量。

我写了一些规则。当我尝试将它们应用到我正在处理的盒子时,我要么被锁定,要么出错。

有些规则确实得到了应用,但它们的顺序似乎是随机的。

我正在使用 iptables 版本 1.3.5 的 centos 5 进行工作

以下是我正在使用的规则。

http://pastebin.com/gjhAmBLm

我收到的一些错误如下。

Starting firewall:
Dropped all existing rules
Set Policy to drop all traffic

Added SSH rules
./firewall.sh: line 64: -A: command not found
./firewall.sh: line 65: -A: command not found
Added HTTP traffic
allow bidirectional sql traffic
iptables v1.3.5: host/network `eth3' not found
Try `iptables -h' or 'iptables --help' for more information.
iptables v1.3.5: host/network `eth3' not found
Try `iptables -h' or 'iptables --help' for more information.
allow ICMP in and out
./firewall.sh: line 84: -A: command not found
./firewall.sh: line 85: $,iptables: command not found

完毕。

这是 ifconfig 的打印输出:

eth0      Link encap:Ethernet  HWaddr 00:15:17:57:C1:30
          inet addr:10.1.3.2  Bcast:10.1.3.255  Mask:255.255.255.0
          inet6 addr: fe80::215:17ff:fe57:c130/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:21 errors:0 dropped:0 overruns:0 frame:0
          TX packets:24 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:5290 (5.1 KiB)  TX bytes:5348 (5.2 KiB)
          Interrupt:169 Memory:fe9e0000-fea00000

eth2      Link encap:Ethernet  HWaddr 00:04:23:9F:0C:C6
          inet addr:192.168.1.34  Bcast:192.168.3.255  Mask:255.255.252.0
          inet6 addr: fe80::204:23ff:fe9f:cc6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1285 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1079 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:166472 (162.5 KiB)  TX bytes:141002 (137.6 KiB)

eth3      Link encap:Ethernet  HWaddr 00:15:17:57:C1:32
          inet addr:10.1.2.3  Bcast:10.1.2.255  Mask:255.255.255.0
          inet6 addr: fe80::215:17ff:fe57:c132/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:19 errors:0 dropped:0 overruns:0 frame:0
          TX packets:29 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:5203 (5.0 KiB)  TX bytes:5962 (5.8 KiB)
          Interrupt:90 Memory:fe7e0000-fe800000

eth4      Link encap:Ethernet  HWaddr 00:15:17:57:C1:33
          inet addr:10.1.1.2  Bcast:10.1.1.255  Mask:255.255.255.0
          inet6 addr: fe80::215:17ff:fe57:c133/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:20 errors:0 dropped:0 overruns:0 frame:0
          TX packets:26 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:5250 (5.1 KiB)  TX bytes:5747 (5.6 KiB)
          Interrupt:122 Memory:fe7a0000-fe7c0000

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:55 errors:0 dropped:0 overruns:0 frame:0
          TX packets:55 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:4902 (4.7 KiB)  TX bytes:4902 (4.7 KiB)

我不能乱搞 ETH2。它总是必须起来。如果我阻止连接,它将终止我的 SSH 会话。我正在使用一个名为 deterlab 的系统。我是一名大学生,我们可以使用这个系统来测试项目。 ETH2 是系统控制网络。

谢谢您的帮助。如果您有任何疑问,请在评论中留言,我会一一解答。

答案1

这是直接的脚本调试。如果您运行脚本,-x您将看到变量的扩展。

运行bash -x testcode.sh(文件名为testcode.sh),第 64 行变得可见,如下所示,

-A INPUT -i eth3 -p tcp  --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

这样做的原因是这一行使用$iptables作为其操作而不是$IPTABLES.变量(就像 Unix/Linux CLI 中的大多数内容一样)区分大小写。

继续,iptables第 79 行的参数在语法上是错误的:

$IPTABLES -A INPUT -s $ETH -p tcp --dport 3306 -j ACCEPT

-s标志预计源地址/子网你已经给了它$ETH3一个接口名称。你的意思是-i $ETH也许吗?

现在,第 85 行。该行的开头完全被破坏了(最初的虚假字符,变量的大小写错误):

$,iptables -A OUTPUT -p icmp --icmp-type 0 -s $ETH -d 10.1.2.0/24 -m state --state ESTABLISHED,RELATED -j ACCEPT

答案2

首先,尝试查看显示的错误。它们告诉您哪些行产生错误,在您的情况下,一些原因是显而易见的。看:

./firewall.sh: line 85: $,iptables: command not found

$您在and之间添加了逗号,造成了拼写错误iptables

然后,您应该注意变量名称区分大小写。因此,$IPTABLES不同于$iptables

一旦你解决了这些问题,你的允许 SSH 的线路应该相当好(注意输出规则,你必须指定输出接口-o,而不是-i

$IPTABLES -A INPUT -i $ETH2 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A OUTPUT -o $ETH2 -p tcp  --sport 22 -m state --state ESTABLISHED -j ACCEPT

相关内容