日常运维

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了日常运维相关的知识,希望对你有一定的参考价值。

查看网络状态:

    使用netstat命令查看系统的网络情况。日常运维经常用来打印网络连接状况和当前系统启动了哪些端口,请务必记住以下两种用法,其他的选项请man查阅。

    (1)打印网络连接状况:netstat -an

        技术分享图片

    如果你所管理的服务器是一台提供web服务(80端口)的服务器,那么你就可以使用 netstat -an |grep 80 查看当前连接web服务的有哪些IP了。

    【统计所有网络状态总数】:netstat -an | awk '/^tcp/ {++sta[$NF]} END {for(key in sta) print key,"\t",sta[key]}';  如果ESTABLISHED值很大,表示网络很忙。

    技术分享图片

    (2)打印当前系统启动了哪些端口(你也可以加上参数-t:表示tcp,-u:表示udp)

        技术分享图片

Linux下抓包:

    抓包工具:tcpdump、wireshark

    tcpdump工具的用法:

        tcpdump -nn

        tcpdump -nn -i ens33    抓指定网卡

        tcpdump -nn port 80     指定只抓端口80的包

        tcpdump -nn -i ens33 tcp and not port 22  指定抓tcp的包,但不要是22端口的  

        tcpdump -nn -i ens33 -c 100 -w /tmp/1.cap  指定抓包数量和存放位置

        tcpdump -r 1.cap   查看抓包数据

技术分享图片

    如果没有tcpdump 这个命令,需要用 yum install -y tcpdump 命令去安装一下。上例中第三列和第四列显示的信息为哪一个IP+port在连接哪一个IP+port,后面的信息是该数据包的相关信息,如果不懂也没有关系,毕竟我们不是专门搞网络的,而这里需要关注的只是第三列以及第四列。-i 选项后面跟设备名称,如果你想抓eth1网卡的包,后面则要跟eth1。至于-nn选项的作用是让第三列和第四列显示成IP+端口号的形式,如果不加-nn则显示的是主机名+服务名称。

    wireshark工具:

        安装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"

    上面这条命令用于web服务器,会输出类似访问日志的内容。

    # tshark -n -i ens33 -R 'mysql.query' -T fields -e "ip.src" -e "mysql.query"    抓取ens33网卡mysql的查询都有哪些

    # tshark -i ens33 port 3307 -d tcp.port==3307,mysql -z "proto,colinfo,mysql.query,mysql.query"    当mysql不是默认3306端口时,使用这条命令查询。 

Linux网络相关:

    (1)ifconfig查看网卡ip

            直接输入ifconfig,不加任何选项和参数只打印当前网卡的IP相关信息(子网掩码、网关等)

            技术分享图片

        如果想修改网卡信息的,如ip;则需要修改配置文件vim /etc/sysconfig/network-scripts/ifcfg-ens33,ens33是网卡名称。

        重启某个网卡:ifdown ens33 ; ifup ens33;

            ifdown 即停掉网卡,ifup即启动网卡。有一点要提醒你的是,如果我们远程登录服务器,当使用ifdown eth33这个命令的时候,很有可能后面的命令ifup eth33不会被运行,这样导致我们断网而无法连接服务器,所以请尽量使用 service network restart 这个命令来重启网卡。或者用ifdown ens33 && ifup ens33

    (2)给一个网卡设定多个IP

        技术分享图片   

    之所以加反斜杠\,是因为要把冒号:转义,不然在Linux命令行下面无法识别。然后编辑ifcfg-ens33:1 这个配置文件,内容如下,一定要注意 DEVICE 这里要写成 "ens33:1"

其实就是改一下NAME,DEVICE,IPADDR,设置完毕重启网卡,使用命令:ifdown ens33 && ifup ens33

        技术分享图片

    重启网络后:ifconfig

        技术分享图片

    (3)查看网络连接状态

        使用命令mii-tool ens33 查看网卡是否连接

        技术分享图片

        只要看到 “link ok” 就说明网卡为连接状态,如果显示 “no link” 说明网卡坏掉了或者没有连接网线。

        也可以使用ethtool ens33命令查看:

        技术分享图片

    (4)更改主机名

        当装完系统后,默认主机名为localhost,使用hostname就可以知道你的linux的主机名是什么。

        临时修改:hostname yourname; 重启后失效。

        永久修改:hostnamectl set-hostname yourname;   或者直接修改配置文件/etc/hostname

    (5)设置DNS

        DNS是用来解析域名用的,平时我们访问网站都是直接输入一个网址,而dns把这个网址解析到一个IP。关于dns的概念,如果你很陌生的话,那就去网上查一下吧。在linux下面设置dns非常简单,只要把dns地址写到一个配置文件中即可。这个配置文件就是/etc/resolv.conf

        技术分享图片

        resolv.conf有它固有的格式,一定要写成 “nameserver IP” 的格式,上面那行以 ‘;’ 为开头的行是一行注释,没有实际意义,建议写两个或多个namserver ,默认会用第一个namserver去解析域名,当第一个解析不到时会使用第二个。在linux下面有一个特殊的文件/etc/hosts也能解析域名,不过是需要我们手动在里面添加IP+域名这些内容,它的作用是临时解析某个域名,非常有用。

        编辑配置文件/etc/hosts

        技术分享图片

    技术分享图片

    /etc/hosts 的格式很简单,每一行作为一条记录,分成两部分,第一部分是IP,第二部分是域名。关于hosts文件,有几点需要你注意:

        1)一个IP后面可以跟多个域名,可以是几十个甚至上百个;

        2)每行只能有一个IP,也就是说一个域名不能对应多个IP;

        3)如果有多行中出现相同的域名(前面IP不一样),会按最前面出现的记录来解析。

