Linux安全审查脚本

脚本功能

1. 列出SSH登录成功和失败的记录详细信息
2. 提取与本机端口有TCP连接的所有IP、端口号(已断开连接的也算)
3. 输入pid查看文件路径
4. 查看指定端口TCP连接(多个端口用空格分开)
 

使用方法

保存为safeCheck.sh 执行sh safeCheck.sh,然后输入序号进行交互

#!/bin/bash
# 功能说明:
# 1. 列出SSH登录成功和失败的记录详细信息
# 2. 提取与本机端口有TCP连接的所有IP、端口号(已断开连接的也算,本地IP除外)
# 3. 输入pid查看文件路径
# 4. 查看指定端口TCP连接(多个端口用空格分开)
# 函数:列出SSH登录成功和失败的记录详细信息
function ssh_login_records() {
    echo "列出SSH登录成功记录:"
    echo "--------------------------------------"
    grep 'Accepted' /var/log/secure | sed -E 's/^([A-Za-z]+)[ ]+([0-9]+) ([0-9:]+)(.*)/2-1 34/' | sed 's/Jan/01/;s/Feb/02/;s/Mar/03/;s/Apr/04/;s/May/05/;s/Jun/06/;s/Jul/07/;s/Aug/08/;s/Sep/09/;s/Oct/10/;s/Nov/11/;s/Dec/12/'
    echo "--------------------------------------"
    echo "列出SSH登录失败记录:"
    echo "--------------------------------------"
    grep 'Failed' /var/log/secure | sed -E 's/^([A-Za-z]+)[ ]+([0-9]+) ([0-9:]+)(.*)/2-1 34/' | sed 's/Jan/01/;s/Feb/02/;s/Mar/03/;s/Apr/04/;s/May/05/;s/Jun/06/;s/Jul/07/;s/Aug/08/;s/Sep/09/;s/Oct/10/;s/Nov/11/;s/Dec/12/'
    echo "--------------------------------------"
}
# 函数:提取与本机端口有TCP连接的所有IP和端口号(已断开连接的也算,本地IP除外)
function tcp_connections() {
    echo "提取与本机端口有TCP连接的所有IP和端口号(已断开连接的也算,本地IP除外):"
    echo "--------------------------------------"
    echo -e "远程IPttt本机IPtttTCP状态ttt进程"
    echo "--------------------------------------------------------------------------------------------------------------"
    sudo netstat -tnp | awk 'NR>2 && $4 !~ /::1/ && $4 !~ /^127.0.0.1/ {print $5, $4, $6, $7}' | sed -E 's/::ffff://' | awk '{printf "%-23s %-23s %-23s [%s] %-15s %sn", $1, $2, $3, $4, $5, $6}'
    echo "--------------------------------------"
}
# 函数:输入pid查看文件路径
function process_file_path() {
    pid=$1
    if [ -d /proc/$pid ]; then
        echo "文件路径: $(readlink /proc/$pid/exe)"
    else
        echo "无效的PID。"
    fi
}
function filter_tcp_connections_by_port() {
    port=$1
    echo "提取与本机端口 $port 有TCP连接的所有IP和端口号(已断开连接的也算,本地IP除外):"
    echo "--------------------------------------"
    echo -e "远程IPttt本机IPtttTCP状态ttt进程"
    echo "--------------------------------------------------------------------------------------------------------------"
    sudo netstat -tnp | awk -v port="$port" 'NR>2 && $4 !~ /::1/ && $4 !~ /^127.0.0.1/ && $4 ~ ":"port"$" {print $5, $4, $6, $7}' | sed -E 's/::ffff://' | awk '{printf "%-23s %-23s %-23s [%s] %-15s %sn", $1, $2, $3, $4, $5, $6}'
    echo "--------------------------------------"
}
# 函数:查看指定端口TCP连接(多个端口用空格分开,已断开连接的也算,本地IP除外)
function filter_tcp_connections_by_local_ports() {
    ports=($1)
    echo "提取与本机以下端口有TCP连接的所有IP和端口号(已断开连接的也算,本地IP除外):${ports[@]}"
    echo "--------------------------------------"
    echo -e "远程IPttt本机IPtttTCP状态ttt进程"
    echo "--------------------------------------------------------------------------------------------------------------"
    for port in "${ports[@]}"; do
        sudo netstat -tnp | awk -v port="$port" 'NR>2 && $4 !~ /::1/ && $4 !~ /^127.0.0.1/ && $4 ~ ":"port"$" {print $5, $4, $6, $7}' | sed -E 's/::ffff://' | awk '{printf "%-23s %-23s %-23s [%s] %-15s %sn", $1, $2, $3, $4, $5, $6}'
    done
    echo "--------------------------------------"
}
while true; do
    echo "请选择要执行的操作:"
    echo "1. 列出SSH登录成功和失败的记录详细信息"
    echo "2. 提取与本机端口有TCP连接的所有IP、端口号(已断开连接的也算)"
    echo "3. 输入pid查看文件路径"
    echo "4. 查看指定端口TCP连接(多个端口用空格分开)"
    echo "99. 退出"
    read -p "请输入选项(1、2、3、4 或 99):" option
    case $option in
        1)
            ssh_login_records
            ;;
        2)
            tcp_connections
            ;;
        3)
            read -p "请输入进程ID (PID): " pid
            process_file_path $pid
            ;;
        4)
            read -p "请输入要筛选的端口号(多个端口用空格分开): " input_ports
            filter_tcp_connections_by_local_ports "$input_ports"
            ;;
        99)
            echo "退出脚本。"
            exit 0
            ;;
        *)
            echo "无效选项,请输入1、2、3、4 或 99。"
            ;;
    esac
done

 

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>