# iptables

iptables

安装iptables

[root@iptables ~]# yum install -y iptables-services
[root@iptables ~]# systemctl enable iptables.service --now

注意:对iptables规则的修改只是写在内存中,没有保存在/etc/sysconfig/iptables,重启iptables.service失效
[root@iptables ~]# iptables-save > /etc/sysconfig/iptables		# iptables-save会显示当前的规则

`-L`(list):查看该链所有规则。
[root@iptables ~]# iptables -t filter -L					# 省略链名默认该表下所有链       
[root@iptables ~]# iptables -L								# 省略表名默认为-t filter
[root@iptables ~]# yum install -y iptables-services
[root@iptables ~]# systemctl enable iptables.service --now
[root@iptables ~]# iptables -t filter -L					# 看到新增一些规则
[root@iptables ~]# iptables -t filter -nL 					# 以数字形式显示地址和端口
[root@iptables ~]# iptables -t filter -L --line-numbers		# --line-numbers显示规则序号

`-F`(fulsh):清空该链所有规则。
[root@iptables ~]# iptables -t filter -F

四表五链

iptables是一个在Linux系统中用于设置和管理防火墙规则的工具。它包含四个表格(Tables)和五个链(Chains),它们分别是:

四个表:
	+ `Filter表`(filter):用于过滤数据包,决定是否接受或拒绝数据包。
		它包含了INPUT、FORWARD和OUTPUT三个链。
	+ `NAT表`(nat):用于网络地址转换,通常用于将私有IP地址转换为公有IP地址。主要用于端口转发、SNAT和DNAT等网络地址转换操作。
		它包含了PREROUTING、POSTROUTING和OUTPUT三个链。
	+ `Mangle表`(mangle):用于修改包头的特殊选项。
		它包含了PREROUTING、INPUT、FORWARD、OUTPUT和POSTROUTING等五个链。
	+ `Raw表`(raw):用于配置某些特殊的免连接跟踪规则,对数据包的处理是在连接跟踪表之前进行的。
		它包含了PREROUTING和OUTPUT两个链。

五个链:
	+ `PREROUTING链`:用于对数据包进行处理,在数据包路由之前执行。
	+ `INPUT链`:用于处理到达本机的数据包。
	+ `FORWARD链`:用于处理需要转发到其他主机的数据包。
	+ `OUTPUT链`:用于处理由本机发出的数据包。
	+ `POSTROUTING链`:用于对数据包进行处理,将数据包从路由出口发出之前执行。

当主机收到一个数据包时,iptables会根据数据包的流向和目的(输入、转发、输出)选择相应的链进行处理。具体的处理过程如下:
    数据包到达主机后,首先会经过PREROUTING链,进行一些预处理操作,比如端口转发、源地址转换等。
    然后,数据包会进入相应的表格(如filter、nat、mangle、raw),根据匹配规则进行处理。注意,数据包可能会依次经过多个表格,每个表格都可以有自己的规则。
    在每个表格中,数据包会根据匹配规则进行过滤或修改操作。如果数据包与规则匹配,则根据规则的动作(比如ACCEPT、DROP、REJECT)来决定是否接受、拒绝或处理数据包。
    处理完表格中的规则后,数据包会进入相应的链(如INPUT、FORWARD、OUTPUT),进行最后的处理操作。

filter表

"filter表用于过滤网络数据包",默认有三条规则链:`INPUT``OUTPUT``FORWARD` 
    + `INPUT`:数据包的目标IP地址是自己,则进入INPUT链。
    + `OUTPUT`:数据包的源IP地址是自己,则进入OUTPUT链。
    + `FORWARD`:数据包穿过自己(目标IP地址和源IP地址均不是自己),则进入FORWARD链。(必须开启路由转发`net.ipv4.ip_forward = 1`)

数据包进入规则链后,从上向下匹配,"匹配则停止",应用该规则。如果全都不匹配,则应用默认规则。

