iptables 规则
安全防护技术
入侵检测与管理系统:特点是不阻断任何网络访问,量化、定位来自内外网络的威胁情况,主要以提供报告和事后监督为主
入侵防御系统:以透明模式工作,分析数据包的内容如:溢出攻击、拒绝服务攻击、木马、蠕虫、系统漏洞等进行准确的分析判断,在判定为攻击行为后立即予以阻断,主动而有效的保护网络的安全,一般采用在线部署方式
防火墙(FireWall):隔离功能,工作在网络或主机边缘,对进出网络或主机的数据包基于一定的规则检查,并在匹配某规则时由规则定义的行为进行处理的一组功能的组件,基本上的实现都是默认情况下关闭所有的通过型访问,只开放允许访问的策略
防火墙的分类
按保护范围划分:
主机防火墙: 保护当前主机
网络防火墙: 保护局域网
按实现方式划分:
硬件防火墙: 专用硬件实现部分功能的防火墙,华为,天融信等
软件防火墙: 运行于通用硬件平台之上的防火墙的应用软件
按网络协议划分:
网络层防火墙: OSI模型下四层,又称为包过滤防火墙
应用层防火墙: 代理网关,OSI模型七层
包过滤防火墙:
网络层对数据包进行选择过滤,判断是否运行数据包通过
优点:对用户来说透明,处理速度快且易于维护
缺点:无法检查应用层数据,如病毒等
应用层防火墙:
应用层防火墙/代理服务型防火墙,也称为代理服务器,将所有跨越防火墙的网络通信链路分为两段,内外网用户的访问都是通过代理服务器上的“链接”来实现
优点:在应用层对数据进行检查,比较安全
缺点:增加防火墙的负载
linux防火墙
Linux防火墙由netfilter组件提供,集成在Linux内核中。
Netfilter 是Linux2.4.x之后新一代的Linux防火墙机制,是linux内核的一个子系统。Netfilter采用模块化设计,具有良好的可扩充性,提供扩展各种网络服务的结构化底层框架。Netfilter与IP协议栈是无缝契合,并允许对数据报进行过滤、地址转换、处理等操作
常用防火墙管理工具:
iptables
firewalld centos7开始使用
nftables centos8新特性
netfilter 中五个勾子函数
Netfilter在内核中选取五个位置放了五个勾子function 又称5个链。
INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING,而这五个链向用户开放,用户可以通过一个命令工具(iptables)向其写入规则
由信息过滤表组成,包含控制IP包处理的规则集,规则被分组放在不同的链上
三种报文流向:
流入本机:PREROUTING --> INPUT-->用户空间进程
流出本机:用户空间进程 -->OUTPUT--> POSTROUTING
转发:PREROUTING --> FORWARD --> POSTROUTING
iptables的组成
iptables由五个表table和五个链chain以及一些规则组成
五个表:
filter: 过滤规则表,根据预定义的规则过滤符合条件的数据包
nat: 网络地址转换
mangle: 修改数据标记位规则表
raw: 关闭启用的连接跟踪机制,加快封包穿越防火墙速度
security:强制访问控制,由Linux安全模块如SELinux实现
查看表与链对应关系:
iptables -vnL -t filter #查看filter表支持的链
-t mangle #查看mangle表支持的链
- 优先级由高到低为: security -->raw–>mangle–>nat–>filter
iptables 基本规则
规则: 根据定义的规则对报文进行处理,规则在链上的次序决定生效次序
基本匹配: ip,端口,协议
扩展匹配: 通过复杂高级功能匹配
iptables规则添加考量点:
实现哪种功能: 判断添加到哪张表上
报文流经路径: 判断添加在哪个链上
报文的流向: 判断源地址或目标地址
#注意:使用iptables防火墙规则建议关闭防火墙服务
iptables 命令
查看类:
-n #以数字格式显示端口和ip
-v #显示更加详细
-L #列出所有规则
-t #指定表,默认为filter表
--line-numbers #显示规则序号
规则管理类:
-A #追加规则
-D #删除规则
-I 2 #查入规则,插入的规则序号为2
-F #清空规则
-F INPUT #清空INPUT链规则
处理动作:
-j ACCEPT #允许
DROP #拒绝,堵塞
REJECT #拒绝,有返回信息
REDIRECT #端口重定向
DNAT #目标地址转换
SNAT #源地址转换
MASQUERADE #地址伪装
匹配条件:
-s 10.0.0.8 #源ip地址
-s 10.0.0.8,10.0.0.11
-d 10.0.0.8 #目标ip地址
-d 10.0.0.8,10.0.0.11
-p tcp #指定连接协议,tcp,udp,icmp等 参考:/etc/protocols
案例:
iptables -vnL #查看所有规则
iptables -vnL --line-numbers #查看所有规则并显示序号
iptables -F #清空所有防火墙规则
iptables -D INPUT 1 #删除INPUT链的序号为1的规则
iptables -A OUTPUT -j DROP #禁止所有连接
iptables -A INPUT -s 10.0.0.8 -j REJECT #添加规则禁止10.0.0.8的所有访问
iptables -I INPUT 2 -s 10.0.0.10 -j ACCEPT #插入规则允许10.0.0.10的所有访问
iptables -A INPUT -s 10.0.0.0/24 -j REJECT #添加规则禁止10.0.0.0网段的所有访问
iptables -A INPUT -p tcp -s 10.0.0.8 -j REJECT #禁止10.0.0.8通过tcp协议连接本主机
显示扩展
-m 指定扩展模块
multiport #指定端口匹配
--dports 目标端口
--sports 源端口
--ports 源或目标端
#禁止远程主机基于tcp协议的22,80端口的访问
iptables -A INPUT -s 10.0.0.8 -m multiport -p tcp --ports 22,80 -j REJECT
connlimit #客户端ip并发连接数量匹配,可防止dos攻击
--connlimit-above 5 并发连接大于5时匹配
#并发连接超过2 拒绝其他主机再次通过ssh协议连接本主机
iptables -A INPUT -d 10.0.0.17 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT
state 扩展模块,检查连接的状态
NEW: 新发出请求;将其识别为第一次发出的请求
#将第一次发出的请求拒绝
iptables -A FORWARD -d 192.168.10.0/24 -m state --state NEW -j REJECT
自定义链管理:
-N:自定义一条新的规则链
-E:重命名自定义链
-X:删除自定义的空的规则链
iptables -N shi #创建自定义链
iptables -A shi -s 10.0.0.7 -j REJECT #添加规则
iptables -A INPUT -j shi #关联到INPUT链上
iptables -F shi #清空自定义链
iptables -D INPUT 1 #取消关联
iptables -X shi #删除链
``
**规则优化**
```bash
1. 谨慎放行入站的新请求
2. 匹配范围小的放在前面,用于特殊处理
3. 不同类的规则(访问不同应用,一个是http,另一个是mysql),匹配范围大的放在前面,效率更高
4. 应该将那些可由一条规则能够描述的多个规则合并为一条
5. 设置默认策略,建议白名单。或规则的最后一条定义规则做为默认策略
iptables 规则保存
iptables-save #输出规则
iptables-save > /data/iptables-rules #输出规则重定向到文件中,文件可修改
iptables-restore < /data/iptables-rules #加载规则,还原规则
#实现开机自动加载规则
vim /etc/rc.d/rc.local
iptables-restore < /data/iptables-rules
#CentOS 7,8 可以安装iptables-services 实现开机加载
yum install -y iptables-services
iptables-save > /etc/sysconfig/iptables
systemctl enable iptables