Linux的防火墙(firewalld和netfilter)

    (1)SELinux

            SELinux是Linux系统特有的安全机制,不过因为限制太多,所以很少人使用,一般我们都是关闭SELinux。

            临时关闭:setenforce 0;      永久关闭:编辑配置文件 vim /etc/selinux/config,找到SELINUX=enforcing 改成 SELINUX=disabled。重启后生效!

            技术分享图片

            可以使用genenforce命令获得当前SELinux的状态

    (2)netfilter

            CentOS 5和6 的防火墙是netfilter;主要是使用iptables工具实现防火墙。

        因为现在我的系统是CentOS7的,在这里我先关闭firewalld服务,使用CentOS6的netfilter演示。更换操作如下:

                systemctl stop firewalld   关闭firewalld服务

                systemctl disable firewalld  禁止firewalld服务开机启动

                yum install -y iptables-services  安装iptables-services

                systemctl enable iptables   让它开机启动

                systemctl start iptables    启动iptables服务技术分享图片

    (3)firewalld

            CentOS7 的防火墙使用firewalld,不是netfilter。

netfilter 5表5链介绍:

    5表:filter表、nat表、mangle表、raw表、security表

    5链:PEROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING

    下面介绍5表5链:

    filter表:主要用于过滤包,是系统预设的表。平时用的最多的表。该表内建3个链:IUPUT、OUTPUT、FORWARD,INPUT链作用进入本机的包,OUTPUT链作用于本机送出的包,FOEWARD作用于跟本机无关的包

    nat表:主要用于网络地址转换,它也有3个链。PREROUTING链的作用是在包刚刚到达防火墙时改变它的目的地址(非必须),OUTPUT链的作用是改变本地包的目的地址,POSTROUTING链的作用是在包即将离开防火墙时改变其源地址。偶尔用到!

    mangle表:主要用于给数据包做标记,然后根据标记去操作相应的包。(运维几乎不用,网络工程师用)

    raw表:可以实现不追踪某些数据包,默认系统的数据都会被跟踪。(也是几乎不用)

    security表:CentOS6没有的,它用于强制访问控制(MAC)的网络规则。(了解即可)

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

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

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

    OUTPUT:有本机产生,向外转发

    POSTROUTING:发送到网卡接口之前

    iptables数据包流向:

    技术分享图片

    表和链对应的关系:

    技术分享图片

iptables语法:

    查看规则:iptables -t nat -nvL; 规则保存在/etc/sysconfig/iptables文件中;-t 指定表名;-nvL表示查看该表规则,-n表示不针对IP反解析主机名,-L表示列出,-v表示列出更加详细。不加-t,默认打印filter表的相关信息。

    清空规则:iptables -F,临时清空,重启后会还原配置iptables文件的规则;

    保存规则:service iptables save

    包及流量计数器置零:iptables -Z

    增加/删除一条规则,用法:iptables -A INPUT -s 192.168.128.1 -p tcp --sport 1234 -d 192.168.128.28 --dport 80 -j DROP

    各个选项的作用:

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

        -I 表示插入一条规则,其实效果跟-A一样(执行顺序不一样)

        -p 表示指定协议,可以是tcp、udp或者icmp

        -P 后面跟链名,它表示预设策略;  如iptables -P INPUT DROP;  (使用这个选项是要小心,特别是远程服务器)

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

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

        -s 表示指定源IP(可以是一个IP段)

        -d 表示指定目标IP(可以是一个IP段)

        -j 后面跟动作,其中ACCEPT表示允许包,DROP表示丢弃包,REJECT表示拒绝包

        -i 表示指定网卡(不常用)

    举例:

        ①插入一条规则,把来自2.2.2.2的所有数据包丢弃:iptables -I INPUT -s 2.2.2.2 -j DROP

        ②下面是删除上面这条规则,注意删除规则时,必须和插入的规则一致,也就是说两条命令,除了-I和-D不一样,其他地方都是一样的:iptables -D INPUT -s 2.2.2.2 -j DROP

        ③把来自2.2.2.2并且是TCP协议到本机80端口的数据包丢弃:iptables -I INPUT -s 2.2.2.2 -p tcp --dport 80 -j DROP; 注意--dport/--sport必须和-p一起使用,否则会报错。

        ④把发送到10.0.0.21的22端口的数据包丢弃:iptables -I OUTPUT -p tcp -dport 22 -d 10.0.0.21 -j DROP

    有时候服务器上iptables过多,你想删除一条规则,但又忘记了创建是的规则,怎么删除呢?其实还有一种简单的方法:

    iptables -nvL --line-numbers

