Skip to main content

operator

1、网络

1、sys泛红以及ssh暴力破解

netstat -nap | grep SYN_RECV
cat /var/log/secure | awk '/Failed/{print $(NF-3)}' | sort | uniq -c | awk '{print $2" = "$1;}'


cat /var/log/secure | awk '/Failed/{print $(NF-3)}' | sort | uniq -c | awk '{print $2" = "$1;}'


(1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
(2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
(3)第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

SYN攻击:
在三次握手过程中,Server发送SYN-ACK之后,收到Client的ACK之前的TCP连接称为半连接(half-open connect),此时Server处于SYN_RCVD状态,当收到ACK后,Server转入ESTABLISHED状态。SYN攻击就是Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server回复确认包,并等待Client的确认,由于源地址是不存在的,因此,Server需要不断重发直至超时,这些伪造的SYN包将产时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络堵塞甚至系统瘫痪。SYN攻击时一种典型的DDOS攻击,检测SYN攻击的方式非常简单,即当Server上有大量半连接状态且源IP地址是随机的,则可以断定遭到SYN攻击了,使用如下命令可以让之现行:
#netstat -nap | grep SYN_RECV

while [ $a=10 ] && [ $b = 20 ] ; do echo "ok"; break; done

修改内核防止sync工具的最大连接数

#查看 sysctl -a|grep net.ipv4.tcp_max_syn_backlog #修改 sysctl -w net.ipv4.tcp_max_syn_backlog=3000

2、windows路由添加

添加永久路由

route print 打印路由信息
route add 10.188.0.0 mask 255.255.0.0 192.168.1.253 -p
route delete 10.10.10.0(目的网段网络地址) 表示删除路由
route change 192.168.0.0 mask 255.255.0.0 192.168.14.1 metric 1 if 2 (CHANGE参数只能修改“网关”和“跳数”)。

3、网卡问题

如果多个网卡存在
删除网卡:
nmcli connection delete 网卡id
cd /etc/sysconfig/network-scripts/
rm -f ifcfg-eth0
cp ifcfg-ens192 ifcfg-eth0


cat ifcfg-eth0:
TYPE="Ethernet"
BROWSER_ONLY="no"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
NAME="eth0"
DEVICE="eth0"
ONBOOT="yes"
IPADDR="192.168.100.236"
PREFIX="24"
GATEWAY="192.168.100.254"
DNS1="114.114.114.114"
PEERDNS="no"
IPV6_PRIVACY="no"
DNS2="8.8.8.8"

nmcli c reload
nmcli c
nmcli c up eth0
或者重启服务,重启系统

centos7取消无线网卡

echo "blacklist iwlwifi" > /etc/modprobe.d/blacklist-iwlwifi.conf
depmod -a
reboot
lsmod | grep iwlwifi

#开机禁用
[root@beijing-server ~]# cat /etc/default/grub
...
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet modprobe.blacklist=iwlwifi"

4、 spring-cloud服务在访问redis时出现连接失败(服务注册)

原因:是因为基于docker部署的服务在注册到nacos中时,注册的地址是容器的地址,服务之间跨主机无法访问容器中的地址。

如果是docker启动的容器,在映射端口映射到物理机的端口必须是6379,或者使用host网络。

5、邮箱ssl配置

qq邮箱配置脚本

[root@xjp-001-zlq ~]# cat smtps-mailx.sh  
#/bin/bash
COLOR='echo -e \E[01;32m'
COLOR_ERROR='echo -e \E[01;31m'
END='\E[0m'
INSTALL_SMTPS(){
set -e
if [ ! -d "/root/.certs" ]; then
yum install -y nss-tools mailx
sleep 2
mkdir /root/.certs
echo -n | openssl s_client -connect mail.iandun.cn:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /root/.certs/iandun.crt
certutil -A -n "GeoTrust SSL CA" -t "C,," -d /root/.certs -i /root/.certs/iandun.crt
certutil -A -n "GeoTrust Global CA" -t "C,," -d /root/.certs -i /root/.certs/iandun.crt
cat >/root/.mailrc<<-EOF
set from=zhanglaiqiang@iandundd.cn
set smtp=smtps://mail.iandundd.cn:465
set smtp-auth-user=zhanglaiqiang@iandundd.cn
set smtp-auth-password=xxxxxxxxxx #授权码 此处根据实际情况需要修改
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/root/.certs
EOF
$COLOR "#######发送测试邮件到测试邮箱409003604@qq.com########" $END
echo "FBI Warning " | mail -v -s hello 409003604@qq.com
if [ $? == 0 ]; then
$COLOR "#######smtps服务部署成功!########" $END
else
$COLOR_ERROR "#######smtps服务部署失败!########" $END
fi
else
$COLOR_ERROR "#######请检查~/.certs目录已经存在########" $END
fi
}
INSTALL_SMTPS

下面是配置163邮箱的

rm -f .certs2/* 
echo -n | openssl s_client -connect smtp.163.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs2/163.crt

certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs2 -i ~/.certs2/163.crt
certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs2 -i ~/.certs2/163.crt
certutil -L -d ./.certs2

certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./.certs2 -i ./.certs2/163.crt

5、iftop 查看网卡流量

2049端口是跟nfs相关的

 iftop -i eth0  -P
iftop -i

像下面显示名称为名称的展示为服务端口按大N键

服务器查看进程 netstat -ltnp

https://blog.csdn.net/icanflyingg/article/details/122618127

根据报警处理 在容器中,容器的虚拟网卡是成对出现的,比如下面

[zhanglaiqiang@andun-server08 ~]$ ip a | grep -A 3 -B 3 'vethdff0645' 
valid_lft forever preferred_lft forever
73: veth495b6ab@if72: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-03a10779cc6c state UP group default
link/ether 8e:e1:eb:0a:5c:8b brd ff:ff:ff:ff:ff:ff link-netnsid 2
1370: vethdff0645@if1369: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
link/ether 66:5f:42:73:49:c0 brd ff:ff:ff:ff:ff:ff link-netnsid 19
862: veth6ce0423@if861: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-a733af38ab32 state UP group default
link/ether 92:c6:0e:36:88:1c brd ff:ff:ff:ff:ff:ff link-netnsid 8

1370 表示物理网卡的网卡序号,而if1369表示链接到容器当中的eth0网卡序号

#通过下面的方式来查看容器中网卡的序号,也可以通过Ip a查看 ,
#需要安装 ip命令,执行apt-get install iproute2进行安装
root@a51df0542708:/# cat /sys/class/net/eth0/ifindex

以上告警为容器网卡,找到对应的容器

#找到网卡所在的物理机网卡序号
[zhanglaiqiang@andun-server08 ~]$ ip a | grep 'vethdff0645' | awk -F ":" '{print $1}'
1370
[zhanglaiqiang@andun-server08 ~]$

#通过找到容器中链接宿主机的网卡序号
[zhanglaiqiang@andun-server08 ~]$ for i in `docker ps | awk '{print $NF}' | grep -v 'NAMES'` ; do echo $i; docker exec -it $i cat /sys/class/net/eth0/iflink | grep '1370' ; done
iandun_cmsserver
iandun_repertoryweb
iandun_repertoryserver
iandun_cmsweb
P_W
1370 #找到对应的容器为P_W
plg_promtail
drink_dl
ppg_auto
bloodsugar
ckwear
extensionweb
partnerweb
customerweb
iandunlog
iandun-open-api
iandun-soul
iandun-gateway
showweb
implant

2、系统服务

1 、查看直接通过system启动的war包项目

ps -ef | grep -o  ".config.file=/usr/local/tomcat-[a-z,-]\+"
.config.file=/usr/local/tomcat-app-demo
.config.file=/usr/local/tomcat-cmsserver-demo
.config.file=/usr/local/tomcat-customer-server-demo

2、日志切割

java启动jar包基于运维系统层面的日志切割方式参考
```
nohup java -jar common-api.jar | /usr/local/cronolog/sbin/cronolog logs/console-%Y-%m-%d.out &
```

3、cpu暴涨 -通过线程查找问题

#方式1: 
#第一步: 通过top找到资源使用率最大的那个进程,比如16108
1、 ps -mp 16108 -o THREAD,tid,time | sort -rn
[zhanglaiqiang@watch-server01 ~]$ ps -mp 16108 -o THREAD,tid,time | sort -nr | head
USER %CPU PRI SCNT WCHAN USER SYSTEM TID TIME
root 68.7 - - - - - - 00:07:42
root 5.9 19 - - - - 16137 00:00:40
root 5.7 19 - - - - 16138 00:00:38
root 5.3 19 - - - - 16136 00:00:36
root 2.0 19 - - - - 16308 00:00:13
root 2.0 19 - - - - 16139 00:00:13
root 1.9 19 - - - - 16688 00:00:12
root 1.8 19 - - - - 16690 00:00:12
root 1.7 19 - - - - 16687 00:00:10
#然后通过上面的主进程找到对应的资源使用率最大线程id,比如: 16137

#转换为16进制
2、printf "%x\n" 16137
3f09

定位到那个进程的代码片段
3、jstack 16108 | grep 3f09 -A 30
[zhanglaiqiang@watch-server01 ~]$ sudo /andun_work/jdk1.8.0_144/bin/jstack 16108 | grep 3f09 -A 30
[sudo] password for zhanglaiqiang:
"C2 CompilerThread1" #7 daemon prio=9 os_prio=0 tid=0x00007f3c80515000 nid=0x3f09 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE

"C2 CompilerThread0" #6 daemon prio=9 os_prio=0 tid=0x00007f3c80513000 nid=0x3f08 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE

"Signal Dispatcher" #5 daemon prio=9 os_prio=0 tid=0x00007f3c80511000 nid=0x3f07 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE

"Surrogate Locker Thread (Concurrent GC)" #4 daemon prio=9 os_prio=0 tid=0x00007f3c8050f800 nid=0x3f06 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE

"Finalizer" #3 daemon prio=8 os_prio=0 tid=0x00007f3c804dc800 nid=0x3f05 in Object.wait() [0x00007f3c1a816000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)
- locked <0x00000006c0906578> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209)

"Reference Handler" #2 daemon prio=10 os_prio=0 tid=0x00007f3c804d7800 nid=0x3f04 in Object.wait() [0x00007f3c1a917000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:502)
at java.lang.ref.Reference.tryHandlePending(Reference.java:191)
- locked <0x00000006c09065b8> (a java.lang.ref.Reference$Lock)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153)

"main" #1 prio=5 os_prio=0 tid=0x00007f3c80009800 nid=0x3eee runnable [0x00007f3c88013000]
java.lang.Thread.State: RUNNABLE
at java.net.PlainSocketImpl.socketAccept(Native Method)



#方式2
top -H -p pid #pid指定cpu使用率最大的那个pid文件

3、系统负载计算

[zhanglaiqiang@demo02 iandun-system]$ top -n 1  -b  | grep  average
top - 11:59:30 up 17 days, 20:54, 7 users, load average: 1.90, 2.37, 2.43

#解释
1.90表示系统1分钟负载
2.37表示系统5分钟负载
2.43表示系统15分钟负载

比如: 系统有8个cpu,系统负载不能超过8

4、云服务器cpu核数统计

CPU总核数 = 物理CPU个数 * 每颗物理CPU的核数 总逻辑CPU数 = 物理CPU个数 * 每颗物理CPU的核数 * 超线程数

#查看CPU信息(型号)
[zhanglaiqiang@demo02 iandun-system]$ cat /proc/cpuinfo| grep "cpu cores"| uniq
cpu cores : 4

## 查看物理CPU个数
[zhanglaiqiang@demo02 iandun-system]$ cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
8 Intel(R) Xeon(R) Platinum 8269CY CPU @ 2.50GHz
[zhanglaiqiang@demo02 iandun-system]$ cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
1

# 查看每个物理CPU中core的个数(即核数)
[zhanglaiqiang@demo02 iandun-system]$ cat /proc/cpuinfo| grep "cpu cores"| uniq
cpu cores : 4

# 查看逻辑CPU的个数
[zhanglaiqiang@demo02 iandun-system]$ cat /proc/cpuinfo| grep "processor"| wc -l
8
[zhanglaiqiang@demo02 iandun-system]$

这些都代表什么,那就请看CPU架构

多个物理CPU,CPU通过总线进行通信,效率比较低,如下:

多核CPU,不同的核通过L2 cache进行通信,存储和外设通过总线与CPU通信,如下:

多核超线程,每个核有两个逻辑的处理单元,两个核共同分享一个核的资源,如下:

从上面执行的结果来看,证明我使用的cpu有4* 2 = 8 核,每个核有2个超线程,所以有8个逻辑cpu。

从上面执行的结果来看,证明我使用的cpu有4* 2 = 8 核,每个核有2个超线程,所以有8个逻辑cpu。

5、巡检脚本配置以及授权

创建用户

useradd devops  &&  echo "123456"  | passwd  --stdin devops

创建授权

[root@loaclhost ~]# visudo  #或者 vim /etc/sudoers 两种方式
devops ALL=(ALL) NOPASSWD:/usr/bin/netstat,/bin/bash,/bin/python3

6、Iotop命令详解

#iotop命令是一个用来监视磁盘I/O使用状况的top类工具。iotop具有与top相似的UI,其中包括PID、用户、I/O、进程等相关信息。Linux下的IO统计工具如iostat,nmon等大多数是只能统计到per设备的读写情况,如果你想知道每个进程是如何使用IO的就比较麻烦,使用iotop命令可以很方便的查看
#与iostat工具比较,iostat是系统级别的IO监控,而iotop是进程级别IO监控
iotop的安装有前提条件
1:内核版本为2.6.20或更高版本
2:Python 2.7或更高的版本
iotop参数:
-o:只显示有io操作的进程
-b:批量显示,无交互,主要用作记录到文件。
-n NUM:显示NUM次,主要用于非交互式模式。
-d SEC:间隔SEC秒显示一次。
-p PID:监控的进程pid。接进程号,监视指定进程,只会输出该进程的统计信息。
-u USER:监控的进程用户。
-k 使用千字节而不是人类友好单位

iotop使用 iotop -k 查看如下效果

使用说明

Total DISK READ:总磁盘读
Actual DISK READ:实际磁盘读
Total DISK WRITE :总磁盘写入
Actual DISK WRITE:实际磁盘写入
TID列:进程PID
USER:进程对应的用户

iotop快捷键

左右箭头:改变排序方式,默认是按IO排序。
r:改变排序顺序。反向排序
o:只显示有IO输出的进程。
p:进程/线程的显示方式的切换。
a:显示累积使用量。
q:退出。

iotop的例子

iotop -o   #可以清楚地知晓是什么程序在读写磁盘,速度以及命令行,pid 等信息

使用非交互模式将iotop命令输出信息写入日志

#nohup iotop -b -o -n 10 -d 5 -t  > /tmp/iotop.log &
#借助iotop命令找到消耗I/O最高的进程
iotop -oP
监控系统I/O
[root@localhost ~]# iotop

监控用户root的I/O
[root@localhost ~]# iotop -u root

监控进程号是1的I/O
[root@localhost ~]# iotop -p 1

7、打印需要杀死的进程

ps -ef|grep boco|grep -v grep|awk '{print "kill -9 "$2}' #打印需要杀死进程

8、清理journalctl日志

# 查看占用的磁盘
journalctl --disk-usage

# 设置占用的磁盘空间,日志量大于这些后自动删除旧的
journalctl --vacuum-size=512M

# 2d之前的自动删除
journalctl --vacuum-time=2d

# 查看系统内核日志
journalctl -k

9、centos启动异常

1.报错:Entering emergency mode. Exit the shell to continue. 2.故障分析:不按规范挂机或重启导致文件系统故障。 3.故障状态:

备注:注意中间读取的是sda3失败

4.故障解决:

输入命令:xfs_repair -v -L /dev/sda3

-L 选项指定强制日志清零,强制xfs_repair将日志归零,即使它包含脏数据(元数据更改)

3、磁盘挂载

1、磁盘空间判断大于30%

 df -Ph | awk '{if(+$5>20) print $5}'
df -Ph | awk '{if(+$5>20) print $(NF-1)}'

2、挂载windows的共享

如果共享windows的目录,在linux上挂载:

centos8:

客户端更改: wordpress-博客案例

插件安装,在windows中必须创建账号,并且授权目录共享目录可以使用
yum -y install cifs-utils

方式1:
写入到fatab当中
\\10.8.0.101\share /apps/wordpress/html/devops cifs user,uid=500,rw,suid,username=ilync,password=ifnvps8898. 0 0

方式2: 用命令执行-可能方式1不行的情况下使用方法2
mount -t cifs //10.8.0.101/share /apps -o username=ilync,password=ifnvps8898.,vers=2.0

centos7.3配置;

手动执行挂载
mount -t cifs -o username=ilync,password=ifnvps8898.,vers=2.0 //10.8.0.101/share /apps/

写入到/etc/fstab文件中
\\10.8.0.101\share /apps/ cifs username=ilync,password=ifnvps8898.,vers=2.0 0 0

3、磁盘

#disk_fq=$(df -Ph | awk '{if(+$5>10) print "分区:"$1}')
disk_fq=$(df -m | awk '{if(+$5>10) print "分区:"$1" "$5" "$4}' | awk 'BEGIN {max = 0} {if ($3+0 >max+0) {max=$3; content=$0}} END {print content}' | awk '{print $1}')

#disk_to=$(df -Ph | awk '{if(+$5>10) print "总空间:"$2}')
disk_to=$(df -m | awk '{if(+$5>10) print "总空间:" $2 }' | awk -F ":" 'BEGIN {max = 0} {if ($2+0 >max+0) {max=$2; content=$0}} END {print content}')

#disk_us=$(df -Ph | awk '{if(+$5>10) print "使用空间:"$3}')
disk_use=`df -m | awk '{if(+$5>10) print "使用空间:"$3}' | awk -F ":" '{print $NF}' | sort -nr | head -n 1`

#disk_fe=$(df -Ph | awk '{if(+$5>10) print "可用空间:"$4}')
disk_fe=$(df -m | awk '{if(+$5>10) print "可用空间:" $4 }' | awk -F ":" 'BEGIN {max = 0} {if ($2+0 >max+0) {max=$2; content=$0}} END {print content}' | awk '{print $1}')


#disk_ul=$(df -Ph | awk '{if(+$5>20) print "磁盘使用率:"$5}')
disk_ul=$(df -m | awk '{if(+$5>10) print "磁盘使用率:" $5 }' | awk -F ":" 'BEGIN {max = 0} {if ($2+0 >max+0) {max=$2; content=$0}} END {print content}')

4、Java和Tomcat

1、 catalina.sh Java_opts配置

cattalina.sh中在下面位置添加,资源限制使用

JAVA_OPTS="-server -Xms512m -Xmx1024m -XX:+UseG1GC -Dfile.encoding=UTF-8"

添加jmx_exporter
JAVA_OPTS="-javaagent:/home/andun_devops/jmx_prometheus_javaagent/jmx_prometheus_javaagent-0.16.1.jar=38083:/home/andun_devops/jmx_prometheus_javaagent/config.yaml -server -Xms512m -Xmx1024m -XX:+UseG1GC -Dfile.encoding=UTF-8"

docker-compose资源限制

  deploy:
resources:
limits:
cpus: '1'
memory: 1000M

skywalking-agent对接,需要提前下载,jmx_exporter同理

2、tomcat:

在catalina.sh中找到JAVA_HOME中添加

JAVA_OPTS="-javaagent:/home/andun_devops/skywalking_agent/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=cmsserver_demo  -Dskywalking.collector.backend_service=172.17.224.52:11800   -jar xxx.jar"

3、 java

java -javaagent:/home/andun_devops/skywalking_agent/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=cmsserver_demo  -Dskywalking.collector.backend_service=172.17.224.52:11800   -jar xxx.jar

4、容器

[root@cms_project iandun-agent]# cat Dockerfile
FROM adoptopenjdk/openjdk8
RUN mkdir /opt/project
WORKDIR /opt/projectADD iandun-agent.jar /opt/project/
ADD agent.tar.gz /opt/project/
EXPOSE 8090
ENTRYPOINT ["java","-javaagent:/opt/project/agent/skywalking-agent.jar","-Dskywalking.agent.service_name=andun-agent","-Dskywalking.collector.backend_service=122.51.39.181:11800","-jar","/opt/project/iandun-agent.jar"]

5、tomcat指定版本的jdk

[zhanglaiqiang@andun-demo04 iandun-cmsserver-u9-demo]$ cat bin/catalina.sh  | head -n 10
#!/bin/sh
JAVA_HOME="/usr/local/java/jdk1.8.0_144"
JRE_HOME="/usr/local/java/jdk1.8.0_144/jre"



[zhanglaiqiang@andun-demo04 iandun-cmsserver-u9-demo]$ cat bin/setclasspath.sh | head -n 10
#!/bin/sh
JAVA_HOME="/usr/local/java/jdk1.8.0_144"
JRE_HOME="/usr/local/java/jdk1.8.0_144/jre"

6、Docker(tomcat部署skywalking-agent)

cat bin/catalina.sh  | head -n 10
#在前一行加入下面即可,调整文件位置
#!/bin/sh
CATALINA_OPTS="-javaagent:/opt/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=test_demo_002 -Dskywalking.collector.backend_service=10.51.8.110:11800"; export CATALINA_OPTS

7、tomcat性能优化

    <Connector port="9380" protocol="HTTP/1.1" minProcessors="10" maxProcessors="1024" acceptCount="1024"
connectionTimeout="20000" maxThreads="1000" minSpareThreads="100" maxSpareThreads="1000"
redirectPort="9443" />
#参考 https://blog.csdn.net/qq_40741855/article/details/116009877
# https://blog.csdn.net/qq_23994787/article/details/79479686
acceptCount: 默认值100
虽然tomcat同时可以处理的连接数目是maxConnections,但服务器中可以同时接收的连接数为maxConnections+acceptCount 。acceptCount的设置,与应用在连接过高情况下希望做出什么反应有关系。如果设置过大,后面进入的请求等待时间会很长;如果设置过小,后面进入的请求立马返回connection refused

查看连接数: 假如端口为8380

[root@iandun-app-u9-demo tomcat]# netstat -nat | grep 8380 tcp 0 0 0.0.0.0:8380 0.0.0.0:* LISTEN

8、tomcat连接数查看

[zhanglaiqiang@timed-task-server02 ~]$ netstat -antp | grep 9380 | grep ESTABLISHED 
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp6 0 0 172.17.113.108:9380 172.17.224.109:52400 ESTABLISHED -
tcp6 0 0 172.17.113.108:9380 172.17.224.118:43352 ESTABLISHED -
tcp6 0 0 172.17.113.108:9380 172.17.224.109:52436 ESTABLISHED -
tcp6 0 0 172.17.113.108:9380 172.17.224.118:43284 ESTABLISHED -
tcp6 0 0 172.17.113.108:59380 172.17.224.58:22229 ESTABLISHED -
tcp6 0 0 172.17.113.108:9380 172.17.224.109:52378 ESTABLISHED -
tcp6 0 0 172.17.113.108:9380 172.17.224.118:43306 ESTABLISHED -

#172.17.224.118 172.17.224.109表示nginx地址

5、Jenkins

1、jenkins钉钉告警添加位置

    post {
always {
wrap([$class: 'BuildUser']) {
sh """curl 'https://oapi.dingtalk.com/robot/send?access_token=667531b61ff814f81270d3b1ab2586d6cb49a2a2beab03932794d7c3f7faee1' -H 'Content-Type: application/json' -d '{"msgtype":"text","text":{"content": "部署服务:${JOB_NAME} \n构建分支: ${branch}\n构建ID: ${BUILD_ID}\n构建人: ${BUILD_USER}\n提交信息:${commit}构建状态:${currentBuild.currentResult}"}}'"""
}
}
}

2、jenkins dockerfile报错 正确写法1;

 ["./opt/apache-tomcat-9.0.44/bin/startup.sh", "run"]

正确写法2;

/opt/apache-tomcat-9.0.44/bin/startup.sh

6、容器

非常全面的文档参考

https://haicoder.net/docker/docker-logs.html

1、docker-compose安装

wget -P /usr/local/bin/  --user=yunxiao --password=Yun#xia0  https://www.zlqit.com/devops/docker/docker-compose
chmod +x /usr/local/bin/docker-compose

2、docker相关


删除所有的容器
docker rm -f (docker ps -qa)

删除所有没有在使用的容器
docker image prune -a

3、java项目启动base image Dockerfile

发送给研发的Dockerfile参考文件

输送给研发的Dockerfile说明信息

FROM  harbor.iandun.com/devops/java:v1.8

# run表示需要执行的shell命令,如果没有可以忽略
RUN mkdir /opt/project

#默认工作目录
WORKDIR /opt/project

#拷贝打包文件到工作目录
COPY hudson.war /opt/project/

#EXPOSE需要暴露服务的端口 ,如果有多个端口,可以使用EXPOSE暴露多个端口
EXPOSE 8080
EXPOSE 50000

#需要执行的shell命令
ENTRYPOINT [ "/opt/jdk1.8.0_281/bin/java" ]
#将启动的参数写入到cmd
CMD [ "-jar", \
"参数1", \
"参数2", \
"...."
]

传递命令的两种方式:

方式1 
ENTRYPOINT [ "/opt/jdk1.8.0_281/bin/java" ]
#将启动的参数写入到cmd
CMD [ "-jar", \
"参数1", \
"参数2", \
"...."
]

方式2
ENTRYPOINT ["java","-Duser.timezone=GMT+08","-jar","/web.jar"]

tomcat 启动dockerfile :

使用tomcat直接部署业务

FROM  centos:centos7
MAINTAINER zhanglaiqiang
RUN mkdir /usr/local/tomcat-cmsserver-demo -p
WORKDIR /usr/local/tomcat-cmsserver-demo
COPY jdk-8u281-linux-x64.tar.gz /usr
ADD apache-tomcat-8.5.33.tar.gz /usr/
RUN chmod -R 777 /usr/*.tar.gz && mkdir /var/{jenkins_home,webapps} -p && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
RUN tar -zxvf /usr/jdk-8u281-linux-x64.tar.gz -C /opt && rm -rf /usr/jdk-8u281-linux-x64.tar.gz && mv /usr/apache-tomcat-8.5.33/* /usr/local/tomcat-cmsserver-demo/ && rm -rf /usr/apache-tomcat-8.5.33
ENV JAVA_HOME /opt/jdk1.8.0_281
ENV PATH $PATH:/$JAVA_HOME/bin
RUN cd /usr/local/tomcat-cmsserver-demo/bin && pwd && ls -l
COPY hudson.war /usr/local/tomcat-cmsserver-demo/webapps
EXPOSE 8080
#方式1
ENTRYPOINT [ "/usr/local/tomcat-cmsserver-demo/bin/catalina.sh", "run" , "&&" , "tail", "-f", "/opt/apache-tomcat-9.0.44/logs/catalina.out" ]

#如果容器没有生成catalina.out日志,使用下面的方式
ENTRYPOINT /usr/local/tomcat/bin/startup.sh && tail -f /usr/local/tomcat/logs/catalina.out

tomcat容器:

[root@loaclhost test]# cat /root/jenkins/Dockerfile-tomcat 
FROM centos:centos7
MAINTAINER zhanglaiqiang
RUN mkdir /usr/local/tomcat-cmsserver-demo -p
WORKDIR /usr/local/tomcat-cmsserver-demo
COPY jdk-8u281-linux-x64.tar.gz /usr
ADD apache-tomcat-8.5.33.tar.gz /usr/
RUN chmod -R 777 /usr/*.tar.gz && mkdir /var/{jenkins_home,webapps} -p && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
RUN tar -zxvf /usr/jdk-8u281-linux-x64.tar.gz -C /opt && rm -rf /usr/jdk-8u281-linux-x64.tar.gz && mv /usr/apache-tomcat-8.5.33/* /usr/local/tomcat-cmsserver-demo/ && rm -rf /usr/apache-tomcat-8.5.33
ENV JAVA_HOME /opt/jdk1.8.0_281
ENV PATH $PATH:/$JAVA_HOME/bin

tomcat-业务容器

[root@loaclhost test]# cat /test/Dockerfile-tomcat  
FROM harbor.iandun.com/devops/tomcat:v8.5.33
COPY hudson.war /usr/local/tomcat-cmsserver-demo/webapps/
EXPOSE 8080
EXPOSE 50000
ENTRYPOINT [ "/usr/local/tomcat-cmsserver-demo/bin/catalina.sh", "run" , "&&" , "tail", "-f", "/usr/local/tomcat-cmsserver-demo/logs/catalina.out" ]

测试命令

docker run   -p 2022:22  -v /etc/hosts:/etc/hosts  --name centos   --hostname centos-test  centos tail -f /var/log/message 

java启动jar包方式: cms重构(业务封装)

FROM  harbor.iandun.com/devops/java:1.8.0_291
RUN mkdir /opt/project
WORKDIR /opt/project
ADD iandun-log.jar /opt/project/
EXPOSE 8086
#注重启动方式
ENTRYPOINT ["nohup","java","-jar","/opt/project/iandun-log.jar",">/dev/null","2>&1","&"]

4、dockerfile 拷贝目录下的文件到容器中

COPY   dist/   /data/nginx/html

5、nginx容器

说明: 部署完成之后需要在/data/nginx/html下放静态文件

FROM  alpine:3.14
LABEL maintainer="andun"
COPY repositories /etc/apk/repositories
ADD nginx-1.19.1.tar.gz /usr/local/src
RUN apk update && apk add tzdata && mkdir -p /data/nginx/html && apk --no-cache add iotop gcc libgcc libc-dev libcurl libc-utils pcre-dev zlib-dev libnfs make pcre pcre2 zip unzip net-tools pstree wget libevent libev && cd /usr/local/src/nginx-1.19.1 && ./configure --prefix=/apps/nginx && make && make install && ln -s /apps/nginx/sbin/nginx /usr/bin/
RUN addgroup -g 1001 -S nginx && adduser -s /sbin/nologin -S nginx -D -u 1001 -G nginx
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
COPY nginx.conf /apps/nginx/conf/nginx.conf
RUN chown -R nginx.nginx /data/nginx/html /apps/nginx/
EXPOSE 80 443
ENV TZ=Asia/Shanghai
CMD ["nginx"]

6、容器清除:

清除所有的符合条件的

[root@andun-jenkins iandun-system]# docker rmi --force `docker images | grep harbor.iandun.com/andun-app/tomcat-app-demo | awk '{print $3}'`
删除没有名称的镜像
docker rmi $(docker images -f "dangling=true" -q)
根据条件来删除镜像 //其中doss-api为关键字
docker rmi --force `docker images | grep doss-api | awk '{print $3}'`
删除没有打标签的镜像
docker rmi `docker images -q | awk '/^<none>/ { print $3 }'`
这是删除容器的命令
docker rm `docker ps -a -q`
删除所有镜像
docker rmi `docker images -q`

docker prune命令

删除 所有未被 tag 标记和未被容器使用的镜像:

docker image prune

删除 所有未被容器使用的镜像:常用

docker image prune -a

删除 所有停止运行的容器:

docker container prune

删除 所有未被挂载的卷:

docker volume prune

删除 所有网络:

docker network prune

删除 docker 所有资源:

docker system prune

7、docker配置加速器

 #配置加速器
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://ee5cxtxe.mirror.aliyuncs.com"]
}

8、docker查看日志

docker logs --since="2022-01-26T11:00:00" --until "2022-01-26T11:30:00"  tomcat-app-demo >>file.txt
docker logs --since="2022-01-28T9:35:00"
docker logs -f -t --since="2022-1-17" --tail=10 cms_v2_demo

9、清除none镜像

docker images  | grep none | awk '{print $3}' | xargs docker rmi
docker-compose   --compatibility up -d

10、配置docker登录harbor

[root@loaclhost ~]# cat /lib/systemd/system/docker.service  | grep ExecStart=/usr/bin/dockerd ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry=harbor.iandun.com
systemctl daemon-reload && systemctl restart docker
echo "172.17.113.105 harbor.iandun.com" >> /etc/hosts

11、docker安装[二进制安装]

centos7.9

tee /etc/yum.repos.d/docker.repo <<-'EOF'
[docker]
name=docker
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7.9/x86_64/stable/
gpgcheck=0
enable=1
EOF
yum -y install docker-ce-20.10.5-3.el7
systemctl start docker && systemctl enable docker


mkdir /etc/trojan/cert/ #放入证书
vim /etc/trojan/config.json
docker run --restart=always -p 443:443 --net=host --name=trojan -v /etc/trojan:/etc/trojan -itd zhanglaiqiang/trojan:3.11
#docker-compose安装
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://ee5cxtxe.mirror.aliyuncs.com"]
}
EOF
systemctl start docker && systemctl enable docker

curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose


docker二进制安装
wget https://download.docker.com/linux/static/stable/x86_64/docker-20.10.9.tgz
[root@VM-0-14-centos ~]# tar xf docker-20.10.9.tgz
[root@VM-0-14-centos ~]# cp -r docker/* /usr/bin/


[root@VM-0-14-centos ~]# cat /usr/lib/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target

[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s

[Install]
WantedBy=multi-user.target


ubuntu安装

#添加GPG key
curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

#验证指纹
sudo apt-key fingerprint 0EBFCD88

#添加docker-ce的仓库
sudo add-apt-repository \
"deb [arch=amd64] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu \
$(lsb_release -cs) \
stable"

#查看可以安装的版本
apt-cache madison docker
apt install docker-ce=5:20.10.10~3-0~ubuntu-focal

相关命令安装

ps 命令
apt-get update
apt-get install procps


Debian/Ubuntu/centos 安装ping命令
apt-get update
apt-get install inetutils-ping
yum install iputils

Debian/Ubuntu安装telnet命令
apt-get install net-tools

Debian GNU/Linux8

tee  /etc/apt/sources.list <<-'EOF'
deb http://mirrors.aliyun.com/debian/ jessie main non-free contrib
deb http://mirrors.aliyun.com/debian/ jessie-proposed-updates main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ jessie main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ jessie-proposed-updates main non-free contrib
EOF

Debian GNU/Linux9

tee  /etc/apt/sources.list <<-'EOF'
deb http://mirrors.aliyun.com/debian/ stretch main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ stretch main non-free contrib
deb http://mirrors.aliyun.com/debian-security stretch/updates main
deb-src http://mirrors.aliyun.com/debian-security stretch/updates main
deb http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib
#deb http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib
#deb-src http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib
EOF

Debian GNU/Linux11

tee  /etc/apt/sources.list <<-'EOF'
deb http://mirrors.aliyun.com/debian/ bullseye main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ bullseye main non-free contrib
deb http://mirrors.aliyun.com/debian-security/ bullseye-security main
deb-src http://mirrors.aliyun.com/debian-security/ bullseye-security main
deb http://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib
deb http://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib
EOF

Debian GNU/Linux10

tee  /etc/apt/sources.list <<-'EOF'
deb http://mirrors.aliyun.com/debian/ buster main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ buster main non-free contrib
deb http://mirrors.aliyun.com/debian-security buster/updates main
deb-src http://mirrors.aliyun.com/debian-security buster/updates main
deb http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib
deb http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib
EOF

12、docker重载配置文件,不重启容器

# 方式1
# vim /etc/docker/daemon.json
{
...
"insecure-registries":["k8s.gcr.com"],
"live-restore": true,
...
}

# systemctl reload docker # SIGHUP

#方式2
#dockerd reload 配置(不会重启 dockerd,直接修改配置)
kill -SIGHUP $(pidof dockerd) # 给 dockerd 发送 SIGHUP 信号,dockerd 收到信号后会 reload 配置
docker info | grep -i 配置过滤关键字

13、docker重载

14、docker-compose更新配置

docker-compose  up -d 

15、Docker查看日志范围

tomcat-app-demo
docker logs --since="2022-01-26T11:00:00" --until "2022-01-26T11:30:00" tomcat-app-demo

16、国外机器镜像同步脚本

$ sudo docker login --username=zlq180*******@126.com registry.cn-hangzhou.aliyuncs.com


[root@pro-zlq ~]# cat image_download.sh
docker pull $1
COLOR='echo -e \E[01;34m'
null_dir='/dev/null'
END='\E[0m'
image=$1
project_name=`echo $image | awk -F '/' '{print $NF}'`
image_new="registry.cn-hangzhou.aliyuncs.com/zlq_registry/${project_name}"
docker pull $1
docker tag $1 ${image_new}
docker rmi -f $1
docker push $image_new
$COLOR"image_new:" $image_new $END
docker rmi -f $image_new > $null_dir

17、个人镜像仓库秘钥

{
"auths": {
"https://index.docker.io/v1/": {
"auth": "emhhbmdsYWlxaWFuZzp6bHExODAyOTA5OTkw"
},
"registry.cn-beijing.aliyuncs.com": {
"auth": "eXVueGlhby1yYW5jaGVyOmFlZ2lzLXBhYXM="
},
"registry.cn-shanghai.aliyuncs.com": {
"auth": "eXVueGlhby1yYW5jaGVyOmFlZ2lzLXBhYXM="
}
},
"HttpHeaders": {
"User-Agent": "Docker-Client/19.03.9 (linux)"
}
}

18、在容器中修改时间

添加环境变量 /etc/profile

export LD_PRELOAD=/usr/local/lib/faketime/libfaketime.so.1 
export FAKETIME="2022-08-01 09:09:09"
export FAKETIME_DONT_FAKE_MONOTONIC=1

参考 https://blog.csdn.net/a910196454/article/details/108501685

7、Python

1、常规方式

linux二进制下载
https://www.python.org/downloads/source/

yum -y install make gcc zlib-devel openssl-devel bzip2-devel ncurses-devel gdbm-devel readline-devel sqlite-devel libffi-devel libpcap-devel libdbi-dev tk-devel xz-devel sysstat

./configure --prefix=/usr/local/python3

make && make install

2、方式2

下载文件包

wget https://www.python.org/ftp/python/3.7.13/Python-3.7.13.tgz tar xf Python-3.7.13.tgz /usr/local/

安装依赖

yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel gcc g++ make
cd /usr/local/Python-3.7.13
./configure --prefix=/usr/local/python3.7/

make && make install

环境变量

[root@beijing-k8s-master-001 Python-3.7.13]# cat ~/.bash_profile 
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin
PATH=$PATH:$HOME/bin:/usr/local/python3.7/bin
export PATH

[root@beijing-k8s-master-001 Python-3.7.13]# source ~/.bash_profile

通过yum安装

yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

#### pip3版本检查
[root@beijing-k8s-master-001 Python-3.7.13]# pip3.7 -V
pip 22.0.4 from /usr/local/python3.7/lib/python3.7/site-packages/pip (python 3.7)

第三方pip单独安装参考方式 ####此处默认不需要操作

1、安装pip

命令如下:
wget --no-check-certificate https://pypi.python.org/packages/source/p/pip/pip-8.0.2.tar.gz#md5=3a73c4188f8dbad6a1e6f6d44d117eeb

tar -zxvf pip-8.0.2.tar.gz

cd pip-8.0.2

python3 setup.py build

python3 setup.py install

如果没有意外的话,pip安装完成。

如果没有搞好环境的话,会碰见亲切的报错:

  pip3 install paramiko

  报这个错

  pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.

  然后开始进行如下操作

  yum install openssl
  yum install openssl-devel
  cd python3.6.1
  make && make install

3、包导入导出

  1. 查看当前环境的所有包 pip list 或 pip freeze

  2. 将当前环境的所有包存入文件中 pip freeze > requirements.txt

  3. 安装文件里的包 pip install -r requirements.txt

  4. 生产python Dockerfile

Dockerfile-base ##基础镜像

FROM  python:3.8.15-bullseye
ENV requirements requirements.txt
ENV proxy pypi.douban.com
ADD ./$requirements /opt/
RUN pip install --index https://$proxy/simple/ --trusted-host $proxy -r /opt/$requirements

Dockerfile ##业务镜像

FROM  harbor.iandun.com/pro_algorithm/base_department_classify:v1.0
WORKDIR /opt/project
ADD ${build_file} /opt/
EXPOSE ${project_port}
WORKDIR /opt/
ENTRYPOINT ["python3.8","-u","main.py"]
#如果有print打印,会影响日志输出,需要加-u

8、git相关

拉取指定分支

git clone -b develop XXX 

9、跨域问题

1、错误告警

说明:此图在桌面文件架构图当中

2、跨域的配置

location / {  
add_header Access-Control-Allow-Origin *;
}

请求后端正常返回的接口

方式1验证: 通过slb代理访问

方式2验证: 通过直接访问代理端的机器

以上验证结构都是一致的。

十二、 Xshell

ctrl + Tab tab全屏之间的切换

alt + enter 全屏

10、Skywalking

skywalking自动启动

#skywalking启动脚本
[andun_devops@andun-jenkins config]$ cat /home/andun_devops/skywalking/skywalking_restart.sh
#!/bin/bash

#停止skywalking服务
ps -ef | grep '/data/skywalking/apache-skywalking-apm-bin-es7/oap-libs/zstd-jni-1.4.3-1.jar' | grep java | awk '{print $2}' | xargs sudo kill -9
sleep 30
#启动skywalking服务
sh /data/skywalking/apache-skywalking-apm-bin-es7/bin/startup.sh

skywalking配置文件:

    recordDataTTL: ${SW_CORE_RECORD_DATA_TTL:4} # Unit is day
metricsDataTTL: ${SW_CORE_METRICS_DATA_TTL:4} # Unit is day

es自动清理 创建andun_devops管理账号,授权数据目录账号为andun_devops账号,以及/data/skywalking目录属性s

es自动清理重启

0 3 */4 * * bash /home/andun_devops/skywalking/skywalking_restart.sh >/dev/null 2>&1

[andun_devops@andun-ELK skywalking_elsticsearch]$ cat  /home/andun_devops/skywalking_elsticsearch/elasticsearch_restart.sh
#!/bin/bash
#***********************************************
#company: Andun
#维护者Mail: zhanglaiqiang@iandun.cn
#Date: 2022-03-30
#FileName: elasticsearch_restart.sh
#Description: The test script
#***********************************************

#停止进程
ps -ef | grep 'home=/data/skywalking/elasticsearch-7.2.0' | grep java | awk '{print $2}' | xargs sudo kill -9
sleep 5
cd /share/elasticsearch_data/ && rm -rf nodes
sleep 10

#启动进程
sh /data/skywalking/elasticsearch-7.2.0/bin/elasticsearch -d

11、tcpdump

常用方法

sudo  tcpdump  -i eth0 -vnn host  117.133.17.238  and   port 50060

一般在做排错的时候会用到抓包工具,比如在动态感知收不到日志的时候,可以抓包看下数据有没有 正常发送到服务器,也可用于网络排错。

tcpdump -i eht0 -nn src 10.0.8.1 and dst 10.8.0.1  and dst port 1124 and udp -w test.cap


-i 指定 指定抓包网卡

-nn 不把主机的网络地址与协议转换成名字

-w 把数据包数据写入到文件
and 连接参数
host 指明主机
port 指明端口
src 源地址
dst 目标IP
net 指明网段
dst port 目标端口
! 非,需要加空格
icmp arp

比较实用的一种方式

tcpdump介绍

tcpdump 是一款强大的网络抓包工具,运行在 linux 平台上。熟悉 tcpdump 的使用能够帮助你分析、调试网络数据。 tcpdump语法

tcpdump [-adeflnNOpqStvx][-c<数据包数目>][-dd][-ddd][-F<表达文件>][-i<网络界面>][-r<数据包文件>][-s<数据包大小>][-tt][-T<数据包类型>][-vv][-w<数据包文件>][输出数据栏位]

tcpdump参数

-a    将网络地址和广播地址转变成名字;
-d 将匹配信息包的代码以人们能够理解的汇编格式给出;
-dd 将匹配信息包的代码以c语言程序段的格式给出;
-ddd 将匹配信息包的代码以十进制的形式给出;
-e 在输出行打印出数据链路层的头部信息,包括源mac和目的mac,以及网络层的协议;
-f 将外部的Internet地址以数字的形式打印出来;
-l 使标准输出变为缓冲行形式;
-n 指定将每个监听到数据包中的域名转换成IP地址后显示,不把网络地址转换成名字;
-nn: 指定将每个监听到的数据包中的域名转换成IP、端口从应用名称转换成端口号后显示
-t 在输出的每一行不打印时间戳;
-v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;
-vv 输出详细的报文信息;
-c 在收到指定的包的数目后,tcpdump就会停止;
-F 从指定的文件中读取表达式,忽略其它的表达式;
-i 指定监听的网络接口;
-p: 将网卡设置为非混杂模式,不能与host或broadcast一起使用
-r 从指定的文件中读取包(这些包一般通过-w选项产生);
-w 直接将包写入文件中,并不分析和打印出来;
-s snaplen snaplen表示从一个包中截取的字节数。0表示包不截断,抓完整的数据包。默认的话 tcpdump 只显示部分数据包,默认68字节。
-T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程调用)和snmp(简单网络管理协议;)
-X 告诉tcpdump命令,需要把协议头和包内容都原原本本的显示出来(tcpdump会以16进制和ASCII的形式显示),这在进行协议分析时是绝对的利器。

监听所有端口,直接显示 ip 地址

 tcpdump -nS
显示更详细的数据报文,包括 tos, ttl, checksum 等。
tcpdump -nnvvS
显示数据报的全部数据信息,用 hex 和 ascii 两列对比输出。
tcpdump -nnvvXS
host: 过滤某个主机的数据报文
tcpdump host 1.2.3.4
src, dst: 过滤源地址和目的地址
tcpdump src 1.2.3.4
tcpdump dst 1.2.3.4
net: 过滤某个网段的数据
tcpdump net 1.2.3.0/24
过滤某个协议的数据,支持 tcp, udp 和 icmp
tcpdump icmp
过滤通过某个端口的数据报
tcpdump port 3306
src/dst, port, protocol: 结合三者
tcpdump src port 22 and tcp
tcpdump udp and src port 25
抓取指定范围的端口
tcpdump portrange 21-23
通过报文大小过滤请求,数据报大小,单位是字节
tcpdump less 32
tcpdump greater 128
tcpdump > 32
tcpdump <= 128
抓包输出到文件
tcpdump -w rumenz.pcap port 80
从文件读取报文显示到屏幕
tcpdump -nXr rumenz.pcap host web
源地址是 192.168.1.110,目的端口是3306的数据报
tcpdump -nnvS src 192.168.1.110 and dst port 3306
从 192.168 网段到 10 或者 172.31 网段的数据报
tcpdump -nvX src net 192.168.0.0/16 and dat net 10.0.0.0/8 or 172.31.0.0/16

tcpdump 的输出解读 21:27:06.995846 IP (tos 0x0, ttl 64, id 45646, offset 0, flags [DF], proto TCP (6), length 64) 192.168.1.110.40411 > 192.168.1.123.80: Flags [S], cksum 0xa730 (correct), seq 992042666, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 663433143 ecr 0,sackOK,eol], length 0

21:27:07.030487 IP (tos 0x0, ttl 51, id 0, offset 0, flags [DF], proto TCP (6), length 44) 192.168.1.123.80 > 192.168.1.110.40411: Flags [S.], cksum 0xedc0 (correct), seq 2147006684, ack 992042667, win 14600, options [mss 1440], length 0

21:27:07.030527 IP (tos 0x0, ttl 64, id 59119, offset 0, flags [DF], proto TCP (6), length 40) 192.168.1.110.40411 > 192.168.1.123.80: Flags [.], cksum 0x3e72 (correct), ack 2147006685, win 65535, length 0 最基本也是最重要的信息就是数据报的源地址/端口和目的地址/端口,上面的例子第一条数据报中,源地址 ip 是192.168.1.110,源端口是 40411,目的地址是 192.168.1.123,目的端口是 80。> 符号代表数据的方向。 上面的三条数据还是 tcp 协议的三次握手过程,第一条就是 SYN 报文,这个可以通过 Flags [S] 看出。下面是常见的 TCP 报文的 Flags: [S]:SYN(开始连接) [.]: 没有 Flag [P]: PSH(推送数据) [F]: FIN (结束连接) [R]: RST(重置连接) 而第二条数据的 [S.] 表示 SYN-ACK,就是 SYN 报文的应答报文。

12、端口扫描

端口扫描

for i in `cat port_host.txt`; do echo "##############主机$i端口扫描结果##############"  >> result.txt && nmap -sS  -Pn -n --open -T4  $i  -p  1-65535  | tail -n +6 | sed '$d' | sed '$d'>> result.txt ; done

根据服务端口按照服务类型统计: java和docker

[zhanglaiqiang@watch-server05 ~]$ cat port.sh 
#/bin/bash
COLOR='echo -e \E[01;32m'
END='\E[0m'
CLORED='echo -e \E[1;31m'
for i in `cat port.txt | awk -F "/" '{print $1}'`
#for i in `cat port.txt`
do
pidtype=`sudo netstat -ntlp | grep -w $i | tail -n 1 |awk -F "LISTEN" '{print $NF}'`
pid_num=`echo ${pidtype} | awk -F "/" '{print $1}'`
echo ''
echo ''

$COLOR############"端口$i详情"##############$END
echo 端口${i}进程号: `echo ${pid_num}`
if [[ ${pidtype} =~ 'java' ]] ; then
echo "项目类型: JAVA"
echo "详细信息如下: --------------------------"
ps -ef | grep -w ${pid_num} | grep -v 'grep'
elif [[ ${pidtype} =~ 'docker' ]]; then
echo "项目类型: Docker"
echo "详细信息如下: --------------------------"
sudo docker ps | grep $i
elif [[ ${pid_num} == '-' ]]; then
$CLORED*****进程号不存在*****$END
echo "项目类型: Unknow"
elif [[ -z ${pidtype} ]]; then
$CLORED*****端口不存在*****$END
echo "项目类型: Unknow"
else
echo "项目类型: Unknow"
echo "详细信息如下: --------------------------"
ps -ef | grep -w ${pid_num} | grep -v 'grep'

