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

介绍:

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

使用方法:
1. 端口清单 $portlist 每一个端口占用一行,格式为:<要联通端口号对应的 IP 地址>:<要联通的端口号>:<端口功能>
2. 在此脚本的分割线内写入相应的内容,并和此脚本放在同一目录下
3. 给此脚本添加执行权限
4. 执行此脚本,并将要测试的服务器 IP 地址跟在脚本的后面,例:. <脚本名> <服务器 IP 地址 1> <服务器 IP 地址 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 配置文件
1.2 重启系统

内容二:SELinux 的常见特性
2.1 SELinux 特性一:创建的文件或目录会自动继承其父目录的 SELinux 标签
2.1.1 在 /var/www/html/ 目录下新创建 index.html 文件
2.1.2 查看 /var/www/html/ 目录的 SELinux 标签
2.1.3 查看新生成的 /var/www/html/index.html 标签
2.2 SELinux 特性二:移动文件或目录和保留属性复制文件或目录不会改变其 SELinux 标签,普通复制会改变 SELinux 标签
2.2.1 在 /tmp/ 目录下新创建 file1,file2,file3 文件
2.2.2 查看 ls -Zd /tmp/ 目录的 SELinux 标签
2.2.3 查看新创建文件的标签
2.2.4 将 /tmp/file1 复制到 /var/www/html/
2.2.5 将 /tmp/file2 移动到 /var/www/html/
2.2.6 将 /tmp/file2 复制到 /var/www/html/,并使用 -a 选项保留文件属性
2.2.7 查看这些文件的 SELinux 标签

内容三:查看某个文件或目录 SELinux 标签
3.1 查看某个文件 SELinux 标签
3.2 查看某个目录 SELinux 标签
3.3 查看某个进程 SELinux 标签

内容四:查看所有 SELinux 标签
4.1 查看所有文件和目录的 SELinux 标签
4.2 查看所有端口的 SELinux 标签
4.3 查看所有进程的 SELinux 标签

内容五:设置 SELinux 标签
5.1 设置文件和目录 SELinux 标签
5.1.1 使用 semanage fcontext 命令和 restorecon 命令设置文件和目录的 SELinux 标签
5.1.1.1 semanage fcontext 命令的常用选项
5.1.1.2 使用 semanage fcontext 命令和 restorecon 命令设置文件和目录的 SELinux 标签
5.1.1.2.1 使用 smanage fcontext 命令设置 SELinux 标签
5.1.1.2.2 使用 restorecon 命令修改默认上下文
5.1.2 使用 chcon 命令设置 SELinux 标签
5.2 设置端口 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 查看 ls -Zd /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 命令)

[内容] Postfix 数据的加密 (通过 TLS 实现)

内容一:Postfix 不使用 TLS 加密数据传输的后果

1) 收发的邮件数据会被他人截取
2) 给 Gmail 等电子邮箱发送邮件时,会提示类似 “ *** 未对此邮件进行加密” 的信息

内容二:给 Postfix 设置 TLS 加密数据传输的方法
2.1 给 Postfix 的配置文件设置 TLS 机密数据传输的参数

# vim /etc/postfix/main.cf

添加以下内容:

......
smtpd_tls_security_level = may
smtp_tls_security_level = may
......


补充:
smtpd_tls_security_level 代表接收邮件的 TLS 安全等级
smtp_tls_security_level 代表发送邮件的 TLS 安全等级
TLS 的常用安全等级有 none、may 和 encrypt :
1) none 表示禁止使用 TLS 加密
2) may 表示可以接收不使用 TLS 加密的邮件,但是会提出支持 TLS 加密的通告。发送邮件时优先发送支持 TLS 加密的邮件
3) encrypt 表示强制使用 TLS 加密

2.2 重启 Postfix 服务

# systemctl restart postfix

[内容] Linux SELinux 布尔 (boolean) 值的设置

内容目录:

内容一:开启 SELinux 布尔(boolean)值
1.1 查看当前 SELinux 状态
1.2 将 SELinux 的状态设置为 Enforcing 以开启布尔(boolean)值
1.2.1 当当前 SELinux 的状态为 Disabled 时开启布尔(boolean)值的方法
1.2.1.1 修改 SELinux 配置文件
1.2.1.2 重启系统
1.2.2 当当前 SELinux 的状态为 Perssive 时开启布尔(boolean)值的方法

