iptables防火墙和lvs
1 网络防火墙:(站在请求数据包角度,判断是SNAT/DNAT)
动作:SNAT 源地址转换,修改请求报文中的源IP地址(一对多-将多个内网IP映射到多个公网IP-家里内网主机共享公网IP访问互联网-自动维护路径无需显式回程路由) -j SNAT --to-source

iptables -t nat -A POSTROUTING -s 10.0.0.0/24 ! -d 10.0.0.0/24 -j SNAT --to-source 192.168.8.13
#SNAT指定的多个出口IP地址,默认使用的是第一个IP地址,-o指定出口网络设备
iptables -t nat -R POSTROUTING 1 -s 10.0.0.0/24 ! -d 10.0.0.0/24 -o ens37 -j SNAT --to-source 192.168.8.123-192.168.8.125
#SNAT指定转发端口,只转换tcp协议目标端口为80的报文,且通过12345端口向外访问
iptables -t nat -R POSTROUTING 1 -s 10.0.0.0/24 ! -d 10.0.0.0/24 -o ens37 -p tcp --dport 80 -j SNAT --to-source 192.168.8.13:12345
#用MASQUERADE(自动将内网主机的源IP动态伪装为当前出口接口的公网IP,适用于动态IP环境)设置SNAT转发
iptables -t nat -R POSTROUTING 1 -s 10.0.0.0/24 ! -d 10.0.0.0/24 -j MASQUERADE
DNAT 目标地址转换,修改响应报文中的目标IP地址(一对一-将一个公网IP精确映射到一个内网IP-公司内网服务器对外提供服务-需显式回程路由) -j DNAT --to-destination

iptables -t nat -A PREROUTING -d 10.0.0.13 -p tcp --dport 80 -j DNAT --to-destination 192.168.8.14:80
iptables -t nat -A PREROUTING -d 10.0.0.13 -p tcp --dport 2222 -j DNAT --to-destination 192.168.1.100:22
[每个服务(如Web/SSH/RDP)可能对应不同的内网IP和端口,需明确指定]
REDIRECT 重定向,将收到的数据包转发至同一主机的不同端口
iptables -t nat -A PREROUTING -d 192.168.8.14 -p tcp --dport 67 -j REDIRECT --to-ports 80
2 iptables自定义链-必须附加在默认链上才管用-N 新建、-E 改名、-X 删除
#创建一个新的自定义链,名称是SSH_CHAIN
iptables -t filter -N SSH_CHAIN
#向新的SSH_CHAIN链中,增加一条规则
iptables -t filter -A SSH_CHAIN -p tcp --dport 22 -j ACCEPT
#关联系统链INPUT
iptables -t filter -I INPUT 3 -j SSH_CHAIN
#iptables -F只能清空规则,并不会删除自定义链,删除自定义链
iptables -t filter -X SSH_CHAIN
#自定义链改名
iptables -E web-chain WEB-CHAIN
3 LVS
定位:负载均衡--高扩展集群的核心组件--负载调度器(load balancer),负责将客户的请求调度到后端主机上
企业内部大型业务场景下,lvs集群样式经常表现为LVS四层负载【port】 + Nginx七层负载【协议数据】

软件:nginx两个独立的连接,lvs一个独立的连接,建立在iptables基础之上

术语:CIP-客户端的真实IP地址、VIP-虚拟IP地址,对外提供服务的统一入口、DIP-负载均衡调度器(Director)的物理IP、RIP-后端真实服务器的IP地址、DS-负载均衡调度器(如LVS、Nginx、HAProxy)、RS-后端真实服务器

【注:为了达到不同网段的ip地址能够达到正常的通信,需要开启linux服务的ip转发功能方法一:在 vim /etc/sysctl.conf中开启功能net.ipv4.ip_forward = 1;sysctl -p(生效)方法二:直接修改ip_forward文件echo 1 > /proc/sys/net/ipv4/ip_forward 】
安装lvs软件:apt | yum install ipvsadm -y集群命令: #集群状态查看 ipvsadm -Ln (-L显示当前的服务或者目标主机信息 -n地址和端口已数字形式显示)#添加集群 ipvsadm -A -t(tcp)|-u(udp)|-f(防火墙自定义规则的标记,默认是数字) vip:port [-s 调度策略默认wlc] [-p 空闲超时时间]ipvsadm -A -t 192.168.8.14:80#编辑集群 ipvsadm -Eipvsadm -E -t 192.168.8.14:80 -s lc#删除集群 ipvsadm -D删除指定lvs集群 ipvsadm -C删除所有lvs集群ipvsadm -D -t 192.168.8.14:80ipvsadm -C主机命令:#添加主机 ipvsadm -a(给lvs集群增加一个真实主机RS) -t vip:port -r(指定真实主机的地址信息,port可省略,端口默认80) Rip:port -g(默认DR模式)|m(NAT模式)|i(TUN模式) -w(指定真实主机的权重信息)ipvsadm -a -t 192.168.8.14:80 -r 192.168.8.16(端口默认80)ipvsadm -a -t 192.168.8.14:80 -r 192.168.8.15:88 -m(指定真实主机端口只有-m才能生效,否则都使用默认的80端口) -w 3#编辑主机 ipvsadm -eipvsadm -e -t 192.168.8.14:80 -r 192.168.8.16:80 -m(转换成NAT模式,如果想让Rs主机的模式从NAT模式转换为其他模式的话,无法直接修改,只能先删后增)#删除主机 ipvsadm -dipvsadm -d -t 192.168.8.14:80 -r 192.168.8.15:88规则命令:#保存规则 ipvsadm-save -n > n-ipvsadm#查看规则 cat n-ipvsadm#导入规则 ipvsadm-restore < n-ipvsadm
防火墙标识:①#使用iptables定义防火墙标记iptables -t mangle -A PREROUTING -d 192.168.8.13 -p tcp -m multiport --dports
80,443 -j MARK --set-mark 10②#定制集群规则ipvsadm -A -f 10 -s rripvsadm -a -f 10 -r 192.168.8.7 -gipvsadm -a -f 10 -r 192.168.8.17 -g
模型:NAT[LVS会修改数据包的目标IP(DNAT)和源IP(SNAT),请求和响应流量都经过 LVS 调度器,所有的RS的出口应该指向lvs主机,lvs主机内部开启内核参数,实现数据包的转发能力net.ipv4.ip_forward = 1]-m:NAT模式(Masquerade)
DR[LVS服务器和RS服务器上都配置有VIP地址必须在同一网段,RS服务器VIP地址附加到lo上,LVS不修改IP头(CIP->VIP | VIP->CIP),仅修改MAC地址,RS直接响应客户端(不经过LVS)二层转发]-g(或默认不指定):DR 模式(Direct Routing)
TUN[LVS通过IP隧道(IPIP封装)将请求转发给RS,RS解包后直接响应客户端(响应不经过LVS),RS和LVS可在不同网络]-i:TUN 模式(IP Tunneling)
调度:静态算法仅根据算法本身来进行调度,不关注后端RS服务器负载情况[RR轮询、WRR加权轮询、SH源IP地址hash(同一个IP地址的客户端请求调度到后端同一台RS服务器上,从而实现会话保持)]
动态算法要根据当前系统中后端RS服务器的负载情况进行调度,给负载较低的后端主机多转发,给负载较高的后端主机少转发[LC最少连接算法、WLC加权最少连接算法]