fi
done
$COLOR####################################$END

端口列表

[zhanglaiqiang@watch-server05 ~]$ cat port.txt 
4089/tcp open opencore
7082/tcp open unknown
8582/tcp open unknown
9044/tcp open unknown
9100/tcp open jetdirect
9609/tcp open unknown
9680/tcp open unknown
10489/tcp open unknown
20888/tcp open unknown
22225/tcp open unknown
22227/tcp open unknown
33312/tcp open unknown
40070/tcp open unknown
[zhanglaiqiang@watch-server05 ~]$

执行 bash port.sh

13、Debian相关

debian安装命令

ip ---  iproute2

ping --- iputils-ping

telnet --- telnet

数据库查询时间不能超过10s

14、进程和相关命令

pid_max,ulimit -u和thread_max区别

典型的区别在于:

  • 同一进程的线程共享内存空间。
  • 而进程则在不同的内存空间中运行
pid_max

cat /proc/sys/kernel/pid_max 32768

所以上面的命令返回32768,这意味着我可以在我的系统中同时执行32768个进程,这些进程可以在不同的内存空间中运行。

threads-max

cat /proc/sys/kernel/threads-max 126406

上面的命令将输出返回为126406,这意味着我可以在共享内存空间中拥有126406个线程。

ulimit -u

