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),通过检查数据流中每个数据的源地址,目的地址,所用端口号和协议状态等因素,或他们的组合来确定是否允许该数据包通过
- 优点:对用户来说透明,处理速度快且易于维护
- 缺点:无法检查应用层数据,如病毒等

应用层防火墙
应用层防火墙/代理服务型防火墙(Proxy Service)
- 将所有跨越防火墙的网络通信链路分为两段
- 内外网用户的访问都是通过代理服务器上的“链接”来实现
- 优点:在应用层对数据进行检查,比较安全
- 缺点:增加防火墙的负载

现实生产环境中所使用的防火墙一般都是二者结合体
- 即先检查网络数据,通过之后再送到应用层去检查
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表和链对应关系

cenots6 nat表3个链,centos7 nat表4个链
数据包过滤匹配流程

IPTABLES和路由
- 路由功能发生的时间点
- 报文进入本机后
- 判断目标主机是否为本机 是:INPUT 否:FORWARD
- 报文离开本机之前判断由哪个接口送往下一跳

由此图看,一般常用的,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_conntrackiptables的链接跟踪表最大容量为
/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...
keepalived