查看原文
其他

iptables 防火墙(三)- 规则的导出 / 导入、使用防火墙脚本程序 |(附体系思维导图)

JackTian 杰哥的IT之旅 2022-06-06

点击上方“杰哥的IT之旅”,选择“设为星标”

干货、福利第一时间送达!



今天,公众号留言功能开通啦!| 文末乔迁福利

1、防火墙规则的备份及还原

防火墙规则的批量备份还原两个命令,分别是:iptables-saveiptables-restore,用来保存和恢复。

1.1 iptables-save 命令

iptables-save 命令:用来批量导出 Linux 防火墙规则。

直接执行iptables-save 命令时,将显示出当前启用的所有规则。

# iptables-save
# Generated by iptables-save v1.4.7 on Mon Oct  7 20:09:30 2019
*nat
:PREROUTING ACCEPT [134:12724]
:POSTROUTING ACCEPT [10:645]
:OUTPUT ACCEPT [10:645]
-A PREROUTING -d 192.168.1.4/32 -i eth2 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.3.112 
COMMIT
# Completed on Mon Oct  7 20:09:30 2019
# Generated by iptables-save v1.4.7 on Mon Oct  7 20:09:30 2019
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [257:22057]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
-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 Mon Oct  7 20:09:30 2019

上述输出的各项含义:

  • # 号开头的内容表示注释;

  • *表名:表示所在的表;例如:*nat

  • :链名 默认策略:表示相应的链及默认策略,具体规则部分省略了iptables命令名;

  • COMMIT:表示提交前面的规则设置;

iptables-save 命令:只是把规则内容输出到屏幕上,当需要保存为固定的文件时,结合重定向输出的操作来完成备份。

将当前已设置的所有防火墙规则备份为iptables_beifen.txt文件,可执行如下命令即可,备份完成后,可查看所备份到的路径下是否存在该文件;

# iptables-save > /root/iptables_beifen.txt
# ll | grep iptables_beifen.txt 
-rw-r--r--. 1 root root   782 10月  7 20:26 iptables_beifen.txt

1.2 iptables-restore 命令

iptables-restore 命令:用来批量导入 Linux 防火墙规则,与iptables-save 命令相结合重定向输入来指定备份文件的位置。

# iptables-restore < /root/iptables_beifen.txt

2、使用 iptables 服务

iptables 服务使用的规则文件位于 /etc/sysconfig/iptables 文件中。

通过 iptables 系统服务,可快速启用、清空防火墙规则。

2.1 自动启用防火墙规则

使用iptables-save备份为默认的规则配置文件 /etc/sysconfig/iptables 然后可以通过 iptables 服务来调用。

将保存当前的防火墙规则,并设置在每次开机后根据已保存的规则内容自动进行重建。

# iptables-save > /etc/sysconfig/iptables
# chkconfig --level 2345 iptables on
# chkconfig --list iptables
iptables           0:关闭    1:关闭    2:启用    3:启用    4:启用    5:启用    6:关闭

启用 /etc/sysconfig/iptables 文件中的规则设置时,只需要启动 iptables 服务即可。

# service iptables start

2.2 清空所有防火墙规则

调试各种防火墙规则的过程中,为了排除其他规则的干扰,需清空某些表的规则。

需要依次清空所有表的规则时,停用 iptables 服务是最好的办法。

# service iptables stop
iptables:将链设置为政策 ACCEPT:nat filter                [确定]
iptables:清除防火墙规则:                                 [确定]
iptables:正在卸载模块:                                   [确定]
# service iptables status
iptables:未运行防火墙。

3、防火墙脚本的组成

有同学可能会有疑问,防火墙还有脚本应用?具体都有哪些内容组成呢?等等;

防火墙脚本的优势:便于使用 Shell 变量、程序控制逻辑、作为独立的文件在需要重用、移植使用时更方便;

3.1 定义基本变量

防火墙的网卡、IP 地址、局域网段、iptables 命令的路径等定义为变量,便于对脚本程序的维护和移植使用。

规则多时,一旦网络环境出现问题,只需对变量值进行修改就可以使用了。

# vi /opt/myiptables.sh
#!/bin/bash
#### 3.1 定义基本变量
INET_IF="eth1"                     # 外网接口
INET_IP="192.168.3.111"            # 外网接口地址
LAN_IF="eth2"                      # 内网接口
LAN_IP="192.168.1.4"               # 内网接口地址
LAN_NET="192.168.1.0/24"           # 内网网段
LAN_WWW_IP="192.168.3.112"         # 网站服务器的内部地址
IPT="/sbin/iptables"               # iptables 命令路径
MOD="/sbin/modprobe"               # modprobe 命令路径
CTL="/sbin/sysctl"                 # sysctl 命令路径

设置好变量后,就可以直接引用了,添加必要的注释以外,变量名称最好使用一定含义的字符串。

3.2 加载内核模块

iptables 命令的模块都可以根据需要动态载入内核,个别需要手动加载。

