首页 > 代码库 > centos7的防火墙firewalld
centos7的防火墙firewalld
centos7的防火墙引入了新的防火墙firewalld,和以前的iptables完全不同,不过我觉得用起来还是新的好。
新安装的系统默认就启用了新防火墙,老的虽然还有,但是需要把新的停了,才能启动。
新系统安装完了,默认就开启了SSH协议,和ping(ICMP)协议。
据介绍,有图显示,其实只是对操作界面进行了更换,内核的操作还是用iptables去netfilter
引入了防火墙真正的概念,zone(区域),然后把网络接口归属于zone,这些都是真正防火墙的概念。
firewall-config是图形界面的命令,如果没安装图形界面就只能用firewall-cmd命令行。
现在的图形界面,普通的开启服务,端口还好用,稍微复杂的策略就完蛋了,所以命令行还是要搞清楚。
看看系统是否启动了新防火墙,
#firewall-cmd --state
running
表示在运行
默认是把接口划归public的zone,用命令可以查看现在活动的zone,zone也可以自己增加,不过一般用不上,除非真做防火墙用,有多个网络接口,一个接口只能属于一个zone,如果就一个网卡还搞啥啊。
# firewall-cmd --get-active-zones
public
interfaces: ens160
这表示活动的zone是public,接入的网络接口是interfaces: ens160
firewall-cmd --zone=public --list-interfaces
命令是指定zone,列出接口
可以用firewall-cmd --zone=public --list-all列出所有信息
public (default, active)
interfaces: ens160
sources:
services: dhcpv6-client ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
这里public (default, active)表示默认的zone是public,如果不指定zone(--zone=public),就是默认是public
services: dhcpv6-client ssh
服务就开了ssh,其它都接不进了,dhcpv6-client是为了本机获取IP地址的,不是对外服务,但是虽然没有ipv4的dhcp,还是可以获取到IP的,安全问题不大。
看看有多少预定制服务
firewall-cmd --get-service
RH-Satellite-6 amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns freeipa-ldap freeipa-ldaps freeipa-replication ftp high-availability http https imaps ipp ipp-client ipsec iscsi-target kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind rsyncd samba samba-client smtp ssh telnet tftp tftp-client transmission-client vdsm vnc-server wbem-https
很多吧,那么这样的预定义的东西可以改,可以加吗?
看看/usr/lib/firewalld/services
里面那么多xml文件,自己是不是可以修改,添加呢,哈哈。
有些就是定义了端口号,比如ssh
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>SSH</short>
<description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>
<port protocol="tcp" port="22"/>
</service>
想换端口号,把22改成想要的。
但是有些比较复杂,如ftp
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>FTP</short>
<description>FTP is a protocol used for remote file transfer. If you plan to make your FTP server publicly available, enable this option. You need the vsftpd package installed for this option to be useful.</description>
<port protocol="tcp" port="21"/>
<module name="nf_conntrack_ftp"/>
</service>
不仅仅有端口号,还有module,这可以智能打开的服务器的关键,主要是ftp协议的控制端口为21,但是数据端口还有其它的,以前的老ftp协议用20端口来传,现在为了更加安全,数据端口是动态产生的,所以必须要一个程序动态打开端口,module name="nf_conntrack_ftp"就干这个用的。
增加,修改的命令打进去,立刻生效,不像以前的iptables,但是这个效果是在内存里,如果重启了,就消失了,如果想让命令存盘,加上参数--permanent
其实就是在/etc/firewalld/zones里面,各个zone的xml文件里,不过直接编辑publ.xml是不会生效的,当然重启机器后会生效,那么生效?
firewall-cmd --reload
这个命令,在远程用ssh连接进去还是可以用,不会断,但是
firewall-cmd --complete-reload就不行,会切断所有连接,ssh虽然本人测试没断,但是其它的连接可能会断。
永久增加smtp服务到默认zone
firewall-cmd --permanent --add-service=smtp
这时候去查看文件
cat /etc/firewalld/zones/public.xml
多一条<service name="smtp"/>
增加端口tcp的8080
firewall-cmd --add-port=8080/tcp
这时候查看public.xml文件,发现并没有增加这一条,
用firewall-cmd --list-all查看,发现有ports: 8080/tcp,这是为啥呢,自己想。
下面说说图形界面搞不定的,高级策略定制
比如说你打算只允许指定的IP访问你的FTP服务,那个图形界面就搞不定,就是不能输入,看来做图形界面的太粗制滥造了。
可以先用命令查查看有没有那么复杂的策略
firewall-cmd --list-rich-rule
firewall-cmd --add-rich-rule="rule family=‘ipv4‘ service name=‘ftp‘ source address=‘192.168.2.0/24‘ log level=‘warning‘ limit value=http://www.mamicode.com/‘1/m‘ audit accept"
这个source address=‘192.168.2.0/24‘就是许可的IP地址,limit value=http://www.mamicode.com/‘1/m‘ audit是审查,一分钟一次,m是分钟,s是秒,log level=‘warning‘是记录到log,级别为warning,最后的accept当然是许可了。
其它的一些比如锁定功能,怕一些人乱搞,在这个文件里加上
/etc/firewalld/firewalld.conf
Lockdown=yes
重引导一下reload
再加策略就无效了。
有个Panic模式,对应突发攻击比较有用
firewall-cmd --panic-on
关闭所有网络连接
firewall-cmd --panic-off
打开
查询状态
firewall-cmd --query-panic
默认是no
本文出自 “天才没有那1%是万万不行的” 博客,请务必保留此出处http://xushen.blog.51cto.com/1673219/1871155
centos7的防火墙firewalld