filter表主要实现"防火墙"的功能,根据防火墙的防护对象(数据包的目标地址),可以分为主机防护(`INPUT`链)和网络防护(`FORWARD`链)。

注意:数据包都是一去一回。
filter表通用命令。处理动作有ACCEPT、DROP、REJECT说明。规则从上到下匹配,匹配即停止
iptables [-t filter] -L [选项] [链名 [规则序号]]list查看规则。
省略规则序号默认所有规则。省略链名默认所有链。
选项-n:以数字形式显示地址和端口。
选项--line-numbers:显示规则序号。
iptables [-t filter] -S [链名 [规则序号]]show查看规则(命令形式)。
省略规则序号默认所有规则。省略链名默认所有链。
iptables [-t filter] -P 链名 ACCEPT或DROPpolicy设置默认策略
iptables [-t filter] -I 链名 [规则序号] 具体规则 -j 处理动作insert插入规则。省略规则序号默认序号为1。
iptables [-t filter] -A 链名 具体规则 -j 处理动作append追加规则。新规则序号为最末。
iptables [-t filter] -R 链名 规则序号 具体规则 -j 处理动作replace替换规则。不改变规则序号。
iptables [-t filter] -D 链名 规则序号 -j 处理动作delete删除规则。
iptables [-t filter] -F [链名]flush清空链的所有规则。省略链名默认所有链。
filter表常用具体规则说明
-p 协议 [--sport 源端口] [--dport 目标端口]协议为tcpudp则可以使用端口。
协议为其他协议则不可使用端口,例如icmp
-s 源IP地址A,源IP地址B占用多条规则
-d 目标IP地址A,目标地址B占用多条规则
-i 入方向网卡
-o 出方向网卡
-m state --state ESTABLISHED从自身发出去、返回来的数据包,其状态是ESTABLISHED
-m multiport [--sport 端口A,端口B,端口C:端口D] [--dport 端口E,端口F,端口G:端口H]占用一条规则。
连续端口使用:,不连续端口使用,
-m iprange --src-range IP地址A-IP地址B --dst-range IP地址E-IP地址F占用一条规则。
连续IP地址使用-
-m mac --mac-source 源MAC地址

filter表INPUT链(主机防护)

