Linux在RHEL/CentOS下使用Shorewall配置防火墙

时间:2020-01-09 10:34:17  来源:igfitidea点击:

正确配置的防火墙可以大大提高基于RHEL/CentOS的系统的安全性。
如何为具有Internet连接的CentOS或Red Hat Enterprise Linux系统配置基于岸壁的防火墙?
如何安装和配置Shorewall来保护以下小型企业网络?

Shoreline防火墙(也称为Shorewall)是基于Netfilter(iptables)的防火墙,可以在专用防火墙系统,多功能网关/路由器/服务器或独立GNU/Linux系统上使用。

什么是Shorewall?

通常,您使用/etc/sysconfig/iptables或Shell脚本编写一组复杂的防火墙规则。
但是,通过Shorewall,您可以使用一组配置文件中的条目来描述防火墙/网关的要求。

Shorewall会读取这些配置文件,并在iptables,iptables-restore,ip和tc实用程序的帮助下,Shorewall配置Netfilter和Linux网络子系统以满足您的需求。

Shorewall不是一个简单易用的GUI工具。

设置示例

  • server1.theitroad.local(防火墙)基于CentOS/RHEL的服务器。您需要在该系统上安装Shorewall。该服务器具有两个网络接口。 eth0连接到LAN,eth1连接到Internet。您还需要在该服务器上安装诸如lighttpd或nginx之类的反向代理服务器,以便它可以负载平衡三个Apache后端之间的流量。
  • Apache {1..3} Apache Web服务器。
  • Mysqld MySQL数据库服务器。
  • 默认的防火墙策略是丢弃所有流量。允许从局域网(eth0)到Internet(eth1)和/或局域网上托管的其他服务器的所有连接请求。将所有从Internet(eth1)到防火墙(fw)或lan网络的连接请求删除;这些被忽略的连接请求将使用info syslog优先级(日志级别)进行记录。最后,从Internet打开端口80和443。防火墙拒绝所有其他连接请求;这些拒绝的连接请求将使用info syslog优先级(日志级别)进行记录。

在CentOS或RHEL上安装Shorewall

首先,打开EPEL repo并键入以下yum命令以安装Shorewall软件包(Debian/Ubuntu Linux用户阅读此常见问题以获取更多信息):

# yum install shorewall

输出示例:

Loaded plugins: protectbase, rhnplugin
0 packages excluded due to repository protections
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package shorewall.noarch 0:4.5.4-1.el6 will be installed
--> Processing Dependency: shorewall-core = 4.5.4-1.el6 for package: shorewall-4.5.4-1.el6.noarch
--> Processing Dependency: perl(Digest::SHA) for package: shorewall-4.5.4-1.el6.noarch
--> Running transaction check
---> Package perl-Digest-SHA.x86_64 1:5.47-127.el6 will be installed
---> Package shorewall-core.noarch 0:4.5.4-1.el6 will be installed
--> Finished Dependency Resolution
 
Dependencies Resolved
 
================================================================================
Package            Arch      Version             Repository               Size
================================================================================
Installing:
shorewall          noarch    4.5.4-1.el6         epel                    517 k
Installing for dependencies:
perl-Digest-SHA    x86_64    1:5.47-127.el6      rhel-x86_64-server-6     62 k
shorewall-core     noarch    4.5.4-1.el6         epel                     64 k
 
Transaction Summary
================================================================================
Install       3 Package(s)
 
Total download size: 643 k
Installed size: 2.1 M
Is this ok [y/N]: y
Downloading Packages:
(1/3): perl-Digest-SHA-5.47-127.el6.x86_64.rpm           |  62 kB     00:00     
(2/3): shorewall-4.5.4-1.el6.noarch.rpm                  | 517 kB     00:00     
(3/3): shorewall-core-4.5.4-1.el6.noarch.rpm             |  64 kB     00:00     
-------------------------------------------------------------------------------
Total                                           1.0 MB/s | 643 kB     00:00     
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : 1:perl-Digest-SHA-5.47-127.el6.x86_64                        1/3 
  Installing : shorewall-core-4.5.4-1.el6.noarch                            2/3 
  Installing : shorewall-4.5.4-1.el6.noarch                                 3/3 
  Verifying  : shorewall-4.5.4-1.el6.noarch                                 1/3 
  Verifying  : shorewall-core-4.5.4-1.el6.noarch                            2/3 
  Verifying  : 1:perl-Digest-SHA-5.47-127.el6.x86_64                        3/3 
 
Installed:
  shorewall.noarch 0:4.5.4-1.el6                                                
 
Dependency Installed:
  perl-Digest-SHA.x86_64 1:5.47-127.el6   shorewall-core.noarch 0:4.5.4-1.el6  
 
Complete!

