iptables案例详解

通过阅读朱双印的个人日志,对iptables的一些小结。

前言

iptables其实并不是真正的防火墙,我们可以把它理解成一个客户端代理,用户通过iptables这个代理,将用户的安全设定执行到对应的“安全框架”中,这个“安全框架”才是真正的防火墙,这个框架的名字叫netfilter。

netfilter才是防火墙真正的安全框架(framework),netfilter位于内核空间。
iptables其实是一个命令行工具,位于用户空间,我们用这个工作操作真正的框架。

netfilter/iptables(下文简称iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以替代昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。

iptables基础

在这里插入图片描述

链的概念
当客户端发送报文至服务器时,需要经过五个链,只有匹配了链的规则,才会进行相应的动作。这些链分别是:
PREROUTING:路由前
FORWARD:转发
POSTROUTING:路由后
INPUT:进入用户空间前
OUTPUT:离开用户空间后

表的概念
iptables定义了四张表,每张表都对应了不同的功能,如下所示:
filter表:负责过滤功能,防火墙;内核模块:iptables_filter
nat表:network address translation,网络地址转换功能;内核模式:iptables_nat
mangle表:拆解报文,做出修改,并重新封装的功能;iptables_mangle
raw表:关闭nat表上启用的连接追踪机制;iptables_raw

链与表的关系
链存在于表中,但有些表中注定不会存在某些链。比如:A关卡只负责打击陆地敌人,没有防空能力;B关卡只负责打击空中敌人,没有防御步兵的能力;C关卡可能比较屌,既能防空还能打击陆地。

下面我们来看看每个链都存在于哪些表中:

PREROUTING可以存在于:raw表,mangle表,nat表
INPUT可以存在于:mangle表,filter表,(centos7中还有nat表,centos6中没有)
FORWARD可以存在于:mangle表,filter表
OUTPUT可以存在于:raw表,mangle表,nat表,filer表
POSTROUTING可以存在于:mangle表,nat表

根据匹配当前链的所有规则,表的优先级顺序为:raw -> mangle -> nat -> filter

规则的概念
规则是根据指定的匹配条件来尝试匹配每个流经此处的报文,一旦匹配成功,则由规则后面指定的处理动作处理。

匹配条件
匹配条件分为基本匹配条件和扩展条件
基本匹配条件:源地址Source IP,目标Destination IP
扩展匹配条件:源端口Source Port,目标端口Destination Port…

处理动作
处理动作在iptables中被称为target(动作),动作也分为基本动作和扩展动作。
ACCEPT:允许数据包通过。
DROP:直接丢弃数据包,不给予回应。
REJECT:拒绝数据包通过。
SNAT:源地址转换。
MASQUERADE:是SNAT的一种特殊形式,适用于动态的、临时会变的ip上。
DNAT:目标地址转换。
REDIRECT:在本机做端口映射。
LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则。

查询iptables规则

  1. iptables -t filter -nvL --line-numbers
    命令说明:查看filter表的所有规则
    参数说明:
    -t 指定要操作的表,默认表为filter
    -L 查看表的规则
    -v 展示更多的信息
    -n 表示不对IP地址进行名称反解析
    –line-numbers 显示序号

  2. iptables -t filter -nvL INPUT
    命令说明:查看filter表INPUT链的所有规则

在这里插入图片描述
使用以上命令后,为我们展示了很多字段,那这些字段都是什么意思呢?
pkts:对应规则匹配到的报文个数。
bytes:对应匹配到的报文包的大小总和。
target:规则对应的target,往往表示规则对应的“动作”,即表示匹配成功后采取的措施。
prot:表示规则对应的协议,是否只针对某些协议应用次规则。
opt:表示规则对应的选项。
in:表示数据表由那个接口(网卡)流入。
out:表示数据表由那个接口(网卡)流出。
source:表示规则对应的源头地址,可以是一个IP,也可以是一个网段。
destination:表示规则对应的目标地址,可以是一个IP,也可以是一个网段。
在INPUT链后面的括号中包含了policy DROP 0 packets, 0 bytes三个部分。
policy:表示当前链的默认策略。
packets:表示当前链默认策略匹配到的包的数量。
bytes:表示当前链默认策略匹配到的所有包的大小总和。

iptables案例大全

iptables的增删改查
  1. iptables -t filter -I INPUT -s 192.168.1.2 -j ACCEPT
    命令说明:在filter表的INPUT链首部添加一条规则,允许通过源IP地址为192.168.1.2的数据包
    参数说明:
    -t 指定要操作的表,默认表为filter
    -I 在指定表的指定链的首部添加一条规则
    -s 指定数据包源IP地址
    -j 匹配成功后采取的动作

  2. iptables -t filter -A INPUT -s 192.168.1.2 -j DROP
    命令说明:在filter表的INPUT链尾部添加一条规则,丢弃源IP地址为192.168.1.2的数据包
    参数说明:
    -A 在指定表的指定链的尾部添加一条规则

  3. iptables -t filter -I INPUT 5 -s 192.168.1.2 -j REJECT
    命令说明:在filter表的INPUT链序号为5的位置插入一条规则,拒绝源IP地址为192.168.1.2的数据包

  4. iptables -t filter -P FORWARD ACCEPT
    命令说明:修改filter表FORWARD链的默认策略为ACCEPT
    参数说明:
    -P 修改链的默认策略

  5. iptables -t filter -D INPUT 3
    命令说明:删除filter表INPUT链的第3条规则
    参数说明:
    -D 删除规则

  6. iptables -t filter -F
    命令说明:删除filter表中的所有规则
    参数说明:
    -F 清除规则

  7. iptables -t filter -F INPUT
    命令说明:删除filter表中INPUT链的所有规则

  8. iptables -t filter -R INPUT 3 -s 192.168.1.2 -j ACCEPT
    命令说明:修改filter表INPUT链的第三条规则为,允许源IP地址为192.168.1.2的数据包通过
    -s 指定源IP地址

基本匹配条件的更多用法
  1. iptables -t filter -I INPUT -s 192.168.1.2,192.168.1.3 -j DROP
    命令说明:在filter表INPUT链首部添加一条规则,丢弃源IP地址为192.168.1.2和192.168.1.3的数据包

  2. iptables -t filter -I INPUT -s 192.168.1.0/24 -j DROP
    命令说明:在filter表INPUT链首部添加一条规则,丢弃源IP网段为192.168.1.0/24的数据包

  3. iptables -t filter -I INPUT -d 192.168.1.0/24 -j ACCEPT
    命令说明:在filter表INPUT链首部添加一条规则,允许通过目标IP网段为192.168.1.0/24的数据包
    参数说明:
    -d 指定目标IP地址

  4. iptables -t filter -I INPUT -p icmp -i eth0 -j DROP
    命令说明:在filter表INPUT链的首部添加一条规则,丢弃从网卡eth0进入的icmp协议类型的数据包
    参数说明:
    -p 用于匹配报文的协议类型
    -i 用于匹配报文是从哪个网卡流入本机的

  5. iptables -t filter -I OUTPUT -p icmp -o eth0 -j DROP
    命令说明:在filter表INPUT链的首部添加一条规则,丢弃从网卡eth0离开的icmp协议类型的数据包
    参数说明:
    -o 用于匹配报文是从哪个网卡离开本机的

扩展匹配条件
  1. iptables -t filter -I OUTPUT -d 192.168.1.2 -p tcp -m tcp --sport 22 -j REJECT
    命令说明:在filter表OUTPUT链首部插入一条规则,拒绝目标IP地址为192.168.1.2端口为22协议类型为tcp的数据包
    参数说明:
    -m 指定扩展模块
    –sport 扩展模块,指定源端口

  2. iptables -t filter -I INPUT -s 192.168.1.2 -p tcp -m tcp --dport 22:25 -j REJECT
    命令说明:在filter表INPUT链首部插入一条规则,拒绝目标IP地址为192.168.1.2端口为22~25协议类型为tcp的数据包
    参数说明:
    –dport 扩展模块,指定目标端口

multiport扩展模块
模块说明:
-m multiport 可以同时指定多个离散的端口

  1. iptables -t filter -I OUTPUT -d 192.168.1.2 -p udp -m multiport --sports 20,80:88 -j REJECT
    命令说明:在filter表OUTPUT链首部插入一条规则,拒绝目标地址为192.168.1.2端口为22、80~88协议类型为udp的数据包
    参数说明:
    –sports 指定离散的端口

iprange扩展模块
模块说明:
-m iprange 可以指定“一段连续的IP地址范围”

  1. iptables -t filter -I INPUT -m iprange --src-range 192.168.1.2-192.168.1.99 -j DROP
    命令说明:在filter表INPUT链首部插入一条规则,丢弃源IP在192.168.1.2-192.168.1.99范围内的数据包
    参数说明:
    –src-range 源IP地址范围

  2. iptables -t filter -I OUTPUT -m iprange --dst-range 192.168.1.2-192.168.1.99 -j DROP
    命令说明:在filter表OUTPUT链首部插入一条规则,丢弃目标IP在192.168.1.2-192.168.1.99范围内的数据包
    参数说明:
    –dst-range 目标IP地址范围

string扩展模块
模块说明:
-m string 可以指定匹配字符串

  1. iptables -t filter -I INPUT -p tcp --sport 80 -m string --algo bm --string “OOXX” -j REJECT
    命令说明:在filter表INPUT 链首部插入一条规则,拒绝源端口为80、报文中带OOXX的数据包
    参数说明:
    –algo 指定对应的匹配算法,可用算法为bm、kmp,为必选项
    –string 指定需要匹配的字符串

time扩展模块
模块说明:
-m time 根据时间段区匹配报文

  1. iptables -t filter -I OUTPUT -p tcp --dport 80 -m time --timestart 09:00:00 --timestart 19:00:00 -j REJECT
    命令说明:在filter表OUTPUT链首部插入一条规则,拒绝目标端口为80,访问时间在9:00~19:00之间的数据包
    参数说明:
    –timestart 用于指定时间范围的开始时间,不可取反
    –timetop 用于指定时间范围的结束时间,不可取反
    –weekdays 用于指定星期几,可取反
    –monthdays 用于指定几号,可取反
    –datestart 用于指定日期范围的开始日期,不可取反
    –datestop 用于指定日期范围的结束时间,不可取反

connlimit扩展模块
模块说明:
-m connlimit 可以限制每个IP地址同时链接到server端的链接数量,如果不指定IP,默认是每个客户端IP

  1. iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit -above 2 -j REJECT
    命令说明:在filter表INPUT 链首部插入一条规则,拒绝同个IP连接目标端口为22,链接数量超过2的数据包
    参数说明:
    –connlimit-above 单独使用此选项时,表示限制每个IP的链接数量
    –connlimit-mask 此选项不能单独使用,在使用–connlimit-above选项时,配合此选项,则可以针对“某类IP段内的一定数量的IP”进行连接数量的限制

limit扩展模块
模块说明:
-m limit connlimit模块是对链接数量进行限制的,limit模块是对“报文到达速率”进行限制的

  1. iptables -t filter -I INPUT -p icmp -m limit --limit-burst 3 --limit 10/minute -j ACCEPT
    iptables -t filter -A INPUT -p icmp -j REJECT
    命令说明:
    上面两条规则需配合使用,在filter表INPUT链首部插入一条规则,限制协议类型为icmp的数据包每分钟z最多放行10个包,就相当于每6秒钟最多放行一个包

udp扩展模块

  1. iptables -t filter -I INPUT -p udp -m udp --dport 137 -j ACCEPT
    命令说明:在filter表INPUT链首部插入一条规则,允许目标端口为137、协议类型为udp的数据包通过

icmp扩展模块

state扩展模块
模块说明:
-m state 在TCP/IPxiey协议簇中,UDP和ICMP是没有所谓的连接的,但是对于state模块来说,tcp报文、udp报文、icmp报文都是有连接状态的。state的几种连接状态:NEW、ESTABLISHED、RELATED、INVALID、UNTRACKED

  1. iptables -t filter -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    命令说明:在filter表INPUT链首部插入一条规则,允许state状态为ESTABLISHED,RELATED的数据包通过

防火墙配置

主机防火墙

主机防火墙:针对单个主机进行防护。

网络防火墙

网络防火墙:处在网络入口处,进行安全防护、路由转发等动作。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值