Azure上Linux VM误配防火墙的恢复方法
在实际运维中,防火墙把自己挡在机器外面的情况会时有发生。如何快速的恢复对运维人员是很重要的。
本文将介绍如何用Azure Extension实现不通过ssh对VM进行操作的方法。
之前写过一遍Blog介绍如何部署Azure的CustomScriptExtension:
http://www.cnblogs.com/hengwei/p/5862200.html
在CustomScriptExtension的基础上,如果实现关闭防火墙。
1.添加防火墙规则
通过添加iptables规则关闭外部访问该VM的ssh:
iptables -A INPUT -p tcp --dport -j DROP
所有22端口都被关闭了。
通过psping进行观察VM 22端口的情况:
psping -t 139.219.237.69:
Connecting to 139.219.237.69:: .94ms
Connecting to 139.219.237.69:: .50ms
Connecting to 139.219.237.69:: .93ms
Connecting to 139.219.237.69:: .51ms
Connecting to 139.219.237.69:: .42ms
Connecting to 139.219.237.69:: .54ms
Connecting to 139.219.237.69:: .16ms
Connecting to 139.219.237.69:: This operation returned because the timeout period expired.
Connecting to 139.219.237.69:: This operation returned because the timeout period expired.
Connecting to 139.219.237.69:: This operation returned because the timeout period expired.
Connecting to 139.219.237.69:: This operation returned because the timeout period expired.
为防止出现脚本不成功,导致再不能访问VM的情况,执行如下脚本,过5分钟自动去除防火墙:
[root@hwcentos ~]#./remove_iptables.sh &
#!/bin/bash
while true
do
sleep
iptables -F
echo `date` >> a.txt
done
2.通过CustomScriptExtension去除防火墙规则
运行PowerShell脚本:
$mycred = Get-Credential -UserName admin@xxx.partner.onmschina.cn -Message hello
Login-AzureRmAccount -EnvironmentName AzureChinaCloud -Credential $mycred
#定义Resource Group、VM和Location变量
$RGName = 'hwextensiontest'
$VmName = 'hwcentos'
$Location = 'China East'
#定义Extension相关信息
$ExtensionName = 'CustomScriptForLinux'
$Publisher = 'Microsoft.OSTCExtensions'
$version = '1.5'
$PublicConf = '{"commandToExecute": "iptables -F"}'
#执行Set-AzureRmVMExtension命令,安装extension:
Set-AzureRmVMExtension -ResourceGroupName $RGName -VMName $VmName -Location $Location `
-Name $ExtensionName -Publisher $Publisher `
-ExtensionType $ExtensionName -TypeHandlerVersion $Version `
-Settingstring $PublicConf RequestId IsSuccessStatusCode StatusCode ReasonPhrase
--------- ------------------- ---------- ------------
True OK OK
通过iptables -F的命令关闭所有的防火墙。
PsPing的输出结果如下:
Connecting to 139.219.237.69:: This operation returned because the timeout period expired.
Connecting to 139.219.237.69:: This operation returned because the timeout period expired.
Connecting to 139.219.237.69:: This operation returned because the timeout period expired.
Connecting to 139.219.237.69:: This operation returned because the timeout period expired.
Connecting to 139.219.237.69:: This operation returned because the timeout period expired.
Connecting to 139.219.237.69:: .12ms
Connecting to 139.219.237.69:: .16ms
Connecting to 139.219.237.69:: .64ms
这时已经可以通过ssh登录这台VM。
观察extension的日志:
[root@hwcentos 1.5.2.0]# pwd
/var/log/azure/Microsoft.OSTCExtensions.CustomScriptForLinux/1.5.2.0
[root@hwcentos 1.5.2.0]# less extension.log
..........
// :: [Microsoft.OSTCExtensions.CustomScriptForLinux-1.0]Config decoded correctly.
// :: [Microsoft.OSTCExtensions.CustomScriptForLinux-1.0]Will try to download files, number of retries = , wait SECONDS between retrievals = 20s
// :: [Microsoft.OSTCExtensions.CustomScriptForLinux-1.0]Command to execute:iptables -F
// :: [Microsoft.OSTCExtensions.CustomScriptForLinux-1.0]fileUris value provided is empty or invalid. Continue with executing command...
// :: [Microsoft.OSTCExtensions.CustomScriptForLinux-1.0]Succeeded to download files, retry count =
// :: [Microsoft.OSTCExtensions.CustomScriptForLinux-1.0]Internal DNS is ready, retry count =
// :: [Microsoft.OSTCExtensions.CustomScriptForLinux-1.0]Command to execute:iptables -F
// :: [Microsoft.OSTCExtensions.CustomScriptForLinux-1.0]Command is finished.
// :: ---stdout---
// ::
// :: ---errout---
// ::
// ::
// :: [Microsoft.OSTCExtensions.CustomScriptForLinux-1.0]Daemon,success,,Command is finished.
// :: ---stdout---
// ::
// :: ---errout---
// ::
查看防火墙状态:
[root@hwcentos ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination Chain FORWARD (policy ACCEPT)
target prot opt source destination Chain OUTPUT (policy ACCEPT)
target prot opt source destination
防火墙已经关闭。
3.延展
有时客户VM没有响应的原因并不是因为防火墙,但原因并不是防火墙。此时我们可以通过收集sosreport的信息,通过复制到其他VM等方法获得这个文件后,进行分析。
当然也可以通过ping其它VM,并在另外一台VM上抓包,看这台VM是否网络存活,以进行下一步的分析和动作。
4.需要注意的问题
当多次执行CustomScript时,这个extension会判断内容是否相同,如果相同extension会认为是重复执行,脚本将不再执行。
更新:
Azure VM的Extension的通讯机制是通过HTTPS对外发起的。如下的输出:
[root@hwcentos ~]# netstat -tunp
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 10.3.0.4: 167.220.255.53: SYN_RECV -
tcp 10.3.0.4: 168.63.129.16: TIME_WAIT -
tcp 10.3.0.4: 40.126.88.72: TIME_WAIT -
tcp 10.3.0.4: 167.220.255.53: ESTABLISHED /sshd
tcp 10.3.0.4: 40.126.88.72: TIME_WAIT -
tcp 10.3.0.4: 40.126.88.72: TIME_WAIT -
tcp 10.3.0.4: 40.126.88.72: TIME_WAIT -
tcp 10.3.0.4: 168.63.129.16: TIME_WAIT -
可以看到VM上很多到40.x.x.x的https请求。只要VM可以访问外部的HTTPS,VM Extension就可以工作。
所以,我们的INPUT方向的iptables添加:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
或
iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
可以确保出方向的流量不被防火墙挡住。
在添加如下防火墙规则后,VM extension仍然可以把iptables的规则清除:
iptables -A INPUT -s / -j DROP
Azure上Linux VM误配防火墙的恢复方法的更多相关文章
- Windows Azure 上 Linux VM 中的交换空间 – 第 2 部分
本文章由 Azure CAT 团队的 Piyush Ranjan (MSFT) 撰写. 在前一篇文章 Windows Azure 上Linux VM 中的交换空间第 1 部分中,我介绍了在默认情况下, ...
- Azure上Linux VM防DDOS攻击:使用Apache mod_evasive
部署在云端的虚拟机和web服务,很容易受到DoS护着DDoS的服务攻击,让一些新上线的业务苦不堪言,当然各个云服务提供商也有不同层面DDOS的防护,然而由于防护粒度,攻击复杂度的关系,未必可以满足你的 ...
- Azure上Linux VM DDOS攻击预防: 慢速攻击
在上篇博客(http://www.cnblogs.com/cloudapps/p/4996046.html)中,介绍了如何使用Apache的模块mod_evasive进行反DDOS攻击的设置,在这种模 ...
- 在Windows Azure上配置VM主备切换(1)——Linux篇
对任何一个上线系统来说,高可用设计是不可或缺的一个环节,这样才可以确保应用可以持续.稳定的运行,而不是频繁的掉线.停机.高可用设计的核心思路很简单,就是消除一切单点故障,将单点链路或者节点升级为多点. ...
- 对连接到 Azure 中 Linux VM 时出现的问题进行详细的 SSH 故障排除的步骤
有许多可能的原因会导致 SSH 客户端无法访问 VM 上的 SSH 服务. 如果已经执行了较常规的 SSH 故障排除步骤,则需要进一步排查连接问题. 本文指导用户完成详细的故障排除步骤,以确定 SSH ...
- 在Azure上的VM镜像库中找到想要的镜像
Azure上的虚机镜像库中, 有很多的镜像,其中当然也包括了用户自定义上传的镜像. 在Powershell中如果想使用这些镜像的话, 则需要知道其名称 下面这条命令,可以获得所有的镜像信息 $imag ...
- Azure上每个VM多个IP地址
Azure的每个VM都有多种IP地址,包括DIP.VIP和PIP.具体如下: DIP地址是在VM里能够看到的IP地址,即私网地址:PIP地址是这个VM关联的公网IP地址,即公网地址:VIP地址是负载均 ...
- 转://Linux下误删除/home目录的恢复方法
一般情况下,我们在安装Oracle数据库的时候,都会创建一个Oracle用户,用该用户来安装和管理Oracle.Oracle用户的根目录就是/home/oracle. 通常安装Oracle数据库是按照 ...
- Azure上Linux虚拟机Mac地址的持久化
有些用户在使用Azure Linux 虚拟机安装软件时,有些软件的license会和当前系统的mac地址绑定,那么在Azure VM重启,reszie(改变尺寸大小),停止然后再启动的时候,虚拟机的M ...
随机推荐
- pagination结合ajax
function getContent(page,Id){ $.ajax({ type:'get', url:'www.baidu.com', dataType:'jsonp', data:{ }, ...
- PHP获取MySQL执行sql语句的查询时间
//计时开始 runtime(); //执行查询 mysql_query($sql); //计时结束. echo runtime(1); //计时函数 function runtime($mode=0 ...
- cuffdiff problem--Performed 0 isoform-level transcription difference tests
如何解决cuffdiff运行结果中表达量为0的情况? cuffdiff -o cdiffout -b ref.fasta -u -p 15 --library-type fr-firststrand ...
- 【bzoj3238】差异[AHOI2013](后缀数组+单调栈)
题目传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3238 这道题从大概半年以前就开始啃了,不过当时因为一些细节没调出来,看了Sakits神犇 ...
- 虚拟机CentOS7网络配置
*关于查看IP信息 window中是 ipconfig Linux一般都是 ifconfig 不过CentOS7中 这个命令发生了更改 :ip addr 设置网络 再新建虚拟机向导过程中,有一步[网 ...
- Thinkpad E440个性化设置:如何/禁用关闭触摸板?
#如何禁用/关闭触摸版 默认情况下,ThinkPad E440是不支持触摸板的关闭功能,如果要关闭的话,需要去官方下载相应的鼠标驱动 UltraNav. 下载地址:http://think.lenov ...
- JavaScript 全部介绍
1.new 表达式 new之后写函数名的话,就会把该函数作为构造函数来进行调用. 2.字符串型的运算 由于JavaScript的字符串型是不可变类型,所以字符串值本质上是不能改变的.这个答案 ...
- java: Comparable比较器,数组对象比较器
Arrays只适合一个数组/对象内的数值进行比较, Comparable比较器(Compara)适合数组,对象,队列等排序, Comparable是一个接口类,实现此接口必须复写:compareTo ...
- webdriver处理鼠标右键菜单栏
selenium中ActionChains类提供了鼠标操作的常用方法,但对于鼠标右键的菜单栏,无论是send_keys(Keys.ARROW_DOWN)还是send_keys("K" ...
- jenkins自动发送邮件配置
一. 前提:确保插件存在 在一切开始之前,必须得确保任务配置里有两个插件:E-mail Notification(邮件通知) 和 Editable Email Notification(可编辑的邮件通 ...