ulimit -u 63203

现在,让我们使用第三个参数ulimit -u,它表示用户在特定时间可以拥有的总进程数。上面的命令将输出返回为63203。这意味着用户可以在某个时间点创建的所有进程都可以运行63203进程。

假设案例 假设2个用户同时运行2个进程,并且每个进程大量消耗内存,则这2个用户中的进程将有效地使用63203个线程(进程的限制)。因此,这种情况,那么2个用户将有效地用完整个 126406(threads-max)的大小。

现在,我需要确定用户可以在任何时间点运行的进程数。这可以从文件/etc/security/limits.conf中确定。因此,此文件中基本上有2个设置,如下所述。

软限制类似于警告,硬限制是实际最大限制。例如,以下内容将阻止学生组中的任何人拥有超过50个进程,并且将在30个进程中发出警告。

@student hard nproc 50 @student soft nproc 30

内核维护硬限制,而shell强制执行软限制。

14.2 Socks5网络代理

1、首先,编译安装SS5需要先安装一些依赖组件

yum -y install gcc gcc-c++ automake make pam-devel openldap-devel cyrus-sasl-devel openssl-devel

2、去官网http://ss5.sourceforge.net/ 下载SS5最新版本的源代码

  wget https://sourceforge.net/projects/ss5/files/ss5/3.8.9-8/ss5-3.8.9-8.tar.gz

