您的位置:首页 > 运维架构 > Linux

Iptables总结

2016-07-25 21:28 381 查看
Iptables总结序:
为实现网络控制功能人们定义硬件防火墙,软件放火墙,主机防火墙,网络防火墙。其工作在主机或网络的边缘,对经由的报文根据预定义的规则进行检索控制。在linux中的iptables,它可以定义多条规则,将他们组成一个表,共同发挥作用,实现详细的访问控制功能,其定义的规则可以让在内核空间当中的netfilter来读取,以下进行详细的介绍:

一.简介
iptables 的前身叫ipfirewall (内核1.x时代),其工作功能极其有限(它需要将所有的规则都放进内核当中,这样规则才能够运行起来,而放进内核,这个做法一般是极其困难的)。当内核发展到2.x系列的时候,更名为ipchains,它可以定义多条规则,将他们串起来,共同发挥作用,而现在,它叫做iptables,可以将规则组成一个列表,实现绝对详细的访问控制功能。 这是一种工作在用户空间中,定义规则的工具,本身并不算是防火墙。其定义的规则,可以让在内核空间当中的netfilter来读取,并且实现让防火墙工作。而放入内核的地方必须要是特定的位置,必须是tcp/ip的协议栈经过的地方。而这个tcp/ip协议栈必须经过的地方,可以实现读取规则的地方就叫做 netfilter.(网络过滤器)

二.工作机制
1.Iptables有四个表:(raw->mangle->nat->filter)
filter:定义过滤(允许或不允许)
nat :定义地址转换的(修改报文的源地址或目标地址)
mangle:修改报文原数据 (拆解报文,做出修改,并重新封装超来)
raw :nat表上启用的连接追踪机制
2.Iptables有五个钩子函数(hook function):
PREROUTING(路由前)
INPUT(数据包流入口)
FORWARD(转发管卡)
OUTPUT(数据包出口)
POSTROUTING(路由后)
通过这五个规则链上定义的规则筛选数据包进行网络控制。
3.其对应为:
raw:PREROUTING,OUTPUT
mangle:PREOUTING,INTPUT,FORWARD,OUTPUT,POSTROUTING
nat:PREROUTING,INPUT,OUTPUT,POSTROUTING
filter:INPUT,FORWARD,OUTPUT
4.报文流向:
由本机到某个进程:PREROUTING->INPUT
由本机转发的报文:PREROUTING->FORWARD->POSTROUTING
由本机某个进程转发的:OUTPUTING->POSTROUTING
5.规则的组成的部分:
匹配条件:检查IP、TCP、UDP等报文的某属性进行匹配,也可借助扩展模块
处理动作:ACCEPT ,DORP ,REJECT,借助模块

三.编写iptables:
格式:iptables [-t ] COMMAND chain [-m matchname[per-match-options]] [-j targetname [per-target-options]]

COMMAND:定义如何对规则进行管理
chain:指定你接下来的规则到底是在哪个链上操作的,当定义策略的时候,是可以省略的
CRETIRIA:指定匹配标准
-j ACTION :指定如何进行处理

规则优化:
(1) 可安全放行所有入站及出站,且状态为ESTABLISHED的连接;
(2) 服务于同一类功能的规则,匹配条件严格的放前面,宽松放后面;
(3) 服务于不同类功能的规则,匹配报文可能性较大扩前面,较小放后面;
(4) 设置默认策略;
(a) 最后一条规则设定;
(b) 默认策略设定;

四:详解COMMAND:

1.链管理命令(这都是立即生效的)
-P :设置默认策略的(设定默认门是关着的还是开着的)
默认策略一般只有两种
iptables-P INPUT (DROP|ACCEPT) 默认是关的/默认是开的

-F :FLASH,清空规则链的(注意每个链的管理权限)
iptables-t nat -F PREROUTING
iptables-t nat -F 清空nat表的所有链

-N :NEW 支持用户新建一个链
iptables -Ninbound_tcp_web 表示附在tcp表上用于检查web的。

-X :用于删除用户自定义的空链
使用方法跟-N相同,但是在删除之前必须要将里面的链给清空昂了

-E :用来Rename chain主要是用来给用户自定义的链重命名
E oldname newname

-Z :清空链,及链中默认规则的计数器的(有两个计数器,被匹配到多少个数据包,多少个字节)
iptables -Z :清空

2.规则管理命令
-A:追加,在当前链的最后新增一个规则
-I num : 插入,把当前规则插入为第几条。
-R num:Replays替换/修改第几条规则
-D num:删除,明确指定删除第几条规则

3.查看管理命令 “-L”
附加子命令
-n:以数字的方式显示ip,它会将ip直接显示出来,如果不加-n,则会将ip反向解析成主机名。
-v:显示详细信息
-vv
-vvv :越多越详细
-x:在计数器上显示精确值,不做单位换算
--line-numbers : 显示规则的行号
-t nat:显示所有的关卡的信息

五:详解匹配标准

1.通用匹配:源地址目标地址的匹配
-s:指定作为源地址匹配,这里不能指定主机名称,必须是IP
IP| IP/MASK | 0.0.0.0/0.0.0.0
而且地址可以取反,加一个“!”表示除了哪个IP之外
-d:表示匹配目标地址
-p:用于匹配协议的(这里的协议通常有3种,TCP/UDP/ICMP)
-i eth0:从这块网卡流入的数据
流入一般用在INPUT和PREROUTING上
-o eth0:从这块网卡流出的数据
流出一般在OUTPUT和POSTROUTING上

