环境:
os :redhat5.8 64bit
webserver:tomcat7
先熟悉一下基础知识:
表和链关系:
表(table)是链(chains)的容器,链是规则(rules)的容器
默认的4个规则表
raw表:对数据包进行状态跟踪
mangle表:为数据包设置标记,流量控制类似于qosnat表:修改数据包中得源,目标ip地址和端口
filter表:数据包过滤 如果没有指定表的类型,默认指定filter表
-t 参数用于指定表类型如:
[root@client ~]# iptables -t filter -L -n
....查看fileter表
[root@client ~]# iptables -t nat -L -n
... 查看nat表
在不指定-t参数的情况下 查看的是filter表
链都是大写
INPUT: 进入的数据包 与本机有关的数据包,用于防护本机OUTPU: 出去的数据包 与本机有关的数据包,用于防护本机
FORWARD: 转发数据包 与本机无关数据包,用于防护一个网络
POSTROUTING:路由选择后处理数据包
PREROUTING:路由选择前处理数据包
每一个链中默认都有一条缺省的策略
[root@client ~]# iptables -L -n
Chain INPUT (policy ACCEPT)默认为接受策略
target prot opt source destination
规则表之间的优先顺序流程
raw、mangle、nat、filter
规则链之间的优先顺序流程
入站数据:PREROUTING、INPUT
出站数据:OUTPUT、POSTROUTING
转发数据:PREROUTING、FOURWARD、POSTROUTING
数据包的动作
写动作的时候都是大写
ACCEPT 允许数据包通过
DROP 丢弃数据包,就好像该数据包没有被接受一样(直接丢弃)常用
LOG 把数据信息记录到syslog
REJECT 丢弃数据包,同时发送适当的响应报文(丢弃后并返回一个信息说为什么丢弃)
RETURN 在调用链中继续处理数据包
iptables [-t 表名] 管理选项 [链名] [条件匹配] [-j 动作]
如果不指定表名,默认是filter表
如果不指定表里的链,默认是所有链
iptables -A 在链尾创建一条规则
-D 删除一条规则
-I 在指定位置(不指定则在链首)插入一条规则
-F 清空所有规则
-P 设置指定链的默认策略
-p 指定协议
-s 源
-d 目标
-R 替换指定位置或内容的规则
-N 创建一条自定义规则链
-X 删除一条自定义规则链
端口匹配
--sport 源端口
--dprot 目标端口
-i 定义指定某网卡的进入 如-i ech0 多个网卡选择0网卡
-o 定义指定某网卡的出口
TCP标记匹配
使用--tcp-flags 如SYN(序列号),ACK(确认号),RST,
ICMP类型匹配
使用—icmp-type 如 echo-request ,echo-reply
显式条件匹配
-m
MAC地址匹配
-m mac –mac-source 00:00:00:00:00:00
多端口匹配
-m multiport –dport 20,21,25
多IP地址匹配
-m iprange --src-range 192.168.1.20-192.168.1.30
数据包状态匹配
-m state
NEW 新发起的链接
ESTABLISHED 服务器正常响应的数据包 established:成立
RELATED与已有连接相关性的数据包(如FTP上传/下载建立的数据连接,这个连接与之前的FTP控制连接存在相关性)related:相关