TcpDump抓包
使用的软件包是: tcpdump
使用命令: tcpdump 选项 过滤条件
-i | 指定监控的网络接口 |
-A | 方便阅读 |
-c | 设定抓取几个包的时候停止 |
-w | 将抓取的数据包信息存储到指定文件中,一般文件后缀名为 .cap |
-r | 从指定文件中读取数据包信息 |
过滤条件 | |
host | 主机 |
net | 网段 |
port | 端口 必须跟协议一起连用 |
portrange | 指定一段范围的端口信息 |
src | 指定源地址 |
dst | 指定目标地址 |
and | 前后两个条件同时匹配才抓包 |
or | 几个条件中某个符合就匹配 |
not | 条件结果取反 |
举例:
tcpdump -i eth0 -A tcp port 21 and src 192.168.4.50 -w /mnt/s50_ftp.cap
# 抓取eth0网卡中关于FTP服务(tcp协议的21端口)的来自192.168.4.50的数据包,并把数据记录到s50_ftp.cap文件中
WirShark协议分析器
装包: yum install -y wireshark wireshark-gnome
使用图形界面进行操作,点击File菜单,打开用tcpdump命令抓取的包,进行分析
分析过后回有三个板块信息:
第一个板块的内容是,抓取的每个包的信息,一行信息就是一个包
第二个板块是一个包的四层协议的信息,分别是物理层、数据链路层、网络层、传输层
第三个板块是具体的数据信息
防火墙
在RHEL6默认使用iptables作为防火墙
在RHEL7使用的是firewalld服务,不过向下兼容,也可以用iptables,而且firewall的底层还是使用的iptables,只不过如果想用iptables服务,我们需要安装iptables的服务的包,就下载一个软件包iptables-services,进行防火墙控制
RHEL6的控制命令(RHEL7也可以用,具体效果等效) | |
service iptables status | 查看防火墙 |
service iptables stop | 关闭防火墙 |
service iptables start | 开启防火墙 |
chkconfig iptables on | 开机自启防火墙 |
网络类型:
1. 网络型防火墙 专门的一个服务器做为防火墙服务器,隔离过滤后再把数据发给服务器集群
配置的时候,配置FORWARD链的策略
2. 主机型防火墙 在服务器集群的服务器上搭建防火墙进行隔离
配置的时候,配置INPUT链的策略
四张表 (功能项) | 解释 | 作用 | 可操作的数据链结构 |
raw | 状态跟踪表 | 数据包到达防火墙后跟踪这个包的状态(连接状态、断开状态、新生成准备连接状态) | PREROUTING、OUTPUT |
mangle | 包标记表 | 给包打上标签,如果标签打上ok就可以过,如果是false就不给过防火墙 | INPUT、INPUT、FOWARD、POSTROUTING、PREROUTING |
主要是给+需要特殊标示某些服务或者端口或者IP地址的一些访问进行特殊处理 | |||
nat | 地址转换表 | 将要发送数据到公网的私有地址转换为公有地址,同样也可以把公有地址转换为私有地址 | INPUT、OUTPUT、POSTROUTING、PREROUTING |
filter | 过滤表(默认) | 不想让什么包不能进来,运行什么包进来,是用这个表来限制实现的 | INPUT、OUTPUT、FOWARD |
五个链 (匹配数据包传输的方向 ) | |
INPUT | 匹配进入防火墙的包 |
OUTPUT | 匹配从防火墙出去的包 |
FOWARD | 匹配经过防火墙主机的包,源地址和目标地址都不是防火墙主机的情况 |
POSTROUTING | 已经完成路由处理后进行操作 |
不能用-i指定进入的网卡接口,只能用-o指定发出的网卡接口 | |
PREROUTING | 到达防火墙后,进行路由处理前进行操作,不管目标地址是什么,进行操作,由防火墙指定目标地址 |
不能用-i指定进入的网卡接口,只能用-o指定发出的网卡接口 |
匹配规则
匹配到达防火墙的数据包,然后进行相关操作;这规则是存放在链里进行匹配
匹配顺序:
从设定的从上至下依次执行,匹配后执行对应的动作,然后停止匹配(LOG动作除外)
如果都不匹配,采用默认策略进行处理
匹配条件:
通用匹配 | 协议匹配 | -p 协议 |
协议有三个: tcp(大部分服务)、udp(DNS等服务)、icmp(控制ping操作) | ||
地址匹配 | -s 源IP地址 | |
-d 目标IP地址 | ||
接口匹配 | -i 收数据的网卡即口 | |
-o 发数据的网卡即口 | ||
隐含匹配 | 端口匹配 | --sport 源端口 |
--dport 目标端口 | ||
ICMP类型匹配 | --icmp-type ICMP类型 | |
ICMP类型: echo-request(指Ping发送的包) echo-reply(指Ping回应的包) | ||
注意必须是当-p后面协议是icmp的时候才能用 | ||
匹配取反 | 在条件前面加个 ! 即可 |
处理动作:
1. 放行 ACCEPT
2. 丢弃 DROP (直接丢弃数据包,不做其他操作) 3. 拒绝 REJECT (会返回信息告知客户端,连接被拒绝了)
4. 记录日志 LOG (记录日志后,继续匹配下面的操作,这是特例)
5. 指定转换的IP地址SNAT (这个动作只有NAT表可以实现,--to-source用来指定转换源IP变成什么IP地址)
一般用法是 iptables -t nat -A POSTROUTING 匹配规则 -j SNAT --to-source 转换成的IP地址(公网的接口IP)
如果网络的IP地址不稳定,就用 iptables -t nat -A POSTROUTING 匹配规则 -j MASQUERADE
iptables指令
命令: iptables -t 表 管理选项 链 匹配条件 扩展模块 -j 动作
没写匹配条件的部分默认是全部匹配
操作后要保存防火墙配置: service iptables save
管理选项
添加规则 | -A | 在链的末尾追加一个规则 |
-I | 在链的指定位置前插入一条规则,如果每指定,默认是在开头添加规则 | |
-I 链 编号 --> 指在该链的指定编号前添加 | ||
查看规则 | -L | 列出所有规则 |
如果没有指定表就是filter表中的规则、如果没有指定链,就是指定表中的所有链的规则 |
||
默认是对地址端口进行解析,易读,但是耗时较长 | ||
-n | 以数字形式是显示地址、端口 | |
一般不单独用,都是和L选项连用 | ||
一般而言-nL是连用的选项,这样策略显示速度比较快 | ||
--line-numbers | 查看规则的时候显示序号,一般和L连用 | |
注意: 这个选项最好写在命令的最后一行,或者-L前面,该选项后面不能有参数,不然报错 | ||
删除规则 | -D | 删除指定序号的规则 |
-F | 删除所有规则,只是删除写的策略规则,不会修改默认策略 | |
如果指定了表和链拿就是删除指定的位置的所有规则,都不指就是删除所有规则 | ||
默认策略 | -P | 为指定的链设置默认规则 |
只能指定动作为ACCEPT和DROP | ||
iptables -t 表 -P 链 动作 (这里没有-j) |
拓展模块
mac地址匹配 | -m mac --mac-source 策略指定机器的mac地址 |
多端口匹配 | -m multiport --sports 源端口列表 |
-m multiport --dports 目标端口列表 | |
端口列表: 端口1:端口2 指代连续的端口 端口1,端口2 指代多个不连续的端口 | |
举例: 10:1000,3306,27017 这指的是10到1000的所有端口和3306和27017端口的数据 | |
多IP范围匹配 | -m iprange --src-range 源IP地址范围 |
-m iprange --dst-range 目标IP地址范围 | |
IP地址范围: IP1-IP2 | |
举例: 172.25.10.110-172.25.20.255 指172.25.10.110到172.25.10.255以及172.25.11.0到172.25.20.255所有的IP的数据 |
常用命令总结:
查看防火墙策略 | iptables -t 表 -nL --line-number | |
iptables -t filter -nL --line-number | ||
插入一行策略到最后 | iptables -t 表 -A 链 -p 协议 -s 源地址 -d 目标地址 --sport 源端口 --dport 目标端口 -j 动作 | |
iptables -t filter -A INPUT -p tcp -s 172.25.10.110 -d 172.25.10.111 --dport 80 -j ACCEPT | 指定允许110主机访问111主机的网站服务 | |
iptables -t filter -A INPUT -s 172.25.10.110 -j DROP | 指定丢弃所有110主机发来的所有包 | |
插入策略到某行前的 | iptables -t 表 -I 链 编号 -p -s 源地址 -d 目标地址 --sport 源端口 --dport 目标端口 -j 动作 | |
修改某链的默认策略 | iptables -t 表 -P 链 动作 | |
允许本机ping其他机器 | iptables -t filter -I INPUT -p icmp --icmp-type echo-reply -j ACCEPT | |
不允许其他机器本机ping本机 | iptables -t filter -I INPUT -p icmp --icmp-type echo-request -j REJECT | |
只不允许某个机器和本机互ping | iptables -t filter -I INPUT -p icmp -s 另一个机器的IP -j REJECT | |
只允许X主机ping通Y主机,Y主机不能ping通X主机 | iptables -A FORWARD -s X主机IP -d Y主机IP -p icmp --icmp-type echo-request -j ACCEPT iptables -A FORWARD -s Y主机IP -d X主机IP -p icmp --icmp-type echo-reply -j ACCEPT |
注意点:
1. 选项用-L查看信息,它的第一行提示当前链是什么,默认的规则是什么,第二行是下面数据的提示,这一行不是数据,如果没有第三行,那么就是该链中没有任何数据,其基本格式是:
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2. 必须注意,因为防火墙匹配是自上至下进行匹配,所以有一些通配很多IP的策略要写在后面,一些指定一些具体IP的策略要写在前面
3. 删除的时候,删一个策略,后面的策略会位置前移动,也就是说,每删除一个非最后一个策略,所有策略的编号就会变
4. 当不知道某个位置该写什么的时候,可以在那里写一个--help查看帮助,例如当icmp协议后不知道写什么的时候:
iptables -t filter -A INPUT -p icmp --help
5. 不要随便清除策略,可能一些允许的策略被删除了,导致远程断开连接
6. 补充一个知识,如果别人ping过自己,即可查出对方的MAC地址,使用命令
arp -n
7. 如果真的想让一个机器不能通过防火墙,禁用IP并不能解决问题,最好用扩展中的mac地址匹配限制,这样其修改IP后也不能访问
iptables -t filter -A INPUT -m mac --mac-source 52:54:00:1d:17:b8 -j DROP
8. 不管是什么端口,包括拓展中的源端口限制和目标端口的限制,只要想指定一定的端口信息,必须指定协议,不然会报错!
9. 配置防火墙允许通信操作的时候要注意可能有来有往,所以不单单要允许访问请求通过防火墙,还要允许访问返回通过防火墙,尤其是配置FORWARD链的时候,必须要允许往返的所有数据包,才能通信。
不过,如果是配置不允许通信,只需要禁止访问请求的包通过即可。
附:
1. 设置主机IP地址,修改配置文件的方法
这配置文件是 /etc/sysconfig/network-scripts/ifcfg-设备名 ,在里面写下面这些数据即可
TYPE=Ethernet
BOOTPROTO=none
IPADDR=设置IP地址
NAME=设备名
DEVICE=设备名
ONBOOT=yes
2. 配置服务器,开启路由功能
echo 'net.ipv4.ip_forward = 1' > /etc/sysctl.conf
sysctl -p
3. 配置服务器的默认网关地址
systemctl stop NetworkManager
route add default gw 网关IP
# 删除网关: route del default gw 网关IP
查看网关信息
route -n