Iawen's Blog

我喜欢这样自由的随手涂鸦,因为我喜欢风......

一. 网络配置

1. 手动设置本地网络连接:

1.1 CentOS

配置IPADDR、子网掩码NETMASK、网关GATEWAY、DNS1…, 如:

# /etc/sysconfig/network-scripts/ifcfg-enoxxxx
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.137.3
NETMASK=255.255.255.0
GATEWAY=192.168.137.2
DNS1=202.96.134.133
DNS2=8.8.8.8
DNS3=114.114.114.114
DNS4=8.8.4.4

1.2 Ubuntu 18

ubuntu 18设置静态ip,下面以设置固定Ip:192.168.1.134为例;在/etc/netplan目录下有个.yaml文件,当前环境的文件名为50-cloud-init.yaml,以修改后的内容替换原来的部分(如果当前用户无权限修改该文件,请更换操作账户) note:如果不设置静态Ip,重启后Ip有变动的话,就需要登录每个zookeeper的机器更改hosts文件,修改ip,机器名的映射

# 原来文件内容
network:
    ethernets:
        ens18:
            dhcp4: true
    version: 2

# 修改后的文件内容
network:
    ethernets:
        ens18:  #配置的网卡名称 ,该节点使用你环境的配置即可,不一定是这个名称
            dhcp4: no #dhcp4关闭
            addresses: [192.168.1.134/24]   #设置当前机器IP及掩码
            gateway4: 192.168.1.253   #设置网关,改为测试环境所在的网关
    version: 2

执行以下命令

cd /etc/netplan
vim 50-cloud-init.yaml
sudo netplan apply

# 刷新DNS
/etc/init.d/nscd restart # apt-get install nscd

2. 常用配置命令

# 重启一下网络服务:
service network restart

# 设置IP和掩码
ifconfig eth0 192.168.137.3 netmask 255.255.255.0

# 设置网关
route add default gw 192.168.137.2

# 启动对应的网卡:
sudo ifconfig eth1 up

#重启一下网络服务:
service network restart

# 要查看网卡细节,输入以下命令: 
ip addr

# 要查看网络接口统计数据,输入命令
ip link
 
# 修改主机名
hostnamectl set-hostname jiaolun.top

3. 常用的参数

# 解决time_wait连接数大量问题
# vim /etc/sysctl.conf
# see details in https://help.aliyun.com/knowledge_detail/39428.html
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.all.arp_announce=2

# see details in https://help.aliyun.com/knowledge_detail/41334.html
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_synack_retries = 2
kernel.sysrq=1

4. 参数详解

net.ipv4.tcp_syncookies = 1 表示开启 syn cookies 。当出现 syn 等待队列溢出时,启用 cookies 来处理,可防范少量 syn ***,默认为 0 ,表示关闭; 
net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将 time-wait sockets 重新用于新的 tcp 连接,默认为 0 ,表示关闭;
net.ipv4.tcp_tw_recycle = 1 表示开启 tcp 连接中 time-wait sockets 的快速回收,默认为 0 ,表示关闭。
net.ipv4.tcp_fin_timeout 修改系靳默认的 timeout 时间
net.ipv4.tcp_keepalive_time = 1200 #表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。
net.ipv4.ip_local_port_range = 1024 65000 #表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。
net.ipv4.tcp_max_syn_backlog = 8192 #表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
net.ipv4.tcp_max_tw_buckets = 5000 #表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。
默认为180000,改为5000。
对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于 Squid,效果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。

二. 防火墙

规则设置理论:

    1. 规则清零
    1. 预设规则
    1. 信任本机
    1. 回应封包

1. 关闭firewall

systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动

2. 安装iptables防火墙

iptables 是一个通过控制 Linux 内核的 netfilter 模块来管理网络数据包的流动与转送的应用软件,其功能包括不仅仅包括防火墙的控制出入流量,还有端口转发等等。iptables 内部有表 tables、链 chains、规则 rules 这三种概念。iptables 的每一个 “表” 都和不同的数据包处理有关、决定数据包是否可以穿越的是 “链”、而一条 “规则” 在链里面则可以决定是否送往下一条链(或其它的动作)。 0

yum install iptables-services #安装
vim  /etc/sysconfig/iptables#编辑防火墙配置文件
service iptables save 
service iptables restart

3. 查看规则:

[root@ ~]# iptables -nvL --line-number
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes  target prot opt in out source       destination 
1   6    240    ACCEPT tcp  --  *   *   0.0.0.0/0   0.0.0.0/0   tcp dpt:21
2   0    0      ACCEPT tcp  --  *   *   0.0.0.0/0   0.0.0.0/0   tcp dpt:20
3   166  16678  ACCEPT tcp  --  *   *   0.0.0.0/0   0.0.0.0/0   tcp dpt:22
4   0    0      ACCEPT tcp  --  *   *   0.0.0.0/0   0.0.0.0/0   tcp dpt:443
5   167  19847  ACCEPT tcp  --  *   *   0.0.0.0/0   0.0.0.0/0   tcp dpt:80
6   45   2886   ACCEPT all  --  *   *   0.0.0.0/0   0.0.0.0/0   state RELATED,ESTABLISHED
7   0    0      ACCEPT tcp  --  *   *   0.0.0.0/0   0.0.0.0/0   state NEW tcp dpt:21
8   3    120    ACCEPT tcp  --  *   *   0.0.0.0/0   0.0.0.0/0   tcp dpts:30000:40000
9   4    240    REJECT all  --  *   *   0.0.0.0/0   0.0.0.0/0   reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes  target prot opt in out  source      destination 
1   0    0      REJECT all  --  *   *   0.0.0.0/0   0.0.0.0/0 reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT 5 packets, 728 bytes)
num pkts bytes target prot opt in out source destination

4. iptable 参数说明:

参数 说明
-t 后面接table, 例如:net,filter,默认为filter
-L 列出目前table 的guiz
-n 不进行IP 与 HOSTNAME的反查
-v 列出更多信息
-A 是添加到规则的末尾
-I 可以插入到指定位置,没有指定位置的话默认插入到规则的首部
-io 网络接口,例如:eth0,lo等,需要与INPUT链配合
-p 协议,例如:tcp, udp, icmp 及 all
-s 来源IP或网域,例如:192.168.0.100, 192.168.0.0/24
若规范为不许,加上!,例如:-s ! 192.168.100.0/24
-d 目标 IP/网域
-j 动作 主要有:ACCEPT,DROP,REJECT及记录 LOG,SNAT,DNAT
-j SNAT–to-source 例如:–to-source 192.168.1.210-192.168.1.220
-j DNAT–to–destination 例如:–to-destination 192.168.1.18:80
-j REDIRECT –to-ports
–sport 来源端口或范围,如:–sport 1024:65535
–dport 目标的端口或范围
–syn 主动联机的SYN
-m iptables 的外挂模块,主要有:
state 状态模块
mac 网络硬件地址
–state 一些封包的状态,主要有:
INVALID 无效的封包,例如数据破损的封包状态
ESTABLISHED 已经联机成功的联机状态
NEW 想要新建立联机的封包状态
RELATED 与主机发送出去的封包有关
–mac-source
–icmp-type

针对FTP: 加入iptables 的 ip_nat_ftp, ip_conntrack_ftp 两个模块

/etc/sysconfig/iptables-config

IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp”

常用设置脚本:

#!/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin;
export PATH

# clear all
iptables -F
iptables -X
iptables -Z

# set default policy
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

# other rules
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# 放行常用服务,SSH,HTTP,HTTPS,FTP
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
# iptables -A INPUT -p tcp --dport 3306 -j ACCEPT

icmp_type="0 3 3/4 4 8 11 12 14 16 18"
for typeicmp in $icmp_type
do
    iptables -A INPUT -p icmp --icmp-type $typeicmp -j AACEPT
done
# save
service iptables save
service iptables restart

5. 删除规则:

删除用-D参数

iptables -D INPUT 5

6. 进阶设置NAT

# 端口转发 8080 -> 80
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-ports 80

7. UFW(Uncomplicated Firewall)

是Ubuntu系统上配置iptables防火墙的工具。UFW提供一个非常友好的命令用于创建基于IPV4,IPV6的防火墙规则。由于Ubuntu下的iptables操作起来比较复杂,依赖关系比较多,所以使用UFW时可以简化很多操作。

sudo ufw enable   # 启用
sudo ufw default deny  # 作用:开启了防火墙并随系统启动同时关闭所有外部对本机的访问(本机访问外部正常)。
sudo ufw disable  # 关闭
sudo ufw status   # 查看防火墙状态
sudo ufw reset  # 重置所有规则

# ---
# 慎重使用iptables – 来清空所有链的规则,尽量避免ufw与iptables同时使用。
# ---

三. 网络协议

1. 安装sctp协议

使用命令yum list lksctp* 查看需要安装列表

四. 网络检测

1. lsof

lsof -i:端口号

2. netstat

netstat -tunlp|grep 端口号
netstat -antup | grep ftp
 
# 查看网络连接数:
netstat -an |wc -l
 
# 查看不同状态的连接数数量
netstat -an | awk '/^tcp/ {++y[$NF]} END {for(w in y) print w, y[w]}'
 
# 查看每个ip跟服务器建立的连接数
netstat -nat|awk '{print$5}'|awk -F : '{print$1}'|sort|uniq -c|sort -rn
 
# 查看每个ip建立的ESTABLISHED/TIME_OUT状态的连接数
netstat -nat|grep ESTABLISHED|awk '{print$5}'|awk -F : '{print$1}'|sort|uniq -c|sort -rn

# 常用的三个状态是:ESTABLISHED 表示正在通信,TIME_WAIT 表示主动关闭,CLOSE_WAIT 表示被动关闭。
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'