iptables

type
status
date
slug
summary
tags
category
icon
password

iptables

安全技术

  • 入侵检测与管理系统(Intrusion Detection Systems):特点是不阻断任何网络访问,量化、定位来自内外网络的威胁情况,主要以提供报告和事后监督为主,提供有针对性的指导措施和安全决策依据。一般采用旁路部署方式(外部请求是否有威胁,提供报告和事后监督,简单来说C–>S传输过程,中间会有一个记录)
  • 入侵防御系统(Intrusion Prevention System):以透明模式工作,分析数据包的内容如:溢出攻击、拒绝服务攻击、木马、蠕虫、系统漏洞等进行准确的分析判断,在判定为攻击行为后立即予以阻断,主动而有效的保护网络的安全,一般采用在线部署方式(简单来说C–S传输过程中,报文会经过入侵防御系统,会影响网络性能,相当于安检;透明表示如果报文合法的用户感知不到;会看数据包中的行为判断是否有威胁,而且这种属于智能;会拆组包分析)
  • 防火墙( FireWall ):隔离功能,工作在网络或主机边缘,对进出网络或主机的数据包基于一定的规则检查,并在匹配某规则时由规则定义的行为进行处理的一组功能的组件,基本上的实现都是默认情况下关闭所有的通过型访问,只开放允许访问的策略(按规则来决定)
数据链路层 MAC 网络层 IP 传输层 端口号 应用层 入侵防御系统

防火墙的分类

  • 主机防火墙:服务范围为当前主机 网络防火墙:服务范围为防火墙一侧的局域网
  • 硬件防火墙:在专用硬件级别实现部分功能的防火墙;另一个部分功能基于软件实现,如:Checkpoint,NetScreen 软件防火墙:运行于通用硬件平台之上的防火墙的应用软件
  • 网络层防火墙:OSI模型下四层 应用层防火墙/代理服务器:代理网关,OSI模型七层

网络型防火墙

网络层防火墙
  • 包过滤防火墙
  • 网络层对数据包进行选择,选择的依据是系统内设置的过滤逻辑,被称为访问控制列表(ACL),通过检查数据流中每个数据的源地址,目的地址,所用端口号和协议状态等因素,或他们的组合来确定是否允许该数据包通过
  • 优点:对用户来说透明,处理速度快且易于维护
  • 缺点:无法检查应用层数据,如病毒等
notion image

应用层防火墙

应用层防火墙/代理服务型防火墙(Proxy Service)
  • 将所有跨越防火墙的网络通信链路分为两段
  • 内外网用户的访问都是通过代理服务器上的“链接”来实现
  • 优点:在应用层对数据进行检查,比较安全
  • 缺点:增加防火墙的负载
    • notion image
现实生产环境中所使用的防火墙一般都是二者结合体
  • 即先检查网络数据,通过之后再送到应用层去检查

iptables的基本认识

  • Netfilter组件
    • 内核空间,集成在linux内核中(查看grep -i iptables /boot/config-3.10.0-957.el7.x86\_64)
    • 扩展各种网络服务的结构化底层框架
    • 内核中选取五个位置放了五个hook(勾子) function(INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING),而这五个hook function向用户开放,用户可以通过一个命令工具(iptables)向其写入规则
    • 由信息过滤表(table)组成,包含控制IP包处理的规则集(rules),规则被分组放在链(chain)上
  • 三种报文流向
    • 流入本机:PREROUTING –> INPUT–>用户空间进程
    • 流出本机:用户空间进程 –>OUTPUT–> POSTROUTING
    • 转发:PREROUTING –> FORWARD –> POSTROUTING

防火墙工具

  • iptables
    • 命令行工具,工作在用户空间
    • 用来编写规则,写好的规则被送往netfilter,告诉内核如何去处理信息包
  • firewalld CentOS 7 引入了新的前端管理工具 管理工具: firewall-cmd 命令行 firewall-config 图形

iptables的组成

iptables由五个表和五个链以及一些规则组成
  • 五个表table:filter、nat、mangle、raw、security filter表:过滤规则表,根据预定义的规则过滤符合条件的数据包 nat表:network address translation 地址转换规则表 mangle:修改数据标记位规则表 raw:关闭NAT表上启用的连接跟踪机制,加快封包穿越防火墙速度
security:用于强制访问控制(MAC)网络规则,由Linux安全模块(如SELinux)实现(一般不使用)优先级由高到低的顺序为:security –>raw–>mangle–>nat–>filter
  • 五个内置链chain INPUT OUTPUT FORWARD PREROUTING POSTROUTING

Netfilter表和链对应关系

notion image
cenots6 nat表3个链,centos7 nat表4个链

数据包过滤匹配流程

notion image

IPTABLES和路由

  • 路由功能发生的时间点
  • 报文进入本机后
    • 判断目标主机是否为本机 是:INPUT 否:FORWARD
  • 报文离开本机之前判断由哪个接口送往下一跳
notion image
由此图看,一般常用的,nat表prerouting,filter表input,fitler表forward,fitler表output,nat表postrouting

内核中数据包的传输过程

  • 当一个数据包进入网卡时,数据包首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去
  • 如果数据包就是进入本机的,数据包就会沿着图向下移动,到达INPUT链。数据包到达INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包经过OUTPUT链,然后到达POSTROUTING链输出
  • 如果数据包是要转发出去的,且内核允许转发,数据包就会向右移动,经过FORWARD链,然后到达POSTROUTING链输出

iptables规则

  • 规则rule:根据规则的匹配条件尝试匹配报文,对匹配成功的报文根据规则定义的处理动作作出处理
    • 匹配条件:默认为与条件,同时满足(条件) 基本匹配:IP,端口,TCP的Flags(SYN,ACK,FIN等) 扩展匹配:通过复杂高级功能匹配(可定义数据包大小、数据包中的关键字、或者时间策略等)
    • 处理动作:称为target,跳转目标(干啥事) 内建处理动作:ACCEPT,DROP,REJECT,SNAT,DNATMASQUERADE,MARK,LOG… 自定义处理动作:自定义chain,利用分类管理复杂情形(相当于组合)
  • 规则要添加在链上,才生效;添加在自定义上不会自动生效
  • 链chain: 内置链:每个内置链对应于一个钩子函数 自定义链:用于对内置链进行扩展或补充,可实现更灵活的规则组织管理机制;只有Hook钩子调用自定义链时,才生效

iptables添加要点

  • iptables规则添加时考量点
    • 要实现哪种功能:判断添加在哪张表上(filter,nat用的较多,默认是filter)
    • 报文流经的路径:判断添加在哪个链上
    • 报文的流向:判断源和目的
    • 匹配规则:业务需要
  • 实验环境准备
    • Centos7:systemctl stop firewalld.service systemctl disable firewalld. service
    • Centos6:service iptables stop chkconfig iptables off

iptables命令

规则格式

匹配条件

