面对现如今的网络环境,网络安全意识是相当重要,而网络安全也越来越受到人们的重视,而网络防护中最简单且便捷的就是防火墙。
今天就来为大家介绍Linux下的防火墙的应用。
一、简介
Iptables一般分为主机防火墙(工作与主机边缘)和网络扩防火墙(工作与网络边缘)
防火墙主要作用:工作于主机或网络边缘,对于进出的报文根据定义的规则作检查,进而对被规则匹配到的报文作为相应处理。
而现实环境中会有硬件厂商设计的专门的防火墙硬件设备,其性能要比软件防火墙好。(但此设备也并非完全依靠硬件,毕竟每个企业的网络环境不一样,也需要软件搭配来完成防火功能)
硬件设备分类:IDS(入侵检测系统)、IPS(入侵防御系统)大部分还用到了HoneyPot(蜜罐)
在Linux下iptables并不是防火墙,而只是一种规则生成器,真正的防火墙是netfilter,所有的包过滤等功能都是由netfilter提供的。
netfilter有五个链来实现控制:INPUT到达本机内部的报文必经之路
PREROUTING:路由前
FORWARD:由本机转发的报文必经之路
OUTPUT:由本机发出的报文的必经之路
POSTROUTING:路由后
netfilter规则的功能(表):raw用户请求nat时限制追踪功能
mangle修改TCP报文首部内容
nat地址转换
filter包过滤
表和链的关系:filter表用到的链有INPUT, FORWARD, OUTPUT
mangle表用到全部的链
nat表用到的链有PREROUTING(SNAT),POSTROUTING(DNAT),OUTPUT
raw表用到的链有PREROUTING, OUTPUT
数据报文流程:
跟本机内部进程通信:
进入:PREROUTING, INPUT
出去:OUTPUT, POSTROUTING
由本机转发:
PREROUTING, FORWARD, POSTROUTING
数据报文的流向:
源IP和目标IP由流向决定;
如图示,主机A与主机B之间的通信过程
1、主机A的请求到达网卡1,网卡1交给PREROUTING
2、PREROUTING查看该信息是请求的本机还是别的主机,不是本机的话就交给 FORWARD
3、由FORWARD转发给POSTROUTING
4、由POSTROUTING决定给网卡2,让网卡2发给主机B
主机A与中间应用通信过程
1、主机A的请求到达网卡1,网卡1交给PREROUTING
2、PREROUTING查看该信后发现是请求的本机,所以交给INPUT处理
3、INPUT把信息交给上层处理
4、处理完信息后需要给主机A回复,所以交给了OUTPUT处理
5、OUTPUT在交给POSTROUTING,由POSTROUTING决定从哪个网卡发给主机A
二、iptables配置语法
基本语法:iptables [-t 表名] 链管理 链名 匹配条件 -j 处理动作
注:如果不指明表明默认为filter表
对链中规则的管理:-A 添加规则
-I 插入新规则
-D删除规则
-R替换规则
对规则的查询:-L 列出规则表
-L -n 以数字格式显示主机地址和端口
-L -v 详细格式
-L --line-numbers 显示规则编号
对链的管理: -F:flush, 清空规则链;
-N:new, 自建一条链
-X: delete, 删除一条自定义的空链
-Z:zero,计数器归零
-P:policy,设置默认策略,对filter表来讲,默认规则为ACCEPT或DROP;
-E:重命名自定义链
匹配条件:
通用匹配: -s 地址:指定报文源IP地址匹配的范围;可以是IP,也可以是网络地址;可使用!取反;
-d 地址:指定报文目标IP地址匹配的范围;
-p 协议:指定匹配报文的协议类型,一般有三种tcp, udp和icmp;
-i INTERFACE: 数据报文流入的接口;PREROUTING, INPUT, FORWARD
-o INTERFACE: 数据报文流出的接口;OUTPUT, FORWARD, POSTROUITING
扩展匹配
隐式扩展:当使用-p {tcp|udp|icmp}中的一种时,可以直接使用扩展专用选项;
-p tcp:
--sport PORT[-PORT]: 指定源端口
--dport PORT[-PORT]: 指定目标端口
--tcp-flags
-p udp:
--sport
--dport
显式扩展:必须明确说明使用哪个模块进行扩展,而后才能使用其扩展专用选项;
-m state --state
注:这些规则定义后是立即生效的,但不会永久有效,若想永久有效则需要修改规则文件
Iptables-save > /etc/sysconfig/iptables
【示例1】我们在本机上做访问规则,我们把本机的默认规则全部设置为拒绝
iptables -t filter -P INPUT -j DROP iptables -t filter -P OUTPUT -j DROP iptables -t filter -P FORWORD -j DROP
【示例2】在示例1的基础上开放自己ping自己
iptables -I INPUT -i lo -j ACCEPT iptables -I OUTPUT -o lo -j ACCEPT
显式扩展: -m 扩展模块名称
multiport: 多端口匹配
专用选项:
--source-ports, --sports port[,port,port:port]
--destination-ports, --dports
--ports
【示例3】:开放本机的web服务和ssh服务
iptables -I INPUT -d 172.16.249.29 -p tcp -m multiport --dports 22,80 -j ACCEPT iptables -I OUTPUT -s 172.16.249.29 -p tcp -m multiport --sports 22,80 -j ACCEPT
iprange: 匹配指定范围内的地址;
专用选项:
[!] --src-ragne IP[-IP]
[!] --dst-range
【示例4】:允许来自172.16.250.1-100的主机telnet本机
iptables -A INPUT -d 172.16.249.29 -p tcp --dport 23 -m iprange --src-range 172.16.250.1-172.16.250.100 -j ACCEPT iptables -A OUTPUT -s 172.16.249.29 -p tcp --sport 23 -m iprange --dst-range 172.16.250.1-172.16.250.100 -j ACCEPT
string: 字符串匹配,能够检测报文应用层中的字符串
字符匹配检查高效算法kmp, bm
专用选项:
--algo {kmp|bm}
--string "STRING"
--hex-string "HEX_STRING": HEX_STRING为编码成16进制格式的字串;
【示例5】:禁止访问本机含有“sex”的内容
iptables -I OUTPUT -m string --algo kmp --string "sex" -j DROP
time: 基于时间做访问控制
专用选项:
--datestart YYYY[-MM][-DD[Thh[:mm[:ss]]]]
--datestop
--timestart hh:mm[:ss]
--timestop hh:mm[:ss]
--weekdays day[,day]
【示例6】:仅周一周二周四周五的8:20-18:40开放本机的web服务
iptables -I INPUT -d 172.16.249.29 -p tcp --dport 80 -m time --timestart 08:20 --timestop 18:40 --weekdays Mon,Tue,Thu,Fri -j REJECT
connlimit: 连接数限制,对每IP所能够发起并发连接数做限制;
专用选项:
!] --connlimit-above [n]
【示例7】:限制每个IP最多能迸发2个ssh请求
iptables -A INPUT -d 172.16.249.29 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j DROP
limit: 速率限制
专用选项:
--limit n[/second|/minute|/hour|/day]
--limit-burst n
【示例8】:限制每分钟只能对本机发起20个ICMP请求报文并且空闲5个令牌
iptables -A INPUT -d 172.16.249.29 -p icmp --icmp-type 8 -m limit --limit 20/minute --limit-burst 5 -j ACCEPT
state: 状态检查
专用选项:
--state
连接追踪中的状态:
NEW: 新建立一个会话
ESTABLISHED:已建立的连接
RELATED: 有关联关系的连接
INVALID: 无法识别的连接
调整连接追踪功能所能容纳的连接的最大数目:
/proc/sys/net/nf_conntrack_max
当前追踪的所有连接
/proc/net/nf_conntrack
不同协议或连接类型追踪时的属性:
/proc/sys/net/netfilter目录:
注:优化规则方法,尽量减少规则条目,彼此不相关的条目,匹配机会较多的放在上边,属于同一功能的条目,匹配规则更严格的放在上面。
原文地址:http://8455162.blog.51cto.com/8445162/1542853