Debian/Ubuntu Linux如何安装和配置Shoreline防火墙(Shorewall)

时间:2019-11-20 08:53:11  来源:igfitidea点击:

在Debian或Ubuntu Linux服务器中,如何设置防火墙?
如何安装Shoreline防火墙?
如何在RHEL/Fedora和CentOS Linux下快速设置防火墙?

Shorewall

Shorewall是一个基于iptables的开源工具Linux。它使复杂的防火墙配置变得更加容易。

如何安装Shorewall?

以root用户身份执行以下命令:

# apt-get install shorewall shorewall-common shorewall-shell

Shorewall的配置文件

所有配置文件位于/etc/shorewall /目录中:

  • /etc/shorewall/shorewall.confShorewall全局配置文件。
  • /etc/shorewall/interfaces接口文件用于定义到Shorewall的防火墙网络接口。
  • /etc/shorewall/policyShorewall策略文件,用于在/etc/shorewall/zones配置文件中定义的区域之间的连接。
  • /etc/shorewall/rulesShorewall规则文件。
  • /etc/shorewall/zones/etc/shorewall/zones文件声明您的网络区域。您可以通过/etc/shorewall/interfaces或/etc/shorewall/hosts中的条目在每个区域中指定主机。

配置shorewall

编辑/etc/default/shorewall文件:

# vi /etc/default/shorewall

将启动变量设置为1,允许Shorewall启动:

startup=1

定义网络区域

编辑/etc/shorewall/zones:

# vi /etc/shorewall/zones

添加下面内容:

#ZONE   TYPE    OPTIONS                 IN                      OUT
#                                       OPTIONS                 OPTIONS
fw      firewall
net     ipv4

其中

  • fw防火墙区域名称。指定防火墙本身。您必须只有一个防火墙区域。防火墙区域不允许使用任何选项。在"zone"列中输入的名称将保存在shell变量$FW中,在其他配置文件中可以使用该变量来指定防火墙区域。
  • net ipv4区域名称。这是标准的Shorewall区域。

创建接口

创建接口文件:

# vi /etc/shorewall/interfaces

添加如下内容:

#ZONE   INTERFACE       BROADCAST       OPTIONS
net     eth0            detect          tcpflags,logmartians,nosmurfs
net     eth1            detect          dhcp
net     ppp+            detect          dhcp

在此示例中,定义了到Shorewall的防火墙网络接口(eth0)。

其中:

  • net是eth0接口的区域。必须与/etc/shorewall/zones中声明的区域名称相对应。
  • eth0网域的eth0接口。
  • detect这是可选的,但是如果您使用特殊值detect,则如果您的iptables和内核包括Address Type匹配支持,Shorewall将为您检测广播地址。
  • tcpflags,logmartians,nosmurfs以逗号分隔的选项列表:
  • tcpflags检查到达此接口的包中是否存在某些非法的TCP标志组合。
  • logmartians打开内核火星日志记录,即记录具有不可能的源地址的数据包。对于充当路由器的系统,这是必须的。
  • nosmurfs过滤蓝精灵的数据包(以广播地址为源的数据包)
  • dhcp接口通过DHCP获得其IP地址
  • net eth1 detect dhcpeth1是网络区域接口。在这里,是我的无线接口。
  • net ppp + detect dhcpppp +(ppp0,ppp1等等)是我的网络区域接口。供pppd使用(例如,pptp vpn客户端)

定义shorewall政策

编辑/etc/shorewall/policy:

# vi /etc/shorewall/policy

添加下面代码:

#SOURCE         DEST            POLICY          LOG LEVEL       LIMIT:BURST
fw              all             ACCEPT
net             all             DROP            info
 
# The FOLLOWING POLICY MUST BE LAST
all             all             REJECT          info

其中

  • fw防火墙区域(即计算机本身)。
  • net网络区域。
  • 在此示例中,允许来自防火墙(计算机)的所有流量。但是,所有来自net区域的流量都将被丢弃。换句话说,w我只允许来自桌面系统的所有传出流量,但是默认情况下不允许任何传入连接,并使用syslog级别KERNEL.INFO进行记录。
  • 最后一行拒绝/删除所有连接,并记录在KERNEL.INFO级别日志。

打开需要开放的端口

编辑/etc/shorewall/rules:

# vi /etc/shorewall/rules

添加下面代码:

#############################################################################################################
#ACTION         SOURCE          DEST            PROTO   DEST    SOURCE          ORIGINAL        RATE            USER/   MARK
#                                                       PORT    PORT(S)         DEST            LIMIT           GROUP
ACCEPT          net             $FW:192.168.1.5 TCP     9500
ACCEPT          net             $FW:192.168.1.5 UDP     9500
 
# Drop Ping from the "bad" net zone.. and prevent your log from being flooded..
Ping(DROP)      net             $FW

接收路由器转发的TCP/UDP端口9500上的链接。

下面的示例将打开http和ssh端口:

#Forward all ssh and http connection requests from the internet to local system 192.168.1.5
#ACTION SOURCE  DEST            PROTO   DEST    SOURCE  ORIGINAL
#                                       PORT    PORT(S) DEST
ACCEPT  net     $FW:192.168.1.5 tcp     ssh,http

如何启动/停止/重启shorewall?

使用以下命令:

/etc/init.d/shorewall start
/etc/shorewall/rules stop
/etc/shorewall/rules restart

如何查看当前加载的防火墙规则?

# shorewall show | less

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

# shorewall show connections

如何看到防火墙区域?

# shorewall show zones

如何查看防火墙日志?

使用hits子命令查看Shorewall日志消息报告数量:

# shorewall hits