防火墙:硬件or软件
核心:规则=匹配标准+处理办法;
防火墙框架历史:
移植BSD
v
linux-2.0
ipfw/firewall
v
linux-2.2
ipchain/firewall
v
linux-2.4
iptables/netfilter
netfilter:frame
iptables:数据报文过滤,NAT,mangle等规则生成的工具;
iptables不是服务,但有服务脚本,服务脚本的主要作用是管理保存的生效的规则;
装载以及移除iptables/netfilter相关的内核模块:
iptables_nat, iptables_filter, iptables_mangle, iptables_raw, ip_nat, ip_conntrack
linux网络协议栈中存在五个hook点
———————————————————
hook function:钩子函数
1、prerouting
2、input
3、output
4、forward
5、postrouting
————————————————————
I、从不同的角度可以把规则分成五条链和四张表:
五条链:代表数据包达到的不同位置:
PREROUTING
INPUT
FORWARD
OUTPUT
POSTROUTING
四个表:代表实现不同功能
filter(过滤)表:
INPUT
OUTPUT
FORWARD
nat(地址转换)表
PREROUTING:DNAT
POSTROUTING:SNAT
mangle(拆开、修改、封装)表
PREROUTING
INPUT
OUTPUT
FORWARD
POSTROUTING
raw(原始)表
PREROUTING
OUTPUT
II、表和链结合起来表示不同位置可以实现的功能及其优先级
PREROUTING: raw->mangle->nat
INPUT: mangle->filter
FORWARD: mangle->filter
OUTPUT: raw->mangle->nat->filter
POSTROUTING: mangle->nat
III、自定义链
1、可以使用但只能被基本链调用
2、用户可以删除自定义的空链,默认链无法删除
每个规则都有两个计数器,分别代表被匹配的报文个数和大小
IV、规则书写:
规则=匹配标准+处理动作
iptables [-t TABLE] SUBCOMMAND CHAIN [num] 匹配标准 -j 处理办法
注意:重启iptables会导致清空规则链,然后读取/etc/sysconfig/iptables, 所以需要使用service iptables save保存规则,默认保存在/etc/sysconfig/iptables下,可以使用重定向保存到其他自定义文件,下次启动时使用service -restore 自定义的文件生效。
—————匹配标准—————
通用匹配:自身支持
-s, sip
-d, dip
-p, 4thprotocol
-i interface, 指定流入接口,一般只能用在PREROUTING、INPUT、FORWARD链
-o interface, 指定流出接口,一般只能用于OUTPUT、POSTROUTING、FORWARD链
SUBCOMMAND:
管理规则
-A:append,在链的尾部附加一条规则
-I CHAIN [num]:insert,插入为对应CHAIN上得第num条
-D CHAIN [num]:delete,删除指定链中的第num条规则
-R CHAIN [num]:replace,替换指定的规则
管理链
-F [CHAIN]:flush,清空指定规则链,如果省略CHAIN,则可以删除对应表中所有链
-P CHAIN:policy,设定指定链的默认策略
-N:自定义一条空链
-X:删除一个自定义的空链
-Z:清空计数器
-E:重命名自定义链
查看类:
-L:list,显示指定表中的所有规则
-n:numeric,以数字格式显示主机地址和端口号
-v:verbose,显示规则链详细信息
-x:exact,显示计数器的精确值
--line-number:显示规则号码
处理办法(target)
ACCEPT:放行
DROP:丢弃
REJECT:拒绝
DNAT:目标地址转换
SNAT:源地址转换
REDIRECT:端口重定向
MASQUERADE:地址伪装,源地址转换
MARK:打标记
LOG:日志
扩展匹配:需要额外扩展模块支持
隐含扩展:不用特别指明由哪个模块进行的扩展,因为此时使用了-p{tcp|udp|icmp}
-p tcp
--sport PORT [-PORT]:
--dport PORT [-PORT]:
--tcp-flags mask comp: 只检查mask指定的标志位,是逗号分隔的标志位列表;comp:此列表中出现的标志位必须为1,其他标记位为0;如 - -tcp-flgs SYN, FIN, ACK, RST SYN表示第一次握手报文;
--syn:表示第一次握手报文;
————————-
-p icmp
--icmp-type (0->request, 8->reply)
—————————-
-p udp
- -sport/dport:
显示拓展:使用额外的匹配机制,必须指明由哪个模块进行的拓展,使用-m选项即可完成此功能
-m EXTENSTION - -spe-opt
———————————————-
state:状态扩展,结合ip_conntrack追踪会话的状态
NEW(新连接请求)、ESTABLISHED(已建立的链接)、INVALID(非法攻击报文)、RELATED(FTP)
————————————————
multiport:离散的多端口匹配
—source-ports
—destination-ports
—ports
—————————————————
iprange:连续多个ip地址匹配
—src-range ip-ip
—dst-range ip-ip
—————————————————-
connlimit:链接数限制
—connlimit-above n
——————————————————
limit: 令牌桶限速
—limit:平均速率
—limit-burst:突发流量
————————————————————
string:内容字符串匹配限制
—algo:bm|kmp
—from:
—to:
—string pattern:
/proc/net/ip_conntrack
/proc/sys/net/ipv4/ip_conntrack_max
cat /proc/slabinfo
iptstate
ip_conntrack_tcp_timeout_established默认情况下timeout是5天(432000s),该文件在目录/proc/sys/net/ipv4/netfilter中。