我正在做一个项目。我正在尝试编写 iptables 规则来控制网络流量。
我写了一些规则。当我尝试将它们应用到我正在处理的盒子时,我要么被锁定,要么出错。
有些规则确实得到了应用,但它们的顺序似乎是随机的。
我正在使用 iptables 版本 1.3.5 的 centos 5 进行工作
以下是我正在使用的规则。
我收到的一些错误如下。
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