iptables
iptables是工作在用户空间的提供报文处理规则策略编辑的一个前段工具,报文数据处理是由位于内核空间中的netfilter模块进行,
netfilter根据策略规则对经内核处理的数据包进行匹配并执行对应的改写、转发、过滤等操作
SYNOPSIS
iptables [-t table] {-A|-C|-D} chain rule-specification -j ACTION ps:指定链、表–匹配条件–执行动作
table:raw<–mangle<–nat<–filter(忽略secrure表)
chain:PREROUTING-INPUT-FORWARD-OUTPUT-POSTROUTING
链在表中的分布
raw:PREROUTING-OUTPUT
mangle:PREROUTING-INPUT-FORWARD-OUTPUT-POSTROUTING
nat:PREROUTING-INPUT-OUTPUT-POSTROUTING
filter:INPUT-FORWARD-OUTPUT
ps:OUTPUT是唯一同时存在与四个表中的规则链
命令解析:
所属链表:
-t table (不指定的话,默认是filter)
链表操作命令:
表:增:-N 删:-X 改:-E 查:-L
链:增:-A -I 删:-D -F-Z 改:-R 查:-L
匹配条件:
基本匹配条件:-s,-d,-i,-o,-p
扩展匹配条件:隐式(tcp、udp、icmp),显式(需要用-m选项添加匹配模块)
隐式匹配:
tcp
--sport --dport 格式:a:b或a或b
--tcp-flags SYN,ACK,FIN,RST,URG,PSH (ALL) FLAG1,FALG2
udp
--sport --dport
icmp
--sport --dport
--icmp-type
echo reply 0/0
echo request 8/0
显式匹配:
multiport
--sports --dports 格式:a:b,c,d,e:f
iprange
--src-range --dst-range 格式:ipv4_1,ipv4_2-ipv4_3
time
--starttime --stoptime --weekdays --monthdays --datestart --datestop
string
--algo{dm|gcm} 匹配算法
--string "STRING"
connlimit
--connlimit-upto
--connlimit-above
--connlimit-mask 子网整体的连接数限制
limit
--limit 格式:RATE/minute、second、hour、day
--limit-burst 令牌桶
state
--state NEW,ESTABLISHED,RELATED,INVALID,UNTRACKED
执行动作:
ACCEPT、DROP、REJECT
LOG(默认/var/log/message,在/etc/rsyslog.conf中添加kern.warning /etc/log/*,自定义日志文件)
--log-level 指定日志的级别:emerg、alert、crit、error、warning、notice、info、debug
--log-prefix 给记录的日志信息添加“标签”,以便区分过滤
防火墙
分类:1、网络防火墙和主机防火墙;2、硬件防火墙和软件防火墙
网络防火墙:
职能:转发过滤,工作在filter表的FORWARD链
主机防火墙:
职能:过滤限制,工作在filter表的INPUT和OUTPUT链
软件防火墙依赖linux内核对数据包的处理的处理过滤,通用处理器的指令集对于数据包处理效率,
相较于硬件防火墙所用的专用指令集并不占优,但是有成本优势
报文的拆解转发需要在内核空间完成,iptables可以通过四表五链对报文进行很多组合操作,防火墙功能是运用filter这张表完成的其中一个应用。
PS: 端口和IP都有两个方向的报文:a、本机向远程的请求(走OUTPUT)和远程主机对本机对应的响应(走INPUT );b、远程主机向本机的请求(走INPUT)和本机对远程主机对应的响应(走OUTPUT),我们为了访问远程主机的服务开放了相应端口或IP,同时会有远程主机通过此端口或IP向本机访问的风险,这个风险可以通过“连接追踪”机制来控制,但是“连接追踪”能够记录的表的大小是有限制的,对于很繁忙的服务主机来说,连接追踪机制可能会成为一个问题
NAT
NAT对内外网的报文进行IP地址转换,以实现内外网的隔离,主要工作在nat表的PREROUTING链和POSTROUTING链上。
NAT主要实现两个功能:
1、对内网访问外网的报文进行源地址的改写,叫snat,在POSTROUTING上编写规则
条件匹配这一块跟filter的条件匹配类似,动作由ACCEPT、DROP、REJECT变为SNAT,跟上动作参数
-j SNAT --to-source IPADDR:PORT
-j MASQUERATE [--to-ports] 用于动态的网口IP
2、对外网的响应报文进行目标地址的改写,叫dnat,在PREROUTING链上进行
同样条件匹配类似,动作变为DNAT,跟上修改策略:
-j DNAT --to-destination IPADDR:PORT
3、端口映射
-j REDIRECT --to-ports
在本机上进行端口映射,只能定义在PREROUTING和OUTPUT链中
在测试DNAT时,对应SNAT规则也需要配置,才能正常DNAT,可以先尝试只配置DNAT规则,如果无法正常DNAT,
再尝试添加对应的SNAT规则,SNAT规则配置一条即可,DNAT规则需要根据实际情况配置不同的DNAT规则。