Zabbix(6)监控SQL Server数据库

监控SQL Server相对来说比较简单,首先我们下载一个MS SQL的模板文件

下载地址:https://share.zabbix.com/databases/microsoft-sql-server/template-ms-sql-2012

修改zabbix_agent.conf文件

添加下边这行到配置文件最后

UserParameter=sqldatabasename.discovery,powershell -NoProfile -ExecutionPolicy Bypass -File C:zabbixscriptsSQLBaseName_To_Zabbix.ps1

将powershell脚本放在目录下

将SQLBaseName_To_Zabbix.ps1脚本放在C:zabbixscripts目录下

重启zabbix agent

重启客户端zabbix agent服务

导入模板文件

导入模板MS SQL 2012.xml

关联模板

未分类

查看最新数据

未分类

wordpress全站https

博客使用的是wordpress,最近在支持https,配置好证书,后台设置好地址,七牛云的插件也配置好了,却发现文章中的图片都不能看到了,原来之前文章中插入的地址都是http的地址,直接插入数据库了,其中一种方法就是将数据库中的内容遍历出来改了,但是这样可能会伤害到文章数据,所以还是直接全站改掉http链接的好,方法就是在function.php文件中添加下面一段代码就可以实现了~

function replacehttp($content){
if( is_ssl() ){
$content = str_replace('http://blog.duicode.com/wp-content', 'https://blog.duicode.com/wp-content', $content);
}
return $content;
}
add_filter('the_content', 'replacehttp');

NFS实现共享wordpress

实验环境

192.168.68.134 wordpress站点 nfs-server

192.168.68.144 nfs-client

实验要求

nfs server共享/var/www/html目录

nfs clinet挂载nfs-server共享的目录,部署wordpress

nfs server端

先部署wordpress document root 在 /var/ww/html下

vim /etc/exports :/var/www/html/ 192.168.0.0/16(rw)

exportfs -r

systemctl start nfs

nfs client端

[root@centos ~]# showmount -e 192.168.68.134

[root@centos ~]# mount -t nfs 192.168.68.134:/var/www/html /var/www/html

[root@centos ~]# systemctl restart httpd

【渗透神器系列】WireShark

wireshark是一款网络流量抓取分析神器,也是安全工具使用排行中排名第一的工具。使用wireshark必须要牢记一些常用的数据包过滤规则,对于寻找一些特定的包会事半功倍。

IP过滤

ip源地址:  ip.src    ip.src==10.0.3.109

ip目的地址:   ip.dst    ip.dst==10.0.3.114

端口过滤

tcp.port==80    所有端口为80的包

tcp.dstport==80   目的端口为80的包

tcp.srcport==80   源端口为80的包

协议过滤

http

tcp

icmp

…….

http模式过滤

http.request.method==”GET”  查找GET包

http.request.method==”POST”  查找POST包

连接符

and  &

or  ||

自助模式

可以打开wireshark的Expression会弹出Filter Expression窗口:

未分类

wireshark过滤

wireshark是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。它不会对网络封包产生内容的修改,只反映出目前流通的封包资讯,其本身也不会送出封包至网络上。wireshark是捕获机器上的某一块网卡的网络包,当你的机器上有多块网卡的时候,你需要选择一个网卡。

一些基本的设
置在 编辑—->首选项里可以找到,版本不同界面上有所差异。
学习使用wireshark可以参考:https://community.emc.com/thread/194901?start=0&tstart=0

以及书籍《wireshark网路分析实战》【以色列】Yoram Orzach著 人民邮电出版社(这本书的内容比较全面,也比较贴近实际用法的场景介绍)

1、wireshark过滤规则

过滤对分析包含大量文件信息的报文集合有很大的功能,系统还具有自动完成功能。其自带的捕获过滤功能:在Capture -> Capture Filters中设置;与显示过滤功能:过滤IP,MAC,端口,协议;根据报文长度,http、dns等模式,TCP参数,包内容过滤。过滤的方式可以保留成一个快捷键。而过滤使用的语句可以类似与正则表达式的使用。

下面主要介绍比较常用的几个过滤功能使用方式。