3、解压后开始编译安装:

tar zxvf ./ss5-3.8.9-8.tar.gz cd ss5-3.8.9 ./configure make make install

4、让SS5随系统一起启动

chmod +x /etc/init.d/ss5 chkconfig --add ss5 chkconfig --level 345 ss5 on

5、在ss5.conf中找到auth和permit两行,按照下面的格式进行修改

/etc/opt/ss5/ss5.conf

6、ss5 默认使用1080端口,并允许任何人使用,如果要修改默认端口,请修改 vi /etc/sysconfig/ss5
  在/etc/sysconfig/ss5这个文件中,添加下面这一行命令,-b后面的参数代表监听的ip地址和端口号
  # Add startup option here
  SS5_OPTS=" -u root -b 0.0.0.0:8080"
7、启动ss5

service ss5 start

8、一定要记得配置安全组开放SS5监听的端口

  • a、开启用户名密码验证机制 vi /etc/opt/ss5/ss5.conf

在ss5.conf中找到auth和permit两行,按照下面的格式进行修改

auth 0.0.0.0/0 - u permit u 0.0.0.0/0 - 0.0.0.0/0 - - - - -

  • b 、设置用户名和密码 vi /etc/opt/ss5/ss5.passwd 一行一个账号,用户名和密码之间用空格间隔,例如:

user1 123 user2 234

  • c、重启服务生效

service ss5 restart

14.3 openvpn

1、压测

yum install -y epel-release yum install stress -y

$ sudo apt install stress $ stress --version http://t.zoukankan.com/jiftle-p-12904248.html

nmap端口扫描
for i in `cat port_host.txt`; do echo "##############主机$i端口扫描结果##############"  >> result.txt && nmap -sS  -Pn -n --open -T4  $i  -p  1-65535  | tail -n +6 | sed '$d' | sed '$d'>> result.txt ; done
2、openvpn
[root@beijing-k8s-master-001 ~]# cd /etc/openvpn/
[root@beijing-k8s-master-001 openvpn]# ls -l
total 4
drwxr-x--- 2 root openvpn 92 Mar 22 06:36 client
-rw-r--r-- 1 root root 522 Mar 22 06:12 client.conf
drwxr-x--- 2 root openvpn 6 Apr 21 2021 server
[root@beijing-k8s-master-001 openvpn]# tree
.
├── client
│ ├── andun.crt
│ ├── andun.key
│ ├── ca.crt
│ ├── client.conf
│ └── clinet.ovpn
├── client.conf
└── server


[root@beijing-k8s-master-001 openvpn]# cat client.conf
client
dev tun
proto tcp
remote 42.193.116.59 1194 #指定服务器地址
resolv-retry infinite
nobind
persist-key
persist-tun
ca /etc/openvpn/client/ca.crt
auth-nocache
cert /etc/openvpn/client/andun.crt #此处需要修改为证书名称
key /etc/openvpn/client/andun.key #此处需要修改为证书名称
remote-cert-tls server
#tls-auth ta.key 1
script-security 3
#cipher AES-256-CBC
#消除警告
#route-nopull
#data-ciphers AES-256-CBC
verb 3
#explicit-exit-notify
tun-mtu 1500
log-append /var/log/openvpn.log
3、vpn_client配置
[root@beijing-k8s-master-001 ~]# cat /usr/lib/systemd/system/openvpn-client\@client.service 
[Unit]
Description=OpenVPN tunnel for %I
After=syslog.target network-online.target
Wants=network-online.target
Documentation=man:openvpn(8)
Documentation=https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
Documentation=https://community.openvpn.net/openvpn/wiki/HOWTO

[Service]
Type=notify
PrivateTmp=true
WorkingDirectory=/etc/openvpn/client
ExecStart=/usr/sbin/openvpn --suppress-timestamps --nobind --config %i.conf
CapabilityBoundingSet=CAP_IPC_LOCK CAP_NET_ADMIN CAP_NET_RAW CAP_SETGID CAP_SETUID CAP_SYS_CHROOT CAP_DAC_OVERRIDE
LimitNPROC=10
DeviceAllow=/dev/null rw
DeviceAllow=/dev/net/tun rw
ProtectSystem=true
ProtectHome=true
KillMode=process

[Install]
WantedBy=multi-user.target

文档远程发送 scp -P 65266 jmx_prometheus_skywalki_agent.tar.gz zhanglaiqiang@x.x.x.x:

进程杀死重启tomcat

ps -ef|grep tomcat-app |grep java|awk '{print $2}'|xargs sudo kill -9 

sh /usr/local/tomcat-app/bin/startup.sh && tail -f /usr/local/tomcat-app/logs/catalina.out
4、openvpn网络问题-影响自动化发布
1、测试丢包

yum -y install mtr #安装工具

[zhanglaiqiang@andun-jenkins ~]$ mtr -r  1024  10.8.0.33
Start: Tue Sep 13 15:11:53 2022
HOST: andun-jenkins Loss% Snt Last Avg Best Wrst StDev
1.|-- 10.8.0.33 50.0% 10 10.2 9.9 9.2 10.2 0.0

或者 mtr -r -c 30 -s 1024 10.8.0.33 Loss 表示丢包百分比,注意观察此项就行

在服务器中查看网卡ifconfig,明显有两个地址存在,问题就在于此

2、处理方式:

1、ps -ef | grep openvpn 杀掉kill -9 openvpn_pid 服务 2、重新启动opevpn客户端即可

14.4 nfs部署

ubuntu安装nfs-server以及nfs-client

ubuntu
https://www.tecmint.com/install-nfs-server-on-ubuntu/

1、install nfs-server
sudo apt install nfs-kernel-server

2、create dir
sudo mkdir -p /mnt/nfs_share

3、 授权
sudo chown -R nobody:nogroup /mnt/nfs_share/

4、 授权
sudo chmod 777 /mnt/nfs_share/

5、 sudo vim /etc/exports
/mnt/nfs_share 10.51.8.0/24(rw,sync,no_root_squash)
6、/mnt/nfs_share 10.51.8.0/24(rw,sync,no_root_squash)
rw: Stands for Read/Write.
sync: Requires changes to be written to the disk before they are applied.
No_subtree_check: Eliminates subtree checking.

要授予对单个客户端的访问权限,请使用以下语法:
mnt/nfs_share client_IP_1 (re,sync,no_root_squash)

对于多个客户端,在单独的文件中指定每个客户端:
/mnt/nfs_share client_IP_1 (re,sync,no_root_squash)
/mnt/nfs_share client_IP_2 (re,sync,no_root_squash)
no_root_squash:客户机用root访问该共享文件夹时,不映射root用户。(root_squash:客户机用root用户访问该共享文件夹时,将root用户映射成匿名用户)
no_subtree_check:不检查父目录的权限。

