在我的上一篇文章中,我们学习了Shorewall的安装、配置文件设置以及通过NAT进行端口转发的配置。在本文中,我们将深入探讨与Shorewall相关的常见错误,提供解决方案,并介绍其命令行选项。
Shorewall提供了一系列可以在命令行上运行的命令。查看`man shorewall`命令会让你看到很多内容,但我们首先要执行的任务是检查我们的配置文件。
sudo shorewall check
Shorewall将打印出所有配置文件的检查结果,以及其中包含的选项。
输出结果大致如下:
Determining Hosts in Zones...
Locating Actions Files...
Checking /usr/share/shorewall/action.Drop for chain Drop...
Checking /usr/share/shorewall/action.Broadcast for chain Broadcast...
Checking /usr/share/shorewall/action.Invalid for chain Invalid...
Checking /usr/share/shorewall/action.NotSyn for chain NotSyn..
Checking /usr/share/shorewall/action.Reject for chain Reject...
Checking /etc/shorewall/policy...
Adding Anti-smurf Rules
Adding rules for DHCP
Checking TCP Flags filtering...
Checking Kernel Route Filtering...
Checking Martian Logging...
Checking Accept Source Routing...
Checking MAC Filtration -- Phase 1...
Checking /etc/shorewall/rules...
Checking /usr/share/shorewall/action.Invalid for chain %Invalid...
Checking MAC Filtration -- Phase 2...
Applying Policies...
Checking /etc/shorewall/routestopped...
Shorewall configuration verified
我们关注的神奇一行是底部显示的“Shorewall configuration verified”。如果你收到任何错误,很可能是由于内核配置中缺少模块。
接下来我将展示如何解决两种常见错误。如果你计划将你的机器用作防火墙,建议重新编译内核并确保包含所有必要的模块。
常见错误及解决方法
第一个错误:关于NAT的错误
Processing /etc/shorewall/shorewall.conf...
Loading Modules...
Checking /etc/shorewall/zones...
Checking /etc/shorewall/interfaces...
Determining Hosts in Zones...
Locating Actions Files...
Checking /usr/share/shorewall/action.Drop for chain Drop...
Checking /usr/share/shorewall/action.Broadcast for chain Broadcast...
Checking /usr/shrae/shorewall/action.Invalid for chain Invalid...
Checking /usr/share/shorewall/action.NotSyn for chain NotSyn..
Checking /usr/share/shorewall/action.Reject for chain Reject...
Checking /etc/shorewall/policy...
Adding Anti-smurf Rules
Adding rules for DHCP
Checking TCP Flags filtering...
Checking Kernel Route Filtering...
Checking Martian Logging...
Checking Accept Source Routing...
Checking /etc/shorewall/masq...
ERROR: a non-empty masq file requires NAT in your kernel and iptables /etc/shorewall/masq (line 15)
如果你看到类似的错误,可能是当前的内核未编译支持NAT。大多数开箱即用的内核都没有启用NAT支持。请参考我的教程《如何编译Debian内核》以帮助你入门。
第二个常见错误:关于iptables和日志记录的错误
shorewall check
Checking...
Processing /etc/shorewall/params...
Processing /etc/shorewall/shorewall.conf
Loading Modules..
ERROR: Log level INFO requires LOG Target in your kernel and iptables
这个错误也可以通过重新编译内核来解决,但如果你愿意使用ULOG,这有一个快速的解决方法。ULOG是一种不同于syslog的日志记录机制,非常易于使用。
要设置此选项,你需要在`/etc/shorewall`目录下的所有配置文件中将“info”替换为“ULOG”。可以使用以下命令实现这一点:
cd /etc/shorewall
sudo sed -i 's/info/ULOG/g' *
之后,编辑`/etc/shorewall/shorewall.conf`文件并设置以下行:
LOGFILE=/var/log/shorewall.log
将其设置为你希望日志存储的路径。我的设置是:
LOGFILE=/var/log/shorewall.log
重新运行以下命令,应该能够得到一个健康的配置状态:
shorewall check
Shorewall的命令行接口
Shorewall的命令行界面提供了许多对系统管理员非常有用的命令。一个常用的命令,尤其是在进行大量防火墙配置修改时,就是保存当前的配置状态,以便在出现问题时进行回滚。
其语法非常简单:
sudo shorewall save <filename>
回滚同样简单:
sudo shorewall restore <filename>
Shorewall还可以配置为使用一个备用的配置目录。你可以在启动命令中指定该目录,但首先要检查它。
sudo shorewall check <config-directory>
如果你只是想试用某个配置,并检查其是否有效,可以使用“try”选项:
sudo shorewall try <config-directory>
Shorewall是Linux系统上众多强大防火墙解决方案之一。无论你处于网络管理的哪个层面,许多人都发现它既简单又有用。
这仅仅是一个起步,可以帮助你在不深入了解网络概念的情况下开始使用。正如往常一样,请自行查阅man手册和其他资源。Shorewall的邮件列表是一个非常棒且及时更新的资源,值得一看。











