iptables的备份及脚本构成

简介:

    在Linux中,iptables为我们提供了批量备份与恢复规则的命令,防火墙脚本实际上是一个shell脚本程序,便于使用shell变量、程序控制逻辑,在需要重用、移植使用时会非常方便,只需修改下变量值就可使用


iptables的备份及还原

    防火墙规则的批量备份、还原用到两个命令,即iptables-save和iptables-restore,分别用来保存和恢复

1. iptables-save命令

    用来批量导出防火墙规则,直接执行命令时,将显示当前启用的所有规则

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@localhost ~] # iptables-save
# Generated by iptables-save v1.4.7 on Sun Jan  7 06:07:58 2018      //注释
*filter                                                               // 所在的表
:INPUT ACCEPT [0:0]                                                   // 链名,默认策略
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [41:5449]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT               // 规则,省略了iptables
-A INPUT -p icmp -j ACCEPT 
-A INPUT -i lo -j ACCEPT 
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT 
-A INPUT -j REJECT --reject-with icmp-host-prohibited 
-A FORWARD -j REJECT --reject-with icmp-host-prohibited 
COMMIT                                                                // 提交前面的规则设置
# Completed on Sun Jan  7 06:07:58 2018
 
[root@localhost ~] # iptables-save > /opt/iptables.txt                //备份所有表的规则
[root@localhost ~] # iptables-save > /etc/sysconfig/iptables          //每次开机后,根据保存的规则内容进行重建


2. iptables-restore命令

    用来批量导入Linux防火墙规则,如果已经使用iptables-save命令导出的备份文件,则恢复的过程一瞬间就能完成

1
[root@localhost ~] # iptables-restore /opt/iptables.txt               //从备份文件中恢复规则


使用防火墙脚本

1. 定义基本变量

    可以在防火墙规则较多时,定义以下变量,一旦网络环境发生变化,只需改下变量值就可使用

1
2
3
4
5
6
7
8
9
10
11
[root@localhost ~] # vim /opt/iptables.sh      //创建脚本文件
#!/bin/bash 
INET_IF=  "eth0"                                // 外网接口
INET_IP= "218.29.30.31"                         // 外网接口地址
LAN_IF= "eth1"                                  // 内网接口
LAN_IP=  "192.168.1.1"                          // 内网接口地址
LAN_NET= "192.168.1.0/24"                       // 内网网段
LAN_WWW_IP= "192.168.1.6"                       // 网站服务器的内部地址
IPT= "/sbin/iptables"                           //iptables 命令路径
MOD= "/sbin/modprobe"                           //modprobe 命令路径
CTL= "/sbin/sysctl"                             //sysctl 命令路径


2. 加载内核模块

    如果需要启用的规则数量较多,为了提高规则设置的效率,保持防火墙的稳定性,建议将用到的各种模块提前加载到内核中

1
2
3
4
5
6
7
8
9
10
11
$MOD ip_tables                  //iptables 基本模块
$MOD ip_conntrack               // 连接跟踪模块
$MOD ipt_REJECT                 // 拒绝操作模块
$MOD ipt_LOG                    // 日志记录模块
$MOD ipt_iprange                // 支持IP范围匹配
$MOD xt_tcpudp                  // 支持TCP、UDP协议
$MOD xt_state                   // 支持状态匹配
$MOD xt_multiport               // 支持多端口匹配
$MOD xt_mac                     // 支持MAC地址匹配
$MOD ip_nat_ftp                 // 支持FTP匹配
$MOD ip_conntrack_ftp           // 支持FTP连接跟踪


3. 调整/proc参数

    在文件夹/proc/sys下存放着与系统相关的一些可控参数,可以直接用来改变内核的行为,通常作为Linux内核调优的实时入口,下面列出几个常用的/proc参数

