shell脚本代码如何屏蔽IP访问网站centos7

本文介绍如何使用CentOS 7及防火墙命令屏蔽特定IP地址访问Apache服务器的方法。通过解析错误日志并利用cat、grep、awk等命令筛选出需要屏蔽的IP地址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本信息转载网站:

更多资讯请到网站sky8g网了解更多

如果浏览不顺畅请到原文章出处:https://www.sky8g.com/technology/203/

请注意可能会提示风险,这是优快云网站设置的问题,如果文章内的链接不是他们的网址,都会对用户提示有风险,请点击继续访问,本网站全部文章为免费技术分享,请放心访问,无需担心。

请点击此处查看完整文章:https://www.sky8g.com/technology/203/
此篇文章是由SKY8G网作者原创,禁止抄袭。

首先想要屏蔽ip地址访问我们的网站,要找到错误文件文件日志。找出ip,本教程是apache服务器为代表。

1.用到的技术是centos7 firewall的命令

2.cat,grep,awk的用法

好了,不多说了直接代码解释,下面就是shell代码屏蔽加入防火墙的代码。

#!/bin/sh

#找到ip访问网站的错误日志
filepath=/var/log/httpd/error_log

#读取符号规则IP地址

for i in `cat ${filepath}|grep -w "http://你的服务器IP地址"|sed -e 's/.*\[client\s\(.*\)\:[0-9]\{1,\}\].*/\1/g'|sort|uniq -c|sort -rn|awk '/\s/{print $2}'`
do
#判断是否为自己ip地址

if [[ ${i} = "127.190.132.18" ]]
then
#自己的ip不屏蔽
continue
else
#屏蔽ip查询
FIREIP="`/usr/bin/firewall-cmd --list-all`"

checkip=$(echo ${FIREIP} 2>/dev/null |grep -nw ${i}|awk -F ":" '{print $1}')

#得出IP地址,如果ip地址不存在则要加入防火墙。

if [[ ${checkip} == "" ]]
then

#加入防火墙,大功告成。
firewall-cmd --add-rich-rule "rule family=ipv4 source address=${i} reject"
fi
fi
done

### 编写 CentOS 7 中的 Shell 脚本以提取并显示 IP 地址 在 CentOS 7 的环境中,可以利用 `ifconfig` 或更现代的 `ip addr` 命令来获取网络接口的 IP 地址。以下是基于这两种方法编写的 Shell 脚本示例。 #### 方法一:使用 `ifconfig` 虽然 `ifconfig` 在某些较新的发行版中可能已被弃用,但在 CentOS 7 上仍然可用。以下是一个简单的脚本: ```bash #!/bin/bash # 使用 ifconfig 提取 IPv4 地址 ips=$(ifconfig | grep -oE 'inet [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | grep -v '127.0.0.1') # 显示所有找到的 IP 地址 echo "Detected IP Addresses:" for ip in $ips; do echo "${ip/inet /}" done ``` 此脚本会解析 `ifconfig` 的输出,并过滤掉本地回环地址(即 `127.0.0.1`),最终只保留实际分配给网卡的 IPv4 地址[^1]。 --- #### 方法二:使用 `ip addr` 推荐的方法是使用 `ip addr`,因为它更加现代化且功能强大。下面是一段类似的脚本: ```bash #!/bin/bash # 使用 ip addr 提取 IPv4 地址 ips=$(ip addr show | awk '/inet/ {print $2}' | cut -d'/' -f1) # 过滤掉本地回环地址 filtered_ips=$(echo "$ips" | grep -v '^127\.0\.0\.1$') # 显示所有找到的 IP 地址 echo "Detected IP Addresses:" for ip in $filtered_ips; do echo "$ip" done ``` 该脚本通过调用 `ip addr show` 来列出所有的网络接口及其配置信息,随后借助 `awk` 和 `cut` 处理输出,最后排除本地回环地址[^1]。 --- #### 扩展功能:验证端口连通性 如果还需要进一步测试这些 IP 地址上的特定端口是否开放,则可集成 Netcat (`nc`) 工具完成此项任务。例如,在上述基础上增加如下逻辑即可实现端口扫描的功能: ```bash port=80 # 替换为目标端口号 timeout=3 # 设置超时时间(秒) for ip in $filtered_ips; do echo "Checking port ${port} on ${ip}..." timeout ${timeout}s nc -zv ${ip} ${port} result=$? if [ $result -eq 0 ]; then echo "[OK] Port ${port} is open." else echo "[ERROR] Failed to connect to port ${port}." fi done ``` 这里引入了变量 `${port}` 表示目标端口以及 `${timeout}` 定义连接尝试的最大等待时限;并通过循环逐一检查每个有效 IP 是否能够成功建立指定端口的通信链路[^2]。 --- ### 注意事项 - 如果系统未安装 `net-tools` 包(含 `ifconfig` 命令),则需先运行 `yum install net-tools` 加载它。 - 对于生产环境中的敏感操作,请谨慎对待权限管理及错误处理机制的设计。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值