TCP:只显示通过TCP(包含TCP报文段)的报文。其他协议的过滤使用类似。not TCP或者!TCP表示除了TCP协议的报文。

Tcp.port == 80 or Tcp.port== 8080对于TCP的建立连接很快捷进行分析。

ip.src ==192.168.1.102:源IP为192.168.1.102

目的IP,MAC地址等也使用类似的功能。相关的一些关于数值的使用也可以使用字符来代替。

小于等于le等于eq大于gt大于等于ge不等ne

http模式的过滤以及内容的过滤。这是最重要的一部分

http.request.method ==“GET”以GET模式提交的方式

http contains“HTTP/1.1 200 OK”HTTP服务的成功连接

正则表达式的结合使用:

tcp[20:] matches“^GET (.*?)HTTP/1.1//x0d//x0a[//x00-//xff]*Host:“

eth.addr[0:3]==e4:02:9bMAC地址前三部分等于e4:02:9b

ip[8:1]==1分析TTL值

tcp.flags.syn==1#查看TCP建立链接的SYN数据包

未分类

2、wireshark有效功能窗口

封包列表颜色区分,方便识别和查找。

未分类

捕获日志:

未分类

专家分析状态:

未分类

跟踪数据流Analyze>Follow>TCP/UDP

未分类

会话分析:statistics>conversations。用于分析会话的分布,比如大量的恶意流量来源,可以有效的获取信息,同时列表形式的情况就可能是一个扫描的工作在进行。还可以发现是否有一个内网IP曝光程度太高(即会话数量很多),是否出现广播包(广播包的数量非常多)

未分类

从报文中解析出相应的文件:

使用tcp过滤器跟踪数据流,发现有文件格式是jpg的文件。

未分类

File>export object>http得到导出的另一种格式:选择对应文件保存就可以

未分类

WireShark学习之抓取和分析HTTP数据包

1. 设置过滤条件

指定网络协议http

未分类

2. 打开Chrome浏览器输入网址

在浏览器输入https://sspai.com/post/30292

未分类

3. 在抓获得包中得到两个数据包,分别是HTTP请求以及HTTP响应

未分类

4. 双击打开 GET /30292 HTTP/1.1

未分类

5. 对Http协议包进行分析

HTTP请求消息头

  • Accept:call服务器,可以接收文件、网页和图片。
  • Accept-Charset:所接收的字符编码。
  • Accept-Encoding:可接收()压缩后的数据。
  • Accept-Language:Browser支持中、英文。
  • Host:要找的主机是。
  • If-Modified-Since:告诉服务器我们的缓冲中有这个资源文件,该文件的时间是,,
  • Referer:告诉服务器,我来自哪里。
  • User-Agent:告诉服务器,Browser内核。
  • Cookie:
  • Connection:保持连续发完信息后,我不关闭连接。
  • Date:Browser发送时间。

未分类

6. 查看Tcp流-Follow TCP Stream

未分类

未分类

7. 分析三次握手

三次握手的原理

在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

下图转自百度百科:

未分类

  • Wireshark中三次握手的具体情形

未分类

8. 总结

这些操作分为两步,第一步设置合理的过滤条件,第二步在任意数据包中选择Follow TCP Stream 。

OpenResty + Varnish Cache 实现 WP 的高性能加载教程

前言

Varnish Cache 是一款高性能的开源HTTP加速器,挪威最大的在线报纸 Verdens Gang 使用3台 Varnish 代替了原来的 12 台 Squid,性能比以前更好。(超级老的梗了,但是就这么用吧。)

Varnish Cache 在高端 WordPress 托管上也是非常常见的,由其构成的 Web 服务缓存加速解决方案已经非常成熟了,不过由于其开发者在 HTTPS 问题上并不关切所以很多人又抛弃了它采用了其他方案,不过前面也有提到 Varnish Cache 成熟、稳定,所以尽管不支持 HTTPS,我们也可以再加一层 Nginx 来反代实现 HTTPS。

介绍

Varnish Cache 的开发公司 Varnish Software 从 V5 时代开始了全新的命名方式,我们常提到的 Varnish 由 Varnish-Cache 的命名方式代替。

