码迷,mamicode.com
首页 > 其他好文 > 详细

iptables学习

时间:2018-03-06 17:02:40      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:iptables

一:
防火墙:硬件,软件:规则(匹配标准,处理办法)
framework:
默认规则:
开放
关闭
规则:匹配标准
ip: 源ip,目的ip
tcp: sport dport
udp: sport dport
icmp: icmp-type
数据报文过滤:
openBSD
linux2.0
ipfw/Firewall
linux2.2
ipchain/firewall
linux2.4
iptables/netfilter

hook:钩子函数
prerouting
input
output
forward
postrouting
规则链
PRERROUTING
INPUT
OUTPUT
FORWORD
POSTROUTING
filterr(过滤):表
INPUT
OUTPUT
FORWORD
nat(地址转换):表
PRERROUTING
OUTPUT
POSTROUTING
mangle(拆开,修改,封装):表
PRERROUTING
INPUT
FORWORD
OUTPUT
POSTROUTING
raw(原始格式):表
PRERROUTING
OUTPUT

iptables由四表五链组成
链:
INPUT,OUTPUT,FORWORD,PRERROUTING,POSTROUTING
表:
filter,nat,raw,mangle
filter:
INPUT,FORWORD和OUTPUT
nat:
PRERROUTING(DNAT),OUTPUT,POSTROUTING(SNAT)
mangle:
PRERROUTING,INPUT,FORWORD,POSTROUTING和OUTPUT
raw:
PRERROUTING,OUTPUT

netfilter:framework,tcp/ip
命令:
管理规则
-A:附加一条规则,添加在链的尾部.
-I CHAIN [num]:插入一条规则,插入为对应CHAIN上的第num条规则.
-D CHAIN [num]:删除指定链中的第num条规则.
iptables -D INPUT 2
-R CHAIN [num]:替换指定的规则.
管理链
-F [CHAIN]:flash,清空指定规则链,如果省略CHAIN,则可以实现删除对应表中的所有链.
-P CHAIN:设定指定链的默认策略(或规则).
-N:自动义一个新的空链.
-X:删除一个自动义的空链.
-Z:清空指定链中所有规则的计数器.
-E:重命名自定义的链.
查看类
-L:查看指定表中的规则.
-n:以数字格式显示主机地址和端口号.
-v:显示详细信息.
-vv:显示更详细的信息.
-x:显示计数器的精确值.
--line-numbers:显示规则号码.
动作(target):
ACCEPT(放行)
DROP(丢弃)
REJECT(拒绝)
DNAT(目的地址转换)
SNAT(源地址转换)
REDIRECT(端口重定向)
MASQUERADE(地址伪装的)
LOG(记录日志的)
MARK(给报文打上标记的)

能否使用自定义链?
可以使用自定义链,但只有在调用时才能发挥作用,而且如果没有自定义链中的任何规则匹配,还应该有返回机制.
用可以删除自动义的空链
默认链无法删除
每个规则都有内置的计数器,一个用来计数被匹配的报文个数,一个用来匹配的报文体积之和.