关于配置文件的注意事项

  • 默认配置目录位于/etc/shorewall /
  • Shorewall全局配置文件位于/etc/shorewall/shorewall.conf中。该文件设置了适用于整个Shorewall的选项。
  • /etc/shorewall/zones文件声明了您的网络区域。关于允许哪些流量和拒绝哪些流量的规则以区域表示。
  • /etc/shorewall/interfaces文件用于定义到Shorewall的防火墙网络接口。
  • "/etc/shorewall/policy"文件为"/etc/shorewall/zones"中定义的区域之间的连接定义了高级策略。
  • 要提供策略例外,请在/etc/shorewall/rules中添加规则。使用此文件可以打开或关闭端口等。
  • 要将IP,应用程序,MAC地址和子网列入黑名单,请使用/etc/shorewall/blacklist文件。

规则状态和顺序

岸壁的排序非常重要,因为当规则已匹配时,将执行操作,然后不执行其他操作。

  • 对于进入防火墙的每个连接请求,首先将根据/etc/shorewall/rules文件检查该请求。
  • 如果该文件中没有规则与连接请求匹配,那么将应用/etc/shorewall/policy中与请求匹配的第一个策略。
  • 如果在/etc/shorewall/shorewall.conf中为策略定义了默认操作,则在执行策略之前将调用该操作。

配置

Shorewall使用区域的概念。
对于两个网络接口配置,您需要使用一组区域来定义网络,如下所示:

#NAME                  DESCRIPTION
fw                     The firewall itself
wan                    The Internet
lan                    Your Local Network

配置/etc/shorewall/zones

编辑文件"/etc/shorewall/zones",输入:

# vi /etc/shorewall/zones

如下更新文件:

fw      firewall
wan     ipv4                            
lan     ipv4

Shorewall将防火墙系统识别为自己的区域。
指定防火墙本身的区域名称(通常如上文件所示为fw)存储在shell变量$FW中,该变量可在整个Shorewall配置中用于引用防火墙区域。

wan和lan是我们的标准IPv4 Shorewall区域类型,如果将此列留空,则是默认值。

配置/etc/shorewall/interfaces

接下来,您需要在区域中定义主机。
您可以使用/etc/shorewall/interfaces文件将区域与网络接口关联。
在双接口示例中,使用该文件定义了两个区域,如下所示。
编辑文件"/etc/shorewall/interfaces",输入:

# vi /etc/shorewall/interfaces

附加以下整体:

wan     eth1    -       routefilter,blacklist,tcpflags,logmartians,nosmurfs
lan     eth0

上面的文件将网络区域定义为与防火墙连接的所有IPv4主机。

WAN区域(作为所有IPv4主机通过eth1进行接口连接)和lan作为所有IPv4主机通过eth0进行接口连接。

WAN接口eth1具有针对常见Internet攻击的其他高级保护:

  • routefilter为此接口打开内核路由过滤,即打开反欺骗测量。
  • blacklist对照/etc/shorewall/blacklist文件检查到达此接口的数据包。黑名单文件用于执行静态黑名单。您可以按源地址(IP或MAC)或应用程序将其列入黑名单。
  • tcpflags检查到达此接口的数据包是否存在TCP标志的某些非法组合,例如x mas或空或无效数据包。在/var/log/messages文件中登录后,丢弃被发现具有这种标志组合的数据包(请参阅Shorewall.conf中的" TCP_FLAGS_DISPOSITION"选项的设置)(请参见Shorewall.conf中的" TCP_FLAGS_LOG_LEVEL"的设置) 。
  • logmartians打开内核火星日志记录(记录不可能的源地址的数据包)。强烈建议您在接口上设置routefilter的同时还要设置logmartians。
  • nosmurfs过滤蓝精灵的数据包(以广播地址为源的数据包),即打开防蓝精灵保护。

配置/etc/shorewall/policy

您在/etc/shorewall/policy中表达了从一个区域到另一区域的连接的默认策略。
文件。
政策的基本选择是:

  • ACCEPT接受连接。
  • DROP忽略连接请求。
  • REJECT将适当的错误返回到连接请求。
  • 可以将连接请求日志记录指定为策略的一部分,并且常规(强烈建议)记录DROP和REJECT策略。

编辑文件"/etc/shorewall/policy",输入:

# vi /etc/shorewall/policy

附加政策:

## allow lan to all and firewall to all (outgoing to internet) but no traffic from wan/internet to lan or firewall itself 
lan     all     ACCEPT
$FW     all     ACCEPT
wan     all     DROP    info
# this must be last rule
all     all     REJECT  info

保存并关闭文件。

配置/etc/shorewall/rules

该文件中的条目通过定义/etc/shorewall/policy文件中列出的策略的例外来控制连接的建立。
使用此文件打开或关闭TCP/UDP端口。
您可以允许访问/usr/share/shorewall/macro.*文件中定义的应用程序服务器,例如FTP,HTTP,HTTPS等。
语法如下:

ACTION SOURCE  DEST    PROTO   DEST    SOURCE  RATE    USER/
                               PORT(S) PORT(S) LIMIT   GROUP

