防⽕墙iptable基础知识
iptables
iptables是什么?
iptables不是防⽕墙,是防⽕墙⽤户代理
⽤于把⽤户的安全设置添加到“安全框架”中
“安全框架”是防⽕墙
“安全框架”的名称为netfilter
netfilter位于内核空间中,是Linux操作系统核⼼层内部的⼀个数据包处理模块
iptables是⽤于在⽤户空间对内核空间的netfilter进⾏操作的命令⾏⼯具
netfilter/iptables功能
netfilter/iptables可简称为iptables,为Linux平台下的包过滤防⽕墙,是开源的,内核⾃带的,可以代替成本较⾼的
企业级硬件防⽕墙,能够实现如下功能:
数据包过滤,即防⽕墙
数据包重定向,即转发
⽹络地址转换,即可NAT
  注:平常我们使⽤iptables并不是防⽕墙的“服务”,⽽服务是由内核提供的。
iptables概念
iptables⼯作依据------规则(rules)
iptables是按照规则(rules)来办事的,⽽规则就是运维⼈员所定义的条件;规则⼀般定义为“如果数据包头符合这样的条件,就这样处理这个数据包”。
规则存储在内核空间的数据包过滤表中,这些规则分别指定了源地址、⽬的地址,传输协议(TCP、UDP、ICMP)和服务类型(HTTP、FTP)等。
当数据包与规则匹配时,iptables就根据规则所定义的⽅法来处理这些数据包,⽐如放⾏(ACCEPT)、拒
绝(REJECT)、丢弃(DROP)等  配置防⽕墙主要⼯作就是对iptables规则进⾏添加、修改、删除等
iptables中链的概念
举例说明:
  当客户端访问服务器端的web服务时,客户端发送访问请求报⽂⾄⽹卡,⽽tcp/ip协议栈是属于内核的⼀部分,所以,客户端的请求报⽂会通过内核的TCP协议传输到⽤户空间的web服务,⽽客户端报⽂的⽬标地址为web服务器所监听的套接字(ip:port)上,当web服务器响应客户端请求时,web服务所回应的响应报⽂的⽬标地址为客户端地址,我们说过,netfilter才是真正的防⽕墙,属于内核的⼀部分,所以,我们要想让netfilter起到作⽤,我们就需要在内核中设置“关⼝”,所以进出的数据报⽂都要通过这些关⼝,经检查,符合放⾏条件的准允放⾏,符合阻拦条件的则被阻⽌,于是就出现了input和output关⼝,然⽽在iptables中我们把关⼝叫做“链”。
  上⾯的举例中,如果客户端发到本机的报⽂中包含的服务器地址并不是本机,⽽是其他服务器,此时本机就应该能够进⾏转发,那么这个转发就是本机内核所⽀持的IP_FORWARD功能,此时我们的主机类似于路由器功能,所以我们会看到在iptables中,所谓的关⼝并只有上⾯所提到的input及output这两个,应该还有“路由前”,“转发”,“路由后”,它们所对应的英⽂名称分别
为“PREROUTING”,“FORWARD”,“POSTROUTING”,这就是我们说到的5链。
  通过上图可以看出,当我们在本地启动了防⽕墙功能时,数据报⽂需要经过以上关⼝,根据各报⽂情况,各报名经常的“链”可能不同,如果报⽂⽬标地址是本机,则会经常input链发往本机⽤户空间,如果报⽂⽬标不是本机,则会直接在内核空间中经常forward链和postrouting链转发出去。
  有的时候我们也经常听到⼈们在称呼input为“规则链”,这⼜是怎么回事呢?我们知道,防⽕墙的作⽤在于对经过的数据报⽂进⾏规则匹配,然后执⾏对应的“动作”,所以数据包经过这些关⼝时,必须匹配这个关⼝规则,但是关⼝规则可能不⽌⼀条,可能会有很多,当我们把众多规则放在⼀个关⼝上时,所有的数据包经常都要进⾏匹配,那么就形成了⼀个要匹配的规则链条,因此我们也把“链”称作“规则链”。
INPUT:处理⼊站数据包
OUTPUT:处理出站数据包
FORWARD:处理转发数据包(主要是将数据包转发⾄本机其它⽹卡)
当数据报⽂经过本机时,⽹卡接收数据报⽂⾄缓冲区,内核读取报⽂ip⾸部,发现报⽂不是送到本机时(⽬的ip
不是本机),由内核直接送到forward链做匹配,匹配之后若符合forward的规则,再经由postrouting送往下⼀
跳或⽬的主机。
PREROUTING:在进⾏路由选择前处理数据包,修改到达防⽕墙数据包的⽬的IP地址,⽤于判断⽬标主机
POSTROUTING:在进⾏路由选择后处理数据包,修改要离开防⽕墙数据包的源IP地址,判断经由哪⼀接⼝送往下⼀跳
iptables中表的概念
  每个“规则链”上都设置了⼀串规则,这样的话,我们就可以把不同的“规则链”组合成能够完成某⼀特定功能集合分类,⽽这个集合分类我们就称为表,iptables中共有5张表,学习iptables需要搞明⽩每种表的作⽤。