7、start
$ sudo exportfs -a
$ sudo systemctl restart nfs-kernel-server


9、client安装
sudo apt install nfs-common
sudo mkdir -p /mnt/nfs_clientshare

mount 10.51.8.151:/mnt/nfs_share /mnt/nfs_clientshare
centos

yum -y install nfs-utils [zhanglaiqiang@andun-harbor ~]$ cat /etc/fstab UUID=795c9f31-f638-4308-8fab-4a7d5c606beb / ext4 defaults 1 1 172.17.224.119:/share/elasticsearch_data /skywalking-sticsearch nfs defaults 0 0

15.5 grep常用

比较两个文件是否相同

1、统计两个文本文件的相同行

grep -Ff file1 file2

2、统计file1中有,file2中没有的行

grep -vFf file2 file1

15.6 磁盘挂载

问题描述 正式环境出现了不能上传图片,图片不能浏览的问题,上正式环境进行排查,在使用df -h命令的时候卡住不动了,其他命令没问题。运行内存以及cpu都是正常的。 正式环境服务器 /data/xxx/upload的目录是进行了nfs挂载 df -TH 在取消挂载之前找出原挂载方式

[root@node01 ~]# mount -l | grep /data/xxx/upload
192.168.x.10:/data/upload on /data/xxx/upload type nfs4 (rw,relatime,vers=4.1,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.x.4,local_lock=none,addr=192.168.x.10)
或者通过
[root@node01 ~]# cat /etc/mtab | grep /data/xxx/upload
192.168.x.10:/data/upload /data/xxx/upload nfs4 rw,relatime,vers=4.1,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.x.4,local_lock=none,addr=192.168.x.10 0 0

可以看出服务端与客户端的nfs挂载方式 问题解决 首先可以先跟踪df -h命令在哪里卡住了 使用strace命令

strace df -h

如果服务器没这个命令,进行安装

yum -y install strace

如下,就准确的知道df -h这个命令卡在了哪里,果然确实是nfs挂载的那个目录

尝试使用umount取消挂载但是会卡住不动 当有别的程序正在访问挂载的文件时,也会提示卸载失败,通过 lsof /xxx 查看是哪个进程占用了/xxx,kill -9 $pid ,然后再卸载,进程少的时候这个方便一些,一旦进程量过大就不方便了 加参数 -f 也会报错 使用【umount -l /data/xxx/upload】命令可以解决挂载问题 使用:umount -l /xxx (-l : 卸载前检查占用该挂载文件的程序并迅速kill掉,以达到快速卸载的目的) 也可以umount -lf /xxx

[root@node01 ~]# umount -l /data/xxx/upload

[root@node01 ~]# umount /data/xxx/upload
umount: /data/xxx/upload: not mounted

测试df -h命令是否恢复正常

重新进行挂载 客户端:

重启nfs:
systemctl stop nfs

systemctl start nfs

服务器端:

重启nfs、rpcbind
systemctl stop nfs
systemctl stop rpcbind

#让nfs生效
exportfs -rv
启动
systemctl start nfs
systemctl start rpcbind

15、内存

buffer/cache内存占用过高 释放前最好sync echo 3 > /proc/sys/vm/drop_caches #清除pagecache和slab分配器中的缓存对象。

https://developer.aliyun.com/article/749727?spm=5176.2020520104.0.0.12d3709aIw40I4

echo 1 > /proc/sys/vm/drop_caches #清除pagecache。
echo 2 > /proc/sys/vm/drop_caches #清除回收slab分配器中的对象(包括目录项缓存和inode缓存)。slab分配器是内核中管理内存的一种机制,其中很多缓存数据实现都是用的pagecache。
echo 3 > /proc/sys/vm/drop_caches #清除pagecache和slab分配器中的缓存对象。



16、Windows常用操作

16.1 常用工具安装

1、windows 中md5校验工具

https://github.com/gurnec/HashCheck/releases/tag/v2.4.0

2、windows代理服务器

下载地址: http://www.ccproxy.com/support.htm

端口映射:

图1

图2

3、Windows上安装jq

- 如果要在Windows上顺利的使用jq,需要先安装chocolatey。
- 以管理员身份待开cmd窗口,输入@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin",回车。
- 接着输入chocolatey install jq

常用命令 choco search xxx,查找 xxx 安装包 choco info xxx,查看 xxx 安装包信息 choco install xxx,安装 xxx 软件 choco upgrade xxx,升级 xxx 软件 choco uninstall xxx, 卸载 xxx 软件

常用参数 –install-directory=VALUE,修改指定程序安装路径(只有pro版可用免费版无效) –version=value 指定版本

官方程序仓库https://community.chocolatey.org/packages

打开仓库地址搜索查看想要下载的程序(如MongoDB-compass即mongodb的可视化工具)

输入命令下载安装choco install mongodb-compass

默认安装目录是C:\Program Files下打卡程序

卸载choco uninstall mongodb-compass

###4. 磁盘测速 CrystalDiskMark

16.2 安全登录配置

1. 修改代理的默认地址

###注册表

计算机\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings

然后参考下面进行操作即可

16.3 windows中vmware通过nat直接访问

1.调节NAT的网段为10.51.8.0 /255.255.255.0

2.虚拟机网卡信息配置

[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0  
DEVICE=eth0
NAME=eth0
BOOTPROTO=static
IPADDR=10.51.8.110
PREFIX=24
GATEWAY=10.51.8.2
DNS1=114.114.114.114
DNS2=10.51.8.1
# 226.6.6.6 or 180.76.76.76
DNS2=10.51.8.1
ONBOOT=yes

3.调整虚拟机的网络模式为NAT模式

4.windows电脑添加永久路由信息

route add  10.51.8.0  mask 255.255.255.0 10.51.8.1  -p

-p表示永久路由

17、日志清理

清理日志,对于大于10M的进行清理,这里使用truncate

find ./* -maxdepth 2 -type f -name "*-json.log" -size +10M  -exec truncate -s 0 {} \;

18、iptables

需求: 允许服务集群中所有的服务都能访问redis,限制局域网中其他机器访问

先计算掩码

在线网络计算器 | TCP/IP子网掩码计算换算 —在线工具 (sojson.com)

只允许10.51.8.113和10.51.8.114两个地址访问

image-20231130183055043

配置规则

docker环境使用这种方式

210.34.142.218操作记录

iptables -I DOCKER-USER  -p tcp --dport 6379  -j DROP
iptables -I DOCKER-USER -p tcp --dport 6379 -s 210.34.142.208/28 -j ACCEPT
iptables -I DOCKER-USER -p tcp --dport 27017 -j DROP
iptables -I DOCKER-USER -p tcp --dport 27017 -s 210.34.142.208/28 -j ACCEPT

210.34.142.219操作记录

[root@113 ~]# iptables -A INPUT -p tcp --dport 2181 -s 210.34.142.208/28  -j ACCEPT
[root@113 ~]# iptables -A INPUT -p tcp --dport 2181 -j DROP

#后续清理方式
iptables -F INPUT

210.34.142.220操作记录

iptables -A INPUT -p tcp --dport 25654 -s 210.34.142.208/28  -j ACCEPT
iptables -A INPUT -p tcp --dport 25654 -j DROP


iptables-save > /opt/ky30.bak #备份iptables
iptables-restore /opt/ky30.bak #还原

iptables -I DOCKER-USER -p tcp -m multiport --sports 21731,25654,27766,31245 -j DROP
iptables -I DOCKER-USER -p tcp -m multiport --sports 21731,25654,27766,31245 -s 210.34.142.208/28 -j ACCEPT

注意: docker-user跟input链添加顺序是正好反的

二进制方式

[root@113 ~]# iptables -A INPUT -p tcp --dport 6379 -s 10.51.8.113/30 -j ACCEPT
[root@113 ~]# iptables -A INPUT -p tcp --dport 6379 -j DROP

删除规则

iptables -D DOCKER-USER 1     #删除第一行的数据
#第二种方式
iptables -D DOCKER-USER -p tcp --dport 6379 -s 210.34.142.208/28 -j ACCEPT

测试命令

iptables -I DOCKER -p tcp -m multiport --sports 21731,25654,27766,31245  -j DROP
iptables -I DOCKER -s 210.34.142.208/28 -p tcp -m multiport --sports 21731,25654,27766,31245 -j ACCEPT
iptables -I DOCKER -s 210.34.142.219 -p tcp -m multiport --sports 21731,25654,27766,31245 -j ACCEPT
iptables -L -n

格式转换

快速实现下面对列式转换为行式

如: 
aaa
bbb
ccc
转换为:
aaa|bbb|ccc

实现方式:
paste -sd "|" filename