常见的 Varnish Cache 缓存规则从 V4 开始已经不同于 V3 了,不过 V5 依旧向下兼容 V4 的规则。

本教程主要介绍和前面的 https://www.mf8.biz/the-guide-for-wordpress-ubuntu/ 相呼应。

具体的教程可以参考:https://www.mf8.biz/varnish-wordpress-make-fast-1/

安装 Varnish 5

curl -s https://packagecloud.io/install/repositories/varnishcache/varnish5/script.deb.sh | bash
apt-get install varnish

更多系统的安装请看:

https://www.varnish-cache.org/releases/index.html https://packagecloud.io/varnishcache/varnish5/install

设置 Nginx

编辑虚拟主机的配置文件,将之前的 80 端口内容改成 8080 端口,其实就是将 listen 后改成 8080 ,例如:

  server {
  ##运行端口
  listen 8080; 

  ##这里需要改成你的域名
  server_name www.mf8.biz; 

  access_log /data/wwwlogs/access_nginx.log combined; #日志目录
  root /data/wwwroot/build; #网站文件目录
  index index.html index.htm index.php; #首页文件优先级
  include /usr/local/openresty/nginx/conf/rewrite/wordpress.conf;

  ##PHP
  location ~ [^/].php(/|$) {
      fastcgi_pass unix:/run/php/php7.1-fpm.sock;
      fastcgi_index index.php;
      include fastcgi.conf;
      fastcgi_param PHP_VALUE "open_basedir=$document_root:/tmp/:/proc/";
    }

  ##下面的都是缓存
  location ~ .*.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
    expires 30d;
    access_log off;
    }
  location ~ .*.(js|css)?$ {
    expires 7d;
    access_log off;
    }
  location ~ /.ht {
    deny all;
    }
  }

同理,/usr/local/openresty/nginx/conf/nginx.conf 文件也必须将之前的 80 端口改成 8080 端口,其他所有在 Nginx 上打开的 80 端口都需要修改,不然 Varnish 无法启动。

然后将 HTTPS 部分,改成反代:

    server {

  ##开启 HTTPS 和 HTTP/2
  listen 443 ssl http2;

  ssl_certificate /usr/local/openresty/nginx/conf/ssl/www.mf8.biz.crt; #RSA证书
  ssl_certificate_key /usr/local/openresty/nginx/conf/ssl/www.mf8.biz.key; #RSA密钥

  ##SSL增强安全设置部分
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5;
  ssl_prefer_server_ciphers on;
  ssl_session_timeout 10m;
  ssl_session_cache builtin:1000 shared:SSL:10m;
  ssl_buffer_size 1400;
  ssl_stapling on;
  ssl_stapling_verify on;

  server_name www.mf8.biz;
  access_log off;

        location / {
            proxy_pass http://127.0.0.1:80;
            proxy_set_header X-Real-IP  $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto https;
            proxy_set_header X-Forwarded-Port 443;
            proxy_set_header Host $host;
        }
}

设置 Varnish

cd /etc/varnish/
mv default.vcl default.vclold
git clone https://gitee.com/mf8/varnish-caching-wordpress.git

cd /lib/systemd/system/
mv varnish.service varnish.service.old
wget https://gitee.com/yunvy/codes/d79nhgw2aitm8xky65p4399/raw?blob_name=varnish.service

cd /etc/default
mv varnish varnish.old
wget https://gitee.com/yunvy/codes/folh28bm9ipveagc04ws740/raw?blob_name=varnish

systemctl daemon-reload
service varnish restart

设置 WordPress

不过呢,由于我们是 Nginx HTTPS 443 端口 —— Varnish 80 端口 —— Nginx 80 端口 饶了三层,所以 WP 就会反应不过来,所有的静态资源的加载依旧走的 HTTP ,这里就需要额外设置一下了。

修改 wp-config.php 文件,加入:

if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')  $_SERVER['HTTPS']='on';

因为我们在 Nginx 443 反代的时候加入了 proxy_set_header X-Forwarded-Proto https; ,所以当 WP 检测 HTTP_X_FORWARDED_PROTO 有 https 反馈的时候就会将静态资源的加载自动走 HTTPS 了!

CentOS-7.0.中安装与配置Tomcat-7的方法

