防火墙原理以及iptables重要实践

防火墙

  • 主机间通信大致过程:

    1. 请求报文由客户端IP+PORT和服务器端IP+PORT构成。当客户端网络地址和服务端地址在同一网段时,不需要经由路由转发,可以直接到目标服务器,再经由服务器端口请求道所需资源;
    2. 当服务器端和客户端不在同一网段时。目标IP和源IP是不会改变的,会经由互联网中的路由器,按照其的路由表,指向该路由器的下一跳主机,知道找到服务器端所在网段。

      • 当Linux主机充当路由器时,接收到报文请求之后,判断目标IP是不是本地的IP地址,如果是,则发往内核空间拆开IP封装,再拆开端口地址封装,交由目标端口,有监听该端口的进程进行处理。
      • 当不是本地的IP,并且打开了核心转发功能(ip_forward),那么,就会交给其他网卡,并且根据相应的路由表进行转发
  • 防火墙的工作原理:

    • 由于主机之间的通信,需要IP和端口两个数据,那么我们可以在端口之外,将端口封起来,不允许随意访问,这样就可以实现防火墙功能呢个
    • 但是,作为服务器而言,需要向外提供服务;作为客户端而言,需要向外请求服务。所以,纯粹的封闭主机的端口,来达到防火墙功能,并不现实。需要在防火墙上添加规则,并且给出相应的处理动作,与规则条件不匹配的,做出什么样的处理动作,符合的又该做出什么动作。
    • 根据主机间的通信过程,我们可以了解到,一个请求进入一台Linux主机,有两个方向可以通过,一个是进入内核空间,另外一个是通过核心转发功能转发出去:

防火墙原理以及iptables重要实践
1. 请求报文进入主机内部,先经由prerouting,input链进入内核空间,到目标端口,进行处理
2. 处理完之后,用过output,postrouting,由本机发出 2. 请求报文进入主机内部,从prerouting,到forward,再到postrouting,由本机转发
3. 请求报文进入内核空间,经由ouput,postrouting,再到网卡,由本机发出 4. 对Linux而言,这五个能实现包进行处理的位置,是在内核中安置的一个框架,任何一个报文只要达到这个位置,都会被审核(根据检查规则作出相应处理动作。如何添加规则就是由管理员所定义的) 5. 通过iptables这个工具,将编写的规则通过这个工具发送给上述的框架 防火墙原理以及iptables重要实践

  • iptables:

    1. 功能:(4表)

    filter:过滤,防火墙;
    nat:network address translation nat会话的连接追踪表;用于修改源IP或目标IP,也可以改端口;(功能是地址转换,保护服务器一侧,就将它放置在服务器里,向外提供服务;保护客户端一侧,放置在客户端,代表客户端访问互联网。保护客户端的时候做源地址转换;保护服务端做目标地址转换)
    mangle:拆解报文,做出修改,并重新封装起来;(修改地址(源IP,目标IP)之外的其他属性,比如报文中的其他信息 ttl 协议版本等。)
    raw:关闭nat表上启用的连接追踪机制

    1. 5链

    PREROUTING
    INPUT
    FORWARD
    OUTPUT
    POSTROUTING

  • state

    它是coontrack模块(连接追踪)的子集;可以基于连接追踪功能去查看某一报文的当前所处的状态
    连接追踪:在内核内存中打开一段空间,这段空间可以记录下来,此前哪些客户端访问过。(给内核内存中添加了记录某个IP基于什么协议通过什么端口访问了哪些东西等信息)
    连接追踪功能需要激活后才能使用,需要装载(-m state –state
    对于一个非常繁忙的主机而言,要么调大这个空间,要么不开启追踪

    • [!] –state state

      INVALID,ESTABLSHED,NEW,RELATED or UNTRACKED.
      NEW:新连接请求;
      ESTABLISHED:已经建立的连接;
      RELATED:相关联的连接,当前连接是一个新请求,但附属于某个已存在的连接;  UNTRACKED:未追踪的连接;
      INVALID:无法识别的连接;

    • state扩展:

      内核模块装载:
      nf_conntrack
      nf_conntrack_ipv4

    • 手动装载:

      nf_conntarck_ft

  • SNAT:源地址转换。用于将IP数据包的源地址转换成另外一个地址,实现隐藏客户端源IP,顺带着解决了IPv4地址不够使用的问题

  • DNAT:目标地址转换。实现了隐藏服务器地址,和解决IPv4地址不够使用的问题

    #环境:
    A:eth0:inet 192.168.2.128/24 
    B:eth0: inet 192.168.3.129/24;
       eth1: inet 192.168.2.129/24
    C:eth0:inet 192.168.3.128/24
    #B机器eth1为A机器的网关
    ip route add default via 192.168.2.129
    #B机器eth0为C机器网关
    ip route add default via 192.168.3.129
    #B机器添加规则:
    iptables -t nat -A PREROUTING -d 192.168.2.129 -j DNAT --to-destination 192.168.3.128       #构建DNAT
    iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 172.16.0.6                #构建SNAT

万能规则示例:

#在B机器(开启了核心转发功能的Linux主机)添加一下规则
iptables -I FORWARD -m state --state ESTABLISHED -j ACCEPT
    #对所有已经建立的报文,都放行
iptables -I FOWARD 2 -s 192.168.2.0/24 -m state --state NEW -j ACCEPT
    #开放内网主机(A),访问服务端(外网主机C),放行NEW请求;表示放行内网去访问外网。
#注意,无法放行ftp这种半连接状态的协议,需要额外添加RELATED的规则
modprobe nf_conntrack_ftp
vim /etc/sysconfig/iptables-config
    IPTBLES_MODULES="nf_conntrack_ftp"      #firewalld文件,自动加载这个模块,CentOS6中自动启动可以使用脚本
iptables -I FORWARD 5 -d 192.168.2.128 -p tcp -m state --state RELATED -j ACCEPT

原创文章,作者:半斤八两,如若转载,请注明出处:http://www.178linux.com/78172

(1)
半斤八两半斤八两
上一篇 2017-06-18 13:52
下一篇 2017-06-18 19:04

相关推荐

  • httpd

      httpd http服务器程序:   httpd (apache) nginx lighttpd httpd的特性:   高度模块化: core + modules DSO:dynamic shared object(模块的动态加载) MPM:Multipath processing Modules (多路处理模块) &nb…

    Linux干货 2017-06-04
  • GDB中应该知道的几个调试方法

    七、八年前写过一篇《用GDB调试程序》,于是,从那以后,很多朋友在MSN上以及给我发邮件询问我关于GDB的问题,一直到今天,还有人在问GDB的相关问题。这么多年来,有一些问题是大家反复在问的,一方面,我觉得我以前的文章可能没有说清楚,另一方面,我觉得大家常问的问题正是最有用的,所以,在这里罗列出来。希望大家补充。 一、多线程调试 多线程调试可能是问得最多的。…

    Linux干货 2016-07-11
  • ssh基于密钥的认证及实现

    ssh登录认证方式介绍 大致有以下两种 基于口令的认证这种认证方式就是通过ssh指令以指定用户名、指定端口等信息后,待连接建立完成,需要输入用户名对应的口令来完成认证。一般形如: [root@localhost ~]# ssh -l lantian 192.168.1.201  &nbsp…

    Linux干货 2017-01-05
  • 搭建一套LVS-DR模型的高性能集群(LVS-DR+Nginx+Mariadb+Nfs+php-fpm+wordpress)

    架构简介 参加马哥linux培训一周了,自己感觉每天都进步很多,现在来说说这个架构,也是架构师第一周的作业第二题。搭建一套LVS-DR模型的高性能集群,做了两天终于完成并实现了这个架构,我设计的架构图如下所示: 此架构主要是用ipvsadm来实现高性能集群,Realserver(RS1,RS2)安装配置nginx,RS服务器分别配置了一个内网,一个外网。正常…

    Linux干货 2016-12-06
  • 第五周作业

    1、显示当前系统上root,fedora或user1用户的默认shell。 [root@hostname ~]# grep -E ‘^(root|fedora|user1)’ /etc/passwd | cut -d: -f1,7 root:/bin/bash 2、找出/etc/rc.d/init.d/functions文件中某词后面跟一组小括号的行,形如:…

    Linux干货 2017-08-04
  • 文件管理的相关命令使用及标准I/O,管道,diff及文件工具的使用

    mkdir 创建目录-p: 存在于不报错可自动创建所需的各目录 (递归创建)mkdir -p a/d/c/b-m: mode 创建时指定权限  # mkdir -m 777 filename       rmdir删除空目录 -p 递归删除空目录 touch 当文件不存在时,则创建一个空文…

    2017-07-29