防火墙
什么是防火墙?防火墙其实就是一个隔离的工具,工作于主机或者网络的边缘,对于进出本主机或者网络的报文根据事先定义好的网络规则做匹配监测。
防火墙可以简单地划分为两大类:主机防火墙 网络防火墙
    又可以分为:硬件防火墙、软件防火墙。
    对于软件防火墙,如果设立匹配较多,速度会很慢。
    硬件防火墙在硬件上处理远超于软件防火墙。
linux主要分为两个部分:
内核空间——tcp/ip协议站共作在内核空间
用户空间
防火墙firewalld——其中就有netfilter来过滤进出的报文。
四表五链:
 表: filter nat mangle raw
  应用优先级:raw>mangle>nat>filter
  常用优先级:filter nat mangle raw
 链:prerouting input forward output postrouting
 
各表中的链:
 filter : INPUT FORWARD OUTPUT
 nat:PREROUTING OUTPUT INPUT POSTROUTING
 mangle:PREROUTING  INPUT  FORWARD  OUTPUT  POSTROUTING
 raw:PREROUTING OUTPUT
firewalld是工作在liunx的内核空间之中的,那么我们用户是无法直接对其进行操作的。所以liunx提供了一种工具来实现
用户对于firewalld的网络规则的操作,那就是iptables,iptables是用来调度内核中的表和链的。
 
各表的功能:
 filter:过滤,防火墙
 nat:网络地址转换,network address translation
 mangle:拆分报文,做出修改,封装报文
 raw:关闭nat表上启用的连接追踪机制
添加规则的考量点:
  1、要实现什么功能:判断在哪张表上。
  2、报文的流向的路径:判断在哪条链上。
[jerry@centos ~]$ sudo iptables -L -n
[sudo] jerry 的密码:
Chain INPUT (policy ACCEPT)
target     prot opt source               destination        
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
 
iptables工具:
 -L:以列表的形式查看
 -n:以数字形式显示
 -t:指定表
 -P:指定链的默认规则
 -F:清空所有的规则
 -X:清除自定义链
 -j:指定要执行的操作
  ACCEPT:接受
  DROP:丢弃
  REJECT:拒绝
  DNAT:目标地址转换
  SNAT:源地址转换
 -A:append追加策略
 -s:source源ip(可以是网段)
 -d:destination源ip(可以是网段)
 -I:insert插入策略
 -p:protocol指定协议
 --dport:指定目标端口
 --sport:指定源端口
 --line-num:显示规则的行号
 -D:按照行号删除某链中的规则
 -i:指定网卡interface
 
iptables -X  #删除自定义链
iptables -L -n
iptables -t nat -L -n --line-number
内核工作在内存当中。关机就丢失数据,就需要重设,但是可以事先将规则写到文件里。
对于firewalld是没有进程的,集成在内核当中,开机防火墙就存在,只是使用与不使用的区别。
 iptables-save > rules.txt   #存储规则到文件
 iptables-restore < rules.txt  #加载规则到四表五链
 iptables -X    #清除自定义的链
 iptables -L -n
 
filter表:过滤
 iptables -t filter -A INPUT -s 192.168.27.1 -d 192.168.27.20 -p icmp -j DROP  #ping提示连接超时
 iptables -L -n
 iptables -F  #清所有的规则
 iptables -t filter -A INPUT -s 192.168.27.0/24 -d 192.168.27.20 -p icmp -j REJECT    #ping提示无法连接到端口
 iptables -t filter -A INPUT -s 0.0.0.0 -d 192.168.27.20 -p icmp -j REJECT     #决绝所有ip来ping本主机
拒绝访问本主机的web服务:
 iptables -t filter -A INPUT -p tcp --dport 80 -j DROP
 iptables -t filter -A OUTPUT -p tcp --sport 80 -j DROP
 iptables -t filter -A INPUT -s 192.168.27.1 -d 192.168.27.20 -p tcp --dport 80 -j REJECT
使用:telnet 192.168.27.20 80
iptables -t filter -P INPUT DROP
ssh远程连接也是通过tcp协议:
 iptables -t filter -A INPUT -s 192.168.27.1 -d 192.168.27.20 -p tcp --dport 22 -j ACCEPT
 iptables -L -n
-i——指定网卡:
 iptables -t filter -A INPUT -s 192.168.27.1 -d 192.168.27.20 -i ens33 -p icmp -j REJECT
 iptables -t filter -A OUPUT -s 192.168.27.20 -d 192.168.27.1 -o ens33 -p icmp -j REJECT
 iptables -t filter -A INPUT -i ens33 -p icmp -j DROP
 iptables -t filter -A OUTPUT -o ens33 -p icmp -j REJECT
 iptables -L -n --line-num #显示规则的行号,便于删除
 iptables -t filter -D INPUT 2 #删除filter表上INPUT链上的2号规则
 
