Linux系统日常管理2 tcpdump,iptables


                Linux系统日常管理2 tcpdump,iptables           

  1. Linux抓包工具


tcpdump 系统自带抓包工具

如果没有安装,需要安装之后才可以使用

安装:

[root@linux2 ~]# yum install -y tcpdump


tcpdump -nn

不转换顿口的名字,直接显示端口号


tcpdump -nn -i eth0 tcp and host 192.168.0.1 and port 80

抓取192.168.0.1ip地址的80端口的tcp包,并且不进行端口名字的转换

-i:指定网卡

tcp:表示只抓取tcp的包

192.168.0.1:指定的ip地址

port 80:指定的,只抓取80端口的数据


tcpdump -nn -i eth0 tcp and host 192.168.0.1 and port 80 -w 1.txt

把抓取的数据包写入到1.txt文件中

-w:写入


tcpdump -nn -i eth0 tcp and host 192.168.0.1 and port 80 -c 10 -w 1.txt

抓取10个数据包,并且写入到1.txt文件中

-c:指定抓取多少个包

-s0:抓取所有内容


[root@linux2 ~]# tcpdump -nn -i eth0 tcp and not port 80

过滤掉80端口


tcpdump -nn -vs0 tcp and port not 22 -c 100 -w 1.cap 

-w:写入


strings:可以查看二进制包里面的内容


wireshark

默认没有安装,需要安装

yum install -y wireshark


抓包分析http请求,查看80端口上面请求的一些东西

tshark -n -t a -R http.request -T fields -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.method" -e "http.request.uri"

在什么情况下使用:

   1、访问日志没有记录

   2、不知道配置文件在哪里,不不想去配置日志文件

   3、只是抓跑看看内容

   4、如果抓包没有任何显示的时候,需要指定网卡在

tshark -i eth0 -n -t a -R http.request -T fields -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.method" -e "http.request.uri"

 

tcpdump和tshark都需要用root的身份才可以执行


2. Selinux

getenforce:查看selinux状态

配置文件 /etc/selinux/config 

三种状态:

     enforcing:开启

permissive:开启但是不生效,触碰规则的时候警告

disabled:关闭

要设置永久关闭,需要更改配置文件,

[root@linux2 ~]# cat /etc/selinux/config 
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=enforcing #改成SELINUX=disabled,就永久关闭了
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

  

setenforce 0:临时关闭,重启后失效

setenforce 1:临时启用,但是如果SELINUX=disabled,是无法启用的


如果没有getenforce这个包,需要安装

使用rpm查看包名:

rpm -qf `which getenforce`

安装

yum install -y libselinux-utils 

使用yum也可以安装

yum install *selinux*


3. netfilter --  iptables

iptables -nvL 查看规则

iptables -F 清除当前的规则,系统从启后会失效,只是临时的

iptables -Z 计数器清零

service iptables save 保存规则 保存的规则文件为:/etc/sysconfig/iptables 

service iptables stop  可以暂停防火墙,但是重启后它会读取/etc/sysconfig/iptables 从而启动防火墙,另外即使我们停止防火墙,但一旦我们添加任何一条规则,它也会开启。

iptables -t  指定表名,默认不加-t则是filter表 

filter 这个表主要用于过滤包的,是系统预设的表,内建三个链INPUT、OUTPUT以及FORWARD。INPUT作用于进入本机的包;OUTPUT作用于本机送出的包;FORWARD作用于那些跟本机无关的包。  


iptables -nvL -t nat

指定nat表

nat 主要用处是网络地址转换、端口映射,也有三个链。PREROUTING 链的作用是在包刚刚到达防火墙时改变它的目的地址,如果需要的话。OUTPUT链改变本地产生的包的目的地址。POSTROUTING链在包就要离开防火墙之前改变其源地址。 


mangle 主要用于修改数据包的TOS(Type Of Service,服务类型)、TTL(Time ToLive,生存周期)值以及为数据包设置Mark标记,以实现Qos (Quality of Service,服务质量)调整以及策略路由等应用,由于需要相应的路由设备支持,因此应用并不广泛。 五个链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD


raw   对报文设置一个标志,决定数据包是否被状态跟踪机制处理   只有两个链:OUTPUT、PREROUTING 


iptables规则相关:


查看规则 iptables -t nat -nvL

清除规则 iptables -t nat -F


增加/删除规则

iptables -A/-D INPUT -s 10.72.11.12 -p tcp --sport 1234 -d 10.72.137.159 --dport 80 -j DROP 

把10.72.11.12主机从1234端口出去到达目标10.72.137.159主80端口的包丢掉

-A/D:表示增加/删除一条规则

-I:插入一条规则,跟A的效果类似

