日常运维
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
以上是关于日常运维的主要内容,如果未能解决你的问题,请参考以下文章