规则:匹配标准,处理动作
iptables [-t table] command chain [num] 匹配标准 -j 处理办法
-j TARGET
ACCEPT:允许接受
DROP:悄悄丢弃
REJECT:丢弃后警告
匹配标准:
基本匹配(普通匹配)
-s --src指定源地址
-d , --dst指定目标地址
-p {tcp|udp|icmp}指定协议
-i ethx指定数据报文流入的接口
一般用在prerrouting,input,forward
-o ethx指定数据报文流出的接口
一般用在output,postrouting,forward
扩展匹配:
-m macth_name --spec_options
例如: -m tcp --dport 22
隐式扩展:不用特别指明由哪个模块进行的扩展,因为此时使用-p{}tcp|udp|icmp}
-p tcp
--sport:指定源端口
--dport:指定目标端口,可以是一个端口或者多个端口
--tcp-flags SYN,FIN,ACK,RST SYN=--SYN
SYN:第一次连接
FIN:断开连接
RST:重置连接
ACK:确认连接
PSH:推送
URG:紧急指定有效
--tcp-flags LIST1 LIST2 :
检查LIST1所指明的标志位,且这其中LIST2所表示出的位必须为1,而余下的必
须为0,没在LIST1中指明的不作检查.
--syn:匹配tcp三次握手的第一个报文.
-p udp:
--sport
--dport
-p icmp:
--icmp-type
可用数字表示类型.
0:echo-reply 别人给予响应
8:echo-request ping别人
显式扩展:必须指明由哪个模块进行的扩展,在iptables中用-m可完成此项功能.
在/lib/iptables/或者/lib64/xtables/下有许多的iptables模块,用来模块化匹配.而用模块匹配的叫扩展匹配,在其中.so前面为大写的是target.
显示扩展:使用额外的匹配机制.
-m EXTESTION --spe-opt
1, multiport扩展.
以离散方式定义多端口匹配,但最多十五个端口.
[!] --source-ports,--sports port[,port|,port:port]... :指明源端口多个
[!] --destination-ports,--dports port[,port|,port:port]... :指明目的端口多个.
[!] --ports port[,port|,port:port]... :又能匹配源又能匹配目标.
2, iprange扩展.
指定连续的IP地址范围时使用,(但一般不能扩展到整个网络).

          [!] --dst-range from[-to]:指明连续的目的ip地址范围.
     3, string扩展.
         检查报文中出现的字符串.
          -algo {bm|kmp}:指定检查使用的字符串比对算法,必须选项.
            bm=Boyer-Moore(人名)
            kmp=Kauth-Pratt-Morris
          --from offset:从那里开始检查字符串.
          --to offset:右侧偏移,即到哪里结束.
          [!] --string pattern:查找的字符串.
          [!] --hex-string pattern:使用十六进制编码查找.
     4, time扩展.
         根据报文到达的时间与指定的时间范围进行匹配.
          --datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
          --datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
          --timestart hh:mm[:ss]
          --timestop hh:mm[:ss]
          [!] --monthdays day[,day...]
          [!] --weekdays day[,day...]
     5, connlimit扩展
         根据每客户端ip(也可以是地址快)做并发连接数量匹配.
          --connlimit-above n:连接的数量大于n.
          --connlimit-upte n:连接的数量小于等于n.
     6, limit扩展
         基于收发报文的速率做检查.
          --limit rate[/second|/minute|/hour|/day]:
            最大平均匹配率,例如3/minute,单位有second,minute,hour,day,默认是3/hour
          --limit-burst number:峰值数量.
     7, state扩展
         根据连接追踪机制检查连接间的状态,结合ip_conntrack追踪会话的扩展.
         调整连接追踪功能所能够容纳的最大连接数量:
            /proc/sys/net/nf_conntrack_max
         已经追踪到并记录下的连接:
            /proc/net/nf_conntrack
         可追踪的连接状态:
          NEW:新连接的请求,连接追踪模板中不存在此连接的相关条目.
          ESTABLISHED:NEW状态之后,即已建立的连接.
          INVALID:无法识别的连接.
          RELATED:相关的连接,如ftp协议中的命令连接和数据连接之间的关系.
     -m state  --state NEW,ESTABLISHED  -j ACCEPT

开放被动连接的ftp服务.
ftp使用20,21两个端口,20是数据连接,21是控制连接,并且有两种连接的模式.
主动连接:
在主动模式下,tcp/20端口用于数据传输,tcp/21端口用于控制连接.
被动连接:
在被动连接下,tcp/21用于控制连接,>1023的随机端口用于数据传输
如果ftp工作在被动模式下,无法指定数据传输的端口,于是引入了RELATED状态,RELATED主要用于追踪与其相关的端口.
注意:ftp工作在主动模式或者被动模式与客户端的请求有关.
1)安装ftp追踪时的专用的模板.
在/lib/modules/2.6.32-431.el6.x86_64/kernel/kernel/trace下关于内核追踪相关的模块.
modprobe nf_conntrack_ftp
2)放行请求报文.
命令连接:NEW,ESTABLISHED
数据连接:RELATED,ESTABLISHED

保存规则:
service iptables save
保存在/etc/sysconfig/iptables
iptables-save>自定义文件
iptables-restore<自定义文件

iptables学习

标签:iptables

原文地址:http://blog.51cto.com/12814448/2083506

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!