-p:地址协议,可以是tcp、udp或icmp

--dport:指定目标端口,跟-p一起使用

--sport:指定源端口,跟-p一起使用

-s:指定源IP,也可以是一个IP段

-d:指定目的IP或者IP段

-j:后面跟动作,有三个选项,允许ACCEPT,丢包DROR,拒绝REJECT

-i:表示指定网卡,不常用,偶尔用到


插入规则,使用了-I之后,插入的规则会在之前规则的前面

iptables -I INPUT -s 1.1.1.1 -j DROP/ACCEPT/REJECT 

越在前面越先匹配,应该说是在前面有优先匹配的权限吧


把来自192.168.21.99主机的数据包丢掉

[root@linux2 ~]#iptables -I INPUT -s 192.168.21.99 -j DROP


删除192.168.21.99这条主机的规则

[root@linux2 ~]# iptables -D INPUT -s 192.168.21.99 -j DROP


通讯协议使用的是tcp协议,并且是通过80端口来访问本机,且IP地址是192.168.21.99主机的包丢掉

[root@linux2 ~]# iptables -I INPUT -s 192.168.21.99 -p tcp --dport 80 -j DROP


把本机访问192.168.21.99主机22端口的包丢掉

[root@linux2 ~]# iptables -I INPUT -p tcp --dport 22 -d 192.168.21.99 -j DROP


允许192.168.21.0/24这个网段在eth0网卡上通信

[root@linux2 ~]# iptables -A INPUT -s 192.168.21.0/24 -i eth0 -j ACCEPT


查看规则带有id号

iptables -nvL --line-numbers 

[root@linux2 ~]# iptables -nvL --line-number
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1     1964  145K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
2        0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
3        0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
4        2   104 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
5     3177  311K REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 
6        0     0 ACCEPT     tcp  --  *      *       1.1.1.1              0.0.0.0/0           tcp dpt:80

 

根据规则的id号删除对应规则 

iptables -D INPUT 6 

[root@linux2 ~]# iptables -D INPUT 6
[root@linux2 ~]# iptables -nvL --line-number
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1     1981  146K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
2        0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
3        0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
4        2   104 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
5     3177  311K REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0

iptables -P INPUT [ACCEPT]  用来设定默认规则,默认是ACCEPT ,一旦设定为DROP后,只能使用 iptables -P ACCEPT 才能恢复成原始状态,而不能使用-F参数 


开放所有192.168.21.254主机的协议,就是说没有任何端口的过滤和限制

[root@linux2 ~]# iptables -A INPUT -s 192.168.21.254 -j ACCEPT

iptables-save > 1.ipt

把规则重定向到1.ipt文件中,也可以说成是备份


iptables-restore < 1.ipt

恢复之前备份的规则,使用反向重定向到iptables


禁止别人ping通你,但是你可以ping通别人

[root@linux2 ~]# iptables -I INPUT -p icmp --icmp-type 8 -j DROP


实例:

针对filter表,预设策略INPUT链DROP,其他两个链ACCEPT,然后针对192.168.0.0/24开通22端口,对所有网段开放80端口,对所有网段开放21端口。 脚本如下:

#! /bin/bash 
ipt="/sbin/iptables" 
$ipt -F; $ipt -P INPUT DROP; 
$ipt -P OUTPUT ACCEPT; $ipt -P FORWARD ACCEPT; 
$ipt -A INPUT -s 192.168.0.0/24 -p tcp --dport 22 -j ACCEPT
$ipt -A INPUT -p tcp --dport 80 -j ACCEPT 
$ipt -A INPUT -p tcp --dport 21 -j ACCEPT

icmp的包有常见的应用,本机ping通外网,外网ping不通本机 iptables -I INPUT -p icmp --icmp-type 8 -j DROP 


nat表应用:

路由器就是使用iptables的nat原理实现

假设您的机器上有两块网卡eth0和eth1,其中eth0的IP为192.168.10.11,eth1的IP为172.16.10.11 。eth0连接了intnet 但eth1没有连接,现在有另一台机器(172.16.10.12)和eth1是互通的,那么如何设置也能够让连接eth1的这台机器能够连接intnet? 

echo "1" > /proc/sys/net/ipv4/ip_forward 

iptables -t nat -A POSTROUTING -s 172.16.10.0/24 -o eth0 -j MASQUERADE 


规则备份与恢复:

service iptables save 这样会保存到/etc/sysconfig/iptables 

iptables-save > myipt.rule 可以把防火墙规则保存到指定文件中

iptables-restore < myipt.rule  这样可以恢复指定的规则


本文出自 “IT交流学习” 博客,请务必保留此出处http://sxct168.blog.51cto.com/824373/1659424

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。