写点什么

iptables 常用命令小清单

作者:琦彦
  • 2022 年 7 月 24 日
  • 本文字数:2939 字

    阅读完需:约 10 分钟

iptables 常用命令小清单


iptables 简介

iptables 是集成在 Linux 内核中的包过滤防火墙系统。使用 iptables 可以添加、删除具体的过滤规则,iptables 默认维护着 4 个表和 5 个链,所有的防火墙策略规则都被分别写入这些表与链中。


**“四表”**是指 iptables 的功能,默认的 iptable s 规则表有 filter 表(过滤规则表)、nat 表(地址转换规则表)、mangle(修改数据标记位规则表)、raw(跟踪数据表规则表):


  1. filter 表:控制数据包是否允许进出及转发,可以控制的链路有 INPUT、FORWARD 和 OUTPUT。

  2. nat 表:控制数据包中地址转换,可以控制的链路有 PREROUTING、INPUT、OUTPUT 和 POSTROUTING。

  3. mangle:修改数据包中的原数据,可以控制的链路有 PREROUTING、INPUT、OUTPUT、FORWARD 和 POSTROUTING。

  4. raw:控制 nat 表中连接追踪机制的启用状况,可以控制的链路有 PREROUTING、OUTPUT。


**“五链”**是指内核中控制网络的 NetFilter 定义的 5 个规则链。每个规则表中包含多个数据链:


  1. INPUT(入站数据过滤)、

  2. OUTPUT(出站数据过滤)、

  3. FORWARD(转发数据过滤)、

  4. PREROUTING(路由前过滤)

  5. 和 POSTROUTING(路由后过滤),


防火墙规则需要写入到这些具体的数据链中。


Linux 防火墙的过滤框架,如图 1 所示。



可以看出,


如果是外部主机发送数据包给防火墙本机,数据将会经过 PREROUTING 链与 INPUT 链;


如果是防火墙本机发送数据包到外部主机,数据将会经过 OUTPUT 链与 POSTROUTING 链;


如果防火墙作为路由负责转发数据,则数据将经过 PREROUTING 链、FORWARD 链以及 POSTROUTING 链。

iptables 语法

iptables [-t table] command [match] [target]
复制代码


-t: 用于指定所要操作的表,不指定则默认 filter 表 command:具体的命令动作,比如对指定链添加/删除规则 match:对所要处理包的匹配规则 target:数据包的处理动作

command

每个链由一条条的规则组成,对于一个链可以添加规则、删除规则、检测是否存在该条规则等操作,相应的命令选项如下:


match

1、通用匹配

2、显示匹配

通过-m 选项指定所要加载的匹配模块名称,后面再跟相应的选项即可。 如过滤 mac 地址操作,指定模块 mac,选项如下:


target

最后说下数据包的处理动作,通过参数-j 指定





IP 地址过滤策略一般就两种,要么设置允许哪些地址通行,要么就禁止哪些地址进行通行。

iptables 命令选项的输入顺序:

iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作
复制代码


表名包括:


  • raw:高级功能,如:网址过滤

  • mangle:数据包修改(QOS),用于实现服务质量

  • net:地址转换,用于网关路由器

  • filter:包过滤,用于防火墙规则


规则链名包括:


  • INPUT 链:处理输入数据包

  • OUTPUT 链:处理输出数据包

  • PORWARD 链:处理转发数据包

  • PREROUTING 链:用于目标地址转换(DNAT)

  • POSTOUTING 链:用于源地址转换(SNAT)


动作包括:


  • accept:接收数据包

  • DROP:丢弃数据包

  • REDIRECT:重定向,映射,透明代理

  • SNAT:源地址转换

  • DNAT:目标地址转换

  • MASQUERADE:IP 伪装(NAT),用于 ADSL

  • LOG:日志记录

实例

清除已有 iptables 规则

iptables -Fiptables -Xiptables -Z
复制代码

开发指定的端口

iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT               #允许本地回环接口(即运行本机访问本机)iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT    #允许已建立的或相关连的通行iptables -A OUTPUT -j ACCEPT         #允许所有本机向外的访问iptables -A INPUT -p tcp --dport 22 -j ACCEPT    #允许访问22端口iptables -A INPUT -p tcp --dport 80 -j ACCEPT    #允许访问80端口iptables -A INPUT -p tcp --dport 21 -j ACCEPT    #允许ftp服务的21端口iptables -A INPUT -p tcp --dport 20 -j ACCEPT    #允许FTP服务的20端口iptables -A INPUT -j reject       #禁止其他未允许的规则访问iptables -A FORWARD -j REJECT     #禁止其他未允许的规则访问
复制代码

屏蔽 IP

iptables -I INPUT -s 123.45.6.7 -j DROP       #屏蔽单个IP的命令iptables -I INPUT -s 123.0.0.0/8 -j DROP      #封整个段即从123.0.0.1到123.255.255.254的命令iptables -I INPUT -s 124.45.0.0/16 -j DROP    #封IP段即从123.45.0.1到123.45.255.254的命令iptables -I INPUT -s 123.45.6.0/24 -j DROP    #封IP段即从123.45.6.1到123.45.6.254的命令是
复制代码

查看已添加的 iptables 规则

iptables -L -n -v 或者 iptables -nvL

各参数的含义为:

-L 表示查看当前表的所有规则,默认查看的是 filter 表,如果要查看 nat 表,可以加上 -t nat 参数。-n 表示不对 IP 地址进行反查,加上这个参数显示速度将会加快。-v 表示输出详细信息,包含通过该规则的数据包数量、总字节数以及相应的网络接口。


iptables -L -n -vChain INPUT (policy DROP 48106 packets, 2690K bytes) pkts bytes target     prot opt in     out     source               destination 5075  589K ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0 191K   90M ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:221499K  133M ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:804364K 6351M ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 6256  327K ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 3382K packets, 1819M bytes) pkts bytes target prot opt in out source destination 5075 589K ACCEPT all -- * lo 0.0.0.0/0 0.0.0.0/0
复制代码


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v76C8hLf-1648025815595)(C:\Users\FLY\AppData\Roaming\Typora\typora-user-images\image-20220317141405406.png)]

将所有 iptables 以序号标记显示,执行:

iptables -L -n --line-numbers
复制代码

删除已添加的 iptables 规则

比如要删除 INPUT 里序号为 8 的规则,执行:


iptables -D INPUT 8
复制代码

iptables 调试

用 raw 表进行调试[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tug7jTuy-1648025815596)(https://upload.wikimedia.org/wikipedia/commons/3/37/Netfilter-packet-flow.svg)]


使用到 raw 表、ipt_LOG 内核模块、日志记录在 kern.log 中。


具体的步骤如下:

1.准备 ipt_LOG 内核模块

modprobe ipt_LOGmodprobe nf_log_ipv4sysctl net.netfilter.nf_log.2=nf_log_ipv4
复制代码

2.使用 raw 表,加入跟踪规则

iptables -t raw -A PREROUTING -p icmp -j TRACEiptables -t raw -A OUTPUT -p icmp -j TRACE
iptables -t raw -A PREROUTING -p tcp -dport 80 -j TRACEiptables -t raw -A OUTPUT -p tcp -dport 80 -j TRACE
复制代码


raw 表只能在 PREROUTING 和 OUTPUT 上加处理规则,符合规则的包会被跟踪,并输出到日志中。

3.查看日志

  tail -f /var/log/kern.log
复制代码

参考来源:

http://man.linuxde.net/iptables

发布于: 3 小时前阅读数: 13
用户头像

琦彦

关注

孤独的技术没有价值 2019.08.24 加入

还未添加个人简介

评论

发布
暂无评论
iptables常用命令小清单_Linux_琦彦_InfoQ写作社区