轻轻的来-iptables详解

  • A+
所属分类:安全闲碎

点击蓝字

轻轻的来-iptables详解

关注我们

    本文讲解关于iptables的知识,希望可以在大家闲暇的时候可以学到一些小姿势,说不定某年某月某一天某一个时间你就恍然大明白用到了。

一、简介

netfilter/iptables(简称 iptables)组成 Linux 平台下的包过滤防火墙。

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

iptables 组件是一种工具,也称为用户空间,它使插入、修改和除去信息包过滤表中的规则变得容易。

netfilter 组件也称为内核空间,是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。

安装 iptables

yum -y install iptables iptables-services

重启:systemctl restart iptables 保存:service iptables save

二、常用参数

我们知道iptables是按照规则来办事的,我们就来说说规则(rules),规则其实就是网络管理员预定义的条件,规则一般的定义为”如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作就是添加、修改和删除这些规则。

iptables + -t 表名 + 规则/链管理参数 + 匹配参数 + 动作类型参数

#  选择表-t    #  对指定表进行操作(必须是 raw、nat、filter、mangle 中的一个。如没有指定则默认为 filter表)
# 规则管理-A # 在指定规则链的末尾加入新规则-I # 在指定规则链的头部加入新规则(默认在第一行添加)-D # 删除指定链中的一条规则(可按规则序号和内容删除)-R # 修改、替换指定链中的某一条规则(可按照规则序号和内容替换)
# 链管理-P # 设置指定链默认策略 -N # 新建一条用户自己定义的规则链-X # 删除指定表中用户自定义的规则链-E # 重命名用户定义的链(不改变链本身)-Z # 将所有表的所有链的字节和数据包计数器清零
# 规则链INPUT # 处理入站的数据包OUTPUT # 处理出站的数据包FORWARD # 处理转发的数据包PREROUTING # 处理入站的路由规则POSTROUTING # 处理出站的路由规则
# 匹配(加感叹号 “!“表示这个目标除外(加感叹号后需加空格后在加匹配项))-s # 匹配来源地址 IP/MASK-d # 匹配目标地址-i # 网卡名称(匹配从这块网卡流入的数据)-o # 网卡名称(匹配从这块网卡流出的数据)-m # 使用扩展模块-p # 匹配协议(如:tcp、udp、icmp) tcp # 扩展选项:--source-port (扩展选项可用 iptables -p tcp -h 查看) udp # 扩展选项:--source-port (扩展选项可用 iptables -p icmp -h 查看) icmp # 可用扩展:--icmp-type (可用扩展可用 iptables -p icmp -h 查看) --dport 80 # 匹配目标端口 80 --sport 81 # 匹配来源端口 81
# 指定动作类型-j # 指定动作类型 动作类型: ACCEPT # 允许数据包通过 REJECT # 拒绝数据包通过(必要时会发送响应信息) DROP # 直接丢弃(不给出任何回应) QUEUE # 中断过滤程序,将封包放入队列,交由其它程序处理 RETURN # 停止当前链中的后续规则,并返回到调用链(the calling chain)中 REDIRECT # 在本机上做端口映射 DNAT # 改变数据包的目的地址 SNAT # 改变数据包的源地址 MASQUERADE # SNAT 的一种特殊形式,适用于动态、临时会变的 IP 上(只能用户 nat 表的 POSTROUTING 链) LOG # 在 /var/log/messages 文件中记录日志信息,然后在将数据包传递给下一条规则
# 查看/清空 规则-L # 列出指定链中所有的规则-n # IP地址和端口会一数字的形式打印-v # 详细输出-F # 清空规则链

三、扩展模块

使用方法:iptables + -m + 扩展模块名 可用扩展选项可用:iptables + -m + 扩展名 + -h 查看

limit(速率限制)

#  每分钟允许通过 5 个 icmp 包(默认为 3/小时,秒:/sec  分钟:/minute   小时:/hour  天:/day)iptables -A INPUT -p icmp -m limit --limit 5/minute -j ACCEPT#  每分钟允许通过 5 个 icmp 包,最多不超过 10 个iptables -A INPUT -p icmp -m limit --limit 5/minute --limit-burst 10 -j ACCEPT

multiport( 多端口匹配)

#  匹配 22,端口(最多可指定15个端口)iptables -A INPUT -p tcp -m multiport --dport 22,80 -j ACCEPT

iprange(匹配指定范围内的地址)

#  匹配指定范围内的地址iptables -A INPUT -p tcp -m iprange --src-range 192.168.1.0-192.168.1.111 --dport 22 -j ACCEPT

string(字符串匹配)

#  当服务端返回数据报文检查到有关键字 “test" 时,则丢弃该报文(能够检测到报文应用层中的字符串  注:该条规则需添加到 OUTPUT 链)iptables -A OUTPUT -p tcp --dport 80 -m string --algo kmp --string "test" -j DROP

connlimit(连接数限制)

#  限制同一 IP 最多同时 10 个 http 连接iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 10 -j REJECT#  限制每组 C 类 IP 最多同时 10 个 http 连接iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 10 --connlimit-mask 24 -j DROP#  限制指定网段的 IP 最多同时 10 个 http 连接iptables -A INPUT -s 192.168.1.0/24 -p tcp --syn --dport 80 -m connlimit --connlimit-above 10 -j REJECT

