Linux系统中,iptables是一个强大的防火墙工具,用于管理网络流量、过滤数据包以及实现网络地址转换(NAT)。无论是保护服务器安全、限制访问,还是实现复杂的网络策略,iptables 都是不可或缺的工具。本文将主要介绍 iptables 的核心概念、常用命令以及实战案例,帮助你从掌握iptables技能。

1 iptables 简介

       iptables是Linux内核中Netfilter框架的用户空间工具,用于配置和管理网络数据包的过滤规则。它可以根据源IP、目标IP、端口、协议等条件对数据包进行处理,比如允许、拒绝或转发。

1.2 iptables核心功能

  • 数据包过滤:根据规则允许或拒绝数据包
  • 网络地址转换(NAT):实现 IP 地址和端口的转换
  • 数据包修改:修改数据包的头部信息(如 TTL、TOS)
  • 流量控制:限制特定流量的速率

1.3 iptables与Firewalld区别

  • iptables:是底层工具,直接操作Netfilter框架,适合高级用户
  • firewalld :是基于 iptables高级封装,提供更易用的动态管理功能

2 iptables核心概念

2.1 表(Tables)

iptables使用表来组织规则,每个表用于不同的功能:

  • filter 表:默认表,用于数据包过滤

  • nat 表:用于网络地址转换(NAT)

  • mangle 表:用于修改数据包头部信息

  • raw 表:用于配置数据包连接跟踪

2.2 链(Chains)

链是规则的集合,数据包会根据链中的规则依次匹配:

  • INPUT:处理进入本机的数据包

  • OUTPUT:处理从本机发出的数据包

  • FORWARD:处理经过本机转发的数据包

  • PREROUTING:用于NAT,数据包进入时修改目标地址

  • POSTROUTING:用于NAT,数据包发出时修改源地址

2.3 规则(Rules)

规则是具体的匹配条件和动作:

  • 匹配条件:源IP、目标IP、端口、协议等

  • 动作:ACCEPT(允许)、DROP(丢弃)、REJECT(拒绝并返回错误)

3 iptables安装

#安装iptables管理命令
yum -y install iptables-service

#加载防火墙的内核模块
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state
##modprobe可以指定载入的个别模块

#查看已经加载的模块
lsmod |egrep 'filter|nat|ipt'

#启动防火墙
service iptables start

#停止防火墙
service iptables stop

 4 iptables基本操作命令

4.1 iptables规则执行流程

4.2 查看规则

##查看iptables规则
iptables -L -n -v

##参数解释
-L:列出规则
-n:以数字形式显示IP和端口
-v:显示详细信息

 4.3 清空规则

#清除所有规则,不会处理默认的规则
iptables -F

#删除用户自定义的链
iptables -X

#链的计数器清零
iptables -Z

4.4 删除规则

##删除iptables规则
##先查看规则号码
iptables -nL --line-numbers

##删除指定链上的指定序号
iptables -D INPUT 1

##-D:删除指定链中的规则(1 表示规则编号)

 4.5 添加规则

##指定表(default:'filter')
iptables -t

##添加规则到指定链,默认添加到最后一行
iptables -A

##插入规则,默认插入到第一行
iptables -I

##删除链上规则
iptables -D

4.5 保存规则

##将当前规则保存到文件,重启后不会丢失
iptables-save > /etc/iptables

4.6 恢复规则

##从文件加载规则
iptables-restore < /etc/iptables

5 iptables案例

1.允许特定IP访问 SSH

iptables -A INPUT -p tcp --dport 22 -s 192.168.10.30 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

2.限制ICMP请求(Ping)

##禁止外部主机Ping本机
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

3. 配置端口转发

##将本机80端口的流量转发到192.168.10.32:8080
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.10.32:8080
iptables -t nat -A POSTROUTING -p tcp -d 192.168.10.32 --dport 8080 -j MASQUERADE

4. 防止 DDoS 攻击

##限制每分钟最多接受30个连接,突发连接数为100
iptables -A INPUT -p tcp --dport 80 -m limit --limit 30/minute --limit-burst 100 -j ACCEPT

5.放开指定地址段

##允许192.168.10.15-192.168.10.94地址访问22端口
-A INPUT -m iprange --src-range 192.168.10.15-192.168.10.94 -p tcp --dport 22 -j ACCEPT

6 iptables高级技巧

6.1  使用自定义链

##创建自定义链MY_CHAIN,并将其应用到INPUT链
iptables -N MY_CHAIN
iptables -A MY_CHAIN -s 192.168.10.0/24 -j ACCEPT
iptables -A INPUT -j MY_CHAIN

5.2 记录日志

##将SSH访问尝试记录到系统日志。
iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "SSH Attempt: "

5.3 连接跟踪

##允许已建立连接和相关的数据包通过
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

7 总结

  iptables是Linux系统中强大的防火墙工具,掌握其核心概念和常用命令,可以帮助你轻松应对各种网络安全需求。希望本文能为你提供一些指导,助你解决一些iptables相关的问题!

Logo

一站式 AI 云服务平台

更多推荐