网上有现在的防端口工具,如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防端口扫描的实现相关推荐

  1. linux shell 设置ip,设置IP地址shell脚本

    #!/bin/bash A="IPADDR.*" B="NETMASK.*" C="GATEWAY.*" D="DNS1.*&qu ...

  2. linux脚本编写规则,shell脚本编写守则

    现在centos7中使用的是bash软件,通过以下命令可以查看bash版本: [root@localhost ~]# cat /etc/redhat-release #查看系统的版本 CentOS L ...

  3. linux 脚本 获取pid,Shell脚本中获取进程ID的方法

    提问: 我想要知道运行中脚本子shell的进程id.我该如何在shell脚本中得到PID. 当我在执行shell脚本时,它会启动一个叫子shell的进程.作为主shell的子进程,子shell将she ...

  4. 【跟晓月学shell脚本】掌握shell脚本变量原理及概念

    前言 跟晓月一起学shell,死磕shell脚本,让shell脚本学习不再难. 想学习更多shell脚本的案例,可以前往我的师父的shell脚本专栏:shell脚本从入门到实战-案例篇 文章目录 前言 ...

  5. 什么是脚本语言,shell脚本又是什么?

    脚本语言就是解释型语言: 脚本语言(Script language,scripting language,scripting programming language)是为了缩短传统的编写-编译-链接 ...

  6. Tcl/Tk脚本中执行Shell脚本

    在Tcl/Tk脚本中执行Shell命令 set n 0 set x "*"while {$n < 10} {puts $xset x "$x"*set n ...

  7. 【跟晓月学shell脚本】掌握shell脚本变量实战案例

    前言 上篇文章我们探讨了shell脚本变量的基本原理和概念,本篇我们基于上面的内容增加一些实战. 如果你还没有学习shell脚本的变量理论,可以点击链接:[跟晓月学shell脚本]掌握shell脚本变 ...

  8. linux端口扫描脚本ip段,Linux shell编写端口扫描脚本

    Linux shell编写端口扫描脚本 需求: 扫描特定主机 扫描特定主机的特定端口 扫描特定网段 扫描特定网段中哪些主机开放了特定的端口 源码如下: #/bin/bash #该脚本用于对特定目标主机 ...

  9. ping端口_干货分享:shell脚本批量telnet ip 端口

    问1:亲,请教个问题,我这边有200台服务器,怎么看它是否在线呢? 答:简单,下载个PingInfoView直接批量ping下,能ping通的就在线,反之离线. 问2:那怎么看我这200台服务器哪些是 ...

最新文章

  1. Spring data redis 异常
  2. 用C#实现C/S模式下软件自动在线升级[转载]
  3. 算法与数据结构(一)
  4. springboot 添加允许跨域_springboot设置cors跨域请求的两种方式
  5. [Leetcode]@python 68. Text Justification
  6. 手游pubg mobile服务器正在维护,PUBG Mobile Download Failed怎么解决
  7. 协议圣经 -协议之服务编写(九)
  8. Pwn2Own 2022迈阿密大赛落幕 去年春季赛冠军蝉联Master of Pwn
  9. jdk1.7 1.8新特性
  10. java 3dm_3dm游戏运行库合集安装包-游戏运行库合集安装包下载v3.0DM整理-西西软件下载...
  11. 基于Neo4j图数据库的反欺诈模型初探1
  12. html英文改中文语言,英文版win7旗舰版系统改成中文语言图文教程
  13. 下载网站的ICO图标方法
  14. JEESZ分布式框架简介---技术介绍文档
  15. 传奇私服服务器移动玩家位置,传奇私服服务端里面哪个是玩家数据文件文件?...
  16. 初三计算机word 操作题,信息技术中考word操作题.doc
  17. C++中,结构体vector使用sort排序
  18. js es6使用数组的every方法遇到的问题
  19. 百度安全《2016网站安全报告》:近七成恶意网页是博彩和色情网站
  20. echarts3D地图塌陷问题

热门文章

  1. Apache AB 性能测试
  2. 【李宏毅2020 ML/DL】P99-105 Life Long Learning
  3. ORACLE REGEXP应用实例
  4. 【Java每日一题】20161124
  5. 更名OpenShift容器平台,红帽实现战略性转变
  6. tipask mysql调取dedecms_如何实现dedecms外部数据库调用
  7. python中options类_Python的OptionParser模块
  8. jq和thinkphp经常使用的几种ajax
  9. js方法实现rgb颜色转换成16进制格式的代码的方法
  10. facebook react.js