# 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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值