[工具] Shell 批量检测服务器 TCP 端口的联通状态 (nc 版)

介绍

基本信息

作者:朱明宇
名称:批量检测服务器 TCP 端口的联通状态
作用:批量检测服务器 TCP 端口的联通状态

使用方法

1. 端口清单 $portlist 每 1 个端口占用 1 行,格式为:<IP address corresponding to the port number to be connected>:<port number to connect>:<port functions>
2. 在此脚本的分割线内写入相应的内容,并和此脚本放在同一目录下
3. 给此脚本添加执行权限
4. 执行此脚本,并将要测试的服务器 IP 地址跟在脚本的后面,例:. <script> <server IP address 1> <server IP address 2> ……

脚本分割线里的变量

portlist=tcp_ports.txt #存放要测试的 TCP 端口的文件

注意

1. 此脚本执行前必须要先保证执行本脚本的用户能无密码 ssh 远程这些远程服务器
2. 执行此脚本前确保 nc 命令已经安装

脚本

#!/bin/bash

####################### Separator ########################

portlist=tcp_ports.txt

####################### Separator ########################

for hosts in $*
do

        echo $hosts
        ssh $hosts "which nc" &> /dev/null

        if [ $? -ne 0 ];then
                echo -e "\033[31m$hosts can not use nc !!!!!!!!!!\033[0m"
                continue
        fi

        for line in `cat $portlist`
        do
                ips=`echo $line | awk -F':' '{print $1}'`
                ports=`echo $line | awk -F':' '{print $2}'`
                remarks=`echo $line | awk -F':' '{print $3}'`

                ssh $hosts "nc -z -w 3 $ips $ports"

                if [ $? -ne 0 ];then
                        echo -e "\033[31m$ips $ports $remarks can not be connected !!!!!!!!!!\033[0m"
                else
                        echo -e "\033[32m$ips $ports $remarks can be connected\033[0m"
                fi

        done

done

[内容] Linux SELinux 标签的设置

内容一:开启 SELinux 标签

1.1 修改 SELinux 配置文件

# vim /etc/selinux/config

将以下内容:

......
SELINUX=disabled
......

修改为:

......
SELINUX=enforcing
......

或者:

......
SELINUX=perssive
......

1.2 重启系统

# reboot

内容二:SELinux 的常见特性

2.1 SELinux 特性一:创建的文件或目录会自动继承其父目录的 SELinux 标签

2.1.1 在 /var/www/html/ 目录下新创建 index.html 文件
# echo website > /var/www/html/index.html

(补充:这里以在 /var/www/html/ 目录下生成 index.html 文件为例)

2.1.2 显示 /var/www/html/ 目录的 SELinux 标签
# ls -dZ /var/www/html/
unconfined_u:object_r:httpd_sys_content_t:s0 index.html
2.1.3 显示新生成的 /var/www/html/index.html 标签
# ls -Z /var/www/html/index.html/index.html 
unconfined_u:object_r:httpd_sys_content_t:s0 index.html

(补充:从内容 1.1.2 和内容 1.1.3 命令的结果可以看出新生成的文件或其父目录的 SELinux 标签一致)

2.2 SELinux 特性二:移动文件或目录和保留属性复制文件或目录不会改变其 SELinux 标签,普通复制会改变 SELinux 标签

2.2.1 在 /tmp/ 目录下新创建 file1,file2,file3 文件
# touch /tmp/file{1,2,3}
2.2.2 显示 /tmp 目录的 selinux 标签
# ls -Zd /tmp
unconfined_u:object_r:user_tmp_t:s0 /tmp/
2.2.3 显示新创建文件的标签
# ls -Z /tmp/file*
unconfined_u:object_r:user_tmp_t:s0 /tmp/file1  unconfined_u:object_r:user_tmp_t:s0 /tmp/file2
unconfined_u:object_r:user_tmp_t:s0 /tmp/file3
2.2.4 将 /tmp/file1 复制到 /var/www/html/
# cp /tmp/file1 /var/www/html/
2.2.5 将 /tmp/file2 移动到 /var/www/html/
# mv /tmp/file2 /var/www/html/
2.2.6 将 /tmp/file2 复制到 /var/www/html/,并使用 -a 选项保留文件属性
# cp -a /tmp/file3 /var/www/html/
2.2.7 显示这些文件的 SELinux 标签
# ls -Z /var/www/html/file*
unconfined_u:object_r:httpd_sys_content_t:s0 file1           unconfined_u:object_r:user_tmp_t:s0 file3
unconfined_u:object_r:user_tmp_t:s0 file2

(补充:从内容 2.2.3 和内容 2.2.7 命令的结果可以看出只有普通复制会改变 SELinux 标签 )

内容三:显示某个文件、目录或进程 SELinux 标签

3.1 显示某个文件 SELinux 标签

# ls -Z <file>

3.2 显示某个目录 SELinux 标签

# ls -Zd <directory>

3.3 显示某个进程 SELinux 标签

# ps -auxZ | grep <process>

内容四:显示所有 SELinux 标签

4.1 显示所有文件和目录的 SELinux 标签

# semanage fcontext -l

(注意:需要单独安装 policycoreutils-python-utils 后才能使用 semanage 命令)

4.2 显示所有端口的 SELinux 标签

# semanage port -l

(注意:需要单独安装 policycoreutils-python-utils 后才能使用 semanage 命令)

4.3 显示所有进程的 SELinux 标签

# ps -auxZ

内容五:设置 SELinux 标签

5.1 设置文件和目录 SELinux 标签

5.1.1 使用 semanage fcontext 命令和 restorecon 命令设置文件和目录的 SELinux 标签
5.1.1.1 semanage fcontext 命令的常用选项

1) -a 添加或变更 SELinux 标签
2) -d 删除 SELinux 标签
3) -l 显示所有的 SELinux 标签
4) -t 指定上下文 SELinux 标签
5) -v 显示修改 SELinux 标签的内容
6) -R 递归设置 SELinux 标签
7) -m 变更 SELinux 标签

5.1.1.2 使用 semanage fcontext 命令和 restorecon 命令设置文件和目录的 SELinux 标签
5.1.1.2.1 使用 smanage fcontext 命令设置 SELinux 标签
# semanage fcontext -a -t httpd_sys_content_t "/tmp(/.*)?"

(补充:这里以将 /tmp(/.*) 的 SELinux 标签设置为 httpd_sys_content_t 为例)

(注意:需要单独安装 policycoreutils-python-utils 后才能使用 semanage 命令)

5.1.1.2.2 使用 restorecon 命令修改默认上下文
# restorecon -Rv /tmp
Relabeled /tmp from unconfined_u:object_r:default_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0
5.1.2 使用 chcon 命令设置 SELinux 标签
# chcon -t httpd_sys_content_t /tmp/*

(补充:这里以将 /tmp/* 的 SELinux 标签设置为 httpd_sys_content_t 为例)

5.2 设置端口 SELinux

# semanage port -a -t http_port_t -p tcp 82

(补充:这里以将 TCP 82 端口的 SELinux 标签设置为 http_port_t 为例)

(注意:需要单独安装 policycoreutils-python-utils 后才能使用 semanage 命令)