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
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