安装说明

  • 安装环境:CentOS-7.0.1406
  • 安装方式:源码安装
  • 软件:apache-tomcat-7.0.29.tar.gz
  • 下载地址:http://tomcat.apache.org/download-70.cgi

安装前提

系统必须已安装配置JDK6+

安装tomcat

将apache-tomcat-7.0.29.tar.gz文件上传到/usr/local中执行以下操作:

代码如下:

[root@linuxidc local]# cd /usr/local
[root@linuxidc local]# wget http://apache.fayea.com/apache-mirror/tomcat/tomcat-7/v7.0.57/bin/apache-tomcat-7.0.57.tar.gz
[root@linuxidc local]# tar -zxv -f apache-tomcat-7.0.29.tar.gz // 解压压缩包
[root@linuxidc local]# rm -rf apache-tomcat-7.0.29.tar.gz // 删除压缩包
[root@linuxidc local]# mv apache-tomcat-7.0.29 tomcat

启动Tomcat

执行以下操作:

代码如下:

[root@linuxidc ~]# /usr/local/tomcat/bin/startup.sh //启动tomcat
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/jdk1.7.0/jre
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

出现以上信息说明已成功启动。

防火墙开放8080端口

增加8080端口到防火墙配置中,执行以下操作:

[root@linuxidc ~]# vi + /etc/sysconfig/iptables
#增加以下代码
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT

重启防火墙

[root@linuxidc java]# service iptables restart

检验Tomcat安装运行

通过以下地址查看tomcat是否运行正常:

http://192.168.15.231:8080/

看到tomcat系统界面,说明安装成功!

停止Tomcat

[root@linuxidc ~]#  /usr/local/tomcat/bin/shutdown.sh  //停止tomcat

Tcpdump命令的使用与示例

网络数据采集分析工具TcpDump的简介

  顾名思义,TcpDump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。tcpdump就是一种免费的网络分析工具,尤其其提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和入侵者都是非常有用的工具。tcpdump存在于基本的FreeBSD系统中,由于它需要将网络界面设置为混杂模式,普通用户不能正常执行,但具备root权限的用户可以直接执行它来获取网络上的信息。因此系统中存在网络分析工具主要不是对本机安全的威胁,而是对网络上的其他计算机的安全存在威胁。

  我们用尽量简单的话来定义tcpdump,就是:dump the traffice on a network.,根据使用者的定义对网络上的数据包进行截获的包分析工具。作为互联网上经典的的系统管理员必备工具,tcpdump以其强大的功能,灵活的截取策略,成为每个高级的系统管理员分析网络,排查问题等所必备的东西之一。tcpdump提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和入侵者都是非常有用的工具。tcpdump存在于基本的FreeBSD系统中,由于它需要将网络界面设置为混杂模式,普通用户不能正常执行,但具备root权限的用户可以直接执行它来获取网络上的信息。因此系统中存在网络分析工具主要不是对本机安全的威胁,而是对网络上的其他计算机的安全存在威胁。

网络数据采集分析工具TcpDump的使用

普通情况下,直接启动tcpdump将监视第一个网络界面上所有流过的数据包。

