日常运维1w、vmstat、

w查看系统负载

date 查看当前系统的时间

w查看系统负载

第一行,从左面开始显示的信息依次为:时间,系统运行时间,登录用户数,平均负载。

第二行,开始以及下面所有的行,告诉我们的信息是,当前登录的都有哪些用户,以及他们是从哪里登录的等等。我们最应该关注的应该是第一行中的 ‘load average:’ 后面的三个数值。

DN}NLENLAASWY2D(JGKTKKY.png

第一个数值表示1分钟内系统的平均负载值;第二个数值表示5分钟内系统的平均负载值;第三个数值表示15分钟系统的平均负载值。

这个值的意义是,单位时间段内CPU活动进程数。当然这个值越大就说明你的服务器压力越大。

一般情况下这个值只要不超过服务器的cpu数量就没有关系,如果服务器cpu数量为1,那么这个值若小于1,就说明当前服务器没有压力,否则就要关注一下了


查看逻辑cpu命令:cat /proc/cpuinfo  看第一行processor 如果是0就证明他有1个cpu 是2就证明他有3个cpu 逻辑cpu不是物理cpu

image.png


vmstat命令

vmstat:监控系统的状态

w查看的是系统整体上的负载,通过看那个数值可以知道当前系统有没有压力,但是具体是哪里(CPU, 内存,磁盘等)有压力就无法判断了。通过 vmstat 就可以知道具体是哪里有压力

image.png


命令:vmstat 1 每1秒以动态的形式显示一次 按ctrl+c结束。也可以后边跟一个数字,代表只显示的次数,例如:vmstat 1 5 这个就是每一秒显示1次只让他显示5次,如下图:

wKiom1lxvwuSb73qAAEMSplZ7GU915.png


每一列分别表示什么意思:重点关注:r、b、swpd、si、so、bi、bo、us、wa。

M8BQRVF(4[VTR7VKW70{FPX.png

1.procs 显示进程相关信息

r :表示运行和等待cpu时间片的进程数,如果长期大于服务器cpu的个数,则说明cpu不够用了;

b :表示等待资源的进程数,比如等待I/O, 内存等,这列的值如果长时间大于1,则需要关注一下了;

2.memory 内存相关信息

swpd :表示切换到交换分区中的内存数量 ;如果他的数值一直在变化那证明他的内存不够了

free :当前空闲的内存数量;

buff :缓冲大小,(即将写入磁盘的);

cache :缓存大小,(从磁盘中读取的);

3.swap 内存交换情况

si :由交换区swap写入到内存的数据量;单位kb

so :由内存写入到交换区的数据量;从内存里出来的

4.io 磁盘使用情况

这两个频繁的变证明他们在频繁的读写

bi :从块设备读取数据的量(读磁盘);从磁盘里出来进入到内存里边去

bo: 从块设备写入数据的量(写磁盘);

5.system 显示采集间隔内发生的中断次数

in :表示在某一时间间隔中观测到的每秒设备中断数;

cs :表示每秒产生的上下文切换次数;

6.CPU 显示cpu的使用状态

us :显示了用户下所花费 cpu 时间的百分比;长时间大于50%说明资源不够了

sy :显示系统本身花费cpu时间百分比;

id :表示cpu处于空闲状态的时间百分比;

wa :表示I/O等待所占用cpu时间百分比;

st :表示被偷走的cpu所占百分比(一般都为0,不用关注);

us+sy+id=100%



top命令

显示进程所占系统资源  q退出来

top命令打印出了很多信息,包括系统负载(loadaverage)、进程数(Tasks)、cpu使用情况、内存使用情况以及交换分区使用情况。

top:这个命令用于动态监控进程所占系统资源,每隔3秒变一次。这个命令的特点是把占用系统资源(CPU,内存,磁盘IO等)最高的进程放到最前面。

image.png

第一行:跟w命令查看的一样表示:时间,系统运行时间,几个用户登录,系统负载

第二行:进程状态。total进程总数,running进程运行数,sleeping休眠的进程,stopped停止的进程,zombie僵尸进程

第三行:cpu百分比。

第四行:物理内存。total总内存数值,free剩余内存,used使用大小,

第五行:交换分区。


你关注的也就是几项:%CPU, %MEM, COMMAND

image.png

%CPU:为CPU使用情况,默认情况下按cpu使用情排序

RES:物理内存大小(单位:KiB)

COMMAND:进程名字

%MEM:为使用内存百分比。在 top 状态下,按 “shift + m”, 可以按照内存使用大小排序。shift+p换回来。

image.png

按数字 ‘1’ 可以列出所有cpu的使用状态。%Cpu(s)证明是一颗cpu

image.png

image.png


命令:top -c 查看具体的命令全局路径以及使用情况

image.png

命令:top -bn1 静态的显示全局的系统资源使用情况。一般在写脚本的时候使用。



sar监控系统状态

安装sar命令:
yum install -y sysstat

生成的历史文件所在的目录

ls /var/log/sa
sar的特性是每10分钟他会把系统的状态过滤一遍保存在历史文件里,这个历史文件正好在/var/log/sa目录里,这个文件下的历史记录只能保持一个月
还有一个ls /var/log/sar 他们的区别是/var/log/sa是个二进制文件你不能用cat来查看它的内容,而/var/log/sar能查看内容,第二天才会生成前一天的sar


命令:sar -n DEV 查看网卡流量

加上参数:sar -n DEV 1 3  每1秒钟显示一次,一共显示3次

image.png

IFACE这列表示设备名称

rxpck/s 表示每秒接收到的包的数量,几千是正常的,上万不正常

txpck/s 表示每秒发送出去的包的数量,

rxbyt/s 表示每秒收取的数据量(单位Byte),

txbyt/s表示每秒发送的数据量。


命令:-f   指定查看看指定某一天网卡流量历史。

例如:sar -n DEV -f /var/log/sa/sa07  查看7号的流量,后边sa07指的是那一天的,sar会以日期号为结尾保存,最多保存一个月的。

image.png


命令:sar -q 查看历史负载   sar -q -f /var/log/sa07查看指定某天的负载

YT(@MAPJW]RSC1R0A$LNQ(P.png

6V4%8Q}8DK6RHU9$_9{QJ72.png


命令:sar -b 查看磁盘的(读写)

[root@aaa-01 ~]# sar -b 1 3
Linux 3.10.0-693.el7.x86_64 (aaa-01) 	2018年06月07日 	_x86_64_	(1 CPU)

21时05分59秒       tps      rtps      wtps   bread/s   bwrtn/s
21时06分00秒      0.00      0.00      0.00      0.00      0.00
21时06分01秒      0.00      0.00      0.00      0.00      0.00
21时06分02秒      0.00      0.00      0.00      0.00      0.00
平均时间:      0.00      0.00      0.00      0.00      0.00



nload命令

nload动态的显示网卡的页面

先安装:两个包,yum install -y epel-release yum install -y nload


直接敲命令:nload

第一行,网卡的数量,按左右方向键可以切换网卡,按 q 退出。

image.png

第二行,一次是,当前值、平均值、最小值、最大值。

image.png

通常我们买带宽都是买出去的带宽

M6H$8H4VQB$HSNB}0@K}TMS.png



监控io性能

命令:iostat -x   磁盘使用 主要查看%util 这个是显示你等待磁盘io的百分比

[root@aaa-01 ~]# iostat -x
Linux 3.10.0-693.el7.x86_64 (aaa-01) 	2018年06月08日 	_x86_64_	(1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.05    0.00    0.13    0.03    0.00   99.79

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.01    0.21    0.12     5.52     3.37    53.41     0.01   16.08    7.57   30.30   2.26   0.08
sdb               0.00     0.00    0.00    0.00     0.06     0.00    45.16     0.00    2.25    2.25    0.00   2.06   0.00
scd0              0.00     0.00    0.00    0.00     0.03     0.00   114.22     0.00   25.22   25.22    0.00  23.89   0.00


命令:iotop   动态排序显示进程使用io的情况,安装yum install -y iotop

image.png

   


free 查看内存使用情况

命令:free 直接回车,可以显示当前系统的总内存大小以及使用内存的情况

U)$ZJF}I1AM[@XZKXKWNZHV.png


数据的流向不一样,内存使用的角色也不一样,因为磁盘与cpu互相传数据会很慢,所以先把数据放到内存里,然后再从内存里读取数据
cache:磁盘(000:数据)→内存(cache)→CPU 
buff:CPU(000数据)→内存(buffer)→磁盘


命令:free -m 指定它显示的单位为兆

[root@aaa-01 ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            984         126         528           6         329         674
Swap:          2047           0        2047

命令:free -h 在具体的数字后边加上单位

[root@aaa-01 ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           984M        126M        528M        6.8M        329M        674M
Swap:          2.0G          0B        2.0G

公式:total=used+free+buff/cache    总用量=已用量+剩余+缓冲/缓存

avaliable包含free和buff/cache没用完剩余部分



ps 查看系统进程

命令:ps aux  把你系统里边所有的进程列出来

命令:ps aux |grep 检查系统中一个进程有没有运行。例如:ps aux |grep nginx、ps aux |grep mysql

wKioL1lzETWziOIeAACHm6a1E5E535.png

命令:ps aux |grep -c 查看一个进程的数量。

命令:ps -elf  结果跟ps aux相似

PID :进程的id,这个id很有用,在linux中内核管理进程就得靠pid来识别和管理某一个程,比如我想终止某一个进程,则用 ‘kill进程的pid 有时并不能杀掉,则需要加一个-9选项了 kill -9 进程pid

STAT :表示进程的状态,进程状态分为以下几种(不要求记住,但要了解)

D:不能中断的进程(通常为IO)

R:run正在运行中的进程

S:sleep已经中断的进程,通常情况下,系统中大部分进程都是这个状态

T:经停止或者暂停的进程,如果我们正在运行一个命令,比如说 sleep 10 如果我们按一下ctrl -z 让他暂停,那么我们用ps查看就会显示T这个状态

W:这个好像是说,从内核2.6xx 以后,表示为没有足够的内存页分配

X:已经死掉的进程(这个好像从来不会出现)

Z:僵尸进程,杀不掉,打不死的垃圾进程,占系统一小点资源,不过没有关系。如果太多,就有问题了。一般不会出现。

<:高优先级进程

N:低优先级进程

L:在内存中被锁了内存分页

s:主进程

l:多线程进程。有一个进程有多个线程。

+代表在前台运行的进程

线程由一个大的进程组成的,一个进程里边有多个线程



netstat 监控系统状态

netstat:查看网络状态,查看tcpip的一个状态

命令:netstat -lnp 显示当前系统监听着哪些端口

[root@aaa-01 ~]# netstat -nlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      893/sshd            
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      998/master          
tcp6       0      0 :::22                   :::*                    LISTEN      893/sshd            
tcp6       0      0 ::1:25                  :::*                    LISTEN      998/master          
udp        0      0 127.0.0.1:323           0.0.0.0:*                           546/chronyd         
udp6       0      0 ::1:323                 :::*                                546/chronyd         
raw6       0      0 :::58                   :::*                    7           590/NetworkManager


命令:netstat -an 查看系统所有网络连接状况


命令:netstat -lntp 只看tcp的,不包含socket

[root@aaa-01 ~]# netstat -ltnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      893/sshd            
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      998/master          
tcp6       0      0 :::22                   :::*                    LISTEN      893/sshd            
tcp6       0      0 ::1:25                  :::*                    LISTEN      998/master


命令:netstat -lunp只查看udp的

[root@aaa-01 ~]# netstat -lunp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
udp        0      0 127.0.0.1:323           0.0.0.0:*                           546/chronyd         
udp6       0      0 ::1:323                 :::*                                546/chronyd


命令:ss -an 跟netstat异曲同工,缺点是不能显示进程的名字。

状态:TIME_WAIT 客户端与服务端两台机器,相互通信完之后,他们的链接还没断开,处于一种相互等待的状态,等待这两个机器再一次连接传输数据

命令:netstat -an |awk '/^tcp/ {++sta[$NF]} END {for(key in sta) print key,"\t",sta[key]}'  查看所有状态用数字列出来

wKioL1lzIpXynh2nAADEvWC24ac696.png

如果ESTABLISHED很大,证明你的系统很忙,这个数据表示有多少个客户端在和服务端进行通信

LRFVFV1[@)IXL}4L(S1VPH1.png



tcptump 抓包工具

安装:yum install -y tcpdump

在你判断你的服务器上有流量***时,使用抓包工具来抓一下包,就知道那些IP在***你了。


命令:tcpdump -nn 两个n表示IP地址和端口号,不加-nn的话它显示的是名字,你分不清是哪个。

image.png

image.png

命令:tcpdump -nn -i ens33 加上网卡的名字

命令:tcpdump -nn port 指定端口,例如ens33网卡的22端口,tcpdump -nn -i ens33 port 22

命令:tcpdump -nn not port 不要某个端口,例如ens33网卡的22端口,tcpdump -nn -i ens33 not port 22

命令:tcpdump -nn -i ens33 not port  22 and host 192.168.0.100  不要某个端口并且只要一个指定IP的。

命令:tcpdump -nn -c 指定抓包的个数。比如只要100个:tcpdump -nn -i ens33 -c 100


命令:tcpdump -nn -w 把抓到的包存到一个文件里去(文件名字可以自己取)。例如:tcpdump -nn -i ens33 -c 10 -w /tmp/1.cap

[root@aaa-01 ~]# tcpdump -nn -i ens33 -c 10 -w /tmp/1.cap
tcpdump: listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
10 packets captured
10 packets received by filter
0 packets dropped by kernel

可以用file命令查看它的信息,但是不能查看内容:file /tmp/1.cap

[root@aaa-01 ~]# file /tmp/1.cap
/tmp/1.cap: tcpdump capture file (little-endian) - version 2.4 (Ethernet, capture length 262144)

tcpdump -r /etc/1.cop,可以查看文件内容,因为他是一个数据包,所以它显示的只是一些数据的流向

[root@aaa-01 ~]# tcpdump -r /tmp/1.cap 
reading from file /tmp/1.cap, link-type EN10MB (Ethernet)
19:08:27.654122 IP aaa-01.ssh > 192.168.232.1.53070: Flags [P.], seq 2889311389:2889311537, ack 3110138182, win 274, length 148
19:08:27.654290 IP 192.168.232.1.53070 > aaa-01.ssh: Flags [.], ack 148, win 254, length 0
19:08:59.507789 IP 192.168.232.1.53070 > aaa-01.ssh: Flags [P.], seq 1:69, ack 148, win 254, length 68
19:08:59.508025 IP aaa-01.ssh > 192.168.232.1.53070: Flags [P.], seq 148:216, ack 69, win 274, length 68
19:08:59.553682 IP 192.168.232.1.53070 > aaa-01.ssh: Flags [P.], seq 69:169, ack 216, win 254, length 100
19:08:59.553749 IP 192.168.232.1.53070 > aaa-01.ssh: Flags [P.], seq 169:237, ack 216, win 254, length 68
19:08:59.553971 IP aaa-01.ssh > 192.168.232.1.53070: Flags [.], ack 237, win 274, length 0
19:08:59.563115 IP aaa-01.ssh > 192.168.232.1.53070: Flags [P.], seq 216:268, ack 237, win 274, length 52
19:08:59.570663 IP aaa-01.ssh > 192.168.232.1.53070: Flags [P.], seq 268:384, ack 237, win 274, length 116
19:08:59.570876 IP 192.168.232.1.53070 > aaa-01.ssh: Flags [.], ack 384, win 253, length 0
[root@aaa-01 ~]#


tshark抓包工具(需要记住)

安装:yum install -y wireshark

命令: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"   可以查看指定网卡80端口web访问的情况。自己的实验虚拟机是抓不到的因为他没有80端口的服务

[root@aaa-01 ~]# 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" 
tshark: -R without -2 is deprecated. For single-pass filtering use -Y.
Running as user "root" and group "root". This could be dangerous.
Capturing on 'bluetooth0'



linux 网络相关

命令:ifconfig 查看默认网卡ip  需要安装包:(yum install net-tools)

命令:ifconfig -a 在你网卡被当(down)掉不显示时,或者没有ip时,它会显示出来。


命令:ifup ens33开启网卡  

命令:ifdown ens33关闭网卡   在我们编辑一个网卡并且不想让所有网卡都重新关闭开启,只需要指定一个网卡关闭重启时再用它

如果我们远程登录服务器,当使用ifdown eth0这个命令的时候,很有可能后面的命令ifup eth0不会被运行,这样导致我们断网而无法连接服务器,所以请尽量使用 service network restart 这个命令来重启网卡。


命令:ifdown ens33 && ifup ens33 一次性关闭并重启网卡,为了安全起见可以这样结合使用

[root@aaa-01 ~]# ifdown ens33 && ifup ens33
成功断开设备 'ens33'。
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/6)


设定虚拟网卡

例如:设定虚拟网卡ens33:1 

方法:

 第一步,先到网卡所在的目录中去:cd /etc/sysconfig/network-scripts/

 第二步,把ens33拷贝到ens33:1里:cp ifcfg-ens33 ifcfg-ens33\:1

 第三步,编辑配置文件:vi ifcfg-ens33\:1

 第四步,把里边带ens33的改成ens33:1,把ip改一下,网关跟DNS1都可以不要。

 第五步,重启网卡:ifdown ens33 && ifup ens33

mii-tool ens33 查看网卡是否连接,显示link ok 证明连接。

[root@aaa-01 network-scripts]# mii-tool ens33
ens33: negotiated 1000baseT-FD flow-control, link ok

 ethtool ens33 也可以查看网卡是否连接,最后一行显示yes证明连接。


查看主机名:hostname

 更改主机名:hostnamectl set-hostname aminglinux

配置文件:cat /etc/hostname


DNS配置文件

/etc/resolv.conf

[root@aaa-01 ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 119.29.29.29

特殊文件:/etc/hosts 

[root@aaa-01 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6


编辑它的配置文件可以给域名指定IP,vim /etc/hosts

格式:指定IP+域名  例如:192.168.232.140   www.qq.com  一个IP可以指定多个域名,仅仅在本机生效

wKioL1l0YZzzD_jOAADZz-a_XIo360.png

更改前

image.png

更改后

image.png

一个IP可以设置多个域名

image.png



Linux 防火墙

centos6、5、4...使用netfilter防火墙

centos7开始使用firewalld防火墙


netfilter防火墙(centos6以及以前的版本使用的)

命令:getenforce 查看selinux防火墙是否开启

Enforcing表示打开,Permissive表示关闭,其实他只是遇到一些需要阻断是时候他不真正的去阻断,仅仅是有一个提醒,这个提醒我们是看不到的,他自己会记录。

image.png

selinux临时关闭命令: setenforce 0

[root@aaa-01 ~]# setenforce 0
[root@aaa-01 ~]# getenforce
Permissive


selinux永久关闭

变配置文件:vi /etc/selinux/config   ##把enforcing改成disabled

Q1C83ISUS8N4FAH$U%XV$Q8.png


在centos7上开起netfilter防火墙方法:

命令:getenforce 查看selinux防火墙是否开启

关闭firewalld开启netfilter方法

第一步,不让firewalled开机启动:systemctl disable firewalled

第二步,再把firewalled服务停掉:systemctl stop firewalld

第三步,然后开启netfilter防火墙,开启之前需要安装包:yum install -y iptables-services

第四步,安装完它会产生iptables服务,查看一下:systemctl enable iptables

第五步,开启iptables服务:systemctl start iptables

命令:iptables -nvL 查看它的默认规则

netfilter是防火墙的名字,而iptables只是它的一个工具


netfilter的5个表

filter表用于过滤包,最常用的表,包含三个内置的链,有INPUT、FORWARD、OUTPUT三个链

filter 这个表主要用于过滤包的,是系统预设的表,这个表也是用的最多的。内建三个链INPUT、  OUTPUT以及FORWARD。INPUT作用于进入本机的包(数据包进来的时候要经过的一个链,假如把80端口进来的数据包访问我80端口的数据包检查一下它的源IP是什么发现可疑的IP给他禁掉);OUTPUT作用于本机送出的包(对本机送出的包进行操作);FORWARD作用于那些跟  本机无关的包。

nat表用于网络地址转换,有PREROUTING、OUTPUT、POSTROUTING三个链

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

 managle表用于给数据包做标记,几乎用不到

raw表可以实现不追踪某些数据包。

security表在centos6中并没有,用于强制访问控制(MAC)的网络规则


iptables传输数据包过程

参考文章:iptables详解

经过本机:PREROUTING > INPUT > 主机 > OUTPUT > POSTROUTING

不经过本机:PREROUTING > FORWARD POSTROUTING

5E8P_JZBBM3SKR4IAM_QO(9.png


数据包流向与netfilter的5个链

 PREROUTING:数据包进入路由表之前

 INPUT:通过路由表后目的地为本机

 FORWARD:通过路由表后,目的地不为本机

 OUTPUT:由本机产生,向外发出

 POSTROUTING:发送到网卡接口之前


iptables 基本语法

 查看iptables默认规则:iptables -nvL

 规则保存地址:cat /etc/sysconfig/iptables 配置文件的路径

 iptables -F 清空规则。 service iptables restart 重启加载回来

 service iptables save 保存规则(把当前的规则保存到配置文件去),因为刚才清空了规则没设置新的规则,所以现在保存他会是空规则

 iptables -t 指定表默认是filter表。iptables -t filter -nvL;iptables -t nat -nvL(nat表的规则是空的)

 iptables -Z 可以把计数器清零,格式:iptables -Z; iptables -nvL

image.png

 

iptables -A 增加一条规则(默认增加到最后边)看下图

 例如:iptables -A INPUT -s 192.168.188.1 -p tcp --sport 1234 -d 192.168.188.128 --dport 80 -j DROP 

 解释:-s:指定来源IP   -p:指定协议(tcp、odp、icmp)   --sport:目标端口  -b:目标IP   -j:最后操作   DROP:把数据直接扔掉   REJECT:拒绝 这两个的最终结果都是让这个数据包过不来封掉了这个IP 

iptables -I 插入规则。(插入到最前边)例如:iptables -I INPUT -p tcp --dport 80 -j DROP

image.png

iptables -D 删除规则。例如删除前两条规则:

[root@aaa-01 ~]# iptables -D INPUT -s 192.168.188.1 -p tcp --sport 1234 -d 192.168.188.128 --dport 80 -j DROP
[root@aaa-01 ~]# iptables -D INPUT -p tcp --dport 80 -j DROP

如果你写的规则很久了记不得了可以用这条命令,它会把规则的序列号打印出来根据序列号删规则。

列出序列号:iptables -nvL --line-numbers
删除指定的规则:iptables -D INPUT 1

Q9$U30O6LO(52Q0{0BN8P~G.png

 

iptables -I/-A/-D INPUT -s 1.1.1.1 -j DROP

针对网卡设置规则:iptables -I INPUT -s 192.168.1.0/24 -i eth0 -j ACCEPT

 iptables -P INPUT DROP 更改默认规则的。最好不用动!!假如说你更改了连接中断的工具会断开连接,你只能到终端上去把它更改回来:iptables -P INPUT ACCEPT


iptables小案例

image.png 

定义解释器 定义变量名 清空所有规则 把INPUT链收到的数据包扔掉 接受发出去的所有包

先编辑vi /usr/local/sbin/iptables.sh 加入如下内容

 #! /bin/bash

 ipt="/usr/sbin/iptables"  尽量写全局的绝对路径!

 $ipt -F              把之前的规则清除掉

 $ipt -P INPUT DROP

 $ipt -P OUTPUT ACCEPT

 $ipt -P FORWARD ACCEPT

 $ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

 $ipt -A INPUT -s 192.168.133.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 

 w查看一下。

 执行一下:sh /usr/local/sbin/iptables.sh 

wKiom1l0iiuw_jWxAAE9OTk8zQU687.png

icmp示例

 命令:iptables -I INPUT -p icmp --icmp-type 8 -j DROP  加上这条规则之后,你可以ping外网,但是外网不能ping你,因为它把icmp的8种类型给DROP掉了



nat表应用

现在有两台机器,A机器有两块网卡一块网卡我们把它比喻成是外网,另外一块网卡是内网,ens33是外网,ens37是内网。

另外一台B机器只有一块内网网卡(ens37),它默认是不能连外网的不能跟外网通信。我们的需求是让B机器可以连外网,说白了我们就是要做一个小路由器,路由器可以上网我们的电脑就可以上网

准备工作:

首先准备两台机器

image.png


第一步,给A机器添加一块网卡

W1I@5XDXKQR}(CAGSB{[IKN.png

image.png

选择LAN区段,就相当于我们给网卡连到了一个内网的交换机上,这个交换机咱们的Windows机器是连不上的,这样的话,我们这台机器和另外一台机器连上同一个内网交换机,它们两者之间通信

image.png

image.png

给第二台机器添加一块网卡因为我们已经设置了一块网卡,我们把它先禁用掉,把启动时链接给断掉,从新增加一块。

image.png

image.png

image.png

这两台机器必须选择同一个LAN区段才能进行内网通信

image.png

命令行给两台机器上的ens37设置IP,也可以设置配置文件,把ens33网卡配置文件复制一份给ens37

A机器:设置IP,ifconfig ens37 192.168.100.1/24(他只是一个临时的一重启就没有了)

image.png

B机器设置IP,为了保险可以把ens33网卡当掉ifdown ens33

只能在终端上设置IP:ifconfig ens37 192.168.100.100/24

image.png

两台机器互相ping一下内网IP看看能不能ping通

image.png

image.png

而Windows机器是ping不通的

image.png

准备工作做完,下面实验。

A机器两块网卡ens33(192.168.232.132)、ens37(192.168.100.1),ens33可以上外网,ens37仅仅是内部网络。

B机器只有ens37(192.168.100.100),和A机器ens37可以通信互联。

需求1:可以让B机器连接外网

 查看路由转发:cat /proc/sys/net/ipv4/ip_forward 如果是0,我们需要打开它A机器上打开路由端口转发 echo "1">/proc/sys/net/ipv4/ip_forward

[root@aaa-01 ~]# cat /proc/sys/net/ipv4/ip_forward
0
[root@aaa-01 ~]# echo "1">/proc/sys/net/ipv4/ip_forward
[root@aaa-01 ~]# cat /proc/sys/net/ipv4/ip_forward
1

 A上增加一条规则执行:iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE

查看一下规则:iptables -t nat -nvL

image.png

 B上设置网关为192.168.100.1 命令:route add default gw 192.168.100.1 查看网关:route -n

image.png

而现在pingA机器IP就通了,这证明他可以跟外网通信了

image.png

B机器设置一下DNS:vi /etc/resolv.conf    进去了写:nameserver 119.29.29.29

ping一下119.29.29.29  在ping一下www.qq.com

 需求2:C机器只能和A通信,让C机器可以直接连通B机器的22端口,假如C机器就是我们的电脑

 第一步,A上打开路由端口转发(因为上边已经做了就可以省略)echo "1">/ proc/sys/net/ipv4/ip_forward

 在A上删掉上一个实验的规则:iptables -t nat -D POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE

 A上执行iptables -t nat -A PREROUTING -d 192.168.133.130 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22(端口转发,进来的包怎么操作)

 A上执行iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.133.130(回来的包)

 B上设置网关为192.168.100.1(如果上边实验设置了这一步就可以省略)



iptables规则备份和恢复

 默认保存命令:service iptables save //会把规则保存到/etc/sysconfig/iptables

 指定保存命令:例如,把iptables规则备份到my.ipt文件中,命令:iptables-save > /tmp/my.ipt

 恢复刚才备份的规则命令:iptables-restore < /tmp/my.ipt



猜你喜欢

转载自blog.51cto.com/12922638/2129055