Linux在RHEL/CentOS下使用Shorewall配置防火墙
正确配置的防火墙可以大大提高基于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)