技术分享图片

    然后你想删除某一条规则:iptables -D INPUT 1;  -D后面跟链名、规则num,这个num就是上图的第一列的值。

iptables filter表案例:

    需求:只针对filter表,预设策略INPUT链DROP,其他两个链ACCEPT,然后针对192.168.188.0、24开通22端口,对所有网段开放80端口,对所有网段开放21端口。

ipt="/usr/sbin/iptables"
$ipt -F
$ipt -P INPUT DROP
$ipt -P OUTPUT ACCPT
$ipt -P FORWARD ACCEPT
$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$ipt -A INPUT -s 192.168.188.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的包有一个常见的应用(请牢记):

# iptables -I INPUT -p icmp --icmp-type 8 -j DROP

    这里--icmp-type选项要跟-p icmp一起使用,后面指定类型编号。这个8指的是本机ping通其他机器,而其他机器不能ping通本机。

iptables nat表应用:

    A机器两块网卡ens33(192.168.133.130)、ens37(192.168.100.1),ens33可以上外网,ens37仅仅是内部网络,B机器只有ens37(192.168.100.100),和A机器ens37可以通信互联。

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

        A机器上打开路由转发 echo "1">/proc/sys/net/ipv4/ip_forward

        A上执行 iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE 

        B上设置网关为192.168.100.1

    需求2:C机器只能和A通信,让C机器可以直接连通B机器的22端口

        A上打开路由转发echo "1">/ proc/sys/net/ipv4/ip_forward

        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规则备份和恢复:

    (1)保存规则在配置文件中(/etc/sysconfig/iptables):service iptables save

    (2)把iptables规则备份到my.ipt文件中:iptables-save > my.ipt

    (3)从文件中恢复备份的规则:iptables-restore < my.ipt

【到这里netfilter就介绍完了,下面开始介绍firewalld】

    先关闭iptables,打开firewalld:systemctl disable iptables;    systemctl stop iptables;    systemctl enable firewalld;    systemctl start firewalld;

firewalld的9个zone:

    firewalld有两个基础概念,分别是zone和service;每个zone里面有不同的iptables规则,默认一共9个zone;而CentOS7默认的zone为public

    获取系统中的所有zone:firewalld-cmd --get-zones

    查看系统默认的zone:firewalld-cmd --get-default-zone

下面介绍这9个zone:drop(丢弃)、block(限制)、public(公共)、external(外部)、dmz(非军事区)、work(工作)、home(家庭)、internal(内部)、trusted(信任)

        技术分享图片

firewalld关于zone的操作:   

     firewall-cmd --set-default-zone=work     //设定默认zone

     firewall-cmd --get-zone-of-interface=ens33  //查指定网卡

     firewall-cmd --zone=public --add-interface=lo  //给指定网卡设置zone 

     firewall-cmd --zone=dmz --change-interface=lo  //针对网卡更改zone

     firewall-cmd --zone=dmz  --remove-interface=lo   //针对网卡删除zone 

     firewall-cmd --get-active-zones   //查看系统所有网卡所在的zone

firewalld关于service的操作:   

    之所以有9种zone,是因为每个zone里使用不同的service,而service是针对一个服务(端口)做的iptables规则。

     firewall-cmd --get-services  //查看所有的servies

     firewall-cmd --list-services  //查看当前zone下有哪些service

     firewall-cmd --zone=public --list-services  //查看指定zone下有哪些service

     firewall-cmd --zone=public --add-service=http //把http增加到public zone下面

     firewall-cmd --zone=public --remove-service=http

     ls /usr/lib/firewalld/zones/  //zone的配置文件模板

      ls /usr/lib/firewalld/services/  //service的配置文件模板

     firewall-cmd --zone=public --add-service=http --permanent //在zone永久增加service,之后会在/etc/firewalld/zones目录下面生成配置文件

需求:ftp服务自定义端口1121,需要在work zone下面放行ftp

     cp /usr/lib/firewalld/services/ftp.xml /etc/firewalld/services

     vi /etc/firewalld/services/ftp.xml    //把21改为1121

     cp /usr/lib/firewalld/zones/work.xml /etc/firewalld/zones/

     vi /etc/firewalld/zones/work.xml     //增加一行

     <service name="ftp"/>

     firewall-cmd --reload     //重新加载

     firewall-cmd --zone=work --list-services


以上是关于日常运维的主要内容,如果未能解决你的问题,请参考以下文章

Python日常运维脚本

Hadoop集群日常运维

代码发布系统实现

开发运维日常坑 总结 1-50

如何做好日常运维的安全工作

linux运维的工作内容都有啥