filter表INPUT链(主机防护)
主机(192.168.88.7192.168.99.7):
// -F清空
[root@iptables ~]# iptables -F INPUT									// 省略表默认为`-t filter`
// -A追加。-P默认策略。-I插入
[root@iptables ~]# iptables -A INPUT -s 192.168.88.254 -j ACCEPT		// 接受源IP地址192.168.88.254的数据包
[root@iptables ~]# iptables -P INPUT DROP								// 默认策略为丢弃
[root@iptables ~]# iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT	// 接受状态为ESTABLISHED的数据包
[root@iptables ~]# iptables -I INPUT 1 -s 192.168.88.254 -p icmp -j REJECT	// 拒绝192.168.88.254的icmp协议数据包
[root@iptables ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT 		// 接受目标端口80的数据包
[root@iptables ~]# iptables -A INPUT -s 192.168.88.0/24 -p tcp -m multiport --dport 22,443,100:120 -j ACCEPT	// 接受源IP地址192.168.88.0/24网段,目标端口22、443、100~120的数据包
[root@iptables ~]# iptables -A INPUT -m iprange --src-range 192.168.99.100-192.168.99.200  -p tcp -m multiport --dport 22,443,100:120 -j ACCEPT		// 接受源IP地址192.168.99.100~200,目标端口22、443、100~120的数据包

// -L查看。-n以数字方式显示。--line-numbers显示规则序号
[root@iptables ~]# iptables -nL INPUT --line-numbers
    Chain INPUT (policy DROP)
    num  target     prot opt source               destination         
    1    REJECT     icmp --  192.168.88.254       0.0.0.0/0            reject-with icmp-port-unreachable
    2    ACCEPT     all  --  192.168.88.254       0.0.0.0/0           
    3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state ESTABLISHED
    4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80
    5    ACCEPT     tcp  --  192.168.88.0/24      0.0.0.0/0            multiport dports 22,443,100:120
    6    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            source IP range 192.168.99.100-192.168.99.200  multiport dports 22,443,100:120
// -S查看(命令形式)
[root@iptables ~]# iptables -S INPUT
    -P INPUT DROP
    -A INPUT -s 192.168.88.254/32 -p icmp -j REJECT --reject-with icmp-port-unreachable
    -A INPUT -s 192.168.88.254/32 -j ACCEPT
    -A INPUT -m state --state ESTABLISHED -j ACCEPT
    -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
    -A INPUT -s 192.168.88.0/24 -p tcp -m multiport --dports 22,443,100:120 -j ACCEPT
    -A INPUT -p tcp -m iprange --src-range 192.168.99.100-192.168.99.200  -m multiport --dports 22,443,100:120 -j ACCEPT

// 永久生效
[root@iptables ~]# iptables-save > /etc/sysconfig/iptables

filter表FORWARD链(网络防护)

filter表FORWARD链(网络防护)
主机(192.168.88.7192.168.99.7):
// 开启路由转发
[root@iptables ~]# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf 
[root@iptables ~]# sysctl -p
// -F清空
[root@iptables ~]# iptables -F FORWARD 		
// -A追加。-P默认策略。-I插入					
[root@iptables ~]# iptables -P FORWARD DROP
[root@iptables ~]# iptables -A FORWARD -s 192.168.88.5 -d 192.168.99.10 -p icmp -j ACCEPT 
[root@iptables ~]# iptables -A FORWARD -s 192.168.99.10 -d 192.168.88.5 -p icmp -j ACCEPT 
[root@iptables ~]# iptables -A FORWARD -m iprange --src-range 192.168.99.80-192.168.99.100 --dst-range 192.168.88.5 -p tcp -m multiport --dports 22,443,100:120 -j ACCEPT
[root@iptables ~]# iptables -I FORWARD 3 -m iprange --src-range 192.168.88.5 --dst-range 192.168.99.80-192.168.99.100 -p tcp -m multiport --sports 22,443,100:120 -j ACCEPT
[root@iptables ~]# iptables -A FORWARD -s 192.168.99.80,192.168.99.100 -d 192.168.88.70,192.168.88.110 -p icmp -j ACCEPT 

// -L查看。-n以数字方式显示。--line-numbers显示规则序号
[root@iptables ~]# iptables -nL FORWARD --line-numbers 
    Chain FORWARD (policy DROP)
    num  target     prot opt source               destination         
    1    ACCEPT     icmp --  192.168.88.5         192.168.99.10       
    2    ACCEPT     icmp --  192.168.99.10        192.168.88.5        
    3    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            source IP range 192.168.88.5-192.168.88.5 destination IP range 192.168.99.80-192.168.99.100 multiport sports 22,443,100:120
    4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            source IP range 192.168.99.80-192.168.99.100 destination IP range 192.168.88.5-192.168.88.5 multiport dports 22,443,100:120
    5    ACCEPT     icmp --  192.168.99.80        192.168.88.70       
    6    ACCEPT     icmp --  192.168.99.80        192.168.88.110      
    7    ACCEPT     icmp --  192.168.99.100       192.168.88.70       
    8    ACCEPT     icmp --  192.168.99.100       192.168.88.110  
// -S查看(命令形式)
[root@iptables ~]# iptables -S FORWARD 
    -P FORWARD DROP
    -A FORWARD -s 192.168.88.5/32 -d 192.168.99.10/32 -p icmp -j ACCEPT
    -A FORWARD -s 192.168.99.10/32 -d 192.168.88.5/32 -p icmp -j ACCEPT
    -A FORWARD -p tcp -m iprange --src-range 192.168.88.5-192.168.88.5 --dst-range 192.168.99.80-192.168.99.100 -m multiport --sports 22,443,100:120 -j ACCEPT
    -A FORWARD -p tcp -m iprange --src-range 192.168.99.80-192.168.99.100 --dst-range 192.168.88.5-192.168.88.5 -m multiport --dports 22,443,100:120 -j ACCEPT
    -A FORWARD -s 192.168.99.80/32 -d 192.168.88.70/32 -p icmp -j ACCEPT
    -A FORWARD -s 192.168.99.80/32 -d 192.168.88.110/32 -p icmp -j ACCEPT
    -A FORWARD -s 192.168.99.100/32 -d 192.168.88.70/32 -p icmp -j ACCEPT
    -A FORWARD -s 192.168.99.100/32 -d 192.168.88.110/32 -p icmp -j ACCEPT

// 永久生效
[root@iptables ~]# iptables-save > /etc/sysconfig/iptables

nat表

通用命令。省略表名默认为filter表说明。规则从上到下匹配,匹配即停止
iptables -t nat -L [选项] [链名 [规则序号]]list查看规则。
省略规则序号默认所有规则。省略链名默认所有链。
选项-n:以数字形式显示地址和端口。
选项--line-numbers:显示规则序号。
iptables -t nat -S [链名 [规则序号]]show查看规则(命令形式)。
省略规则序号默认所有规则。省略链名默认所有链。
iptables -t nat -P 链名 ACCEPT或DROPpolicy设置默认策略
iptables -t nat -I 链名 [规则序号] 具体规则insert插入规则。省略规则序号默认序号为1。
iptables -t nat -A 链名 具体规则append追加规则。新规则序号为最末。
iptables -t nat -R 链名 规则序号 具体规则replace替换规则。不改变规则序号。
iptables -t nat -D 链名 规则序号delete删除规则。
iptables -t nat -F [链名]flush清空链的所有规则。省略链名默认所有链。
nat表POSTROUTING链常用具体规则使用情形说明
-s 内网IP地址网段 -j SNAT --to-source 本机公网IP地址固定的
公网IP地址
本机作为网关,
转换filter表FORWARD链的数据包的源IP地址为固定的公网IP地址
-s 内网IP地址网段 -j MASQUERADE不固定的
公网IP地址
本机作为网关,
转换filter表FORWARD链的数据包的源IP地址为本机的公网IP地址

nat表POSTROUTING链

  • nat表POSTROUTING链可以转换filter表FORWARD链的数据包的源IP地址,实现NAT功能。
nat表POSTROUTING链
主机(192.168.88.7192.168.99.7):
// 开启路由转发
[root@iptables ~]# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf 
[root@iptables ~]# sysctl -p
[root@iptables ~]# iptables -t filter -P FORWARD ACCEPT
[root@iptables ~]# iptables -t nat -F POSTROUTING

固定(静态)的网关IP地址
[root@iptables ~]# iptables -t nat -A POSTROUTING -s 192.168.88.0/24 -j SNAT --to-source 192.168.99.7
192.168.88.0/24网段的主机(网关为192.168.88.7)访问192.168.99.0/24网段的主机时,本主机会将数据包的源IP地址转换为192.168.99.7
[root@iptables ~]# iptables -t nat -nL POSTROUTING 
    Chain POSTROUTING (policy ACCEPT)
    target     prot opt source               destination         
    SNAT       all  --  192.168.88.0/24      0.0.0.0/0            to:192.168.99.7

不固定(DHCP)的网关IP地址
[root@iptables ~]# iptables -t nat -A POSTROUTING -s 192.168.88.10/24 -j MASQUERADE 
[root@iptables ~]# iptables -t nat -nL POSTROUTING 
    Chain POSTROUTING (policy ACCEPT)
    target     prot opt source               destination         
    MASQUERADE  all  --  192.168.88.0/24      0.0.0.0/0  
192.168.88.0/24网段的主机(网关为192.168.88.7)访问192.168.99.0/24网段的主机时,本主机会将数据包的源IP地址转换为本机的99网段的IP地址

end

<think>嗯,用户想知道如何简化iptables命令,特别是把iptables -t filter -nvL改成更简短的别名或者函数。首先,我得回忆一下Linux中的别名和函数设置方法。 用户给出的例子是iptables -t filter -nvL,这个命令的作用是查看filter表的详细信息,包括规则数量和数据包计数。默认情况下,iptables如果不指定-t参数的话,默认就是filter表,所以其实这个命令可以简化为iptables -nvL。不过用户可能还是想进一步缩短,比如用别名或者函数。 首先,别名的话,可以在.bashrc或者.zshrc里添加alias lf=&#39;iptables -nvL&#39;。这样输入lf就能代替原来的命令了。不过如果用户需要指定其他表的话,可能需要更多的别名,比如nat表的话可以加alias ln=&#39;iptables -t nat -nvL&#39;。不过用户可能希望更灵活,这时候可能需要用函数。 函数的话,可以处理参数。比如写一个函数lf(),然后根据参数来切换不同的表。例如,lf() { iptables -t "${1:-filter}" -nvL; },这样用户输入lf就是默认filter表,输入lf nat就是查看nat表。这样更灵活一些。 另外,用户可能还希望持久化这些设置,所以需要提醒他们把这些别名或函数添加到shell的配置文件中,比如~/.bashrc,然后source一下让配置生效。 还要考虑是否用户需要其他选项,比如--line-numbers,但用户当前的命令里没有这个选项,所以可能暂时不需要。不过可以作为一个扩展建议,比如添加别名的时候包括这个参数,方便查看规则的行号。 另外,用户提供的引用里提到了iptables-save和Netfilter的相关内容,可能用户对这些底层工具也有兴趣,不过当前的问题是如何简化命令,所以可能不需要深入讨论这些引用内容,但可以适当提及相关的工具,比如iptables-save的用法,但这里可能不相关。 总结下来,用户的需求是简化冗长的iptables命令,使用别名或函数来实现。需要分步骤说明如何创建别名,如何创建更灵活的函数,以及如何持久化这些设置。同时,可能还需要提醒用户注意shell的不同配置文件,比如bash和zsh的区别,但一般用户可能使用bash,所以以.bashrc为例即可。</think>要简化 `iptables -t filter -nvL` 命令,可以通过定义 **别名(Alias)** 或 **Shell 函数** 实现更简洁的调用。以下是具体方法: --- ### 方法 1:使用别名(Alias) 在 Linux Shell 中,通过 `alias` 命令将长命令映射为简写: ```bash # 将以下内容添加到 ~/.bashrc 或 ~/.zshrc 文件中 alias lf=&#39;iptables -t filter -nvL&#39; # 使配置生效 source ~/.bashrc ``` 之后直接输入 `lf` 即可替代原命令[^2]。 --- ### 方法 2:使用 Shell 函数 若需更灵活的扩展(例如支持动态参数),可定义函数: ```bash # 将以下函数添加到 Shell 配置文件中 lf() { iptables -t "${1:-filter}" -nvL # 默认使用 filter 表,可指定其他表(如 nat) } # 使用示例 lf # 查看 filter 表 lf nat # 查看 nat 表 ``` --- ### 扩展优化 1. **添加行号显示**: 若需查看规则行号,可扩展别名: ```bash alias lfl=&#39;iptables -t filter -nvL --line-numbers&#39; ``` 2. **多表简写**: 为不同表定义专用别名: ```bash alias lf=&#39;iptables -t filter -nvL&#39; alias ln=&#39;iptables -t nat -nvL&#39; ``` --- ### 验证效果 ```bash $ lf Chain INPUT (policy ACCEPT 100 packets, 15000 bytes) pkts bytes target prot opt in out source destination 0 0 DROP all -- * * 192.168.1.100 0.0.0.0/0 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值