filter: 过滤功能,确定是否放⾏该数据包,属于真正防⽕墙,内核模块:iptables_filter
nat: ⽹络地址转换功能,修改数据包中的源、⽬标IP地址或端⼝;内核模块:iptable_nat
mangle: 对数据包进⾏重新封装功能,为数据包设置标记;内核模块:iptable_mangle
raw: 确定是否对数据包进⾏跟踪;内核模块:iptables_raw
security:是否定义强制访问控制规则;后加上的
iptables中表链之间的关系
  我们在应⽤防⽕墙时是以表为操作⼊⼝的,只要在相应的表中的规则链上添加规则即可实现某⼀功能。那么我们就应该知道哪张表包括哪些规则链,然后在规则链上操作即可。
filter表可以使⽤哪些链定义规则:INPUT,FORWARD,OUTPUT
nat表中可以使⽤哪些链定义规则:PREROUTING,OUTPUT ,POSTROUTING,INPUT
mangle 表中可以使⽤哪些链定义规则:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
raw表中可以使⽤哪些链定义规则:PREROUTING,OUTPUT
iptables中表的优先级:raw-mangle-nat-filter(由⾼⾄低)
数据包流经iptables流程
iptables规则匹配及动作
  规则:根据指定的匹配条件来尝试匹配每个流经此处的数据包,匹配成功,则由规则指定的处理动作进⾏处理。规则是由匹配条件和动作组成的,那么规则是什么呢?
举例说明:
  两个同学,⼀个⽩头发,⼀个⿊头发,同时进教室,⽽进教室的条件是只有⿊头发可以进⼊,⽩头发拒绝进⼊,⿊头发和⽩头发就是匹配条件,⽽可以进⼊和拒绝进⼊就是动作。
iptables规则匹配条件分类
  基本匹配条件:源地址,⽬标地址,源端⼝,⽬标端⼝等
  基本匹配使⽤选项及功能
-p 指定规则协议,tcp udp icmp all
-s 指定数据包的源地址,ip hostname
-d 指定⽬的地址
-i 输⼊接⼝
-o 输出接⼝
! 取反
  基本匹配的特点是:⽆需加载扩展模块,匹配规则⽣效
扩展匹配条件:
扩展匹配⼜分为显⽰匹配和隐式匹配。
扩展匹配的特点是:需要加载扩展模块,匹配规则⽅可⽣效。
隐式匹配的特点:使⽤-p选项指明协议时,⽆需再同时使⽤-m选项指明扩展模块以及不需要⼿动加载扩展模块;
显⽰匹配的特点:必须使⽤-m选项指明要调⽤的扩展模块的扩展机制以及需要⼿动加载扩展模块。
隐式匹配选项及功能
-p tcp
--sport 匹配报⽂源端⼝;可以给出多个端⼝,但只能是连续的端⼝范围
--dport 匹配报⽂⽬标端⼝;可以给出多个端⼝,但只能是连续的端⼝范围
--tcp-flags mask comp 匹配报⽂中的tcp协议的标志位
-p udp
--sport 匹配报⽂源端⼝;可以给出多个端⼝,但只能是连续的端⼝范围
--dport 匹配报⽂⽬标端⼝;可以给出多个端⼝,但只能是连续的端⼝范围
--icmp-type
0/0:echo reply 允许其他主机ping
8/0:echo request 允许ping其他主机
显式匹配使⽤选项及功能
multiport:多端⼝
iptables -I INPUT -d 192.168.2.10 -p tcp -m multiport --dports 22,80 -j ACCEPT
#在INPUT链中开放本机tcp 22,tcp80端⼝
iptables -I OUTPUT -s 192.168.2.10 -p tcp -m multiport --sports 22,80 -j ACCEPT
#在OUTPUT链中开发源端⼝tcp 22,tcp80
iprange:多ip地址
iptables -A INPUT -d 192.168.2.10 -p tcp --dport 23 -m iprange --src-range
192.168.2.11-192.168.2.21 -j ACCEPT
iptables -A OUTPUT -s 192.168.2.10 -p tcp --sport 23 -m iprange --dst-range
192.168.2.11-192.168.2.21 -j ACCEPT
tmie:指定访问时间范围
iptables -A INPUT -d 192.168.2.10 -p tcp --dport 901 -m time --weekdays
Mon,Tus,Wed,Thu,Fri --timestart 08:00:00 --time-stop 18:00:00 -j ACCEPT
iptables -A OUTPUT -s 192.168.2.10 -p tcp --sport 901 -j ACCEPT
string:字符串,对报⽂中的应⽤层数据做字符串模式匹配检测(通过算法实现)。
--algo {bm|kmp}:字符匹配查时使⽤算法
--string"STRING": 要查的字符串
--hex-string “HEX-STRING”: 要查的字符,先编码成16进制格式
connlimit:连接限制,根据每个客户端IP作并发连接数量限制。
--connlimit-upto n 连接数⼩于等于n时匹配
--connlimit-above n 连接数⼤于n时匹配
limit:报⽂速率限制
state:追踪本机上的请求和响应之间的数据报⽂的状态。状态有五种:INVALID, ESTABLISHED, NEW,
RELATED,UNTRACKED.
--state state
NEW 新连接请求
ESTABLISHED 已建⽴的连接
INVALID ⽆法识别的连接
RELATED 相关联的连接,当前连接是⼀个新请求,但附属于某个已存在的连接
UNTRACKED 未追踪的连接
1、对于进⼊的状态为ESTABLISHED都应该放⾏;
2、对于出去的状态为ESTABLISHED都应该放⾏;
3、严格检查进⼊的状态为NEW的连接;
4、所有状态为INVALIED都应该拒绝;
iptables规则中动作:iptables规则中的动作常称为target,也分为基本动作和扩展动作。tcp ip协议适用场合
ACCEPT:允许数据包通过
DROP:直接丢弃数据包,不给任何回应信息
REJECT:拒绝数据包通过,发送回应信息给客户端
SNAT:源地址转换
解释1:数据包从⽹卡发送出去的时候,把数据包中的源地址部分替换为指定的IP,接收⽅认为数据包的来源是被替换的那
个IP主机,返回响应时,也以被替换的IP地址进⾏。
解释2:修改数据包源地址,当内⽹数据包到达防⽕墙后,防⽕墙会使⽤外部地址替换掉数据包的源IP地址(⽬的IP地址不
变),使⽹络内部主机能够与⽹络外部主机通信。
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth1 -j SNAT --to-source
202.12.10.100
 MASQUERADE:伪装,类似于SNAT,适⽤于动态的、临时会变的ip地址上,例如:家庭使⽤的宽带。⽤发送数据的⽹卡上的IP来替换源IP,对于IP地址不固定场合使⽤。