需启用的规则数量多时,可提高规则设置的效率,保持防火墙的稳定性,并将各模块提前加载到内核中。

#### 3.2 加载必要的内核模块
$MOD ip_tables                      # iptables 基本模块
$MOD ip_conntrack                   # 连接跟踪模块
$MOD ipt_REJECT                     # 拒绝操作模块
$MOD ipt_LOG                        # 日志记录模块
$MOD ipt_iprange                    # 支持 IP 范围匹配
$MOD xt_state                       # 支持状态匹配
$MOD xt_multiport                   # 支持多端口匹配
$MOD xt_mac                         # 支持 MAC 地址匹配
$MOD ip_nat_ftp                     # 支持 FTP 地址转换
$MOD ip_conntrack_ftp               # 支持 FTP 连接跟踪

3.3 调整 /proc 参数

/proc 是 Linux 或 UNIX 系统中的一种伪文件系统机制,提供访问内核运行结构、改变内核设置的实时数据。

/proc 中的数据存放在内存而不是硬盘上。

/proc/sys 存放着与系统相关的一些可控参数,可用来改变内核的行为,作为 Linux 内核调优的实时入口。

使用echo、sysctl 命令可以修改相关参数,也可以写到/etc/sysctl.conf文件中,(执行 sysctl -p 后生效)其主要包括是否打开 IP 转发、是否响应 ICMP 广播、设置好 TCP 响应超时等;

以下为最常见的 /proc 参数调整

icmp 相关参数:可使本机忽略其他主机的 ping 测试;

TCP 相关参数:可适当提高本机抵抗 DOS 攻击的能力;

#### 3.3 Linux 内核控制及调优
$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=1    # 拒绝响应 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 请求的队列长度

3.4 设置具体的 iptables 规则

清理已有的规则

避免已有的防火墙规则造成干扰,需先进行清理,删除所有表中用户自定义的链,清空所有链内的规则。

#### 3.4 具体的防火墙规则
$IPT -t filter -X                                 # 删除各表中自定义的链
$IPT -t nat -X
$IPT -t filter -F                                 # 清空各表中已有的规则
$IPT -t nat -F

设置规则链的默认策略

实际环境中,防火墙过滤规则需采取默认拒绝的策略,可提高安全性。

学习过程中,还是建议采取默认允许的策略,需将默认策略中的DROP改为ACCEPT

$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT

设置 nat 表中的各种规则

nat 表主要用在 Linux 网关服务器中,需根据实际情况编写相应的SNATDNAT规则。

$IPT -t nat -A POSTROUTING -s $LAN_NET -o $INET_IF -j SNAT --to-source $INET_IP
$IPT -t nat -A PREROUTING -i $INET_IF -d $INET_IP -p tcp --dport 80 -j DNAT --to-destination $LAN_WWW_IP

设置 filter 表中的各种规则

filter 表主要用来过滤数据包。

主机型防火墙主要使用INPUTOUTPUT链。

网络型防火墙主要使用FORWARD链。

默认拒绝的情况下,要实现共享上网,除了设置SNAT策略外,还需放行内网 PC 与 Internet 中的 DNS、HTTPD 等相关服务通信;

注意:在实际工作中,建议大家还是根据实际网络情况进行设置相应的规则,并在测试环境中进行测试,确保规则无误,避免导致网络通信出现故障。

$IPT -A FOEWARD -s $LAN_NET -o $INET_IF -p udp 53 -j ACCEPT
$IPT -A FOEWARD -s $LAN_NET -o $INET_IF -p udp 80 -j ACCEPT
$IPT -A FOEWARD -d $LAN_NET -i $INET_IF -m state ESTABLISHED,RELATED -j ACCEPT

添加执行权限

# chmod +x /opt/myiptables.sh 

执行/opt/myiptables.sh脚本文件

# /opt/myiptables.sh 
net.ipv4.ip_forward = 1
net.ipv4.ip_default_ttl = 128
net.ipv4.icmp_echo_ignore_all = 1
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_syn_retries = 3
net.ipv4.tcp_synack_retries = 3
net.ipv4.tcp_fin_timeout = 60
net.ipv4.tcp_max_syn_backlog = 3200

查看防火墙规则

# iptables -nL FORWARD

/opt/myiptables.sh脚本文件设置为开机自动执行

# vi /etc/rc.local
/opt/myiptables.sh



END


本公众号全部文章已整理成一个目录,请在本公众号后台回复「m」获取!


推荐阅读:

iptables 防火墙(一)- 四表/五链、数据包匹配流程、编写 iptables 规则

iptables 防火墙(二)- SNAT / DNAT 策略及应用 |(附体系思维导图)

你不得不知的 top 命令技巧

详解 Linux 环境下进程管理工具 Supervisor

这款神奇的云端电脑可让你少装十几个软件

架构篇 | LAMP 架构应用案例 - 部署 PHPMyAdmin 系统(二)

架构篇 | 带你轻松玩转 LAMP 网站架构平台(一)



给个[在看],是对杰哥最大的支持!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存