在RedHat7里有几种防火墙共存:firewalld、iptables、ebtables,默认是使用firewalld来管理netfilter子系统,不过底层调用的命令仍然是iptables等。
firewalld跟iptables比起来至少有两大好处:
1、firewalld可以动态修改单条规则,而不需要像iptables那样,在修改了规则后必须得全部刷新才可以生效;
2、firewalld在使用上要比iptables人性化很多,即使不明白“五张表五条链”而且对TCP/IP协议也不理解也可以实现大部分功能。
firewalld跟iptables比起来,不好的地方是每个服务都需要去设置才能放行,因为默认是拒绝。而iptables里默认是每个服务是允许,需要拒绝的才去限制。
1.firewalld对指定端口的配置
添加1521端口:
firewall-cmd --permanent --add-port=1521/tcp
取消1521端口
firewall-cmd --permanent --remove-port=1521/tcp
1.打开firewalld防火墙
systemctl start firewalld.service
2.添加防火墙规则(对指定ip开放指定端口)
复制代码
(1) memcached 端口设置。允许主机192.168.1.108访问11211端口
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.108" port protocol="tcp" port="11211" accept"
(2) redis端口设置。允许主机192.168.1.108访问6379端口
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.108" port protocol="tcp" port="6379" accept"
复制代码
3.添加防火墙策略
在firewalld服务中配置一条富规则,使其拒绝192.168.10.0/24网段的所有用户访问本机的ssh服务(22端口):
复制代码
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.10.0/24" service name="ssh" reject"
显示:success
firewall-cmd --reload
显示:success
复制代码
4.更新防火墙规则
firewall-cmd --reload
5.查看配置结果,验证配置
firewall-cmd --list-all
6.删除规则
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="21.20.3.33" port protocol="tcp" port="3306" accept"
firewall-cmd --list-all
常用查看信息命令:
查看版本:$ firewall-cmd --version
查看帮助:$ firewall-cmd --help
查看设置:
显示状态:$ firewall-cmd --state
查看区域信息: $ firewall-cmd --get-active-zones
查看指定接口所属区域:$ firewall-cmd --get-zone-of-interface=eth0
拒绝所有包:# firewall-cmd --panic-on
取消拒绝状态:# firewall-cmd --panic-off
查看是否拒绝:$ firewall-cmd --query-panic
其中遇到了failed to start firewalld
解决方法:
systemctl unmask firewalld.service
遇到bash:/usr/bin/firewall-cmd :/usr/bin/python
需要修改
/usr/libexec/urlgrabber-ext-down
/usr/sbin/firewalld
/usr/bin/firewall-cmd
首行的python 加上一个python2就可以了