1
2
3
4
5
6
7
8
9
$CTL -w net.ipv4.ip_forward=1                  // 打开路由转发功能
$CTL -w net.ipv4.ip_default_ttl=128            // 修改ICMP响应超时
$CTL -w net.ipv4.icmp_echo_ignore_all=1        // 拒绝响应ICMP请求
$CTL -w net.ipv4.icmp_echo_ignore_broadcasts           // 拒绝响应ICMP广播
$CTL -w net.ipv4.tcp_syncookies=1              // 启用SYN Cookie机制
$CTL -w net.ipv4.tcp_syn_retries=3             // 最大SYN请求重试次数
$CTL -w net.ipv4.tcp_synack_retries=3          // 最大ACK确认重试次数
$CTL -w net.ipv4.tcp_fin_timeout=60            //TCP 连接等待超时
$CTL -w net.ipv4.tcp_max_syn_backlog=3200      //SYN 请求的队列长度


4. 设置具体的iptables规则

   iptables的nat表主要用在Linux网关服务器,一般的主机型防火墙很少用到nat表

    iptables的filter表主要用来过滤各种数据包,无论是Linux网关还是一般的Linux服务器都可能用的。主机型的防火墙主要使用INPUT、OUTPUT链,而对于网络型防火墙主要使用FORWARD链

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$IPT -t filter -X           // 删除各表中自定义的链
$IPT -t nat -X             
 
$IPT -t filter -F           // 清空各表中已有的规则
$IPT -t nat -F
 
$IPT -P INPUT DROP          // 设置规则链的默认策略
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT
 
$IPT -t nat -A POSTROUTING -s $LAN_NET -o $INET_IF -j SNAT --to- source  $INET_IP     //SNAT 策略,局域网共享上网
$IPT -t nat -A PREROUTING -i $INET_IF -d $INET_IP -p tcp --dport 80 -j DNAT --to-destination $LAN_WWW_IP    //DNAT 策略,发布内部Web服务器
 
$IPT -A FORWARD -s $LAN_NET -o $INET_IF -p tcp --dport 80 -j ACCEPT        // 允许内网与Internet中DNS、FTP、Web服务通信
$IPT -A FORWARD -s $LAN_NET -o $INET_IF -p tcp --dport 20:21 -j ACCEPT
$IPT -A FORWARD -s $LAN_NET -o $INET_IF -p udp --dport 53 -j ACCEPT


5. 执行脚本

    在实际应用中,不要生硬的照搬他人脚本内容,应根据情况进行针对型的设计,并做好整天规划,避免产生通信故障

1
2
3
4
5
[root@localhost ~] # chmod +x /opt/iptables.sh     //添加执行权限
[root@localhost ~] # /opt/iptables.sh              //执行脚本文件
 
[root@localhost ~] # vim /etc/rc.local             //设置为开机自动执行
/opt/iptables .sh

    对于大多数应用服务器,防火墙只针对本机进行防护,因此filter表中的INPUT、OUTPUT链用到的最多,特别是前者



案例:某公司的Web服务器采用RHEL6操作系统,为了加强网络访问的安全性,要求管理员熟悉iptables防火墙规则的编写,以便制定有效、可行的主机防护策略

需求描述:

(1)调整TCP相关参数,提高抵抗DoS攻击的能力

(2)只允许访问本机的Web服务,禁止其他任何形式的入站访问数据

(3)允许响应本机访问请求的数据包

实验步骤:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[root@localhost ~] # vim /opt/iptables_web.sh
#!/bin/bash
# 1. 定义基本变量
IPT= "/sbin/iptables"                                                    
CTL= "/sbin/sysctl"
# 2. 调整/proc参数
$CTL -w net.ipv4.tcp_syncookies=1             
$CTL -w net.ipv4.tcp_syn_retries=3         
$CTL -w net.ipv4.tcp_synack_retries=3        
$CTL -w net.ipv4.tcp_fin_timeout=60           
$CTL -w net.ipv4.tcp_max_syn_backlog=3200     
# 3. 删除自定义的链、清空已有规则
$IPT -t filter -X          
$IPT -t nat -X             
$IPT -t mangle -X
$IPT -t raw -X
$IPT -t filter -F         
$IPT -t nat -F
$IPT -t mangle -F
$IPT -t raw -F
# 4. 定义默认策略
$IPT -P INPUT DROP         
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT
# 5. 设置filter表中的规则
$IPT -A INPUT -s $LAN_NET -o $INET_IF -p tcp --dport 80 -j ACCEPT
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT










本文转自 杨书凡 51CTO博客,原文链接:http://blog.51cto.com/yangshufan/2058232,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
机器学习/深度学习 人工智能 算法
阿里云视频云以 360° 实时回放技术支撑 NBA 2025 中国赛 —— AI 开启“智能观赛”新体验
NBA中国与阿里云达成合作,首发360°实时回放技术,融合AI视觉引擎,实现多视角、低延时、沉浸式观赛新体验,重新定义体育赛事观看方式。
522 0
阿里云视频云以 360° 实时回放技术支撑 NBA 2025 中国赛 —— AI 开启“智能观赛”新体验
|
边缘计算 人工智能 运维
如何构建基于数字孪生的智慧全息路口
全息路口是基于数字孪生技术,将城市道路上的全要素进行数字化还原,进而为交通治理提供一体化解决措施,是为交通精细化治理而生的一款产品。
1865 0
如何构建基于数字孪生的智慧全息路口
|
9月前
|
Java Linux 网络安全
基于云服务器的数仓搭建-服务器配置
本文介绍了购置并配置三台云服务器的详细步骤。使用FinalShell连接服务器,并安装了必要的工具如epel-release、net-tools和vim。关闭防火墙后,在/opt目录下创建module和software文件夹,卸载默认JDK并修改主机名。添加环境变量路径/home/alpfree/bin,编写集群分发脚本xsync实现文件同步,配置无密登录,安装并分发JDK。参考资料来自海波老师的电商数仓课程。
|
9月前
|
存储 缓存 安全
Java 字符串详解
本文介绍了 Java 中的三种字符串类型:String、StringBuffer 和 StringBuilder,详细讲解了它们的区别与使用场景。String 是不可变的字符串常量,线程安全但操作效率较低;StringBuffer 是可变的字符串缓冲区,线程安全但性能稍逊;StringBuilder 同样是可变的字符串缓冲区,但非线程安全,性能更高。文章还列举了三者的常用方法,并总结了它们在不同环境下的适用情况及执行速度对比。
219 17
|
11月前
|
人工智能 搜索推荐 算法
《鸿蒙Next应用商店:人工智能开启智能推荐与运营新时代》
鸿蒙Next系统融合人工智能技术,为操作系统带来全新变革。通过精准的用户画像构建、个性化推荐、智能搜索优化及高效应用运营管理,全面提升用户体验与开发者支持。系统严格保护用户隐私,确保数据安全。这一创新实践不仅满足了用户的多样化需求,还推动了鸿蒙生态的繁荣发展,预示着未来智能化应用商店的巨大潜力。
509 13
|
NoSQL 安全 Redis
AWS迁移教程,Redis迁移到Elasticache
AWS迁移教程,Redis迁移到Elasticache
|
监控 前端开发 Java
你知道Zabbix吗?源码分析Zabbix启动过程
你知道Zabbix吗?源码分析Zabbix启动过程
305 0
|
监控 数据管理 计算机视觉
电脑监控软件中的Icon模式匹配
**Icon模式匹配**是电脑监控软件的关键功能,用于识别界面元素。基本原理是通过图像处理比对预定义图标。示例代码展示了一个Python应用,使用OpenCV库进行模板匹配,找到屏幕上的特定图标并标记其位置。监控软件借此可自动化识别,如浏览器图标,并自动将数据提交至网站,提升数据收集效率和准确性。
236 2
|
存储 监控 并行计算
线程操纵术之更优雅的并行策略
本文详细介绍了并行编程以及一些并行问题案例中的真实业务场景。
112925 2
|
存储 自然语言处理 关系型数据库
Elasticsearch创建一个索引怎么也这么复杂
Elasticsearch创建一个索引怎么也这么复杂
253 0