nat表:地址转换
#开启ipforward的核心转发功能
临时性:
 echo 1 > /proc/sys/net/ipv4/ip_forward
永久性:
 vim /etc/sysctl.conf
  net.ipv4.ip_forward = 1
  使用Sysctl -p来生效
 #源地址为192.168.20.2的主机地址经过防火墙都转换成172.16.100.1这个地址(snat——源地址转换)
 iptables -t nat -A POSTROUTING -s 192.168.20.2 -d 172.16.100.2 -j SNAT --to-source 172.16.100.1
 #访问目标地址为172.16.100.1的这个机器并且是tcp协议80端口都转发给192.168.20.2的80端口(dnat——目标地址转化)
 iptables -t nat -A PREROUTING -d 172.16.100.1 -p tcp --deport 80 -j DNAT --to-destination 192.168.20.2:80
 #访问目标地址为172.16.100.1的这个机器并且是tcp协议80端口都转发给192.168.20.2的8080端口(dnat——目标地址转化)
 iptables -t nat -A PREROUTING -d 172.16.100.1 -p tcp --deport 80 -j DNAT --to-destination 192.168.20.2:8080
如果将IPFORWARD链上的转发功能给关掉就无法实现了。
 iptables -P IPFORWARD DROP
 iptables -t nat -A POSTROUTING -s 192.168.20.2 -d 172.16.100.2 -p tcp --dport 80 -j SNAT --to-source 172.16.100.1
 iptables -t nat -A PREROUTING -s 172.16.100.2 -d 172.16.100.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.20.2:9999
 iptables -t nat -L -n #查看两条链上的规则
 系统的扩展方式:
 scale up:向上扩展
 scale out:向外扩展
 也即是走质量或者走数量。
 集群类型:LB HA
 LB集群的实现:
  硬件:FS Redware
  软件:lvs haproxy nginx
   基于工作协议层划分:
    传输层:
     lvs:工作在内核空间之中,属于四层LB。
     haproxy:1、mode tcp,如果工作在应用层,只能调度http协议。如果基于tcp协议他能够调度https,mysql等常用的tcp协议。
        2、haproxy只是模拟tcp协议,因为tcp协议工作在内核之中,而haproxy属于应用程序工作在第七层,是工作在某个套接字上的应用程序。
    应用层:
     haproxy lvs
 LVS
 linux virtual server
 工作在input链上的,lvs接受报文转发的流程:PREROUTING —— INPUT —— POSTROUTING
 用户空间使用ipvsadm定义转发规则,通过系统调用将规则发送给内核中的ipvs
  Lvs——处理并发上不封顶
  Haproxy——最多处理并发3万
  Nginx——微线程,io处理切换,一遇见io就切换
 lvs术语:
 调度器——director server(DS)
 后端真实处理服务器——Real server (RS)
 client ip —— CIP
 Director virtual ip —— VIP
 director ip —— DIP
 Real server ip —— RIP
 
 ipvs工作原理:
 报文从PREROUTING进入,按正常顺序流入INPUT链,lvs工作在INPUT链上,根据所匹配的规则,符合规则的报文会被LVS强行拉到POSTROUTING链上
 然后根据规则流通出去。
 lvs的模式:
 lvs-nat(其实就是一个DNAT)
 lvs-dr(direct routing)
 lvs-tun(ip tunneling)
 
  lvs-nat:多目标的DNAT,通过修改请求报文的ip和端口至挑选出来的某个RS的RIP地址来实现转发。
     特点: 1、RIP应该和DIP使用私网地址,且RS的网关应该指向DIP。
      2、请求和响应报文都要经过director server,因此在并发量较高的情况下,director server有可能成为瓶颈。
      3、支持端口映射。
      4、RS可以是任意的OS。
      5、RS的RIP和director的DIP必须在同一个网段。
  lvs-dr:路由模式
  交换机通过mac地址寻址的方式来找主机。
  通过修改请求报文的目标mac地址进行转发。
   特点:1、保证前端路由器将目标ip为vip的请求发送给director server
     解决方案:静态绑定 arptables 修改RS的内核参数
      2、RS和DS必须在同一个物理网络之中。
      3、请求报文经过director调度,但是响应报文一定不能经过director
      4、不支持端口映射
      5、RS可以是大多数的OS
      6、RS的网关不能指向DIP
  lvs支持的算法:
   静态方法:依据算法本身进行调度
    RR:round robin轮调
    WRR:weighted RR
    SH:source hash,实现session保持的机制
    DH:destination hash ,将同一个目标的请求始终发往同一个RS
   动态方法:gun算法以及各RS的当前负载情况进行调度
    LC:least connection
     overhead=active*256+inactive
    WLC:weighted LC
     overhead=(active*256+inactive)/weighted
     overhead较小的即为被挑选的主机
    SED  LBLC   LBLCR
 lvs—nat模式配置:
  网络环境说明:
   DS:外网网卡和内网网卡
   外网网卡:192.168.27.10
       255.255.255.0
       192.168.27.1
   内网网卡:172.16.100.1
       255.255.255.0
   RS1:网关指向DS的内网网卡
    172.16.100.10
    255.255.255.0
    172.16.100.1 
   RS2:网关指向DS的内网网卡
    172.16.100.20
    255.255.255.0
    172.16.100.1
  安装lvs:yum install ipvsadm -y
  DS开启路由转发模式:
   临时性:
   echo 1 > /proc/sys/net/ipv4/ip_forward
   永久性:
   vim /etc/sysctl.conf
   net.ipv4.ip_forward = 1
   使用Sysctl -p来生效
  ipvsadm配置:
   ipvsadm -A -t 192.168.27.10:80 -s rr
   ipvasdm -a -t 192.168.27.10:80 -r 172.16.100.10 -m
   ipvsadm -a -t 192.168.27.10:80 -r 172.16.100.20 -m
   -A : 添加virtual server
   -D : 删除virtual server
   -s :调度算法
   -r :真实的real server
   -m : nat模式
   -t :tcp协议
  ipvsadm也是工作在内核空间的,所以规则需要写入文件:ipvsadm-save > a.txt 和iptables是类似的。
 lvs—dr模式配置:
  direct-server:192.168.27.20
  real-server:192.168.27.30
  real-server:192.168.27.40
  #vip为虚拟服务ip
  vip:192.168.27.250
  direct-server:
   yum install ipvsadm -y
  direct-server:
   ipvsadm -C   #清除配置信息
   ipvsadm -A -t 192.168.27.250:80 -s rr #-A为ADD  -t为tcp -s rr 为轮调算法
   #添加两台real-server
   ipvsadm -a -t 192.168.27.250:80 -r  192.168.27.30:80 -g
   #-a为add -t:tcp -r:realserver -g为DR路由模式。
   ipvsadm -a -t 192.168.27.250:80 -r  192.168.27.40:80 -g
   
   #配置网卡的子网口为vip,ip地址为192.168.27.250
   ifconfig ens33:0 192.168.27.250 broadcast 192.168.27.250 netmask 255.255.255.255 up
   #添加路由(访问192.168.27.250都走ens33:0这个网卡)
   route add -host 192.168.27.250 dev ens33:0
  
  real-server:
   #在回环地址上配置服务ip(vip)
   ifconfig lo:0 192.168.27.250 broadcast 192.168.27.250 netmask 255.255.255.255 up
   #添加路由
   route add -host 192.168.27.250 dev lo:0
   
   arp_ignore:定义接受到ARP请求时的响应级别
    0——默认,只要本地配置的有响应地址都给予回应
    1——仅仅在目标IP是本地地址,并且是配置在请求进来的接口上的时候才给予响应
     (仅在请求的目标地址配置请求到达的接口上的时候,才给予响应)
   arp_announce:定义将自己的地址向外通告时的级别
    0——默认,表示使用配置在任何接口的任何地址向外通告
    1——尽量仅向目标网络通告与其网络匹配的地址
    2——仅向与本地接口上地址匹配的网络进行通告
   
   #为了实现在访问vip的时候direct-server响应,然后转发给real-server,再由real-server回应并返回vip地址,需要执行以下配置:
   echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
   echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
   echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
   echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
   
   #如果需要关闭这些功能
   echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
   echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
   echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
   echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
 #备注
 如果没有ifconfig这个命令:yum install net-tools -y
 配置多个虚拟ip——ens33:1 or ens33:2
   
 

