linux端口扫描脚本ip段,shell脚本结合iptables防端口扫描的实现
网上有现在的防端口工具,如psad、portsentry,但觉得配置有点麻烦,且服务器不想再装一个额外的软件。所以自己就写了个shell脚本实现这个功能。基本思路是:使用iptables的recent模块记录下在60秒钟内扫描超过10个端口的IP,并结合inotify-tools工具实时监控iptables的日志,一旦iptables日志文件有写入新的ip记录,则使用iptables封锁源ip,起到了防止端口扫描的功能。
1、iptables规则设置
新建脚本iptables.sh,执行此脚本。
IPT="/sbin/iptables"
$IPT --delete-chain
$IPT --flush
#Default Policy
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT DROP
#INPUT Chain
$IPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
$IPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
$IPT -A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT
$IPT -A INPUT -p tcp --syn -m recent --name portscan --rcheck --seconds 60 --hitcount 10 -j LOG
$IPT -A INPUT -p tcp --syn -m recent --name portscan --set -j DROP
#OUTPUT Chain
$IPT -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p udp -m udp --dport 53 -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
$IPT -A OUTPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
$IPT -A OUTPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT
#iptables save
service iptables save
service iptables restart
注意:17-18行的两条规则务必在INPUT链的最下面,其它规则自己可以补充。
2、iptables日志位置更改
编辑/etc/syslog.conf,添加:
kern.warning /var/log/iptables.log
重启syslog
/etc/init.d/syslog restart
3、防端口扫描shell脚本
首先安装inotify:
yum install inotify-tools
保存以下代码为ban-portscan.sh
btime=600 #封ip的时间
while true;do
while inotifywait -q -q -e modify /var/log/iptables.log;do
ip=`tail -1 /var/log/iptables.log | awk -F"[ =]" '{print $13}' | grep '\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}'`
if test -z "`/sbin/iptables -nL | grep $ip`";then
/sbin/iptables -I INPUT -s $ip -j DROP
{
sleep $btime && /sbin/iptables -D INPUT -s $ip -j DROP
} &
fi
done
done
执行命令开始启用端口防扫描
nohup ./ban-portscan.sh &
linux端口扫描脚本ip段,shell脚本结合iptables防端口扫描的实现相关推荐
- linux shell 设置ip,设置IP地址shell脚本
#!/bin/bash A="IPADDR.*" B="NETMASK.*" C="GATEWAY.*" D="DNS1.*&qu ...
- linux脚本编写规则,shell脚本编写守则
现在centos7中使用的是bash软件,通过以下命令可以查看bash版本: [root@localhost ~]# cat /etc/redhat-release #查看系统的版本 CentOS L ...
- linux 脚本 获取pid,Shell脚本中获取进程ID的方法
提问: 我想要知道运行中脚本子shell的进程id.我该如何在shell脚本中得到PID. 当我在执行shell脚本时,它会启动一个叫子shell的进程.作为主shell的子进程,子shell将she ...
- 【跟晓月学shell脚本】掌握shell脚本变量原理及概念
前言 跟晓月一起学shell,死磕shell脚本,让shell脚本学习不再难. 想学习更多shell脚本的案例,可以前往我的师父的shell脚本专栏:shell脚本从入门到实战-案例篇 文章目录 前言 ...
- 什么是脚本语言,shell脚本又是什么?
脚本语言就是解释型语言: 脚本语言(Script language,scripting language,scripting programming language)是为了缩短传统的编写-编译-链接 ...
- Tcl/Tk脚本中执行Shell脚本
在Tcl/Tk脚本中执行Shell命令 set n 0 set x "*"while {$n < 10} {puts $xset x "$x"*set n ...
- 【跟晓月学shell脚本】掌握shell脚本变量实战案例
前言 上篇文章我们探讨了shell脚本变量的基本原理和概念,本篇我们基于上面的内容增加一些实战. 如果你还没有学习shell脚本的变量理论,可以点击链接:[跟晓月学shell脚本]掌握shell脚本变 ...
- linux端口扫描脚本ip段,Linux shell编写端口扫描脚本
Linux shell编写端口扫描脚本 需求: 扫描特定主机 扫描特定主机的特定端口 扫描特定网段 扫描特定网段中哪些主机开放了特定的端口 源码如下: #/bin/bash #该脚本用于对特定目标主机 ...
- ping端口_干货分享:shell脚本批量telnet ip 端口
问1:亲,请教个问题,我这边有200台服务器,怎么看它是否在线呢? 答:简单,下载个PingInfoView直接批量ping下,能ping通的就在线,反之离线. 问2:那怎么看我这200台服务器哪些是 ...
最新文章
- Spring data redis 异常
- 用C#实现C/S模式下软件自动在线升级[转载]
- 算法与数据结构(一)
- springboot 添加允许跨域_springboot设置cors跨域请求的两种方式
- [Leetcode]@python 68. Text Justification
- 手游pubg mobile服务器正在维护,PUBG Mobile Download Failed怎么解决
- 协议圣经 -协议之服务编写(九)
- Pwn2Own 2022迈阿密大赛落幕 去年春季赛冠军蝉联Master of Pwn
- jdk1.7 1.8新特性
- java 3dm_3dm游戏运行库合集安装包-游戏运行库合集安装包下载v3.0DM整理-西西软件下载...
- 基于Neo4j图数据库的反欺诈模型初探1
- html英文改中文语言,英文版win7旗舰版系统改成中文语言图文教程
- 下载网站的ICO图标方法
- JEESZ分布式框架简介---技术介绍文档
- 传奇私服服务器移动玩家位置,传奇私服服务端里面哪个是玩家数据文件文件?...
- 初三计算机word 操作题,信息技术中考word操作题.doc
- C++中,结构体vector使用sort排序
- js es6使用数组的every方法遇到的问题
- 百度安全《2016网站安全报告》:近七成恶意网页是博彩和色情网站
- echarts3D地图塌陷问题