博客是我工作的好帮手,遇到困难就来博客找资料
分类: 系统运维
2017-03-08 11:17:34
查看防火墙状态。
systemctl status firewalld
临时关闭防火墙命令。重启电脑后,防火墙自动起来。
systemctl stop firewalld
永久关闭防火墙命令。重启后,防火墙不会自动启动。
systemctl disable firewalld
打开防火墙命令。
systemctl enable firewalld
防火墙开放特定端口:
文件/etc/sysconfig/iptables
1、关闭firewall:
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
2、安装iptables防火墙
yum install iptables-services #安装
查看防火墙状态。
systemctl status firewalld
临时关闭防火墙命令。重启电脑后,防火墙自动起来。
systemctl stop firewalld
永久关闭防火墙命令。重启后,防火墙不会自动启动。
systemctl disable firewalld
打开防火墙命令。
systemctl enable firewalld
防火墙开放特定端口:
文件/etc/sysconfig/iptables
1、关闭firewall:
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
2、安装iptables防火墙
yum install iptables-services #安装
防火墙
Redhat Enterprise Linux7已经默认使用firewalld作为防火墙,其使用方式已经变化。
基于iptables的防火墙被默认不启动,但仍然可以继续使用。
RHEL7中有几种防火墙共存:firewalld、iptables、ebtables等,默认使用firewalld作为防火墙,管理工具是firewall-cmd。RHEL7的内核版本是3.10,在此版本的内核里防火墙的包过滤机制是
firewalld,使用firewalld来管理netfilter,不过底层调用的命令仍然是iptables等。因为这几种daemon是冲突的,所以建议禁用其他几种服务
systemctl status {firewalld,iptable,ip6tables,ebtables}
例如若要禁用iptables、ip6tables、ebtables防火墙,方法如下图
systemctl mask {firewalld,iptable,ebtables,ip6tables}
查看这几种服务是否正在运行
systemctl is-active iptables.service
systemctl is-active firewalld.service
systemctl is-active ip6tables.service
systemctl is-active ebtables.service
RHEL7虽然有iptables但是不建议使用了,使用新的firewalld服务。
查看firewalld软件包是否安装
rpm -qa |grep firewalld
Firewalld提供了支持网络/防火墙区域(zone)定义网络链接以及接口安全等级的防火墙管理工具。拥有运行时配置和永久配置选项。它也支持允许服务或者应用程序直接添加防火墙规则的接口。以前的
system-config-firewall防火墙模型是静态的,每次修改都要求防火墙完全重启。这个过程包括内核 netfilter 防火墙模块的卸载和新配置所需模块的装载等。相反,
firewall daemon 动态管理防火墙,不需要重启整个防火墙便可应用更改。因而也就没有必要重载所有内核防火墙模块了。
数据包要进入到内核必须要通过这些zone中的一个,而不同的zone里定义的规则不一样(即信任度不一样,过滤的强度也不一样)。可以根据网卡所连接的网络的安全性来判断,这张网卡的流量到底使用哪个zone,比如上图来自eth0的流量全部使用zone1的过滤规则,eth1的流量使用zone2。一张网卡同时只能绑定到一个zone
预定义的服务:服务是端口和/或协议入口的组合。
端口和协议:定义了 tcp 或 udp 端口,端口可以是一个端口或者端口范围。
ICMP 阻塞:可以选择 Internet 控制报文协议的报文。这些报文可以是信息请求亦可是对信息请求或错误条件创建的响应。
伪装:私有网络地址可以被映射到公开的IP地址。这是一次正规的地址转换。
端口转发:端口可以映射到另一个端口以及/或者其他主机。
在进行firewalld配置之前,我想来讨论一下区域(zones)这个概念。默认情况就有一些有效的区域。由firewalld 提供的区域按照从不信任到信任的顺序排序。
丢弃区域(Drop Zone):如果使用丢弃区域,任何进入的数据包将被丢弃。这个类似与我们之前使用iptables -j drop。使用丢弃规则意味着将不存在响应。
阻塞区域(Block Zone):阻塞区域会拒绝进入的网络连接,返回icmp-host-prohibited,只有服务器已经建立的连接会被通过即只允许由该系统初始化的网络连接。
公共区域(Public Zone):只接受那些被选中的连接,默认只允许 ssh 和 dhcpv6-client。这个 zone 是缺省 zone
外部区域(External Zone):这个区域相当于路由器的启用伪装(masquerading)选项。只有指定的连接会被接受,即ssh,而其它的连接将被丢弃或者不被接受。
隔离区域(DMZ Zone):如果想要只允许给部分服务能被外部访问,可以在DMZ区域中定义。它也拥有只通过被选中连接的特性,即ssh。
工作区域(Work Zone):在这个区域,我们只能定义内部网络。比如私有网络通信才被允许,只允许ssh,ipp-client和 dhcpv6-client。
家庭区域(Home Zone):这个区域专门用于家庭环境。它同样只允许被选中的连接,即ssh,ipp-client,mdns,samba-client和 dhcpv6-client。
内部区域(Internal Zone):这个区域和工作区域(Work Zone)类似,只有通过被选中的连接,和home区域一样。
信任区域(Trusted Zone):信任区域允许所有网络通信通过。记住:因为trusted是最被信任的,即使没有设置任何的服务,那么也是被允许的,因为trusted是允许所有连接的
以上是系统定义的所有的 zone,但是这些 zone 并不是都在使用。只有活跃的 zone 才有实际操作意义。
Firewalld的原则:
如果一个客户端访问服务器,服务器根据以下原则决定使用哪个 zone 的策略去匹配
1.如果一个客户端数据包的源 IP 地址匹配 zone 的 sources,那么该 zone 的规则就适
用这个客户端;一个源只能属于一个zone,不能同时属于多个zone。
2.如果一个客户端数据包进入服务器的某一个接口(如eth0)区配zone的interfaces,
则么该 zone 的规则就适用这个客户端;一个接口只能属于一个zone,不能同时属于多个zone。
3.如果上述两个原则都不满足,那么缺省的 zone 将被应用
你可以使用任何一种 firewalld 配置工具来配置或者增加区域,以及修改配置。工具有例如firewall-config 这样的图形界面工具, firewall-cmd 这样的命令行工具,或者你也可以在配置文件目录中创建或者拷贝区域文件,/usr/lib/firewalld/zones 被用于默认和备用配置,/etc/firewalld/zones 被用于用户创建和自定义配置文件。
命令行工具firewall-cmd支持全部防火墙特性,基本应用如下:
1、 获取firewalld状态
firewall-cmd --state
2、在不改变状态的条件下重新加载防火墙:
firewall-cmd --reload
如果你使用--complete-reload,状态信息将会丢失。
3、获取支持的区域列表
firewall-cmd --get-zones
这条命令输出用空格分隔的列表
4、获取所有支持的服务
firewall-cmd --get-services
这条命令输出用空格分隔的列表。
服务是firewalld所使用的有关端口和选项的规则集合。被启动的服务会在firewalld服务开启或者运行时自动加载。默认情况下,很多服务是有效的。使用下面命令可列出有效的服务。
想要列出默认有效的服务,也可以进入下面的目录也能够取得。
# cd /usr/lib/firewalld/services/
想要创建自己的服务,需要在下面的目录下定义它。比如,现在我想添加一个rhmp服务,端口号1935。首先,任选一个服务复制过来。
接下来把复制过来的文件重命名为“rtmp.xml”,
接下来打开并编辑文件的头部、描述、协议和端口号,以供RTMP服务使用,如下图所示。
重启firewalld服务或者重新加载设置,以激活这些设置。
# firewall-cmd --reload
为确认服务是否已经启动,运行下面的命令获取有效的服务列表。
# firewall-cmd --get-services
5、获取所有支持的ICMP类型
firewall-cmd --get-icmptypes
这条命令输出用空格分隔的列表。
6、列出全部启用的区域的特性(即查询当前防火墙策略)
解释:特性可以是定义的防火墙策略,如:服务、端口和协议的组合、端口/数据报转发、伪装、ICMP 拦截或自定义规则等
firewall-cmd --list-all-zones
上面的命令将会列出每种区域如block、dmz、drop、external、home、internal、public、trusted以及work。如果区域还有其它详细规则(rich-rules)、启用的服务或者端口,这些区域信息也会分别被罗列出来
7、输出区域全部启用的特性。如果省略区域,将显示默认区域的信息。
firewall-cmd [--zone=] --list-all
firewall-cmd --list-all
输出指定区域启动的特性
firewall-cmd --zone=public --list-all
8、查看默认区域
firewall-cmd --get-default-zone
public区域是默认区域。
在文件/etc/firewalld/firewalld.conf中定义成DefaultZone=public。
9、设置默认区域
firewall-cmd --set-default-zone=区域名
流入默认区域中配置的接口的新访问请求将被置入新的默认区域。当前活动的连接将不受影响。
firewall-cmd --set-default-zone=drop
firewall-cmd --get-default-zone
firewall-cmd --get-active-zone
防火墙中的一切都与一个或者多个区域相关联,下面对各个区进行说明:
Zone Description
-----------------------------------------------------
drop (immutable) Deny all incoming connections, outgoing ones are accepted.
block (immutable) Deny all incoming connections, with ICMP host prohibited messages issued.
trusted (immutable) Allow all network connections
public Public areas, do not trust other computers
external For computers with masquerading enabled, protecting a local network
dmz For computers publicly accessible with restricted access.
work For trusted work areas
home For trusted home network connections
internal For internal network, restrict incoming connections
drop(丢弃)
任何接收的网络数据包都被丢弃,没有任何回复。仅能有发送出去的网络连接。
block(限制)
任何接收的网络连接都被 IPv4 的 icmp-host-prohibited 信息和 IPv6 的 icmp6-adm-prohibited 信息所拒绝。
public(公共)
在公共区域内使用,不能相信网络内的其他计算机不会对您的计算机造成危害,只能接收经过选取的连接。
external(外部)
特别是为路由器启用了伪装功能的外部网。您不能信任来自网络的其他计算,不能相信它们不会对您的计算机造成危害,只能接收经过选择的连接。
dmz(非军事区)
用于您的非军事区内的电脑,此区域内可公开访问,可以有限地进入您的内部网络,仅仅接收经过选择的连接。
work(工作)
用于工作区。您可以基本相信网络内的其他电脑不会危害您的电脑。仅仅接收经过选择的连接。
home(家庭)
用于家庭网络。您可以基本信任网络内的其他计算机不会危害您的计算机。仅仅接收经过选择的连接。
internal(内部)
用于内部网络。您可以基本上信任网络内的其他计算机不会威胁您的计算机。仅仅接受经过选择的连接。
trusted(信任)
可接受所有的网络连接。
操作防火墙的一些常用命令:
--显示防火墙状态
[root@localhost zones]# firewall-cmd --state
running
--列出当前有几个zone
[root@localhost zones]# firewall-cmd --get-zones
block dmz drop external home internal public trusted work
--取得当前活动的zones
[root@localhost zones]# firewall-cmd --get-active-zones
public
interfaces: ens32 veth4103622
--取得默认的zone
[root@localhost zones]# firewall-cmd --get-default-zone
public
--取得当前支持service
[root@localhost zones]# firewall-cmd --get-service
RH-Satellite-6 amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns ftp high-availability http https imaps ipp ipp-client ipsec kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind samba samba-client smtp ssh telnet tftp tftp-client transmission-client vnc-server wbem-https
--检查下一次重载后将激活的服务。
[root@localhost zones]# firewall-cmd --get-service --permanent
RH-Satellite-6 amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns ftp high-availability http https imaps ipp ipp-client ipsec kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind samba samba-client smtp ssh telnet tftp tftp-client transmission-client vnc-server wbem-https
--列出zone public 端口
[root@localhost zones]# firewall-cmd --zone=public --list-ports
--列出zone public当前设置
[root@localhost zones]# firewall-cmd --zone=public --list-all
public (default, active)
interfaces: eno16777736
sources:
services: dhcpv6-client ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
--增加zone public开放http service
[root@localhost zones]# firewall-cmd --zone=public --add-service=http
success
[root@localhost zones]# firewall-cmd --permanent --zone=internal --add-service=http
success
--重新加载配置
[root@localhost zones]# firewall-cmd --reload
success
--增加zone internal开放443/tcp协议端口
[root@localhost zones]# firewall-cmd --zone=internal --add-port=443/tcp
success
--列出zone internal的所有service
[root@localhost zones]# firewall-cmd --zone=internal --list-services
dhcpv6-client ipp-client mdns samba-client ssh
设置黑/白名单
--增加172.28.129.0/24网段到zone trusted(信任)
[root@localhost zones]# firewall-cmd --permanent --zone=trusted --add-source=172.28.129.0/24
success
--列出zone truste的白名单
[root@localhost zones]# firewall-cmd --permanent --zone=trusted --list-sources
172.28.129.0/24
--活动的zone
[root@localhost zones]# firewall-cmd --get-active-zones
public
interfaces: eno16777736
--添加zone truste后重新加载,然后查看--get-active-zones
[root@localhost zones]# firewall-cmd --reload
success
[root@localhost zones]# firewall-cmd --get-active-zones
public
interfaces: ens32 veth4103622
trusted
sources: 172.28.129.0/24
--列出zone drop所有规则
[root@localhost zones]# firewall-cmd --zone=drop --list-all
drop
interfaces:
sources:
services:
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
--添加172.28.13.0/24到zone drop
[root@localhost zones]# firewall-cmd --permanent --zone=drop --add-source=172.28.13.0/24
success
--添加后需要重新加载
[root@localhost zones]# firewall-cmd --reload
success
[root@localhost zones]# firewall-cmd --zone=drop --list-all
drop
interfaces:
sources: 172.28.13.0/24
services:
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
[root@localhost zones]# firewall-cmd --reload
success
--从zone drop中删除172.28.13.0/24
[root@localhost zones]# firewall-cmd --permanent --zone=drop --remove-source=172.28.13.0/24
success
--查看所有的zones规则
[root@localhost ~]# firewall-cmd --list-all-zones
最后再提几点:
1、很多时候我们需要开放端口或开放某IP访问权限,我们需要先查看我们当前默认的zone是哪个,然后在对应的zone里面添加port和source,这样对外才会有作用。
比如我当前的默认zone是public,我需要开放80端口对外访问,则执行如下命令:
[root@localhost zones]# firewall-cmd --zone=public --permanent --add-port=80/tcp
success
[root@localhost zones]# firewall-cmd --reload
success
2、使用命令的时候加上 --permanent 是永久生效的意思,在重启防火墙服务后依然生效。否则,只对重启服务之前有效。
3、我们执行的命令,结果其实都体现在具体的配置文件中,其实我们可以直接修改对应的配置文件即可。
以public zone为例,对应的配置文件是/etc/firewalld/zones/public.xml,像我们刚刚添加80端口后,体现在public.xml 中的内容为:
[root@localhost zones]# cat public.xml
Public
For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.
这个大家可自己再进一步了解下配置文件的结构后,进行自行配置,不过记得要在配置后 --reload 或重启 firewall 服务。