基本:通用的,PARAMETERS 扩展:需加载模块,MATCH EXTENTIONS
显式扩展:必须显式地指明使用的扩展模块进行的扩展 使用帮助: CentOS 6: man iptables CentOS 7: man iptables-extensions
示例:
已经追踪到的并记录下来的连接信息库(连接追踪功能一但启用,对性能收到影响)/proc/net/nf_conntrack调整连接追踪功能所能够容纳的最大连接数量/proc/sys/net/nf_conntrack_max不同的协议的连接追踪时长/proc/sys/net/netfilter/注意:CentOS7 需要加载模块: modprobe nf_conntrack
iptables的链接跟踪表最大容量为/proc/sys/net/nf_conntrack_max,各种状态的超时链接会从表中删除;当模板满载时,后续连接可能会超时 解决方法两个: (1) 加大nf\_conntrack\_max 值
(2) 降低 nf\_conntrack timeout时间
开放被动模式的ftp服务 (1) 装载ftp连接追踪的专用模块 跟踪模块路径:/lib/modules/kernelversion/kernel/net/netfilter vim /etc/sysconfig/iptables-config 配置文件 IPTABLES\_MODULES=“nf\_conntrack\_ftp” modproble nf\_conntrack\_ftp (2) 放行请求报文: 命令连接:NEW, ESTABLISHED 数据连接:RELATED, ESTABLISHED iptables –I INPUT -d LocalIP -p tcp -m state –state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -d LocalIP -p tcp –dport 21 -m state –state NEW -j ACCEPT (3) 放行响应报文: iptables -I OUTPUT -s LocalIP -p tcp -m state –state ESTABLISHED -j ACCEPT
Target (动作) ACCEPT, DROP, REJECT, RETURN LOG, SNAT, DNAT, REDIRECT, MASQUERADE,.. LOG:非中断target,本身不拒绝和允许,放在拒绝和允许规则前 并将日志记录在/var/log/messages系统日志中 –log-level level 级别: debug,info,notice, warning, error, crit,alert,emerg –log-prefix prefix 日志前缀,用于区别不同的日志,最多29个字符 示例: iptables -I INPUT -s 10.0.1.0/24 -p tcp -m multiport –dports 80,21,22,23 -m state –state NEW -j LOG –log-prefix “new connections: “
  • 任何不允许的访问,应该在请求到达时给予拒绝
  • 规则在链接上的次序即为其检查时的生效次序
  • 基于上述,规则优化 1 安全放行所有入站和出站的状态为ESTABLISHED状态连接 2 谨慎放行入站的新请求 3 有特殊目的限制访问功能,要在放行规则之前加以拒绝 4 同类规则(访问同一应用),匹配范围小的放在前面,用于特殊处理 5 不同类的规则(访问不同应用),匹配范围大的放在前面 6 应该将那些可由一条规则能够描述的多个规则合并为一条 7 设置默认策略,建议白名单(只放行特定连接)
    • 规则有效期限:使用iptables命令定义的规则,手动删除之前,其生效期限为kernel存活期限 保存规则至指定的文件 CentOS 6 service iptables save 将规则覆盖保存至/etc/sysconfig/iptables文件中 service iptables restart 会自动从/etc/sysconfig/iptables 重新载入规则
    CentOS 7 yum install iptables-services iptables-save > /PATH/TO/SOME\_RULES\_FILE
    重新载入预存规则文件中规则
    方法一 开机自动重载规则文件中的规则 1、用脚本保存各iptables命令;让此脚本开机后自动运行 /etc/rc.d/rc.local文件中添加脚本路径 /PATH/TO/SOME\_SCRIPT\_FILE 2、用规则文件保存各规则,开机时自动载入此规则文件中的规则 /etc/rc.d/rc.local文件添加 iptables-restore < /PATH/FROM/IPTABLES\_RULES\_FILE 3、自定义Unit File,进行iptables-restore
    方法二 CentOS 7 可以安装 iptables-services 实现iptables.service

    网络防火墙

    iptables/netfilter网络防火墙 1、充当网关 2、使用filter表的FORWARD链
    注意的问题 1、请求-响应报文均会经由FORWARD链,要注意规则的方向性 2、如果要启用conntrack机制,建议将双方向的状态为ESTABLISHED的报文直接放行

    NAT

    NAT: network address translation 网络地址转换 PREROUTING,INPUT,OUTPUT,POSTROUTING 请求报文:修改源/目标IP,由定义如何修改 响应报文:修改源/目标IP,根据跟踪机制自动实现
    • SNAT:source NAT POSTROUTING, INPUT 让本地网络中的主机通过某一特定地址访问外部网络,实现地址伪装 请求报文:修改源IP
    • DNAT:destination NAT PREROUTING , OUTPUT 把本地网络中的主机上的某服务开放给外部网络访问(发布服务和端口映射),但隐藏真实IP 请求报文:修改目标IP
    • PNAT: port nat,端口和IP都进行修改

    转发

    REDIRECT: NAT表 可用于:PREROUTING OUTPUT 自定义链 通过改变目标IP和端口,将接受strong text的包转发至不同端口

    小结

    五表:filter、nat、mangle、raw、security(此表一般不用,关于selinux的) 五链:PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING 一般常用的,nat表prerouting,filter表input,fitler表forward,fitler表output,nat表postrouting iptables -t 表(默认filter,可省略) -A 链 -s/-d 目标或源地址 -p 协议(tcp/udp/icmp) -i 网卡名 –d/sport 端口号 -j 行为(ACCEPT/DROP/REJECT) 指定端口,端口要连续的 icmp协议类型请求回应 iptables -A INPUT -p icmp –icmp-type 0 -j ACCEPT iptables -A OUTPUT -p icmp –icmp-type 8 -j ACCEPT 扩展模式,多端口,IP范围,MAC地址,字符串(可以针对数据包从哪个位置字节检查) 自定义链,方便管理,相当于shell函数
    写脚本可以掉用,查询当前公网IP地址 curl <http://ipinfo.io/ip>
    NAT 一般是针对请求报文说明的 PNAT 端口地址转换 SNAT 内访问外 请求源地址转换 响应目标地址转换 DNAT 外访问内 请求目标地址转换 响应源地址转换 SNAT下,内网可以配置公网的地址,但有一个问题,如果访问外网的目标地址和我们自己一样,会有问题的,所有不建议
    SNAT POSTROUTING上面做转换,如果地址是动态获取可以伪装地址,推荐伪装
    DNAT PREROUTING
    REDIRECT 可以转发不同的端口,同一台主机 iptables -t nat -A PREROUTING -d 192.168.10.3 -p tcp –dport 8080 -j REDIRECT –to-ports 80
    1、iptables和firewalld都是工具 2、开启iptables,必然会影响报文的速度,影响性能 3、为了安全可以牺牲一点性能,这只是防小黑,并不能防止大牛 4、安全相对来说应该使用专业的硬件防火墙,其他安全策略,审计,DDOS,权限等限制。。。

    转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 438803792@qq.com
    上一篇
    KVM
    下一篇
    cobbler
    Loading...