DNAT:⽬标地址转换
解释1:数据包从⽹卡发出时,修改数据包中的⽬的IP,表现为你想访问A,但因⽹关做了DNAT,把所有访问A的数据包中
的⽬的IP地址全部修改为B,实际最终访问的是B。
解释2:改变数据包⽬的地址,当防⽕墙收到来⾃外⽹的数据包后,会将该数据包的⽬的IP地址进⾏替换(源IP地址不
变),重新转发到内⽹的主机。
iptables -t nat -A PREROUTING -d 202.12.10.100 -p tcp --dport 80 -j DNAT --todestination
192.168.10.1
REDIRECT:在本机做端⼝映射
LOG:在/var/log/message⽂件中记录⽇志信息,然后将数据包传递给下⼀条规则。路由是按照⽬的地址进⾏路由选择的,因此,DNAT是在PREROUTING链上进⾏的,SNAT是在数据包发出的时候进⾏的,因此是在POSTROUTING链上进⾏的。制定iptables规则策略
⿊名单:没有被拒绝的流量都可以通过,这种策略下管理员必须针对每⼀种新出现的攻击,制定新的规则,因此不推荐
⽩名单:没有被允许的流量都要拒绝,这种策略⽐较保守,根据需要,主机主机逐渐开放,⽬前⼀般都采⽤⽩名单策略,推荐。制定iptables规则思路
选择⼀张表,此表决定了数据报⽂处理的⽅式
选择⼀条链,此链决定了数据报⽂流经哪些位置
选择合适的条件,此条件决定了对数据报⽂做何种条件匹配
选择处理数据报⽂的动作,制定相应的防⽕墙规则
iptables基础语法结构
iptables [-t 表名] 管理选项 [链名] 1 [条件匹配] [-j ⽬标动作或跳转]
不指定表名时,默认表⽰filter表,不指定链名时,默认表⽰该表内所有链,除⾮设置规则链的默认策略,否则需要指定匹配条件。
iptables链管理⽅法
-N, --new-chain chain:新建⼀个⾃定义的规则链;
-X, --delete-chain [chain]:删除⽤户⾃定义的引⽤计数为0的空链;
-F, --flush [chain]:清空指定的规则链上的规则;
-E, --rename-chain old-chain new-chain:重命名链;
-Z, --zero [chain [rulenum]]:置零计数器;
注意:每个规则都有两个计数器
packets:被本规则所匹配到的所有报⽂的个数;
bytes:被本规则所匹配到的所有报⽂的⼤⼩之和;
-P, --policy chain target 制定链表的策略(ACCEPT|DROP|REJECT)
iptables规则管理
-A, --append chain rule-specification:追加新规则于指定链的尾部;
-I, --insert chain [rulenum] rule-specification:插⼊新规则于指定链的指定位置,默认为⾸部;
-R, --replace chain rulenum rule-specification:替换指定的规则为新的规则;
-D, --delete chain rulenum:根据规则编号删除规则;
-D, --delete chain rule-specification:根据规则本⾝删除规则;
iptables规则显⽰
-L, --list [chain]:列出规则;
-
v, --verbose:详细信息;
-vv 更详细的信息
-n, --numeric:数字格式显⽰主机地址和端⼝号;
-x, --exact:显⽰计数器的精确值,⽽⾮圆整后的数据;
--line-numbers:列出规则时,显⽰其在链上的相应的编号;
-S, --list-rules [chain]:显⽰指定链的所有规则;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。