2.扩展匹配
2.1隐含扩展:对协议的扩展
-p tcp :TCP协议的扩展。一般有三种扩展
-dport XX-XX:指定目标端口,不能指定多个非连续端口,只能指定单个端口,比如
-dport 21 或者 --dport 21-23 (此时表示21,22,23)
-sport:指定源端口
-tcp-fiags:TCP的标志位(SYN,ACK,FIN,PSH,RST,URG)
-echo-request(请求回显),一般用8 来表示
-echo-reply (响应的数据包)一般用0来表示

2.2显式扩展(-m)
扩展各种模块,-m multiport:表示启用多端口扩展
multiport扩展(以离散或连续的方式定义多端口匹配条件)

[!]--source-ports,--sports port[,port|,port:port]...:指定多个源端口;
[!]--destination-ports,--dports port[,port|,port:port]...:指定多个目标端口;
[!] --portsport[,port|,port:port]...:指定多个端口;

iprange扩展(以连续的ip地址范围指明连续的多地址匹配条件)
[!] --src-range from[-to]:源IP地址;
[!] --dst-range from[-to]:目标IP地址;

string扩展(对报文中的应用层数据做字符串匹配检测)
[!] --string pattern:要检测字符串模式;
[!] --hex-string pattern:要检测的字符串模式,16进制编码;

time扩展(根据报文到达的时间与指定的时间范围进行匹配度检测)
-datestartYYYY[-MM[-DD[Thh[:mm[:ss]]]]]:起始日期时间;
-datestopYYYY[-MM[-DD[Thh[:mm[:ss]]]]]:结束日期时间;
-timestart hh:mm[:ss]
-timestop hh:mm[:ss]
[!] --monthdays day[,day...]
[!] --weekdays day[,day...]

connlimit扩展(根据每客户端IP做并发连接数匹配)
-connlimit-upto n:连接数数量小于等于n,此时应该允许;
-connlimit-above n:连接数数量大于n,此时应该拒绝;

limit扩展(基于收发报文的速率进行匹配)
-limitrate[/second|/minute|/hour|/day]:平均速率
-limit-burst number:峰值速率

state扩展(状态检测;连接追踪机制(conntrack))
INVALID:无法识别的状态;
ESTABLISHED:已建立的连接;
NEW:新连接;
RELATED:相关联的连接;
UNTRACKED:未追踪的连接;

六:详解-jACTION

常用的ACTION:DROP:悄悄丢弃一般我们多用DROP来隐藏我们的身份,以及隐藏我们的链表REJECT:明示拒绝ACCEPT:接受MASQUERADE:源地址伪装REDIRECT:重定向:主要用于实现端口重定向MARK:打防火墙标记的RETURN:返回在自定义链执行完毕后使用返回,来返回原规则链。
七.练习:
1、限制本地主机的web服务器在周一不允许访问;新请求的速率不能超过100个每秒;web服务器包含了admin字符串的页面不允许访问;web服务器仅允许响应报文离开本机;
iptables -I INPUT -d 172.16.35.1 -p tcp--dport 80 -m state --state ESTABLISHED -j ACCEPTiptables -I INPUT -d 172.16.35.1 -p tcp --dport 80 -mstate --state NEW -m limit --limit 100/second -m time ! --weekdays Mon -jACCEPTiptables -A OUTPUT -s 172.16.35.1 -p tcp --sport 80 -mstate --state ESTABLISHED -m string ! --string "admin" --algo kmp -jACCEPT
2、在工作时间,即周一到周五的8:30-18:00,开放本机的ftp服务给172.18.0.0网络中的主机访问;数据下载请求的次数每分钟不得超过5个;

# lsmod | grep nf_conntrack_ftp# modprobe nf_conntrack_ftp# lsmod | grep nf_conntrack_ftpnf_conntrack_ftp 18638 0 nf_conntrack 105745 8nf_nat,nf_nat_ipv4,nf_nat_ipv6,xt_conntrack,nf_nat_masquerade_ipv4,nf_conntrack_ftp,nf_conntrack_ipv4,nf_conntrack_ipv6iptables -I INPUT 4 -d 172.18.0.0/24 -s172.16.35.1 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -m time --weekdaysMon,Tus,Wed,Thu,Fri --timestart 08:30:00 --timestop 18:00:00 -j ACCEPT
3、开放本机的ssh服务给172.18.x.1-172.18.x.100中的主机,x为你的学号,新请求建立的速率一分钟不得超过2个;仅允许响应报文通过其服务端口离开本机;
iptables -A INPUT -p tcp -m iprange --src-range172.18.%.1-172.18.%.100 -m limit --limit 2/min --dport 22 -j ACCEPTiptables -A OUTPUT -p tcp -m iprange --dst-range172.18.%.1-172.18.%.100 -m state ! --state NEW --sport 22 -j ACCEPT删除开始准备的ssh规则
123iptables –-line-numbers -Liptables –D INPUT [num]iptables –D OUTPUT [num]
4、拒绝TCP标志位全部为1及全部为0的报文访问本机;
iptables -A INPUT -d 172.16.35.1 -p tcp --tcp-flags ALLALL -j DROPiptables -A OUTPUT -s 172.16.35.1 -p tcp --tcp-flagsALL NONE -j DROP

5、允许本机ping别的主机;但不开放别的主机ping本机;
iptables -A INPUT -p icmp --icmp-type 0 -d172.16.35.1 -j ACCEPTiptables -A OUTPUT -p icmp --icmp-type 8 -s172.16.35.1 -j ACCEPT
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux 空间 防火墙