CentOS6使用iptables控制Linuxs的端口,这里不做介绍,自行百度。CentOS7使用firewalld代替了原来的iptables。下面记录如何使用firewalld开放Linux端口:(这里以端口9090为例)
查询有哪些端口是开启的
firewall-cmd --list-port
查询9090端口是否开启:
firewall-cmd --query-port=9090/tcp
开启9090端口
firewall-cmd --zone=public --add-port=9090/tcp --permanent
重启防火墙生效
firewall-cmd --reload
命令含义:
–zone #作用域
–add-port=9090/tcp #添加端口,格式为:端口/通讯协议
–permanent #永久生效,没有此参数重启后失效
删除9090端口
firewall-cmd --zone=public --remove-port=9090/tcp --permanent
重启防火墙生效
firewall-cmd --reload
关闭并禁用
systemctl stop firewalld
systemctl disable firewalld
最后附赠一自动化脚本 port-operator.sh
,添加删除查看端口可方便了
#/bin/bash
:<<!
【脚本说明】
1、此脚本用于操作防火墙端口;
2、主要功能可以查看防火墙端口开发列表,查看状态、添加、删除端口;
!
# 进程名称
operate=$1
ports=$2
# 提示信息
msg='Please input params 【list|<sta|add|del> <port1,port2,...>】'
# 定制化shell输出
function custom_print(){
echo -e "\033[5;34m ***** \033[0m"
echo -e "\033[32m $@ ! \033[0m"
echo -e "\033[5;34m ***** \033[0m"
}
# 用指定分隔符切分字符串,第一个参数为分隔符,第二个为被切分的字符串
function split(){
OLD_IFS="$IFS"
IFS="$1"
str="$2"
arr=($str)
IFS="$OLD_IFS"
echo ${arr[@]}
}
# 执行shell命令,同时指定是否输出执行结果,默认不输出
function execmd(){
cmd="$1"
prt="$2"
if [[ $prt = "t" || $prt = "true" ]]; then
$cmd
elif [[ $prt = "r" || $prt = "return" ]]; then
echo $($cmd)
else
$cmd > /dev/null
fi
}
# 判断输入参数
if [[ -z $operate || $operate = "help" ]]; then
custom_print $msg
else
# 判断输入参数
if [[ $operate = "list" ]]; then
cmd="firewall-cmd --list-port"
execmd "$cmd" 't'
elif [[ -z $ports ]]; then
custom_print $msg
else
arr_port=$(split , $ports)
if [[ $operate = "sta" ]]; then
for port in $arr_port; do
cmd="firewall-cmd --query-port=$port/tcp"
echo -e "$port=$(execmd "$cmd" 'r')\r"
done
elif [[ $operate = "add" ]]; then
for port in $arr_port; do
cmd="firewall-cmd --zone=public --add-port=$port/tcp --permanent"
execmd "$cmd"
done
cmd="firewall-cmd --reload"
execmd "$cmd"
elif [[ $operate = "del" ]]; then
for port in $arr_port; do
cmd="firewall-cmd --zone=public --remove-port=$port/tcp --permanent"
execmd "$cmd"
done
cmd="firewall-cmd --reload"
execmd "$cmd"
else
custom_print $msg
fi
fi
fi