【防火墙概念】
防火墙是工作于主机或网络边缘,对进出的报文根据定义的规则做出检查,进而对被规则匹配到的报文做出相应处理的套件。
【iptables的概念】
iptables是网络层防火墙,它的功能是编写规则,然后交由netfilter来执行生效。
【iptables的组成】
五链:
PREROUTING 路由前
INPUT 到达本机内部
FORWARD 转发
OUTPUT 本机发出
POSTROUTING 路由后
四表:
raw 连接追踪表
mangle 报头修改表
nat 地址转换表
filter 过滤表
七模块:
multiport 多端口匹配
iprange 地址范围匹配
string 字符串匹配
time 时间匹配
connlimit 连接数匹配
limit 速率匹配
state 状态匹配
【五链的数据流向图示】
【表跟链的对应关系】
raw: PREROUTING,OUTPUT
mangle: PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
nat: PREROUTING(SNAT),POSTROUTING(DNAT),OUTPUT
filter: INPUT,FORWARD,OUTPUT
【五链四表对照关系图示】
【数据报文的流向】
与本机进行通信:
流入:PREROUTING,INPUT
流出:OUTPUT,POSTROUTING
由本机转发:
请求:——>PREROUTING——>FORWARD——>POSTROUTING
响应:——>PREROUTING——>FORWARD——>POSTROUTING
数据报文的流向:
源IP和目标IP由流向决定
【写规则时的注意】
服务端:先进后出
客户端:先出后进
客户端端口是随机的,因此大多数场景下无需限定
【iptables的基本语法格式】
iptables [-t TABLE] COMMAND CHAIN CRETIERIA -j TARGET
-t TABLE:
raw,mangle,nat,filter
默认为filter
COMMAND:
链:
-F: flush,清空规则链
-N: new,自建一条链
-X: delete,删除一条自定义的空链
-Z: zero,计数器归零
-P: policy,设置默认策略,对filter表来讲,默认规则为ACCEPT或DROP
-E: 重命名自定义链
链中的规则:
-A: Append,附加
-I: Insert,插入
-D: Delete,删除
-R: Replace,替换
查询:
-L:List
-n: 数字格式显示主机地址和端口
-v: 详细格式
--line-numbers: 显示规则编号
-x: 不对计数器的计数结果做单位换算,而显示其精确值
CHAIN:
PREROUTING
INPUT
FORWARD
OUTPUT
POSTROUTING
CRETIERIA:
通用匹配:
-s: 源地址,--src,--source
-d: 目标地址,--dst,--destination
-p: 协议,类型一般为:tcp,udp,icmp
-i: 数据报文流入接口:PREROUTING,INPUT,FORWARD
-o: 数据报文流出接口:OUTPUT,FORWARD,POSTROUTING
扩展匹配:
隐式扩展:
-p tcp:
--sport PORT[-PORT]:指定源端口
--dport PORT[-PORT]:指定目标端口
--tcp-flags:要检查的标志位
-p udp:
--sport
--dport
显式扩展:必须明确说明使用哪个模块进行扩展,而后才能使用其扩展专用选项
-m
multiport:多端口限制匹配
专用选项:
--source-ports, --sports port[,port,port:port]
--destination-ports, --dports
--ports
iprange:地址范围限制匹配
专用选项:
[!] --src-ragne IP[-IP]
[!] --dst-range
string:字符串限制匹配
专用选项:
--algo {kmp|bm}
--string "STRING"
--hex-string "HEX_STRING": HEX_STRING为编码成16进制格式的字串
time:时间限制匹配
专用选项:
--datestart YYYY[-MM][-DD[Thh[:mm[:ss]]]]
--datestop
--timestart hh:mm[:ss]
--timestop hh:mm[:ss]
--weekdays day[,day]
connlimit:连接数限制匹配
专用选项:
[!] --connlimit-above [n]
limit:速率限制匹配
专用选项:
--limit n[/second|/minute|/hour|/day]
--limit-burst n
state:状态限制匹配
专用选项:
--state
连接追踪中的状态:
NEW: 新建立一个会话
ESTABLISHED:已建立的连接
RELATED: 有关联关系的连接
INVALID: 无法识别的连接
TARGET:
内置目标:
DROP
REJECT
ACCEPT
自定义的链:
自定义的链只能在五链中被调用执行,并且删除也必须要先解除调用关系后才能删除。
【iptables的常见操作模式】
删除规则:
iptables [-t table] -D chain rulenum
设置默认策略:
iptables [-t table] -P chain target
修改规则:
iptables [-t table] -R chain rulenum rule-specification
插入规则:
iptables [-t table] -I chain [rulenum] rule-specification
创建自定义链:
iptables [-t table] -N chain
删除自定义且0引用的空链
iptables [-t table] -X chain
重命名自定义链:
iptables [-t table] -E old_name new_name
【简单实例配置】
1.插入并匹配多端口:
# iptables -I INPUT -d 172.16.100.7 -p tcp -m multiport --dports 22,80 -j ACCEPT
# iptables -I OUTPUT -s 172.16.100.7 -p tcp -m multiport --sports 22,80 -j ACCEPT
2.附加并匹配地址范围:
# iptables -A INPUT -d 172.16.100.7 -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.7 -p tcp --sport 23 -m iprange --dst-range 172.16.100.1-172.16.100.100 -j ACCEPT
3.字符串匹配:
# iptables -I OUTPUT -m string --algo kmp --string "sex" -j DROP
4.时间匹配:
# iptables -I INPUT -d 172.16.100.7 -p tcp --dport 80 -m time --timestart 08:20 --timestop 18:40 --weekdays Mon,Tue,Thu,Fri -j REJECT
5.连接数匹配:
#iptables -A INPUT -d 172.16.100.7 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j DROP
6.速率匹配:
# iptables -A INPUT -d 172.16.100.7 -p icmp --icmp-type 8 -m limit --limit 20/minute --limit-burst 5 -j ACCEPT
7.状态匹配:
#iptables -I INPUT -d 172.16.100.7 -p tcp -m multiport --dports 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT
本文出自 “riaair小筑” 博客,请务必保留此出处http://riaair.blog.51cto.com/9177337/1542289
原文地址:http://riaair.blog.51cto.com/9177337/1542289