Netfilter和iptables:
Netfile:指的是linux内核中实现包过滤防火墙的内部结构,不以程序或者文件的形式存在,属于内核空间的防火墙功能体系。
Iptables:指的是linux防火墙的命令工具,程序通常位于/sbin/iptables ,属于用户空间的防火墙管理体系。
Netfilter的框架:
Prerouting:进如本机后路由发生前
Input:到达本机
Output:本机发出
Forward:本机转发
Postrouting:路由发生后
报文流向经由的位置:
到本机内部:prerouting,input,
由本机发出:output,postrouting
由本机转发:prerouting,forward,postrouting
规则功能:
过滤:firewall
地址转换:Nat server
Mangle:修改报文首部中某些信息
Raw:关闭nat表上启用的连接追踪功能
规则表,链结构。四张表,五条链。
Filter:input,forward,output
Nat:prerouting,output,postrouting
Mangele:prerouting,input,forward,output,postrouting
Raw:prerouteing,output
关于规则次序检查法则:
(1)同类规则,匹配范围小的放上面
(2)不同类规则,匹配报文几率比较大的放上面。
(3)应该设置默认策略。
优先级由高到低:raw->mangle->nat->filter
注意:报文不能经过自定义链,只有在被内置链上的引用才能生效。
关于规则链的计数器:
Pkts:由规则或链匹配到的报文个数。
Bytes:又规则或链匹配到的所有报文大小之和。
Iptables 用法:
规则通过内核接口直接送至内核,因为会立即生效,但是不会永久有效。
若要永久生效,需要保存配置文件,开机启动。
Iptables [-t table] subcommand chain criteria –j target
-t table:默认为filter,共有filter,nat,mangle,raw四个可用。
Subcommand:
链:
-F:清空指定表上的指定链上的所有规则
-N:新建一个用户自定义的链,自定义链只能作为默认链上的跳转对象,即在默认的链通过引用来生效。
-X:删除用户自定义的空恋,非空自定义的链和内置链无法删除
-Z:将规则计数器重置为0
-P:设置链的默认处理机制,当所有无法匹配或者有匹配由无法做出有效处理机制时,默认策略生效。
-E:重命名自定义链。注意被引用的链,无法删除和改名。
规则:
-A:在链尾追加一条规则
-I:在指定位置插入一条规则
-D:删除指定规则
-R:替换指定规则
查看:
-L:列出指定链上的所有规则
-n:以数字的形式 显示出地址和端口号,即不反解
-v:详细格式,显示出规则的详细信息,包括规则计数器等。
-vv:显示更为详细..
–line-mumbers:显示规则编号
-x:显示计数器的精确值。
Pkts bytes target port pot in out source destination
Pkts:被本规则所匹配到包个数
Bytes:被本规则所匹配到的所包的大小之和。
Target:处理目标
Prot:协议{tcp udp icmp}
In :数据包流入接口
Out:数据包流出接口
Source:源地址
Destination:目标地址
Creteria:匹配条件:
检测ip首部,tcp udp和icmp首部
基于扩展机制,也可以进行额外的检查:
#注意:可以同时制定多个条件,默认多条件要同时满足
匹配条件两类:
通用匹配:
[!]-s,–src,–source IP|Network :检查报文中的源ip地址 。!可以取反。
-d,–dst,–destination:检查报文中的目标ip地址
-p,-protocol:检查报文中的协议,即ip首部中的protocols所标识的协议。
-I,–in-interface:数据报文的流入接口,通常只用于prerouting,input,forward链上的规则。
-o,-out-interface:检查报文的流出接口,通常用于forward,output,postrouting链上的规则。
Tcp:–dport 目标端口
–sport 源端口
–tcp-flags LIST1 LIST2 tcp的标志位,LIST1要检查的标志位,LIST2要在list1中出现过的。
Icmp:
–icmp-types 8:echo request 0:echo reply
扩展匹配:/lib64/xtables/目录存在的模块支持。
- 隐式扩展,如果在通用匹配上使用-p选项指明了协议的话。
- 显式扩展,必须制定使用扩展机制。
Target:
-j:jump ,跳转目标
内置目标:
Accept: 接受
Drop:丢弃
Reject:拒绝
案例:
通用匹配:
[[email protected] htdocs]# iptables -t filter -A INPUT -s 172.16.250.81 -d 172.16.249.75 -j ACCEPT 允许源地址81的访问75的
[[email protected] htdocs]# iptables -R INPUT 2 -s 172.16.250.81 -d 172.16.249.75 -p icmp -i eth1 -j ACCEPT 重命名上条记录的加了一个经过eth1的所有icmp协议都允许
[[email protected] htdocs]# iptables -D INPUT 3 删除input上第三条规则
[[email protected] htdocs]# iptables -A INPUT -d 172.16.249.75 -p icmp -j ACCEPT 允许任意主机ping 本机
显式扩展:必须指明的扩展机制:
-m 模块名称
每个模块会引入新的匹配机制,查看可以用的模块:rpm -ql iptables 以小写.so结尾的
Mutiport扩展:
离散方式指明多端口访问,最多可指定15个端口
专用选项: –source-ports,–sports [port1,port2]
–destination-port,–dports [port1,port2]
–ports [prot,…]
[[email protected] ~]# iptables -I INPUT 1 -d 172.16.249.75 -p tcp -m multiport –dports 22,80 -j ACCEPT
[[email protected] ~]# iptables -I OUTPUT 1 -s 172.16.249.75 -p tcp -m multiport –sports 22,80 -j ACCEPT
两条命令放行22,80 端口
Iprange扩展:
标识指定的连续ip地址范围:
选项:
[!]–src-range ip
[!]—dst-range ip
示例:
iptables -A INPUT -d 172.16.100.11 -p tcp –dport 23 -m iprange –src-range 172.16.100.1-172.16.100.100 -j ACCEPT
iptables -A OUTPUT -s 172.16.100.11 -p tcp –sport 23 -m iprange –dst-range 172.16.100.1-172.16.100.100 -j ACCEPT
String扩展:
检查报文中出现的字符串,与给定的字符串作匹配
字符串匹配检查算法:
Kmp,bm
专用选项:
–algo{kmp|bm}
–string “STRING”
–hex-string “hex_string””hex_string 为编码成16进制的字串。
[[email protected] htdocs]# iptables -I OUTPUT 1 -s 172.16.249.75 -p tcp –sport 80 -m string –string "sex" –algo kmp -j REJECT
Time扩展:
基于时间区间坐访问控制:
选项:
–datestart
–datestop
–timestart
–timestop
–weekdays day1,[day2]
[[email protected] htdocs]# iptables -I INPUT 1 -d 172.16.249.75 -p tcp –dport 80 -m time –timestart 08:30 –timestop 18:30 -j REJECT
[[email protected] htdocs]# date 0506150000 修改系统时间之后,查看丢弃的报文。
[[email protected] htdocs]# iptables -L -n -v
Chain INPUT (policy ACCEPT 18 packets, 1142 bytes)
pkts bytes target prot opt in out source destination
1 40 REJECT tcp — * * 0.0.0.0/0 172.16.249.75 tcp dpt:80 TIME from 08:30:00 to 18:30:00 reject-with icmp-port-unreachable
[[email protected] htdocs]# iptables -R INPUT 1 -d 172.16.249.75 -p tcp –dport 80 -m time –timestart 08:30 –timestop 18:30 –weekdays Mon,Tue,Thu,Fri -j REJECT
在周一,二,四,五,早8点30到晚8点30数据包丢弃…
Connlimit扩展:
基于连接数作限制,对每个ip能够发起的并发连接数作限制。
选项:
–comlimit-adove [n]
[[email protected] ~]# iptables -A INPUT -d 172.16.249.164 -p tcp –dport 22 -m connlimit –connlimit-above 5 -j REJECT
连接到第六个就无法连接了。之前连接的不包括.因为是事先打开的。
[[email protected] ~]# iptables -D INPUT 2 把input链上的第二条删除即可访问….
Limit 扩展:
基于发包速率作限制
选项: –limit n[/s/m/h/d] 时分秒
–limit-burst n 最大速度..
iptables -R INPUT 3 -d 172.16.100.11 -p icmp –icmp-type 8 -m limit –limit 10/minute –limit-burst 5 -j ACCEPT
======================单词整理======================
Netfile:网络过滤器,linux内核中包过滤防火墙的名称
Iptables:ip表,管理设置防火墙的命令工具
NAT:网络地址转换
Input:进入
Outfpu:出去
Forward:转发
Accept: 允许
Reject:拒绝
Drop:丢弃
Source:来源
Destination:目标
Policy:策略
Rule:规则
Mangle:调整 标记
Raw:原始的
General:通用的
Implicit:隐含的
Explicit:明确的
===========================================================