# tcpdump tcpdump: listening on fxp011:58:47.873028 202.102.245.40.netbios-ns > 202.102.245.127.netbios-ns: udp 5011:58:47.974331 0:10:7b:8:3a:56 > 1:80:c2:0:0:0 802.1d ui/C len=43 0000 0000 0080 0000 1007 cf08 0900 0000 0e80 0000 902b 4695 0980 8701 0014 0002 000f 0000 902b 4695 0008 0011:58:48.373134 0:0:e8:5b:6d:85 > Broadcast sap e0 ui/C len=97 ffff 0060 0004 ffff ffff ffff ffff ffff 0452 ffff ffff 0000 e85b 6d85 4008 0002 0640 4d41 5354 4552 5f57 4542 0000 0000 0000 00^C

  tcpdump支持相当多的不同参数,如使用-i参数指定tcpdump监听的网络界面,这在计算机具有多个网络界面时非常有用,使用-c参数指定要监听的数据包数量,使用-w参数指定将监听到的数据包写入文件中保存,等等。

  然而更复杂的tcpdump参数是用于过滤目的,这是因为网络中流量很大,如果不加分辨将所有的数据包都截留下来,数据量太大,反而不容易发现需要的数据包。使用这些参数定义的过滤规则可以截留特定的数据包,以缩小目标,才能更好的分析网络中存在的问题。tcpdump使用参数指定要监视数据包的类型、地址、端口等,根据具体的网络问题,充分利用这些过滤规则就能达到迅速定位故障的目的。请使用man tcpdump查看这些过滤规则的具体用法。

  显然为了安全起见,不用作网络管理用途的计算机上不应该运行这一类的网络分析软件,为了屏蔽它们,可以屏蔽内核中的bpfilter伪设备。一般情况下网络硬件和TCP/IP堆栈不支持接收或发送与本计算机无关的数据包,为了接收这些数据包,就必须使用网卡的混杂模式,并绕过标准的TCP/IP堆栈才行。在FreeBSD下,这就需要内核支持伪设备bpfilter。因此,在内核中取消bpfilter支持,就能屏蔽tcpdump之类的网络分析工具。

  并且当网卡被设置为混杂模式时,系统会在控制台和日志文件中留下记录,提醒管理员留意这台系统是否被用作攻击同网络的其他计算机的跳板。

May 15 16:27:20 host1 /kernel: fxp0: promiscuous mode enabled

  虽然网络分析工具能将网络中传送的数据记录下来,但是网络中的数据流量相当大,如何对这些数据进行分析、分类统计、发现并报告错误却是更关键的问题。网络中的数据包属于不同的协议,而不同协议数据包的格式也不同。因此对捕获的数据进行解码,将包中的信息尽可能的展示出来,对于协议分析工具来讲更为重要。昂贵的商业分析工具的优势就在于它们能支持很多种类的应用层协议,而不仅仅只支持tcp、udp等低层协议。

  从上面tcpdump的输出可以看出,tcpdump对截获的数据并没有进行彻底解码,数据包内的大部分内容是使用十六进制的形式直接打印输出的。显然这不利于分析网络故障,通常的解决办法是先使用带-w参数的tcpdump 截获数据并保存到文件中,然后再使用其他程序进行解码分析。当然也应该定义过滤规则,以避免捕获的数据包填满整个硬盘。FreeBSD提供的一个有效的解码程序为tcpshow,它可以通过Packages Collection来安装。

# pkg_add /cdrom/packages/security/tcpshow*# tcpdump -c 3 -w tcpdump.outtcpdump: listening on fxp0# tcpshow < tcpdump.out---------------------------------------------------------------------------Packet 1TIME:12:00:59.984829LINK:00:10:7B:08:3A:56 -> 01:80:C2:00:00:00 type=0026<*** No decode support for encapsulated protocol ***>---------------------------------------------------------------------------Packet 2TIME:12:01:01.074513 (1.089684)LINK:00:A0:C9:AB:3C:DF -> FF:FF:FF:FF:FF:FF type=ARPARP:htype=Ethernet ptype=IP hlen=6 plen=4 op=requestsender-MAC-addr=00:A0:C9:AB:3C:DF sender-IP-address=202.102.245.3target-MAC-addr=00:00:00:00:00:00 target-IP-address=202.102.245.3---------------------------------------------------------------------------Packet 3TIME:12:01:01.985023 (0.910510)LINK:00:10:7B:08:3A:56 -> 01:80:C2:00:00:00 type=0026<*** No decode support for encapsulated protocol ***>

  tcpshow能以不同方式对数据包进行解码,并以不同的方式显示解码数据,使用者可以根据其手册来选择最合适的参数对截获的数据包进行分析。从上面的例子中可以看出,tcpshow支持的协议也并不丰富,对于它不支持的协议就无法进行解码。

  除了tcpdump之外,FreeBSD的Packages Collecion中还提供了Ethereal和Sniffit两个网络分析工具,以及其他一些基于网络分析方式的安全工具。其中Ethereal运行在X Window 下,具有不错的图形界面,Sniffit使用字符窗口形式,同样也易于操作。然而由于tcpdump对过滤规则的支持能力更强大,因此系统管理员仍然更喜欢使用它。对于有经验的网络管理员,使用这些网络分析工具不但能用来了解网络到底是如何运行的,故障出现在何处,还能进行有效的统计工作,如那种协议产生的通信量占主要地位,那个主机最繁忙,网络瓶颈位于何处等等问题。因此网络分析工具是用于网络管理的宝贵系统工具。为了防止数据被滥用的网络分析工具截获,关键还是要在网络的物理结构上解决。常用的方法是使用交换机或网桥将信任网络和不信任网络分隔开,可以防止外部网段窃听内部数据传输,但仍然不能解决内部网络与外部网络相互通信时的数据安全问题。如果没有足够的经费将网络上的共享集线器升级为以太网交换机,可以使用FreeBSD系统执行网桥任务。这需要使用option BRIDGE编译选项重新定制内核,此后使用bridge命令启动网桥功能。