Iptables与LVS——从入门到放弃的更多相关文章

  1. CYQ.Data 从入门到放弃ORM系列:开篇:自动化框架编程思维

    前言: 随着CYQ.Data 开始回归免费使用之后,发现用户的情绪越来越激动,为了保持这持续的激动性,让我有了开源的念头. 同时,由于框架经过这5-6年来的不断演进,以前发的早期教程已经太落后了,包括 ...

  2. [精品书单] C#/.NET 学习之路——从入门到放弃

    C#/.NET 学习之路--从入门到放弃 此系列只包含 C#/CLR 学习,不包含应用框架(ASP.NET , WPF , WCF 等)及架构设计学习书籍和资料. C# 入门 <C# 本质论&g ...

  3. OpenStack从入门到放弃

    OpenStack从入门到放弃 目录: 为何选择云计算/云计算之前遇到的问题 什么是云计算 云服务模式 云应用形式 传统应用与云感知应用 openstack及其相关组件介绍 flat/vlan/gre ...

  4. 绕过校园网的共享限制 win10搭建VPN服务器实现--从入门到放弃

    一.开篇立论= =.. 上次说到博主在电脑上搭建了代理服务器来绕过天翼客户端的共享限制,然而经过实际测试还不够完美,所以本着生命不息,折腾不止的精神,我又开始研究搭建vpn服务器= =... (上次的 ...

  5. 《区块链:从入门到放弃》之obc安装步骤

    obc安装步骤 朋友们可能会好奇,厨师不研究菜谱怎么改研究兵法了,哈哈,我原本是app出身,最近被安排去预研区块链和比特币技术,2个月下来,颇有斩获.期间得到IBM的CC同学指导我一步一步安装obc的 ...

  6. win10搭建代理服务器实现绕过校园网的共享限制--从入门到放弃

    博主所在学校特别坑爹,校园网被电信一家垄断了,而且最恶心的还是电信要求一条网线只能供一台电脑上网,不许接路由器共享网络= =- (还有电信2M价格是380+每年,20m是500每年,而且网速都很慢= ...

  7. WPF从入门到放弃系列第二章 XAML

    本文是作者学习WPF从入门到放弃过程中的一些总结,主要内容都是对学习过程中拜读的文章的整理归纳. 参考资料 XAML 概述 (WPF):https://msdn.microsoft.com/zh-cn ...

  8. Android -- 带你从源码角度领悟Dagger2入门到放弃

    1,以前的博客也写了两篇关于Dagger2,但是感觉自己使用的时候还是云里雾里的,更不谈各位来看博客的同学了,所以今天打算和大家再一次的入坑试试,最后一次了,保证最后一次了. 2,接入项目 在项目的G ...

  9. Android -- 带你从源码角度领悟Dagger2入门到放弃(二)

    1,接着我们上一篇继续介绍,在上一篇我们介绍了简单的@Inject和@Component的结合使用,现在我们继续以老师和学生的例子,我们知道学生上课的时候都会有书籍来辅助听课,先来看看我们之前的Stu ...

随机推荐

  1. 理解CART决策树

    CART算法 原理 CART全称为Classification and Regression Tree. 回归树 相比ID3,CART遍历所有的特征和特征值,然后使用二元切分法划分数据子集,也就是每个 ...

  2. combotree(组合树)的使用

    一.前言: 组合树(combotree)把选择控件和下拉树结合起来.它与组合框(combobox)相似,不同的是把列表替换成树组件.组合树(combotree)支持带有用于多选的树状态复选框的树. 二 ...

  3. buuctf——facebook1

    分为注册和登陆两个页面 据大佬wp登陆页面又盲注,但我没测试 直接注册后登陆 注册后发现,会显示输入的url 根据目录扫描,发现robots.txt和flag.php robots.txt有源码备份 ...

  4. Maven学习笔记:Maven简介

    Maven的概念 Maven是基于项目对象模型(POM,Project Object Model),可以通过描述信息来管理项目的构建,报告和文档的软件管理工具 Maven除了以程序构建能力为特色之外, ...

  5. 【快学SpringBoot】快速上手好用方便的Spring Cache缓存框架

    前言 缓存,在开发中是非常常用的.在高并发系统中,如果没有缓存,纯靠数据库来扛,那么数据库压力会非常大,搞不好还会出现宕机的情况.本篇文章,将会带大家学习Spring Cache缓存框架. 原创声明 ...

  6. Kubernetes的pod控制器之DaemonSet

    DaemonSet 顶级参数介绍 [root@master manifests]# kubectl explain ds KIND: DaemonSet VERSION: extensions/v1b ...

  7. ubuntu16.04安装node.js、npm

    ubuntu16.04安装node.js.npm1.请尽量避免在 Ubuntu 上使用 apt-get 来安装 node.js, 如果你已经这么做了,请手动移除: sudo apt-get purge ...

  8. 洛谷P1164小A点菜(01背包)

    题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家……餐馆,很低端的那种. uim指着墙上的价目表(太低级了没有菜单),说:“随便点”. 题目描述 不过uim由于买了一些辅(e ...

  9. 【PAT甲级】1001 A+B Format (20 分)

    题意:给两个整数a,b,计算a+b的值并每三位用逗号隔开输出(−1e6​​≤a,b≤1e6​​) AAAAAccepted code: #include<bits/stdc++.h> us ...

  10. Android 调用系统Email发送带多附件的邮件

    转自:http://www.open-open.com/lib/view/open1347005126912.html 众所周知,在Android中调用其他程序进行相关处理,都是使用的Intent.当 ...