一:首先来了解下Centos7新增的命令工具网络防火墙:firewall-cmd,非常强大!
firewalld-cmd是centos7的一大特性,最大的好处有两个:支持动态更新,不用重启服务;第二个就是加入了防火墙的“zone”概念。
firewall常用操作示例:
状态:# systemctl status firewalld 或者 firewall-cmd --state(查看防火墙开启关闭状态)
启动:# systemctl start firewalld
停止:# systemctl stop firewalld
使能:# systemctl enable firewalld (可让防火墙开机自启动,防火墙默认开机不启动的,需手动启动)
禁用:# systemctl disable firewalld
#查看当前zones
# firewall-cmd --get-active-zones
#显示当前开放端口
# firewall-cmd --zone=public --list-ports
#添加端口到永久区
# firewall-cmd --permanent --zone=public --add-port=61080/tcp --add-port=61446/tcp
#添加服务到永久区
# firewall-cmd --permanent --zone=public --add-service=samba
#刷新配置,添加到永久区后必须刷新配置才能生效
# firewall-cmd --reload
#显示当前开放的服务
# firewall-cmd --zone=public --list-service
下面来说一下: zone 这个参数是做什么的
zone的概念:硬件防火墙默认一般有三个区,firewall引入这一概念系统默认存在以下区域:
drop:默认丢弃所有包
block:拒绝所有外部连接,允许内部发起的连接
public:指定外部连接可以进入
external:这个不太明白,功能上和上面相同,允许指定的外部连接
dmz:和硬件防火墙一样,受限制的公共连接可以进入
work:工作区,概念和workgoup一样,也是指定的外部连接允许
home:类似家庭组
internal:信任所有连接
二:来看看具体的操作
1、首先要明白,firewall-cmd是Centos7系统的网络防火墙,既然是防火墙它就有能力确定外面想访问内部端口的权限,我之前在阿里云Centos7.3上安装了mysql,它的内部端口号是3306,但是我用sql的图形化界面工具通过公网IP始终连接不了,后来找到了原因,就是系统打开了firewall之后没有开放3306端口的外界访问权限,所以这点非常重要,需要用:firewall-cmd --zone=public --list-ports查看当前linux系统开放的端口号,也可以用netstat -tunlp 查看当前linux系统正在监听的端口号,就知道自己想要的liunx系统端口号是否已经打开。没有开放的,但是自己又需要用到的,那就马上用:firewall-cmd --permanent --zone=public --add-port=8080/tcp开放端口,其中数字就是你想要开放的端口号, --permanent参数表示永久的意思,这样就不必每次启动防火墙的时候配置,tcp代表你要开放的端口号的网络协议,也可以是udp的。
2、接来下就是允许防火墙伪装ip : firewall-cmd --add-masquerade --permanent 这一步必须做。
3、将80端口的流量转发至8080: firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 --permanent
4.最后别忘了 firewall-cmd --reload 使最新的防火墙设置规则生效。
自己亲测,非常好用,firewall-cmd就是为代替iptables而生!