tcpdump采用命令行方式,它的命令格式为:

tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ]          [ -i 网络接口 ] [ -r 文件名] [ -s snaplen ]          [ -T 类型 ] [ -w 文件名 ] [表达式 ]

  
(1) tcpdump的选项介绍

  • -a    将网络地址和广播地址转变成名字;
       
  • -d    将匹配信息包的代码以人们能够理解的汇编格式给出;
       
  • -dd    将匹配信息包的代码以c语言程序段的格式给出;
       
  • -ddd   将匹配信息包的代码以十进制的形式给出;
       
  • -e    在输出行打印出数据链路层的头部信息;
       
  • -f    将外部的Internet地址以数字的形式打印出来;
       
  • -l    使标准输出变为缓冲行形式;
       
  • -n    不把网络地址转换成名字;
       
  • -t    在输出的每一行不打印时间戳;
       
  • -v    输出一个稍微详细的信息,例如在ip包中可以包括ttl和服
    务类型的信息;
       
  • -vv    输出详细的报文信息;
       
  • -c    在收到指定的包的数目后,tcpdump就会停止;
       
  • -F    从指定的文件中读取表达式,忽略其它的表达式;
       
  • -i    指定监听的网络接口;
       
  • -r    从指定的文件中读取包(这些包一般通过-w选项产生);
       
  • -w    直接将包写入文件中,并不分析和打印出来;
       
  • -T    将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程调用)和snmp(简单网络管理协议;)
      
    (2) tcpdump的表达式介绍

  表达式是一个正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表达式的条件,则这个报文将会被捕获。如果没有给出任何条件,则网络上所有的信息包将会被截获。在表达式中一般如下几种类型的关键字。

  第一种是关于类型的关键字,主要包括host,net,port, 例如 host 210.27.48.2,指明 210.27.48.2是一台主机,net 202.0.0.0 指明 202.0.0.0是一个网络地址,port 23 指明端口号是23。如果没有指定类型,缺省的类型是host.

  第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src ,这些关键字指明了传输的方向。举例说明,src 210.27.48.2 ,指明ip包中源地址是210.27.48.2 , dst net 202.0.0.0 指明目的网络地址是202.0.0.0 。如果没有指明方向关键字,则缺省是src or dst关键字。

  第三种是协议的关键字,主要包括fddi,ip,arp,rarp,tcp,udp等类型。Fddi指明是在FDDI(分布式光纤数据接口网络)上的特定的网络协议,实际上它是”ether”的别名,fddi和ether具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和分析。其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则tcpdump将会监听所有协议的信息包。
  除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less,greater,还有三种逻辑运算,取非运算是 ‘not ‘ ‘! ‘, 与运算是’and’,’&&’;或运算 是’or’ ,’││’;这些关键字可以组合起来构成强大的组合条件来满足人们的需要,下面举几个例子来说明。

  A、想要截获所有210.27.48.1 的主机收到的和发出的所有的数据包:
#tcpdump host 210.27.48.1
  B、想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信,使用命令:(在命令行中适用   括号时,一定要
#tcpdump host 210.27.48.1 and (210.27.48.2 or 210.27.48.3 )
  C、如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:
#tcpdump ip host 210.27.48.1 and ! 210.27.48.2
  D、如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令:
#tcpdump tcp port 23 host 210.27.48.1
  
(3) tcpdump的输出结果介绍

  
下面我们介绍几种典型的tcpdump命令的输出信息

  A、数据链路层头信息

使用命令

#tcpdump --e host ice

ice 是一台装有linux的主机,她的MAC地址是0:90:27:58:AF:1A
H219是一台装有SOLARIC的SUN工作站,它的MAC地址是8:0:20:79:5B:46;上一条命令的输出结果如下所示:

21:50:12.847509 eth0 < 8:0:20:79:5b:46 0:90:27:58:af:1a ip 60: h219.33357 > ice.telne
t 0:0(0) ack 22535 win 8760 (DF)

  分析:21:50:12是显示的时间, 847509是ID号,eth0 < 表示从网络接口eth0 接受该数据包,eth0 >表示从网络接口设备发送数据包, 8:0:20:79:5b:46是主机H219的MAC地址,它表明是从源地址H219发来的数据包. 0:90:27:58:af:1a是主机ICE的MAC地址,表示该数据包的目的地址是ICE . ip 是表明该数据包是IP数据包,60 是数据包的长度, h219.33357 > ice.telnet 表明该数据包是从主机H219的33357端口发往主机ICE的TELNET(23)端口. ack 22535 表明对序列号是222535的包进行响应. win 8760表明发送窗口的大小是8760.

  B、ARP包的TCPDUMP输出信息
  
使用命令

#tcpdump arp

得到的输出结果是:

22:32:42.802509 eth0 > arp who-has route tell ice (0:90:27:58:af:1a)

22:32:42.802902 eth0 < arp reply route is-at 0:90:27:12:10:66 (0:90:27:58:af:1a)分析: 22:32:42是时间戳, 802509是ID号, eth0 >表明从主机发出该数据包, arp表明是ARP请求包, who-has route tell ice表明是主机ICE请求主机ROUTE的MAC地址。 0:90:27:58:af:1a是主机ICE的MAC地址。

  C、TCP包的输出信息

用TCPDUMP捕获的TCP包的一般输出信息是:

src > dst: flags data-seqno ack window urgent options

src > dst:表明从源地址到目的地址, flags是TCP包中的标志信息,S 是SYN标志, F (FIN), P (PUSH) , R (RST) “.” (没有标记); data-seqno是数据包中的数据的顺序号, ack是下次期望的顺序号, window是接收缓存的窗口大小, urgent表明数据包中是否有紧急指针. Options是选项.

  D、UDP包的输出信息
  
用TCPDUMP捕获的UDP包的一般输出信息是:

route.port1 > ice.port2: udp lenth

UDP十分简单,上面的输出行表明从主机ROUTE的port1端口发出的一个UDP数据包到主机ICE的port2端口,类型是UDP, 包的长度是lenth。

Linux下通过SSH实现服务器间简单的分发文件与执行命令

SSH介绍

SSH服务由服务端软件OpenSSH(openssl)和客户端(常见的有SSH(linux),SecureCRT,xshell,Putty)组成,SSH服务默认使用22端口提供服务,它有两个不兼容的SSH协议版本,分别是1.x和2.x.

SSH 1.x协议存在被黑客针对联机的Key pair插入恶意程序代码的风险,而SSH 2.x针对这个问题,多加了一个确认联机正确性的Diffie-Hellman机制,每次数据传输中,都会以该机制检查输出来源是否正确.

SSH的服务认证类型主要分为:

  • 基于口令的安全认证
  • 基于密钥的安全认证:首先建立一对密钥对,把公钥(public key)放在需要访问的目标服务器上.另外还需要吧私有密钥(private key)放到SSH的客户端或对应的客户端服务器上.

SSH的操作命令

SSH连接其他服务器

ssh -p22 [email protected] #被连接的主机

SSH通过远程连接执行命令

ssh -p22 [email protected] /sbin/ifconfig eht0

ssh 链接主机记录信息位置

~/.ssh/known_hosts

ssh客户端文件拷贝至远端服务器

可以通过 -l 参数限制传输速度.

scp -P22 -rp /tmp/oldboy [email protected]:/tmp/oldboy #方向由左至右

sftp功能?(不要用)

sftp无法显示登陆用户的目录,可以随时跳到别的目录

sftp -oPort=55555 [email protected]
get(download) put(upload)

实现SSH密钥批量分发

#确认系统版本信息
cat /etc/redhat-release
uname -r
uname -m
#添加批量分发账号
useradd fenfa (所有计算器创建分发账号)
echo 123456|passwd --stdin fenfa
#分发账号需要sudo授权rsync
echo "fenfa ALL=(ALL) NOPASSWD: /usr/bin/rsync" >>/etc/sudosers
visudo -c
#生成密钥对
ssh-keygen -t dsa
#查看密钥对
ls -l .ssh/
#分发密钥
ssh-copy-id -i .ssh/id_dsa.pub "-p [email protected]"
#测试
ssh -p55555 [email protected] /sbin/ifconfig

增量,加密传输文件:

rsync -avz hosts -e 'ssh -p55555' [email protected]:~

简单文件批量分发脚本(有待修改)

#!/bin/sh
. /etc/init.d/functions
if [ $# -ne 2 ]
then
echo "USAGE:/bin/sh $0 localfile remotedir"
exit 1
fi
for n in 1 2 3
do
scp -P55555 -r ~/$1 [email protected].$n:~ &>dev/null &&
ssh -p55555 -t [email protected].$n sudo rsync ~/$1 $2 &>/dev/null
if [ $? -eq 0 ]
then
action "fenfa $1 192.$n is ok" /bin/true
else
action "fenfa $1 192.$n is false" /bin/false
fi
done

简单的批量查看脚本

#!/bin/sh
if [ $# -ne 1 ]
then
echo "USAGE:$0 COMMAND"
exit 1
fi
for n in 1 2 3
do
echo ============192.168.117.$n========
ssh -p55555 [email protected].$n $1
done

非交互式生成密钥并实现批量管理

1、为所有机器创建传输用用户及密码

useradd key888
echo 123456|passwd --stdin key888
id key888
echo "key888 ALL=(ALL) NOPASSWD: ALL" >>/etc/sudoers 
visudo -c
su - key888

2、管理机创建密钥对

ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa >/dev/null 2>&1

3、分发密钥

yum install expect -y #只安装在管理机
ssh-copy-id -i.ssh/id_dsa.pub "-p 52113 [email protected]"

4、此处需要三个脚本实现

fenfa_auto.sh

ssh_expect.exp

~/intall.sh

vi ssh_expect.exp
#!/usr/bin/expect
if { $argc != 2 }{
send_user "usage: expect ssh_expect.exp file hostn"
exit
}
#define var
set file [lindex $argv 0]
set host [lindex $argv 1]
set password "123456"
#spawn scp /etc/hosts [email protected]:/etc/hosts
#spawn scp -P55555 $file kendally@$host:$dirn
spawn ssh-copy-id -i $file "-p 55555 key888@host"
expect {
"yes/no"   {send "yes/r";exp_continue}
"*password"{send "$passwordr"}
}
expect eof
exit -onexit {
send_user "kendall say good bye to you!n"
}
#script usage
#expect kendall-6.exp file host 
#expaple
#expect ssh_expect.exp file host 
#expect ssh_expect.exp ~/.ssh/id_dsa.pub 172.16.1.31
vi fenfa_auto.sh
#!/bin/sh
. /etc/init.d/functions
shh-keygen -t dsa -P '' -f ~/.ssh/id_dsa >/dev/null 2>&1
if [ $? -eq 0 ];then
action "ccreat dsa $ip" /bin/true
else
action "create dsa $ip" /bin/false
exit 1
fi
for ip in 8 31 41
do
expect ssh_expect.exp ~/.ssh/id_dsa.pub 172.16.1.$ip >dev/null 2>&1
if [ $? -eq 0 ];then
action "$ip" /bin/true
else
action "$ip" /bin/false
fi
done
#dis fenfa scripts
for m in 8 31 41
do
scp -P55555 -rp ~/scripts [email protected].$m:~
done
#install service
for n in 8 31 41
do
ssh -t -p55555 [email protected].$n sudo /bin/bash ~/scripts/install.sh
done
vim intall.sh
yum install httpd -y