标签:iptables
一.Iptables命令参数
命令结构
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主机通过本机的DNS服务来执行名称解析
[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:只允许客户端从eth1这个接口访问本机的ssh服务
[root@vm1 ~]# iptables -A INPUT -p tcp -i eth1 --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 eth1:匹配从本机eth1端口进入的数据包。-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 eth1 -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连接因特网,eth1连接企业内网。
语法解释:
-A FORWARD:保护防火墙后面的主机。
-i eth1:匹配数据包进入的接口进入
-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(将数据包丢弃)
意义:采用特定方式来处理符合条件的数据包。
标签:iptables
原文地址:http://jiekeyang.blog.51cto.com/11144634/1833582