iptables命令的作用是什么

发布时间:2021-08-23 15:12 来源:亿速云 阅读:0 作者:chen 栏目: 网络安全

这篇文章主要介绍“iptables命令的作用是什么”,在日常操作中,相信很多人在iptables命令的作用是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”iptables命令的作用是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一.Iptables命令参数   

  1. 命令结构      

    Iptables   (- t   表名)   操作方式   规则条件      

    注:若取消“- t 表名”,默认是filter表。      

    表名:filter、nat、mangle、raw      

    操作方式:     - L   ##列出表内容   

                         - F  ##清除表内容,若不指定表名,默认清除所有表的内容。   

                     - A   ##添加新规则   

                     - P   ##设置默认策略   

                     - I   ##插入新规则   

                     - R   ##取代旧规则   

                     - D   ##删除规则       

规则条件:           

- p  tcp/udp/icmp/all   - j   ACCEPT/DROP/REJECT

Filter的示例 Filter共有三个链:INPUT  FORWARD   OUTPUT

示例1:列出filter表的所有内容      

# iptables  - t  filter  - L

结果显示:1.第一部分为INPUT链的所有内容,以下依次为FORWARD和OUTPUT.          

                2.三条链的默认策略均为ACCEPT   示例2:列出filter表中的INOUT链的内容

示例2:列出filter表中的INOUT链的内容
[root@vm1 ~]# iptables -t filter -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh

示例3:清除filter表中的所有内容

[root@vm1 ~]# iptables -t filter -F
[root@vm1 ~]# iptables -t filter -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

示例4:将规则添加到filter表中的INPUT链中

[root@vm1 ~]# iptables -t filter -A INPUT -p icmp -j ACCEPT
[root@vm1 ~]# iptables -t filter -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     icmp --  anywhere             anywhere            


示例5:将forward链的默认策略设置为DROP

[root@vm1 ~]# iptables -t filter -P FORWARD  DROP
[root@vm1 ~]# iptables -t filter -L
Chain FORWARD (policy DROP)
target     prot opt source               destination        
注:iptables  - F不会影响到默认策略的状态,默认策略只能通过- P这个参数设置

示例6:在INPUT链中插入新规则。

[root@vm1 ~]# iptables -t filter -L --line-number
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     icmp --  anywhere             anywhere            
2    ACCEPT     tcp  --  anywhere             anywhere            

Chain FORWARD (policy DROP)
num  target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         
[root@vm1 ~]# iptables -t filter -I INPUT 2 -p udp  -j ACCEPT
[root@vm1 ~]# iptables -t filter -L --line-number
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     icmp --  anywhere             anywhere            
2    ACCEPT     udp  --  anywhere             anywhere            
3    ACCEPT     tcp  --  anywhere             anywhere            

Chain FORWARD (policy DROP)
num  target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         
注:“iptables - t filter - L - - line- number”用于显示规则内容的行号 

示例7:取代INPUT链中的已经存在的规则

[root@vm1 ~]# iptables -t filter -R INPUT 2 -p tcp -j ACCEPT

[root@vm1 ~]# iptables -t  filter -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere            
ACCEPT     icmp --  anywhere             anywhere            

Chain FORWARD (policy DROP)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

示例8:删除INPUT链中已经存在的规则

[root@vm1 ~]# iptables -t filter -L INPUT --line-number
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     tcp  --  anywhere             anywhere            
2    ACCEPT     tcp  --  anywhere             anywhere            
3    ACCEPT     icmp --  anywhere             anywhere            
[root@vm1 ~]# iptables -t filter -D INPUT 2
[root@vm1 ~]# iptables -t filter -L INPUT --line-number
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     tcp  --  anywhere             anywhere            
2    ACCEPT     icmp --  anywhere             anywhere          

注:以上七个参数也同样适用于其他三个表。

Nat表的示例

NAT共有三个链:PREROUTING  POSTROUTING  OUTPUT。 

示例1.列出nat表中的所有规则

[root@vm1 ~]# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

示例2:给nat表中的POSTROUTING添加规则。

[root@vm1 ~]# iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j SNAT --to 192.168.5.178

[root@vm1 ~]# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
SNAT       all  --  192.168.0.0/24       anywhere            to:192.168.5.178

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Mangle表示例

Mangle共有五个链:PREROUTING  INPUT  FORWARD  OUTPUT  POSTROUTING

[root@vm1 ~]# iptables -t mangle -A INPUT -p icmp -j ACCEPT
[root@vm1 ~]# iptables -t mangle -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     icmp --  anywhere             anywhere            

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination        

Raw示例

Raw共有两个链:PREROUTING  OUTPUT   

[root@vm1 ~]# iptables -t raw -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination        
[root@vm1 ~]# iptables -t raw -A OUTPUT -p tcp -j ACCEPT
[root@vm1 ~]# iptables -t raw -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere            

[root@vm1 ~]# iptables -t raw -A OUTPUT -p tcp -j NOTRACK
[root@vm1 ~]# iptables -t raw -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere            
NOTRACK    tcp  --  anywhere             anywhere            

二. Iptables语法规则

基本语法   

iptables  -t  filter  -A  INPUT  -p  icmp   -j  DROP

高级语法   

iptables  -t  filter  -A   INPUT  -m  mac  --mac-source  00:E0:18:00:7C:A4  -j DROP  

注:基本语法就是iptables只调用ipTable_filter.ko模块,高级语法就是除了ipTable_filter.ko模块,还会调用其他模块。上例高级语法中还调用了xt_mac.ko这个模块。 

示例1:将192.168.0.200进入本机的icmp协议包丢掉

[root@vm1 ~]# iptables -A INPUT -p icmp -s 192.168.0.200 -j DROP
[root@vm1 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere            
ACCEPT     icmp --  anywhere             anywhere            
DROP       icmp --  192.168.0.200        anywhere            

Chain FORWARD (policy DROP)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

语法解释:

- A INPUT :INPUT链保护的对象是本机,主要说明保护的对象

-p icmp:-p参数用于指定匹配特定协议的数据包,此处为icmp协议。

-s 192.268.0.200:-s用于指定匹配数据包中的“来源“端IP,-d用于指定匹配数据包中的“目的”端IP

-j:意为将符合以上条件的数据包做特定处理。

处理方式:

ACCEPT:允许通过

DROP:将数据包丢掉,这种处理方式将导致来源端误认为数据包丢失而不断发送数据包,这个动作将延续到连接超时。

REJECT:将数据包丢掉,并回送一个Destination Unreachable的icmp数据包给发送端,发送端的应用程序在收到这个错误信息后,会终止连接。

示例2:不允许192.168.0.200主机通过本机的服务来执行名称解析
[root@vm1 ~]# iptables -A INPUT -p udp -s 192.168.0.200 --dport 53 -j REJECT
[root@vm1 ~]# iptables -L

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere            
ACCEPT     icmp --  anywhere             anywhere            
DROP       icmp --  192.168.0.200        anywhere            
REJECT     udp  --  192.168.0.200        anywhere            udp dpt:domain reject-with icmp-port-unreachable 

语法解释:

-A INPUT:保护主机

-p udp:匹配udp协议的数据包,DNS服务使用的是udp协议。

-s:指定“来源端”IP

--dport   53:--dport指定服务的目的端口,DNS服务使用的端口是udp协议的53端口。--sport意为指定服务使用源端口。

注:当使用--dport或者--sport参数时,一定要指明是tcp或者udp协议。若不指明。则默认tcp,udp,icmp协议的端口都符合。

基本语法结构:iptables -A INPUT -    p udp/tcp/icmp  -s/-d 192.168.0.200 --dport/--sport 53 -j REJECT。

-j REJECT:符合以上条件的数据包都丢失,并回送udp的错误信息给来源端。

示例3:允许192.168.0.200主机连接到本机的TELNET

[root@vm1 ~]# iptables -A INPUT -p tcp -s 192.168.0.200 --dport 23 -j ACCEPT
[root@vm1 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere            
ACCEPT     icmp --  anywhere             anywhere            
DROP       icmp --  192.168.0.200        anywhere            
REJECT     udp  --  192.168.0.200        anywhere            udp dpt:domain reject-with icmp-port-unreachable
ACCEPT     tcp  --  192.168.0.200        anywhere            tcp dpt:telnet
语法解释:

-A INPUT:保护本机

-p tcp:匹配tcp协议,telnet服务使用的是tcp协议

-s:指定来源端IP

--dport 23:匹配tcp协议的23端口,此端口为telnet服务的默认端口。

-j ACCEPT:允许符合以上条件的数据包通过。

示例4:允许192.168.1.0/24网段的主机向本机192.168.0.1提出任何服务请求

[root@vm1 ~]# iptables -A INPUT -p all -s 192.168.1.0/24 -d 192.168.1.0 -j ACCEPT

[root@vm1 ~]# iptables  -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere            
ACCEPT     icmp --  anywhere             anywhere            
DROP       icmp --  192.168.0.200        anywhere            
REJECT     udp  --  192.168.0.200        anywhere            udp dpt:domain reject-with icmp-port-unreachable
ACCEPT     tcp  --  192.168.0.200        anywhere            tcp dpt:telnet
ACCEPT     all  --  192.168.1.0/24       192.168.1.0        

语法解释:

-A INPUT:保护本机

-p all:匹配u任何协议的数据包

-s :指定来源端IP

-d:指定目的端IP

-j ACCETP:允许符合以上条件的数据包通过。

示例5:只允许客户端从eth2这个接口访问本机的ssh服务

[root@vm1 ~]# iptables -A INPUT -p tcp -i eth2 --dport 22 -j ACCEPT
[root@vm1 ~]# iptables -L

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere            
ACCEPT     icmp --  anywhere             anywhere            
DROP       icmp --  192.168.0.200        anywhere            
REJECT     udp  --  192.168.0.200        anywhere            udp dpt:domain reject-with icmp-port-unreachable
ACCEPT     tcp  --  192.168.0.200        anywhere            tcp dpt:telnet
ACCEPT     all  --  192.168.1.0/24       192.168.1.0         
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh

语法解释:

-A INPUT:保护主机

-p tcp:匹配tcp协议

-i eth2:匹配从本机eth2端口进入的数据包。-i意为数据包从本机的某个端口进入,-o意为数据包从本机的某个端口出去。

--dport 22:指定ssh服务所使用的tcp协议的22端口

-j ACCEPT:意为符合以上条件的数据包均允许通过

示例6:不允许本机的应用程序从eth0接口发送数据包去访问edu.uuu.com.tw网站

[root@vm1 ~]# iptables -A OUTPUT -p tcp -o eth0 -d edu.uuu.com.tw --dport 80 -j REJECT
[root@vm1 ~]# iptables -L

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
REJECT     tcp  --  anywhere             vm5.example.com     tcp dpt:http reject-with icmp-port-unreachable

语法解释:

-A OUTPUT:限制本机对方访问

-p tcp :匹配tcp协议

-o eth0:匹配数据是否时从eth0接口送出的

-d edu.uuu.com.tw:指定目的网站

--dport 80:匹配的服务端口为http服务的80端口

-j REJECT:符合以上 条件的数据包全部丢失,并将错误信息返回到来源端

示例7:不允许企业内部的主机访问企业意外的网站

[root@vm1 ~]# iptables -A FORWARD -i eth2 -o eth0 -p tcp --dport 80 -j DROP
[root@vm1 ~]# iptables -L

Chain FORWARD (policy DROP)
target     prot opt source               destination         
DROP       tcp  --  anywhere             anywhere            tcp dpt:http
注:本例使用的网关式防火墙,因此所用的链是FORWARD,假设此防火墙主机上的eth0连接因特网,eth2连接企业内网。

语法解释:

-A FORWARD:保护防火墙后面的主机。

-i eth2:匹配数据包进入的接口进入

-o eth0:匹配数据包离开的接口

-p tcp:匹配tcp协议的数据包

--dport 80:匹配目的服务渡口为80的数据包

-j REJECT:将符合以上条件的数据包都丢弃,并将错误信息返回给来源端。

三.Iptables参数整理

1.接口的匹配参数

参数名称:-i(进入)    -o(送出)

参数值:  eth0(以太网的接口名称)    

               ppp0(ppp的接口名称,用于语音拨号)   

               lo(本地回环接口)    

               fddi0(光纤网络接口)

使用示例:-i eth0(匹配从eth0接口进入的数据包)    

                -o eth0(匹配从eth0接口送出的数据包)

意义:匹配数据包进出的接口

补充:可搭配“!”来代表反向,例如“-i ! eth0”代表匹配不是从eth0接口进入的数据包

2.上层协议的匹配参数

参数名称:-p

参数值:  tcp(匹配的上层协议是tcp协议)    

               udp(匹配的上层协议是udp协议)    

               icmp(匹配的上层协议是icmp协议)   

               all(匹配所有的上层协议)

意义:匹配上层通信协议

补充:可搭配“!”表示反向,“-p ! icmp”意为匹配不是icmp的协议

3.匹配来源/目的的IP地址

参数名称:-s(源)   -d(目的)

参数值:192.168.0.1(匹配单一IP)

             172.10.0.0/16(匹配一个B类网段)

             192.168.0.0/24(匹配一个C类网段)

             www.playboy.com(匹配一个FQDN,但存放的值还是一个IP)

使用示例:-s 192.168.0.0/24(匹配从192.168.0.0网段法来的数据包)

                -s 192.168.0.1(匹配从192.168.0.1主机法来的数据包)

                -d 192.168.0.10(匹配发送到192.168.0.10主机的数据包)

意义:匹配数据包的来源或者目的IP

4.匹配来源/目的端口

参数名称:--sport(源)  --dport(目的)

参数值:匹配端口的目的是为了匹配所需访问的服务

使用示例:--dport  80(匹配要访问web的数据包)

                --sport  110(匹配由pop3服务应答给客户端的数据包)

意义:匹配数据的来源或者目的端口

5.处理方式

参数名称:-j

参数值:ACCEPT(允许)

             DROP(将数据包丢弃)

             REJECT(将数据包丢弃,并回送发送端一个icmp数据包)

使用示例:-j ACCEPT(允许)

                -j DROP(将数据包丢弃)

    意义:采用特定方式来处理符合条件的数据包。

免责声明:本站发布的内容(图片、视频和文字)以原创、来自互联网转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系QQ:712375056 进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。