之前配置 openSUSE 的时候,发现大变色龙(雾)的 iptables 配置和别的发行版不大一样。
它是通过一个名为 SuSEfirewall2 的工具来实现对 iptables 规则的配置,虽然一开始无从下手,但这个工具还是比较好用的,我就在这里介绍一下。
SuSEfirewall2 简介
SuSEfirewall2 实际上是一个脚本,它会根据 /etc/sysconfig/SuSEfirewall2
这个配置文件写入 iptables 规则。同时他也是系统中的一个服务,可以服务启动的时候自动根据配置文件设定 iptables 规则。SuSEfirewall2 的配置可以在 YaST 中完成,但 Firewall
模块中只提供了基本的设置,更多的高级设置可以通过 /etc/sysconfig Editor
模块或者是 /etc/sysconfig/SuSEfirewall2
这个配置文件来设定。
SuSEfirewall2 的基本命令
-
启动
1
$SuSEfirewall2 start
-
关闭
1
$SuSEfirewall2 stop
-
查看防火墙运行状态(实际上是输出运行
iptables -nvL
的结果)1
$SuSEfirewall2 status
-
开机自动启动
1
$chkconfig SuSEfirewall2_init on
-
配置 SuSEfirewall2 的方法
1
$vim /etc/sysconfig/SuSEfirewall2
-
YaST 和 SuSEfirewall2 的关系
YaST 提供了 SuSEfirewall2 的简单接口,在 YaST 里面修改,其实也是在修改 SuSEfirewall2 的配置文件,如果手动修改配置文件,也可以被 YaST 读入识别
配置样例
在 /etc/sysconfig/SuSEfirewall2
文件中,我们通过定义变量的值来进行配置:
|
|
防火墙区域
SuSEfirewall2 默认定义了三个不同的 Zone:
- EXT/External Zone (不信任的,比如 Internet)
- INT/Interanl Zone (完全信任的, 没有过滤, 比如家庭网络,LAN)
- DMZ/Demilitarized Zone (在防火墙后的服务器, 比如 Apache 需要被外部 Internet 访问)
我们可以把 interface 添加到不同的区域来执行不同的防火墙策略,对应的选项为配置文件中的 FW_DEV_zone
选项。External Zone 一般都是外部地址,有公网 ip。SuSEfirewall2 对于 External Zone 的策略是默认过滤,在 Interanl Zone 中要访问外网,需要在防火墙上做一个 SNAT/MASQUERADE。Interanl Zone 和 Demilitarized Zone 均为内部地址,默认均不进行过滤。前一个我们容易理解,后一个直接翻译过来是“非军事化区”,它大概相当于防火墙后的一台服务器,不与外网直接连接。如果外网用户要连接到 Demilitarized Zone,那么请求先到防火墙,然后在防火墙上做一个 DNAT,把目的地址替换为 Demilitarized Zone 的内部 ip 地址,再发到 Demilitarized Zone 中的服务器。
例子:
|
|
允许访问服务
所有的防火墙区域都能允许四种服务:
- TCP -
FW_SERVICES_EXT_TCP, FW_SERVICES_INT_TCP, FW_SERVICES_DMZ_TCP
- UDP -
FW_SERVICES_EXT_UDP, FW_SERVICES_INT_UDP, FW_SERVICES_DMZ_UDP
- RPC -
FW_SERVICES_EXT_RPC, FW_SERVICES_INT_RPC, FW_SERVICES_DMZ_RPC
- IP -
FW_SERVICES_EXT_IP, FW_SERVICES_INT_IP, FW_SERVICES_DMZ_IP
TCP 和 UDP 服务可以通过填写端口号或者端口名(可以在 /etc/services
中查看)来开放,另外你可以用 {port}:{port}
的形式来开放一个端口段,例如:
|
|
更多访问限制
上面提到的访问限制配置是比较简单粗暴的,它只规定了该服务能或不能被访问,而没有更多的访问限制策略,比如针对网段的限制等。其实 SuSEfirewall2 提供了这个功能,我们可以使用如下选项:
- FW_SERVICES_ACCEPT_EXT, FW_SERVICES_ACCEPT_INT, FW_SERVICES_ACCEPT_DMZ
针对每一个服务规则,这些选项提供了4个参数,可以为 ip 地址或其他的关键词,也可以称为 flags。格式为以空格分隔的 net,protocol[,dport[,sport[,flags]]]
,例如:
|
|
支持以下 flags:
- hitcount=NUMBER : ipt_recent –hitcount parameter
- blockseconds=NUMBER : ipt_recent –seconds parameter
- recentname=NAME : ipt_recent –name parameter
例子:
|
|
地址伪装
允许内部区域完整访问外网,包括 INT 和 DMZ,例如:
|
|
IPv6
Internet Protocol version 6 (IPv6) 在配置文件中有如下选项:
- IPv6 支持 - FW_IPv6 (yes/no)
- IPv6 连出配置 - FW_IPv6_REJECT_OUTGOING ([yes]/no/drop)
例子:
|
|