recent(时间限制)

--name        #  设置列表名称--resource    #  源地址--redest    #  目的地址--seconds    #  指定时间内(单位:秒)--hitcount    #  匹配次数--set        #  将地址添加进列表,并更新信息(包含地址加入的时间戳)--rcheck    #  匹配列表中的源地址(以第一个匹配计算时间)--update    #  类似 rcheck(以最后一个匹配计算时间)--remove    #  在列表里删除相应地址(后面接列表名称及地址)
# 将访问的主机记录到 test 列表,并放行iptables -A INPUT -p tcp --dport 80 --syn -m recent --name test --set -j ACCEPT# 如访问的主机在 test 列表有记录则限制 80 端口 60 秒 内每个 IP 只能发起 20 个新的连接,超过则记录日志(日志前缀为 DDOS:)iptables -A INPUT -p tcp --dport 80 --syn -m recent --name test --rcheck --seconds 60 --hitcount 20 -j LOG --log-prefix 'DDOS:' --log-ip-options# 如访问的主机在 test 列表有记录则限制 80 端口 60 秒 内每个 IP 只能发起 20 个新的连接,超过则丢包iptables -A INPUT -p tcp --dport 80 --syn -m recent --name test --rcheck --seconds 60 --hitcount 20 -j DROP

state(状态检查)

NEW:新建立一个会话ESTABLISHED:已建立的连接RELATED:有关联关系的连接INVALID:无法识别的连接#  放行 ssh 的首次连接状态iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT#  放行有关联的连接跟已建立的连接iptables -A INPUT -m state --state  RELATED,ESTABLISHED -j ACCEPT

四、规则表和规则链

规则表(tables)

规则表提供特定的功能(内置了4个表),类似用户组,每个组都有不同的功能,并且都有对应的用户(规则链)

filter    #  负责过滤功能(内核模块:iptables_filter)nat     #  负责网络地址转换功能(内核模块:iptable_nat)mangle    #  拆解、修改、封装报文(内核模块;iptable_mangle)raw     #  决定数据包是否被状态跟踪机制处理内核(内核模块:iptable_raw)

规则表优先顺序(从左往右):raw <--- mangle <--- nat <--- filter

规则表对应的规则链:

raw 表:PREOUTING、OUTPUTmangle 表:PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTINGnat 表:PREROUTING、INPUT、OUTPUT、POSTROUTINGfilter 表:INTPUT、FORWARD、OUTPUT

轻轻的来-iptables详解


规则链(chains)

规则链是规则的集合。对特定的数据包设置相应的规则(读取规则链时是按照从上往下的顺序)

INPUT        #  处理入站的数据包OUTPUT        #  处理出站的数据包FORWARD     #  处理转发的数据包PREROUTING    #  数据包进入路由表前POSTROUTING    #  数据包进入路由表后

入站顺序(从左往右):PREROUTING <--- INPUT 出站顺序(从左往右):OUTPUT <--- POSTROUTING 转发顺序(从左往右):PREROUTING <--- FORWARD <--- POSTROUTING

五、实例

查看/删除 规则

iptables -L             #  列出所有规则iptables -L -nv            #  查看详细信息(IP 跟 端口会以数字形式显示)iptables -t nat -L      #  列出 nat 表中的所有规则iptables -t nat -L -nv  #  查看详细信息(IP 跟 端口会以数字形式显示)iptables -F             #  清除所有规则(如不指定表,则默认表为 filter)iptables -t nat -D INPUT 1  #  删除 nat 表 INPUT 链下的第一条规则

在指定表中新建规则(如不指定,则默认为 filter 表)

#  在 nat 表中开放 80 端口iptables -t nat -A INPUT -p tcp --dport 80 -j ACCEPT

设置白名单

#  允许 192.168.1.0/24 网段的主机访问iptables -A INPUT -p all -s 192.168.1.0/24 -j ACCEPT
# 允许 192.168.2.0/24 网段的主机访问本机的 80 端口iptables -A INPUT -p all -s 192.168.2.0/24 --dport 80 -j ACCEPT

指定范围

#  指定 IP 范围iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE#  指定端口范围iptables -t nat -A INPUT -p tcp --dport 90:100 -j ACCEPT

端口映射

#  当别的主机访问本地 80 端口时会被重定向到 8080 端口iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

禁止

#  禁 Pingiptables -A INPUT -p icmp -j DROP#  禁 Pingiptables -I INPUT -p icmp --icmp-type Echo-Request -j DROP#  禁止 MAC 地址为 00:11:22:33:44:55 的主机访问iptables -A INPUT -m mac --mac-source 00:11:22:33:44:55 -j DROP#  禁止转发 MAC 地址为 00:11:22:33:44:55 的主机的数据iptables -A FORWARD -m mac --mac-source 00:11:22:33:44:55 -j DROP

扫码关注我们

轻轻的来-iptables详解
轻轻的来-iptables详解

悬剑武器库

欢迎关注

来稿&加群 yyds~

本文始发于微信公众号(湘雪尘奕):轻轻的来-iptables详解

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: