iptables

创建时间: 2016-06-27
最近修改时间: 2016-06-27

因个人水平有限,文章中存在不足,错误之处,还望指正

目录
简介
相关文件
表和链
选项
匹配扩展
操作实例

简介

相关文件

/etc/sysconfig/iptables

iptables防火墙的规则文件,iptables/netfilter服务在启动时会去读取该文件的内容

/etc/sysconfig/iptables-config

iptables的配置文件

表和链
raw  

mangle  
    此表主要用来mangle数据包,可以用mangle匹配来修改包TOS,TTL,MARK等特性
nat 
    此表用于NAT(Network Address Transfer),网络地址转换,可分为SNAT,DNAT和MASQUERADE。
filter  
    用于对数据包进行过滤(ACCEPT或DROP等)



PREROUTING
    路由前,数据包从网卡进入,但是还没有进行路由选择
INPUT
    数据包从内核空间流向用户空间
FORWARD
    路由后,数据包流向网卡(并未准备发送出去)
OUTPUT
    数据包从用户空间流向内核空间
POSTROUTING
    路由后,数据包流向网卡准备发送出去

选项

规则追加 | 删除
``# iptables [-t table] -[AD] chain rule-specification [options]

规则插入
# iptables [-t table] -I chain [rulenum] rule-specification [options]

规则替换
# iptables [-t table] -R chain rulenum rule-specification [options]v

列出 | 清空规则 | 清零计数器
# iptables [-t table] -[LFZ] [chain] [options]

为非自定义链添加默认策略
# iptables [-t table] -P chain target [options]

新建自定义空链
# iptables [-t table] -N chain

重命名自定义规则链
# iptables [-t table] -E old-chain-name new-chain-name

删除自定义规则链
# iptables [-t table] -X [chain]

-A, –append chain rule-specification
追加规则到指定链中

-D, –delete chain rulenum
删除指定链中的规则

-I, –insert chain [rulenum] rule-specification
在指定规则前插入一条规则

-R, –replace chain rulenum rule-specification
替换指定规则

-L, –list [chain]
列出指定链中的所有规则

 -n    不解析ip地址成域名,这样可加快显示速度
 -x    
 -v    显示详细信息
 -vv   显示更加
 --line-number 显示行号

-S, –list-rules
列出指定链中的所有规则,可查看规则链的默认策略

-F, –flush [chain]
清空指定链中的所有规则

-Z, –zero [chain [rulenum]]
清零指定规则上的计数器

-P, –policy chain target
指定规则链的默认策略(处理动作),ACCEPT 、DROP等

-N, –new-chain [chain [rulenum]]
创建自定义空链

-E, –rename-chain old-chain new-chain
重命名自定义链,不可用于非自定义链

-X, –delete-chain [chain]
删除自定义链,该链必须为空且不被其他规则链所引用

-j, –jump target
指定匹配规则后要执行的动作

ACCEPT      放行/接受
DROP        丢弃
REJECT      拒绝
RETURN      返回调用链,在自定义链中使用
LOG         日志记录
REDIRECT    端口重定向,将某一端口的请求转发到另一个端口
SNAT        源地址转换,在nat POSTROUTING中使用
DNAT        目标地址转换,在nat PREROUTING中使用
MASQUERADE  地址伪装,用于源地址转换
MARK        打标签

匹配扩展
扩展匹分为隐含扩展和显式扩展,隐含扩展在使用-p时就会自动引入扩展模块,而显式扩展就需要使用-m指定引用的模块

隐含扩展

不需要使用-m指定引用的模块,使用-p就会自动引入相关的模块

[!] -s, –protocol address[/mask][,…]
指定匹配的源主机地址,可以是单台主机,也可以是一个网段,若想按范围匹配,请参考 -m iprange

[!] -d address[/mask][,…]
指定匹配的目标主机地址

[!] -i, –protocol name
指定匹配数据包流入的网卡

[!] -o, –protocol name
指定匹配数据包流出的网卡

[!] -p, –protocol protocol
指定匹配的协议,tcp,udp,icmp,esp,udplite,ah,sctp或all,指定匹配的协议后又可跟不同的选项

-p tcp

--tcp-flags mask comp
    匹配tcp报文中的标志位(URG,PSH,RST,SYN,ACK,FIN | ALL NONE),mask表示要匹配的标志位(多个标志位用逗号隔开),comp表示在mask中出现的标志位为1,不指定的为0

--syn

[!] --sport port[:port]
    匹配数据包的源主机及地址

[!] --dport port[:port]
    匹配数据包的目标地址

-p udp

-p icmp

--icmp-type {type[/code]|typename}
    指定icmp报文的类型/类型码/类型名称,常用的是类型码,可用iptables -p -h 来查看类型名称

    icmp报文类型code    
        0    ping响应
        8    ping请求

显式扩展

使用显示扩展时需要用-m来指定要引用的扩展模块

-m 扩展模块 选项

multiport
多端口匹配,多用于匹配离散端口

[!] --sports port[,port|,port:port]...
    指定匹配数据包的源主机地址端口,多个离散端口之间用逗号隔开(,),连续端口之间使用冒号(port1:port2),最多可指定15个离散端口

[!] --dports port[,port|,port:port]...
    指定匹配数据包的目标主机端口

[!] --ports port[,port|,port:port]...
    指定匹配数据包的源、目标主机端口

iprange
地址范围匹配

[!] --src-range from[-to]
    匹配指定的源ip地址范围,from为起始地址,to为结束地址

[!] --dst-range from[-to]
    匹配指定的目标ip地址范围

time
时间范围匹配,可用于限制某个时间段内的访问

--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
    匹配指定日期范围,默认的开始时间为1920-01-01,结束时间为2038-01-19

--timestart hh:mm[:ss]
--timestop hh:mm[:ss]
    匹配指定日期范围,有效范围为00:00:00-23:59:59

[!] --monthdays days[,days...]
    匹配一个月中的第几天/几号,有效范围为1-31

[!] --weekdays days[,days...]
    匹配星期几,有效值为Mon,Tus,Wed,Thu,Fri,Sat,Sun或1-7

connlimit
并发请求控制

[!] --connlimit-above n
    指定每个客户端主机的连接上限

limit
报文流量控制,常见的流控机制有令牌桶控制机制

--limit-burst number
    指定数据包控制峰值/最多一次性能容纳几个(数据包队列的容量大小)

--limit rate[/second|/minute|/hour|/day]
    指定数据包的速率,默认为3/hour

string
字符串匹配,在做字符串匹配时需要指定使用的算法(–algo),需要内核2.4.16及以上版本

--algo {bm|kmp}
    指定所用的匹配算法,有bm和kmp两种(:有兴趣可以去了解一下)

--from offset
    指定要匹配字符串的起始位置,默认为0

--to offset
    指定要匹配字符串的结束位置,默认为数据包的长度(最后一位)

[!] --string pattern
    指定要匹配的内容

[!] --hex-string pattern
    指定要匹配的十六进制格式内容,此种方式匹配速度由于--string

state
状态匹配,用于对数据包进行状态追踪。基于ip_conntrack、 nf_conntrack来维持会话表,对于非常繁忙的服务器不建议使用此功能

[!] --state state
    匹配数据包的状态,多个状态之间用逗号(,)隔开

state有以下几种,NEW,ESTABLISHED,RELATED,INVALID
    NEW
        新连接状态,数据包已经开始一个新的连接,但在双方的传输中不能看到
    ESTABLISHED
        建立状态,数据包已经关联到某个连接上,并且在双方的传输中都能看考
    RELATED
        关联状态,数据包已经开始了一个新连接,但新连接关联到一个已存在的连接,如TCP数据传输和ICMP错误
    INVALID
        无效状态,由于某些错误导致数据包不能被识别,如内存溢出错误,icmp错误

调整iptables连接追踪功能

#查看连接追踪模块能容纳的最大会话数
cat /proc/sys/net/nf_conntrack_max

#查看当前所有的追踪连接
cat /proc/net/nf_conntrack

#查看连接追踪允许ESTABLISHED状态会话的时间(秒)
cat /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established

layer7


操作实例
操作环境:Red Hat Enterprise Linux 6.3
本地主机地址 192.168.15.4

规则保存与恢复

#将规则保存到iptables的默认规则文件中(/etc/sysconfig/iptables)
service iptables save

#将规则保存到指定文件中
iptables-save > /path/file

#从指定文件中恢复规则
iptables-restore < /path/file

#允许本机到本机的通讯

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

#拒绝恶意报文(TCP报文标记位全0或全1)

iptables -A INPUT -d 192.168.15.4 -p tcp --tcp-flag ALL ALL -j DROP
iptables -A INPUT -d 192.168.15.4 -p tcp --tcp-flags ALL NONE -j DROP

#对192.168.15.0/24网络开放ssh服务

iptables -A INPUT -s 192.168.15.0/24 -d 192.168.15.4 --dport 22 -j ACCEPT
iptables -A OUTPUT -s 192.168.15.4 -d 192.168.15.0/24 --sport 22 -j ACCEPT

#– 放行被动模式下的ftp服务

#1.放行ftp命令连接,包括INPUT链和OUTPUT链
#2.放行INPUT链中RELATED,ESTABLISHED状态下的请求
#3.放行OUTOUT链中ESTABLISHED状态下的请求
#4.装载ip_nat_ftp模块和ip_conntrack_ftp模块

#放行ftp命令连接,包括INPUT链和OUTPUT链
iptables -I INPUT 1 -d 192.168.15.4 -p tcp --dport 21 -j ACCEPT
iptables -I OUTPUT 1 -s 192.168.15.4 -p tcp --sport 21 -j ACCEPT

#放行INPUT链中RELATED,ESTABLISHED状态下的请求
iptables -A INPUT -d 192.168.15.4 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT

#放行OUTOUT链中ESTABLISHED状态下的请求
iptables -A OUTPUT -d 192.168.15.4 -p tcp -m state --state ESTABLISHED -j ACCEPT

#装载ip_nat_ftp模块和ip_conntrack_ftp模块
modprobe ip_nat_ftp
modprobe ip_conntrack_ftp

如果想在开机时自动装载该模块,可以把其配置到iptables的配置文件中
# vim /etc/sysconfig/iptables-config
这里写图片描述

#放行tftp服务

iptables -A INPUT -d 192.168.15.4 -p udp --dport 69 -j ACCEPT
iptables -A OUTPUT -s 192.168.15.4 -p udp --sport 69 -j ACCEPT

#放行dns服务

#客户端查询 UDP 53
#dns服务器之间域传输 TCP 53

#放行对本地主机的dns查询请求
iptables -A INPUT -d 192.168.15.4 -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -s 192.168.15.4 -p udp --sport 53 -j ACCEPT

#放行本地dns服务器对上级服务器的递归查询
iptables -A INPUT -d 192.168.15.4 -p tcp --sport 53 -j ACCEPT
iptables -A OUTPUT -s 192.168.15.4 -p tcp --dport 53 -j ACCEPT

#放行本地主机对其他dns服务器的查询请求
iptables -A INPUT -d 192.168.15.4 -p udp --sport 53 -j ACCEPT
iptables -A OUTPUT -s 192.168.15.4 -p udp --dport 53 -j ACCEPT

#放行其他dns服务器的递归查询请求
iptables -A INPUT -d 192.168.15.4 -p tcp --dport 53 -j ACCEPT
iptables -A OUTPUT -s 192.168.15.4 -p tcp --sport 53 -j ACCEPT

#限制本地主机的web服务器在周一不允许访问:新请求的速率不能超过100个每秒:web服务器包含了admin字符串的页面不允许访问:web服务器仅允许响应报文离开本机

iptables -A INPUT -d 192.168.15.4 -p tcp --dport 80 -m time --weekdays Mon -j DROP

iptables -A INPUT -m state --state NEW -m limit --limit 100/second --limit-burst 100 -j ACCEPT

iptables -I OUTPUT 1 -s 192.168.15.4 -p tcp --sport 80 -m string --algo kmp --string admin -j DROP
iptables -A OUTPUT -s 192.168.15.4 -p tcp --sport 80 -m state ESTABLISHED -j ACCEPT

#在工作时间,即周一到周五的8:30-18:00,开放本机的ftp服务给192.168.0.0网络中的主机访问:数据下载请求的次数每分钟不得超过5个

iptables -A INPUT -d 192.168.15.4 -p tcp --dport 80 -m time --weekdays Mon -j DROP

iptables -A INPUT -s 192.168.0.0/16 -s 192.168.15.4 -p tcp --dport 21 -m time --weekdays WED,TUS,Mon,Tue,Wed,Thu,Fri --timestart 08:30 --timestop 18:00 -m limit --limit 5/second --limit-burst 5 -j ACCEPT

iptables -A OUTPUT -s 192.168.15.4 -d 192.168.0.0/16 -p tcp --sport 21 -j ACCEPT

iptables -A INPUT -d 192.168.0.0/16 -d 192.168.15.4 -p tcp -m state RELATED,ESTABLISHED -j ACCEPT
iptables -I OUTPUT 1 -s 192.168.15.4 -d 192.168.0.0/16 -p tcp -m state -ESTABLISHED -j ACCEPT

参考
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值