内容二:查看所有 SELinux 布尔(boolean)值

内容三:布尔(boolean)值的管理
3.1 允许某一个 SELinux 布尔(boolean)值开启
3.1.1 临时允许某一个 SELinux 布尔(boolean)值开启
3.1.1.1 临时允许某一个 SELinux 布尔(boolean)值开启的格式
3.1.1.2 临时允许某一个 SELinux 布尔(boolean)值开启的案例
3.1.2 永久允许某一个 SELinux 布尔(boolean)值开启
3.1.2.1 永久允许某一个 SELinux 布尔(boolean)值开启的格式
3.1.2.2 永久允许某一个 SELinux 布尔(boolean)值开启的案例
3.2 取消某一个 SELinux 布尔(boolean)值开启
3.2.1 临时取消某一个 SELinux 布尔(boolean)值开启
3.2.1.1 临时取消某一个 SELinux 布尔(boolean)值开启的格式
3.2.1.2 临时取消某一个 SELinux 布尔(boolean)值开启的案例
3.2.2 永久取消某一个 SELinux 布尔(boolean)值关闭
3.2.2.1 永久取消某一个 SELinux 布尔(boolean)值开启的格式
3.2.2.2 永久取消某一个 SELinux 布尔(boolean)值开启的案例

具体的操作步骤:

内容一:开启 SELinux 布尔(boolean)值
1.1 查看当前 SELinux 状态

# getenforce

1.2 将 SELinux 的状态设置为 Enforcing 以开启布尔(boolean)值
1.2.1 当当前 SELinux 的状态为 Disabled 时开启布尔(boolean)值的方法
1.2.1.1 修改 SELinux 配置文件

# vim /etc/selinux/config

将以下内容:

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

修改为:

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

1.2.1.2 重启系统

# reboot

1.2.2 当当前 SELinux 的状态为 Perssive 时开启布尔(boolean)值的方法

# setenfoce 1

(补充:系统重启后失效)

内容二:查看所有 SELinux 布尔(boolean)值

# semanage boolean -l

内容三:布尔(boolean)值的管理
3.1 允许某一个 SELinux 布尔(boolean)值开启
3.1.1 临时允许某一个 SELinux 布尔(boolean)值开启
3.1.1.1 临时允许某一个 SELinux 布尔(boolean)值开启的格式

# setsebool <boolean value> 1

或者:

# setsebool <boolean value> on

3.1.1.2 临时允许某一个 SELinux 布尔(boolean)值开启的案例

# setsebool httpd_can_network_connect 1

或者:

# setsebool httpd_can_network_connect on

3.1.2 永久允许某一个 SELinux 布尔(boolean)值开启
3.1.2.1 永久允许某一个 SELinux 布尔(boolean)值开启的格式

# setsebool -P <boolean value> 1

或者:

# setsebool -P <boolean value> on

3.1.2.2 永久允许某一个 SELinux 布尔(boolean)值开启的案例

# setsebool -P httpd_can_network_connect 1

或者:

# setsebool -P httpd_can_network_connect on

3.2 取消某一个 SELinux 布尔(boolean)值开启
3.2.1 临时取消某一个 SELinux 布尔(boolean)值开启
3.2.1.1 临时取消某一个 SELinux 布尔(boolean)值开启的格式

# setsebool <boolean value> 0

或者:

# setsebool <boolean value> off

3.2.1.2 临时取消某一个 SELinux 布尔(boolean)值开启的案例

# setsebool httpd_can_network_connect 0

或者:

# setsebool httpd_can_network_connect off

3.2.2 永久取消某一个 SELinux 布尔(boolean)值关闭
3.2.2.1 永久取消某一个 SELinux 布尔(boolean)值开启的格式

# setsebool -P <boolean value> 0

或者:

# setsebool -P <boolean value> off

3.2.2.2 永久取消某一个 SELinux 布尔(boolean)值开启的案例

# setsebool -P httpd_can_network_connect 0

或者:

# setsebool -P httpd_can_network_connect off