或者

ACTION    SOURCE        DEST      PROTO      DEST
                                             PORT(S)

例如,要打开从WAN(互联网)到防火墙的端口22,请输入:

ACCEPT     wan           $FW       tcp        22

您有一个忽略来自wan区域(来自Internet)的所有连接尝试的策略,该策略的上述例外允许您连接到防火墙上运行的SSH服务器。
现在,您可以打开端口80和443,该端口允许连接到在防火墙上运行的反向代理服务器:

## open port 443 from the wan to the nginx running on 192.54.1.1:443 on your firewall.
HTTPS/ACCEPT    wan     $FW:192.54.1.1              -       443
## open port 80 from the wan to the nginx running on 192.54.1.1:80 and 192.54.1.2:80 on your firewall.
HTTP/ACCEPT     wan     $FW:192.54.1.1,192.54.1.2   -       80

WAN/Internet接口不应接收任何源在RFC 1918保留的范围之一(即私有或不可路由的地址)中的数据包。
如果您的内核中启用了数据包处理或连接跟踪匹配,则其目标地址由RFC 1918保留的数据包也将被拒绝。
添加以下DROP规则:

Rfc1918/DROP    wan     $FW

以下例外允许您从WAN/Internet ping您的防火墙:

Ping/ACCEPT     wan     $FW

保存并关闭文件。
请注意,Ping和Rfc1918都是在/usr/share/shorewall/macro.Ping文件中定义的宏。
要查看ping宏类型:

# cat /usr/share/shorewall/macro.Ping

输出示例:

# Shorewall version 4 - Ping Macro
#
# /usr/share/shorewall/macro.Ping
#
#       This macro handles 'ping' requests.
#
###############################################################################
#ACTION SOURCE  DEST    PROTO   DEST    SOURCE  RATE    USER/
#                               PORT(S) PORT(S) LIMIT   GROUP
PARAM   -       -       icmp    8

要查看所有受支持的宏的列表,请输入:

# ls /usr/share/shorewall/macro.*

配置/etc/shorewall/blacklist

编辑文件"/etc/shorewall/blacklist",输入:

# vi /etc/shorewall/blacklist

块192.53.1.0/24子网和190.1.2.3 IP地址:

192.53.1.0/24
190.1.2.3

保存并关闭文件。

检查防火墙配置是否有错误

键入以下命令:

# vi /etc/shorewall/shorewall.conf

找到这行:

STARTUP_ENABLED=No

用。


来代替:

STARTUP_ENABLED=Yes

保存并关闭文件。

Shorewall使用先编译后执行的方法。

Shorewall配置编译器读取配置文件并生成Shell脚本。
编译步骤中的错误会导致脚本被丢弃并且命令被中止。
如果编译步骤未发现任何错误,那么将执行shell脚本。
要检查错误,请输入:

# shorewall check

保存现有的防火墙规则

使用iptables-save命令以易于分析的格式将IP表的内容转储到屏幕或文件中:

# iptables-save > /root/old.firewall.config

但是,我建议您使用以下命令在CentOS/RHEL上保存和禁用iptables服务:

# service iptables save
# service iptables stop
# chkconfig iptables off

如何启动/停止/重新启动Shorewall?

键入以下命令(警告配置不当的防火墙规则可能会阻止您的远程访问,包括ssh,因此在键入以下命令时要小心):

# service shorewall start
# service shorewall stop
# service shorewall restart
# service shorewall status

或者

# /etc/init.d/shorewall start
# /etc/init.d/shorewall stop
# /etc/init.d/shorewall restart
# /etc/init.d/shorewall status

要在引导时打开Shorewall,请输入:

# chkconfig shorewall on

如何列出防火墙规则?

键入以下命令:

# shorewall show
# shorewall show | less

我如何查看防火墙当前正在跟踪的IP连接?

# shorewall show connections

我如何查看防火墙日志?

# shorewall show hits
# shorewall show hits|less

如何显示我的内核/iptables功能?

# shorewall show capabilities

Shorewall命令和防火墙配置允许更多选项。
我建议您阅读Shorewall命令手册页以获取更多信息。

如何列出所有宏?

# shorewall show macros
# shorewall show Web

输出示例:

Shorewall 4.5.4 Macro Web at server1.theitroad.local - Thu Dec 20 03:50:27 CST 2012
#
# Shorewall version 4 - Web Macro
#
# /usr/share/shorewall/macro.Web
#
#	This macro handles WWW traffic (secure and insecure).  This
#	macro is deprecated - use of macro.HTTP and macro.HTTPS instead
#	is recommended.
#
###############################################################################
#ACTION	SOURCE	DEST	PROTO	DEST	SOURCE	RATE	USER/
#				PORT(S)	PORT(S)	LIMIT	GROUP
PARAM	-	-	tcp	80	# HTTP (plaintext)
PARAM	-	-	tcp	443	# HTTPS (over SSL)