iptables的备份及脚本构成

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

iptables的备份及还原

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

1. iptables-save命令

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

[[email protected] ~]# 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

[[email protected] ~]# iptables-save > /opt/iptables.txt                //备份所有表的规则
[[email protected] ~]# iptables-save > /etc/sysconfig/iptables          //每次开机后,根据保存的规则内容进行重建

2. iptables-restore命令

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

[[email protected] ~]# iptables-restore /opt/iptables.txt               //从备份文件中恢复规则

使用防火墙脚本

1. 定义基本变量

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

[[email protected] ~]# 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. 加载内核模块

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

$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参数

$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链

$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. 执行脚本

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

[[email protected] ~]# chmod +x /opt/iptables.sh     //添加执行权限
[[email protected] ~]# /opt/iptables.sh              //执行脚本文件

[[email protected] ~]# vim /etc/rc.local             //设置为开机自动执行
/opt/iptables.sh

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

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

需求描述:

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

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

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

实验步骤:

[[email protected] ~]# 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

原文地址:http://blog.51cto.com/yangshufan/2058232

时间: 2024-08-28 01:13:35

iptables的备份及脚本构成的相关文章

Rehat一键安装mysql脚本和备份数据库脚本

Rehat一键安装mysql脚本 ##说明:适用,Rehat 5 6 7 1.运行状态,运行成功输出mysql临时密码 2.代码如下 #!/bin/bash #获取系统信息 sudo cat /etc/issue>myfile aa=sudo grep '5.' myfile bb=sudo grep '6.' myfile cc=sudo grep '7.' myfile echo $aa echo "It is a test" > myfile #获取系统信息 sudo

Debian下自动备份文件并上传到远程FTP服务器且删除指定日期前的备份Shell脚本

说明:  1.备份目录/home/osyunwei下面所有的文件到/home/osyunweibak里面,并且保存为osyunwei20120701.tar.gz的压缩文件格式(2012_07_01是指备份执行时当天的日期),最后只保留最近7天的备份 2.上传/home/osyunweibak里面的备份文件到远程FTP服务器上,并且只保留最近7天的备份. 3.FTP服务器:192.168.21.139 端口:21 账号:osyunwei 密码:123456 osyunweibak为备份文件存放目

MySQL备份数据库脚本

Windows @echo offmysqldump --add-drop-database --add-drop-table -u root -p123456 dbname > d:\db_backup\%date:~0,4%-%date:~5,2%-%date:~8,2%_%time:~0,2%-%time:~3,2%-%time:~6,2%_dbname.sql Linux #!/bin/shcd /usr/binDATE=`date +%Y-%m-%d`# 备份dbname数据库/usr

Linux系统备份还原脚本

\ #!/bin/sh #备份linux系统. #命令如:sh 当前脚本.sh /dev/sdax 备份文件名 #参数1:备份的盘,备份前先umount.如:/dev/sda1 #参数2:备份保存的文件名. if [ $# -ne 2 ]; then echo "请传入两个参数." exit 0 fi #当前日期,用于建立临时文件夹和备份文件. datename=`date +%Y%m%d_%H%M%S` #临时挂载的文件夹名称 tmpdir="/tmp/dir${daten

10.19-10.22 iptables规则备份和恢10.20 firewalld的9个zone

10.19 iptables规则备份和恢复 10.20 firewalld的9个zone 10.21 firewalld关于zone的操作 10.22 firewalld关于service的操作 # 10.19 iptables 规则备份和恢复 - 保存和备份iptables 的规则 - service iptables save 会把规则保存到 /etc/sysconfig/iptables - 把iptables规则备份到my.ipt 文件中 - iptables-save > my.ipt

Linux 平台下 RMAN 全备 和 增量备份 shell 脚本

转:http://blog.csdn.net/tianlesoftware/article/details/5740630 全备脚本 以 nocatalog 模式为例: Shell 脚本: ######################################################################## ##   hot_database_backup.sh      ## ##   created by Tianlesoftware   ## ##        

Oracle 11g 数据库自动备份执行脚本

@echo offsetlocal enabledelayedexpansiontitle %date% %time:~,8% by LiaoNing Sunray Software Technology ::XXX数据库备份::定义数据库SIDset SID=orcl ::定义用户名数组(各用户间用空格分隔 例如:user1 user2 user3)set userArr=aaaset pswdArr=bbb ::指定删除天数set daysAgo=3 ::指定备份路径set filePath

《使用shell位置变量进行目录文件的备份小脚本》

今天才发现原来位置变量也可以玩的这么爽!! 这是使用位置变量进行文件目录备份:#!/bin/bashDATE=`date +%F`  //日期以年月日输出tar czf $1.$DATE.tar.gz $1 > /dev/null 2>> /opt/$1.bak.log //打包$1变量包,将错误追加到日志中,tar打包会保留原目录,比较好if [ $? -eq 0 ]   返回值为0代表打包ok,不为0,则不okthen   #包 时间 打包ok 追加到日志        echo &

备份相关脚本

原文:备份相关脚本 --查看一周内备份信息: SELECT CONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS Server, msdb.dbo.backupset.database_name, msdb.dbo.backupset.backup_start_date, msdb.dbo.backupset.backup_finish_date, msdb.dbo.backupset.expiration_date, CASE msdb..ba