linux防火墙iptables详细教程Word文档格式.docx
《linux防火墙iptables详细教程Word文档格式.docx》由会员分享,可在线阅读,更多相关《linux防火墙iptables详细教程Word文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
iptables[-t要操作的表]
<
操作命令>
[要操作的链]
[规则号码]
[匹配条件]
[-j匹配到以后的动作]
3.2命令概述
操作命令(-A、-I、-D、-R、-P、-F)
查看命令(-[vnx]L)
3.2.1-A
-A<
链名>
APPEND,追加一条规则(放到最后)
例如:
iptables-tfilter-AINPUT-jDROP
在filter表的INPUT链里追加一条规则(作为最后一条规则)
匹配所有访问本机IP的数据包,匹配到的丢弃
3.2.2-I
-I<
[规则号码]
INSERT,插入一条规则
iptables-IINPUT-jDROP
在filter表的INPUT链里插入一条规则(插入成第1条)
iptables-IINPUT3-jDROP
在filter表的INPUT链里插入一条规则(插入成第3条)
注意:
1、-tfilter可不写,不写则自动默认是filter表
2、-I链名[规则号码],如果不写规则号码,则默认是1
3、确保规则号码≤(已有规则数+1),否则报错
3.2.3-D
-D<
<
规则号码|具体规则内容>
DELETE,删除一条规则
iptables-DINPUT3(按号码匹配)
删除filter表INPUT链中的第三条规则(不管它的内容是什么)
iptables-DINPUT-s192.168.0.1-jDROP(按内容匹配)
删除filter表INPUT链中内容为“-s192.168.0.1-jDROP”的规则
(不管其位置在哪里)
1、若规则列表中有多条相同的规则时,按内容匹配只删除序号最小的一条
2、按号码匹配删除时,确保规则号码≤已有规则数,否则报错
3、按内容匹配删除时,确保规则存在,否则报错
3.2.3-R
-R<
规则号码>
具体规则内容>
REPLACE,替换一条规则
iptables-RINPUT3-jACCEPT
将原来编号为3的规则内容替换为“-jACCEPT”
确保规则号码≤已有规则数,否则报错
3.2.4-P
-P<
动作>
POLICY,设置某个链的默认规则
iptables-PINPUTDROP
设置filter表INPUT链的默认规则是DROP
当数据包没有被规则列表里的任何规则匹配到时,按此默认规则处理
3.2.5-F
-F[链名]
FLUSH,清空规则
iptables-FINPUT
清空filter表INPUT链中的所有规则
iptables-tnat-FPREROUTING
清空nat表PREROUTING链中的所有规则
1、-F仅仅是清空链中规则,并不影响-P设置的默认规则
2、-P设置了DROP后,使用-F一定要小心!
!
3、如果不写链名,默认清空某表里所有链里的所有规则
3.2.6-[vxn]L
-L[链名]
LIST,列出规则
v:
显示详细信息,包括每条规则的匹配包数量和匹配字节数
x:
在v的基础上,禁止自动单位换算(K、M)
n:
只显示IP地址和端口号码,不显示域名和服务名称
iptables-L
粗略列出filter表所有链及所有规则
iptables-tnat-vnL
用详细方式列出nat表所有链的所有规则,只显示IP地址和端口号
iptables-tnat-vxnLPREROUTING
用详细方式列出nat表PREROUTING链的所有规则以及详细数字,不反解
3.3匹配条件
流入、流出接口(-i、-o)
来源、目的地址(-s、-d)
协议类型
(-p)
来源、目的端口(--sport、--dport)
3.3.1按网络接口匹配
-i<
匹配数据进入的网络接口>
-ieth0
匹配是否从网络接口eth0进来
-ippp0
匹配是否从网络接口ppp0进来
-o匹配数据流出的网络接口
-oeth0
-oppp0
3.3.2按来源目的地址匹配
-s<
匹配来源地址>
可以是IP、NET、DOMAIN,也可空(任何地址)
-s192.168.0.1
匹配来自192.168.0.1的数据包
-s192.168.1.0/24匹配来自192.168.1.0/24网络的数据包
-s192.168.0.0/16匹配来自192.168.0.0/16网络的数据包
-d<
匹配目的地址>
可以是IP、NET、DOMAIN,也可以空
-d202.106.0.20
匹配去往202.106.0.20的数据包
-d202.106.0.0/16匹配去往202.106.0.0/16网络的数据包
-d
匹配去往域名的数据包
3.3.3按协议类型匹配
-p<
匹配协议类型>
可以是TCP、UDP、ICMP等,也可为空
-ptcp
-pudp
-picmp--icmp-type类型
ping:
type8
pong:
type0
3.3.4按来源目的端口匹配
--sport<
匹配源端口>
可以是个别端口,可以是端口范围
--sport1000
匹配源端口是1000的数据包
--sport1000:
3000匹配源端口是1000-3000的数据包(含1000、3000)
--sport:
3000
匹配源端口是3000以下的数据包(含3000)
匹配源端口是1000以上的数据包(含1000)
--dport<
匹配目的端口>
--dport80
匹配源端口是80的数据包
--dport6000:
8000匹配源端口是6000-8000的数据包(含6000、8000)
--dport:
--dport1000:
--sport和--dport必须配合-p参数使用
3.3.5匹配应用举例
1、端口匹配
-pudp--dport53
匹配网络中目的地址是53的UDP协议数据包
2、地址匹配
-s10.1.0.0/24-d172.17.0.0/16
匹配来自10.1.0.0/24去往172.17.0.0/16的所有数据包
3、端口和地址联合匹配
-s192.168.0.1-d-ptcp--dport80
匹配来自192.168.0.1,去往的80端口的TCP协议数据包
1、--sport、--dport必须联合-p使用,必须指明协议类型是什么
2、条件写的越多,匹配越细致,匹配范围越小
3.4动作(处理方式)
ACCEPT
DROP
SNAT
DNAT
MASQUERADE
3.4.1-jACCEPT
-jACCEPT
通过,允许数据包通过本链而不拦截它
类似Cisco中ACL里面的permit
iptables-AINPUT-jACCEPT
允许所有访问本机IP的数据包通过
3.4.2-jDROP
-jDROP
丢弃,阻止数据包通过本链而丢弃它
类似Cisco中ACL里的deny
iptables-AFORWARD-s192.168.80.39-jDROP
阻止来源地址为192.168.80.39的数据包通过本机
3.4.3-jSNAT
-jSNAT--toIP[-IP][:
端口-端口](nat表的POSTROUTING链)
源地址转换,SNAT支持转换为单IP,也支持转换到IP地址池
(一组连续的IP地址)
iptables-tnat-APOSTROUTING-s192.168.0.0/24\
-jSNAT--to1.1.1.1
将内网192.168.0.0/24的原地址修改为1.1.1.1,用于NAT
-jSNAT--to1.1.1.1-1.1.1.10
同上,只不过修改成一个地址池里的IP
3.4.4-jDNAT
-jDNAT--toIP[-IP][:
端口-端口](nat表的PREROUTING链)
目的地址转换,DNAT支持转换为单IP,也支持转换到IP地址池
iptables-tnat-APREROUTING-ippp0-ptcp--dport80\
-jDNAT--to192.168.0.1
把从ppp0进来的要访问TCP/80的数据包目的地址改为192.168.0.1
iptables-tnat-APREROUTING-ippp0-ptcp--dport81\
-jDNAT--to192.168.0.2:
80
-jDNAT--to192.168.0.1-192.168.0.10
3.4.5-jMASQUERADE
-jMASQUERADE
动态源地址转换(动态IP的情况下使用)
iptables-tnat-APOSTROUTING-s192.168.0.0/24-jMASQUERADE
将源地址是192.168.0.0/24的数据包进行地址伪装
3.5附加模块
按包状态匹配
(state)
按来源MAC匹配(mac)
按包速率匹配
(limit)
多端口匹配
(multiport)
3.5.1state
-mstate--state状态
状态:
NEW、RELATED、ESTABLISHED、INVALID
NEW:
有别于tcp的syn
ESTABLISHED:
连接态
RELATED:
衍生态,与conntrack关联(FTP)
INVALID:
不能被识别属于哪个连接或没有任何状态
iptables-AINPUT-mstate--stateRELATED,ESTABLISHED\
3.5.2mac
-mmac--mac-sourceMAC
匹配某个MAC地址
iptables-AFORWARD-m--mac-sourcexx:
xx:
xx\
阻断来自某MAC地址的数据包,通过本机
MAC地址不过路由,不要试图去匹配路由后面的某个MAC地址
3.5.3limit
-mlimit--limit匹配速率[--burst缓冲数量]
用一定速率去匹配数据包
iptables-AFORWARD-d192.168.0.1-mlimit--limit50/s\
iptables-AFORWARD-d192.168.0.1-jDROP
limit仅仅是用一定的速率去匹配数据包,并非“限制”
3.5.4multiport
-mmultiport<
--sports|--dports|--ports>
端口1[,端口2,..,端口n]
一次性匹配多个端口,可以区分源端口,目的端口或不指定端口
iptables-AINPUT-ptcp-mmultiports--ports\
21,22,25,80,110-jACCEPT
必须与-p参数一起使用
4.实例分析
单服务器的防护
如何做网关
如何限制内网用户
内网如何做对外服务器
连接追踪模块
4.1单服务器的防护
弄清对外服务对象
书写规则
网络接口lo的处理
状态监测的处理
协议+端口的处理
实例:
一个普通的web服务器
iptables-AINPUT-ilo-jACCEPT
iptables-AINPUT-ptcp-mmultiport22,80-jACCEPT
iptables-AINPUT-mstate--stateRELATED,ESTABLISHED-jACCEPT
确保规则循序正确,弄清逻辑关系,学会时刻使用-vnL
4.2如何做网关
弄清网络拓扑
本机上网
设置nat
启用路由转发
地址伪装SNAT/MASQUERADE
ADSL拨号上网的拓扑
echo"
1"
>
/proc/sys/net/ipv4/ip_forward
iptables-tnat-APOSTROUTING-s192.168.1.0/24-oppp0\
4.3如何限制内网用户
过滤位置filer表FORWARD链
匹配条件-s-d-p--s/dport
处理动作ACCEPTDROP
iptables-AFORWARD-s192.168.0.3-jDROP
iptables-AFORWARD-mmac--mac-source11:
22:
33:
44:
55:
66\
iptables-AFORWARD-d-jDROP
4.4内网如何做对外服务器
服务协议(TCP/UDP)
对外服务端口
内部服务器私网IP
内部真正服务端口
-jDNAT--to192.168.1.1
-jDNAT--to192.168.1.2:
4.5连接追踪模块
为什么要使用连接追踪模块
FTP协议的传输原理
传统防火墙的做法
如何使用
4.5.1FTP协议传输原理
使用端口
commandport
dataport
传输模式
主动模式(ACTIVE)
被动模式(PASSIVE)
主动模式
client
server
xxxx|---|----------|-->
|21
yyyy|<
--|----------|---|20
FW1
FW2
被动模式
xxxx|---|----------|--->
yyyy|---|----------|--->
|zzzz
4.5.2传统防火墙的做法
只使用主动模式,打开TCP/20
防火墙打开高范围端口
配置FTP服务,减小被动模式端口范围
4.5.3如何使用连接追踪模块
modprobeipt_conntrack_ftp
modprobeipt_nat_ftp
iptables-AINPUT-ptcp--dport21-jACCEPT
iptables-AINPUT-mstate--state\
RELATED,ESTABLISHED-jACCEPT
5.网管策略
怕什么
能做什么
让什么vs不让什么
三大“纪律”五项“注意”
其他注意事项
5.1必加项
/proc/sys/net/ipv4/tcp_syncookies
\
/proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
modprobeip_conntrack_ftp
modprobeip_nat_ftp
5.2可选方案
堵:
iptables-AFORWARD-ptcp--dportxxx-jDROP
iptables-AFORWARD-ptcp--dportyyy:
zzz-jDROP
通:
iptables-AFORWARD-ptcp--dportxxx-jACCEPT
zzz-jACCEPT
iptables-AFORWARD-mstate--stateRELATED,ESTABLISHED\
iptables-PFORWARDDROP
5.3三大“纪律”五项“注意”
三大“纪律”——专表专用
filter
nat
mangle
五项“注意”——注意数据包的走向
PREROUTING
INPUT
FORWARD
POSTROUTING
5.4其他注意事项
养成好的习惯
iptables-vnL
iptables-save
注意逻辑顺序
iptables-AINPUT-ptcp--dportxxx-jACCEPT
iptables-IINPUT-ptcp--dportyyy-jACCEPT
学会写简单的脚本
6.FAQ.1
Q:
我设置了iptables-AOUTPUT-d202.xx.xx.xx-jDROP
为何内网用户还是可以访问那个地址?
A:
filter表的OUTPUT链是本机访问外面的必经之路,内网数据不经过该链
我添加了iptables-AFORWARD-d202.xx.xx.xx-jDROP
检查整个规则是否存在逻辑错误,看是否在DROP前有ACCEPT
iptables-tnat-APOSTROUTING-ieth1-oeth2-jMASQUERADE
这条语句为何报错?
POSTROUTING链不支持“流入接口”-i参数
同理,PREROUTING链不支持“流出接口”-o参数
6.FAQ.2
我应该怎么查看某个模块具体该如何使用?
ipitables-m模块名-h
执行iptables-AFORWARD-mxxx-jyyy
提示iptables: