linux shell实现批量关闭局域网中主机端口
假设局域网中有多台主机,只能开通ssh服务(端口22),如果发现其他服务打开,则全部关闭。通过运行一个shell脚本,完成以上功能。在实际运维中,可以通过puppet等工具更快更好的完成这个功能,所以本案例仅仅用来练手,为了熟悉sed, awk, grep等常见的shell命令而已。
1、通过nmap命令查询局域网中所有主机打开的端口,并存入文件nmap1.txt中。
# 通过nmap命令查询局域网中所有主机打开的端口,并存入文件nmap1.txt中
mkdir -p /wuhao/sh/files
nmap $ > /wuhao/sh/files/nmap1.txt
以nmap 192.168.20.1-10为例,输出结果为:
Starting Nmap 5.51 ( http://nmap.org ) at 2016-03-03 16:37 CST
Nmap scan report for oos01 (192.168.20.1)
Host is up (.0000040s latency).
Not shown: closed ports
PORT STATE SERVICE
/tcp open ftp
/tcp open ssh
/tcp filtered http Nmap scan report for oos02 (192.168.20.2)
Host is up (.000099s latency).
Not shown: closed ports
PORT STATE SERVICE
/tcp open ssh
/tcp open http
/tcp open mysql
MAC Address: :1C::FF:5A:B5 (Parallels) Nmap scan report for oos03 (192.168.20.3)
Host is up (.000097s latency).
Not shown: closed ports
PORT STATE SERVICE
/tcp open ssh
/tcp open http
/tcp open mysql
MAC Address: :1C::::3C (Parallels) Nmap done: IP addresses ( hosts up) scanned in 1.57 seconds
2、从文件nmap1.txt中提取出需要的信息(主机ip,以及端口状态)。
# 从文件nmap1.txt中提取出需要的信息(主机ip,以及端口状态)
sed -n '/\(Nmap scan report for\|^[0-9]\+\/\)/p' /wuhao/sh/files/nmap1.txt > /wuhao/sh/files/nmap2.txt
hosts=($(grep -on '(.*)' /wuhao/sh/files/nmap2.txt | sed -n 's/(\|)//gp'))
declare -i len=${#hosts[*]}
declare -i i=
while [[ $i -lt $len ]]
do
lines[$i]=$(echo ${hosts[$i]} | awk -F ':' '{print $1}')
ips[$i]=$(echo ${hosts[$i]} | awk -F ':' '{print $2}')
i=$i+
done
# echo ${lines[*]}=
# echo ${ips[*]}=192.168.20.1 192.168.20.2 192.168.20.3
3、在端口状态行首添加所对应的主机ip信息,并将结果保存到文件nmap2.txt中。
# 在端口状态行首添加所对应的主机ip信息
declare -i j=
while [[ $j -lt $len ]]
do
declare -i k=$j+
if [ $j -ne $(($len-)) ]; then
sed -i "$((${lines[$j]}+1)),$((${lines[$k]}-1))s/^/${ips[$j]} /" /wuhao/sh/files/nmap2.txt
else
sed -i "$((${lines[$j]}+1)),$""s/^/${ips[$j]} /" /wuhao/sh/files/nmap2.txt
fi
j=$j+
done # 将多个空格以及/替换为一个空格
sed -i 's/ \+\|\// /g' /wuhao/sh/files/nmap2.txt
nmap2.txt文件内容为:
Nmap scan report for oos01 (192.168.20.1)
192.168.20.1 tcp open ftp
192.168.20.1 tcp open ssh
192.168.20.1 tcp filtered http
Nmap scan report for oos02 (192.168.20.2)
192.168.20.2 tcp open ssh
192.168.20.2 tcp open http
192.168.20.2 tcp open mysql
Nmap scan report for oos03 (192.168.20.3)
192.168.20.3 tcp open ssh
192.168.20.3 tcp open http
192.168.20.3 tcp open mysql
4、提取出需要关闭的端口(除了端口22之外,其余端口全部关闭)。通过sshpass远程登录到各主机,并且在iptables执行关闭端口命令。
# 提取出需要关闭的端口(除了端口22之外,其余端口如果打开则全部关闭)
awk '{if($4~/open/ && $2!=22) print $0}' /wuhao/sh/files/nmap2.txt > /wuhao/sh/files/nmap3.txt hostip=($(awk -F " " '{print $1}' /wuhao/sh/files/nmap3.txt))
port=($(awk -F " " '{print $2}' /wuhao/sh/files/nmap3.txt))
protocol=($(awk -F " " '{print $3}' /wuhao/sh/files/nmap3.txt)) # 通过sshpass远程登录到各主机,并且在iptables执行关闭端口命令
for((m=;m<${#hostip[*]};m=m+))
do
sshpass -p 123456 ssh root@${hostip[$m]} "iptables -A INPUT -p ${protocol[$m]} --dport ${port[$m]} -j DROP;service iptables save;service iptables restart;exit"
done echo "success!"
5、运行脚本,查看结果。
[root@oos01 sh]# sh shutdownport.sh 192.168.20.1-
iptables: Saving firewall rules to /etc/sysconfig/iptables: [ OK ]
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Flushing firewall rules: [ OK ]
iptables: Unloading modules: [ OK ]
iptables: Applying firewall rules: [ OK ]
iptables: Saving firewall rules to /etc/sysconfig/iptables: [ OK ]
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Flushing firewall rules: [ OK ]
iptables: Unloading modules: [ OK ]
iptables: Applying firewall rules: [ OK ]
iptables: Saving firewall rules to /etc/sysconfig/iptables: [ OK ]
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Flushing firewall rules: [ OK ]
iptables: Unloading modules: [ OK ]
iptables: Applying firewall rules: [ OK ]
iptables: Saving firewall rules to /etc/sysconfig/iptables: [ OK ]
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Flushing firewall rules: [ OK ]
iptables: Unloading modules: [ OK ]
iptables: Applying firewall rules: [ OK ]
iptables: Saving firewall rules to /etc/sysconfig/iptables: [ OK ]
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Flushing firewall rules: [ OK ]
iptables: Unloading modules: [ OK ]
iptables: Applying firewall rules: [ OK ]
success!
linux shell实现批量关闭局域网中主机端口的更多相关文章
- Linux shell脚本 批量创建多个用户
Linux shell脚本 批量创建多个用户 #!/bin/bash groupadd charlesgroup for username in charles1 charles2 charles3 ...
- 使用shell查看局域网中主机的IP地址
此脚本只是快速查看所在局域网中其它主机的IP地址,如果对方设置了禁ping,则无法显示出此主机的IP地址: #!/bin/bash ` do ping -c2 .$i &>/dev/nu ...
- linux shell脚本:在脚本中实现读取键盘输入,根据输入判断下一步的分支
echo please input “runbip” to run bip. variableName="null" while [ $variableName != " ...
- Linux - Shell - 在多个文件中查找关键字
1. 概述 在多个文件中 查找内容 2. 想干啥 目的 在 多个文件 中, 查找内容 准备 之前在 单个文件里 查找过内容 工具 awk 前提 文件有固定格式 查找时有字段的要求 例子 # print ...
- linux安装后ping不通局域网其他主机的解决方式
安装了linux后尝试进行机器间的相互通讯,发现自己虚拟机并不能查看ip地址,也不能够ping通任何一台局域网内的主机 上网查了一下发现是网卡并没有打开,需要进行如下配置 查看ls 一下/etc/sy ...
- Linux shell下批量创建缩略图
一.背景 今天,突然发现手机客户端上的最新新闻缩略图都不显示了,上服务器上看了看, 发现新的新闻图片根本没有生成缩略图. 这套新闻发布系统是很老的程序了,查了一下,问题的原因是不支持png格式的图片, ...
- shell脚本批量配置多台主机静态ip
关于脚本 服务器使用之前,都需要先配置静态IP,那就将这种简单重复的工作,交给脚本来处理吧,让我们运维有更多的时间喝茶看报刷微博 脚本使用 sh ssh.sh ip.txt ssh.sh 为脚本的名称 ...
- Linux Shell基础 多个命令中的分号(;)、与(&&) 、 或(||)
概述 在 Bash 中,如果需要让多条命令按顺序执行,则有这样方法,如表 1 所示. 多命令执行符 格 式 作 用 : 命令1 ; 命令2 多条命令顺序执行,命令之间没有任何逻辑关系 &&am ...
- shell下批量除去文件名中的空格
rename 's/ /_/g' * 上述命令可以将当前文件夹内所有文件的名字中得所有空格替换为_.其中g代表所有,如果不加g,如果文件名字中有多个空格,仅替换第一个.
随机推荐
- bootstrap 中 css 与 javascript 的使用
1.css 1.1.选择器 1.2.子选择器: css 里的子元素用符号'>'表示.如下示例是表示拥有table样式的表盒,其thead元素内的tr元素如果有th的话,则应用该样式. .tabl ...
- AJAX-php-json数组
1.在php中有个数组,响应回前端 $array=["习大大","川普","金三胖"];2.JS对象数据格式 ex: 数组: var TOM ...
- 协程的NullReferenceException 错误
public void loadPic(string url) { WWW www = new WWW(url); StartCoroutine(WaitForRequest(www)); } IEn ...
- python code(1)
from collections import UserList class MthChianList(UserList): def filter(self,predicste): return Mt ...
- 链家web前端面试
共有三轮面试,每个面试官的第一个问题都是:介绍一个你觉着比较出彩的项目 第一轮面试: 因为公司项目没什么亮点,很传统的pc端,美女面试官就说让讲一下我用react的私人项目; 问了很多都是关于reac ...
- 学以致用十一-----centos7.2+python3+YouCompleteMe走过的坑
目的,安装YouCompleteMe 插件 参考的资料 https://blog.csdn.net/zs376957686/article/details/77833953 https://www.c ...
- Ubuntu 默认启动到命令行 12.04
源文链接:http://my.oschina.net/jackguo/blog/85706 代码: sudo gedit /etc/default/grub 引用: GRUB_CMDLINE_LINU ...
- C#-VS异常处理
VS异常处理 常规 try 可能会产生异常的代码,当一行产生异常,这行下面的代码不执行,转到catch开始执行 catch(system.Exception e) e.message ...
- 广搜 迷宫(zznu 1962)
http://acm.zznu.edu.cn/problem.php?id=1962 题目描述 在很多 RPG (Role-playing Games) 游戏中,迷宫往往是非常复杂的游戏环节.通常来说 ...
- 团队项目之UML图设计---WeEdit
团队信息: 学号: 姓名: 本次博客链接: 041602209 黄毓明(临时队长) https://www.cnblogs.com/mingsonic/p/9820702.html 06160023 ...