Linux防火墙

防火墙的概念

  • 安全技术
入侵检测与管理系统(Intrusion Detection Systems): 特点是阻断任何网络访问,量化,定位来自内外网络的威胁情况,主要以提供报告和事后监督为主,提供有针对性的的指导措施和安全决策依据.一般采用旁路部署方式
入侵检测系统(Intrusion Prevertion System): 以透明模式工作,分析数据包的内容: 溢出攻击,拒绝服务攻击,木马,蠕虫,系统漏洞等进行准确的分析判断,在判定为攻击行为后立即予以阻断,主动而有效的保护网络的安全,一般采用在线部署方式
防火墙(Firewall): 隔离功能,工作在网络或主机边缘,对进出网络或主机的数据包基于一定的规则检查,并在匹配某规则时定义的行为进行处理的一组规则检查,并在匹配某规则时由规则定义的行为进行处理的一组功能的组件,基本上的实现都是在默认的情况下关闭所有的通过型访问,只开放允许访问的策略
防火墙的分类:
  主机防火墙: 服务范围为当前主机
  网络防火墙: 服务范围为防火墙一侧的局域网
  硬件防火墙: 在专用硬件级别实现部分功能的防火墙;另一个部分功能基于软件实现,如Checkpoing,NetScreen
  软件防火墙: 运行于通用硬件平台上的防火墙的应用软件
  网络层防火墙: OSI下面三层
  应用层防火墙/代理服务器: 代理网关,OSI七层
网络型防火墙
  包过滤防火墙
  网络层对数据包进行选择,选择的依据是系统内设置的过滤逻辑,被称为访问控制列表(ACL),通过检查数据流中每一个数据的源地址,目标地址,所用的端口和协议等状态等因素,或他们的组合来确定是否允许该数据包通过
    优点: 对用来说透明,处理速度快且易于维护
    缺点: 无法检查应用层数据,如病毒等
应用层防火墙
  应用层防火墙/代理服务器(Proxy Service) 
    将所有跨防火墙的网络通信链路分为两段
    内外网用户的访问都是通过代理服务器上的"链接"来实现
    优点: 在应用层对数据进行检查,比较安全
    缺点: 增减防火墙的负载
在现实生产中所使用的防火墙一般都是二者的结合,即先检查网络数据,通过后再送到应用层去检查
  • Netfilter
在linux中,防火墙的是在有Netfilter组件实现的
  Netfilter组件
    在内核空间,继承与linux内核中
    扩展各种网络服务的结构化底层框架
    内核选取5个位置放置五个hook(钩子)function(INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING),而这五个hook function向用户开放,用户可以通过一个命令工具(iptables,firewalld)向其写入规则
    由信息过滤表(table)组成,包含控制IP包处理规则集(rules),规则被分组放在chain上
由此我们可以规定数据包的的三种流向:
  流入本机: PREROUTING --> INPUT --> 用户空间
  流出本机: 用户空间 --> OUTPUT --> POSTROUTING
  转发: PREROUTING -->FORWARD --> POSTROUTING
  • 防火墙组成
四个表table: filter, nat, mangle, raw
  filter表: 过滤规则表,根据预定义的规则过滤符合条件的数据包
  nat: network address translation 地址转换规则表
  mangle: 修改数据标记为规则表
  raw: 关闭nat表上启用的连接追踪机制,加快封装包穿越防火墙速度
    优先级: raw --> mangle --> nat --> filter
五个内置的链(chain),即上面提到的钩子函数
  INPUT, OUTPUT, FORWARD, PREROUTING, POSTROUTING
  • 数据的流向图
路由发生的时刻
  报文进入本主机后
    判断目标主机
  报文发出之前
    判断经由哪个接口送往吓一跳

2 iptables命令的使用

iptables规则
  组成部分 报文的匹配条件 匹配到后处理动作
    匹配条件 根据协议报文特征指定
      基本匹配条件
      扩展匹配条件
    处理动作
      内建处理机制
      自定义处理机制 
    注意 报文不会经过自定义链 只能在内置链上通过规则进行引用后生效
iptables-save > /path/to/file #可以将现在的防火墙规则保存到指定文件
ipstables-restore < /path/to/file #可以将保存到文件中的防火墙规则重新导入
iptables [-t table] SUBCOMMAND CHAIN CRETERIA(规则) -j TARGET      
-t 
  filter nat mangle fraw  默认是filter
链管理
  -F flush 清空规则链 省略链 表示清空指定表上的所有链
  -N new 自定义规则链 创建自定义的规则链
  -X delete 删除用户自定义的规则链(必须是空的),并切其他链没有和它关联
  -Z zero 清零 置零规则计数器
  -P policy 为指定链设置默认策略 对filter表中的链而言,默认策略通常有ACCEPT,DROP,REJECT
  -E rEname 重命名自定义链 引用计数不为零的自定义链 无法改名 也无法删除
规则管理
  -A append 将规则追加到指定链的尾部
  -I insert 将规则插入到指定的链的指定位置
  -D delete
    两种指定规则
      1 指定匹配条件
      2 指定规则编号
  -R replace 替换指定链上的指定规则
查看
  -L list 列出指定链上的所有规则
    -n numberic 以数字格式显示地址和端口
    -v verbose 显示详细信息
      -vv -vvv
    --line-numbers 显示规则行号
    -x exactly 精确值
目标  jump 跳转
  -j TARGET jump至指定的TARGET
    ACCEPT 接受
    DROP 拒绝
    REJECT 强烈的拒绝
    REDIRECT 端口重定向
    LOG  记录日志
    MARK  做防火墙标记的
    DNAT 目标地址转换
    SNAT 源地址转换
    MASQUERADE 地址伪装
    RETURN 返回指定的链
  • 基本匹配
-s ,--src ,--source IP | NETaddr   检查报文的源地址是否符合此处指定的地址范围
-d ,--dst ,--destination IP |NETaddr 检查报文的目标地址是否符合此处指定的地址范围
-p ,--protocol {tcp|udp|icmp} 检查报文中的协议,即ip首部中的protocol所标识的协议
-i ,--in-interface IFACE 数据报文的流入接口 仅能用于PREROUTING INPUT及FORWARD链上
-o ,--out-interface IFACE 数据报文的流出接口 仅能用于POSTOUTING OUTPUT及FORWARD链上
  iptables -t filter -A INPUT -d 172.18.23.60 -p tcp -j ACCEPT # 接受目标地址到172.18.23.60 tcp协议的请求
  iptables -A INPUT -d 172.18.23.60 -p icmp -j ACCEPT #接受到172.18.23.60的icmp协议请求
  iptables -A INPUT -d 172.18.23.60 -i eth0 -j ACCEPT #接受到172.18.23.60并且是从eht0接口进来的请求
  iptables -A INPUT -d 172.18.23.60 -j DROP # 最后设置一个默认规则
  • 扩展匹配
-m 指明要是用扩展匹配 match_name --space_options
  例如  -m tcp --dport 22  匹配tcp的22端口
隐式扩展  对 -p protocol 指明的协议进行的扩展,可省略-m 选项
  -p tcp
    --dport PORT[-PORT] 目标端口,可以是单个端口,也可以是多个端口
      iptables -A INPUT -d 172.18.23.60 -p tcp --dport 22 -j ACCEPT(开启22)
      iptables -A OUTPUT -s 172.18.23.60 -p tcp --sport 22 -j ACCEPT
      iptables -A INPUT -d 172.18.23.60 -p tcp --dport 80 -j ACCEPT(开启80)
      iptables -A OUTPUT -s 172.18.23.60 -p tcp --sport 80 -j ACCEPT
    --tcp-flags: LIST1 LIST2 检查list1所指明的所有标志位,且其中 list2所表示出的所有标记位必须为1 而余下的必须为0 没在list1中指明的,不做检查
      SYN,ACK,FIN,RST,PSH,URG
      请求同步  确认号有效 断开 重置 推送 紧急指令(更快)
      --tcp-flags SYN,ACK,FIN,RST SYN  和 --syn 参数一样效果
      --tcp-flags ALL ALL  所有位都为1
      --tcp-flags ALL NONE 所有位都为0
  -p udp
    --dport
    --sport
  -p icmp
    --icmp-type 
      0 echo-reply
      8 echo-request
      iptables -A OUTPUT -s 172.18.23.60 -p icmp --icmp-type 8 -j ACCEPT #本机请求
      iptables -A INTPUT -d 172.18.23.60 -p icmp --icmp-type 0 -j ACCEPT  #其他主机回应本机
显式扩展 必须使用-m选项指定使用的扩展
  centos 6 man iptables,手册
  centos 7 man iptables-extensions,手册
1 multiport 多端口匹配 [!] 可以使用
  以离散方式定义多端口匹配,最多指定15个端口
    --source-ports, --sports port...
    --destination-ports, --dports port...
      iptables -I INPUT -s 172.18.0.0/16 -d 172.18.23.60 -p tcp -m multiport --dports 20,80 -j ACCEPT
2 iprange扩展 [!]
  指明连续的(但一般不能扩展为整个网络) IP地址范围时,使用
   --src-range from 指明连续的源ip地址范围
   --dst-range from 指明连续的源ip地址范围
    iptables -I INPUT -d 172.18.23.60 -p -tcp -m multiport --dports 22:23,80 -m iprange -src-range 172.18.100.0-172.18.150.0 -j ACCEPT  
3 string扩展
  检查报文中的出现的字符串
    --algo{bm|kmp}
     bm=boyer-moore
     kmp=knuth-pratt-morris
    --string=pattern  可以使用表达式
     iptables -I OUTPUT -m string --algo bm --string "movie" -j REJECT #根据协议报文匹配到的字符进行控制(不支持加密协议)
4 time 扩展
  根据报文到达的时间与指定的时间范围进行匹配
    --datastart
    --datastop
    --timestart
    --timestop
    --monthsdays
    --weekdays
      centos6 默认使用的是本地时间,centos7 使用的UTC时间
    iptables -I INPUT -d 172.18.23.60 -p tcp --dport 80 -m timestart 14:00 --timestop 16:00 -j REJECT # 在14:00-16:00之间拒绝到172.18.23.60服务
5 connlimit 连接限制
  根据没客户端ip(也可以是地址块)做并发连接的匹配
    --connlimit-above n 链接数量大于n
    --connlimit-upto n 链接数量小于等于n
    iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j REJECT
6 limit 扩展
    基于收发报文的速率进行检查
    iptables -A INPUT -d 172.18.23.60 -p icmp --icmp-type 8 -m limit --limit-burst 5 --limit 30/minute -j ACCEPT
    iptables -A OUTPUT -s 172.18.23.60 -p icmp --icmp-type 0 -j ACCEPT
7 state扩展 
  根据连接追踪机制检查连接时状态
  调节连接追踪功能能够容纳的最大连接数量
    cat /proc/net/nf_conntrack
  已经追踪并记录下的连接
     /proc/net/nf_conntrack
  不同协议或连接类型追踪的时长
    /proc/sys/net/netfilter
  可追踪的连接状态,不同于http协议的有限状态机
    NEW 新发出的请求 连接追踪模板不存此链接相关的信息条目,因此 将其识别为第一次发出的请求
    ESTABLISHED NEW 状态之后,连接追踪模块为其建立的条目失效之前期间所进行的通信的状态
    RELATED 相关的连接 如ftp协议命令连接与数据连接的之间的关系
    INVALIED 无法识别的连接
    需要指定特定的模块,即state的模块
如何开放ftp的 防火墙
  如果有必要需手动安装nf_conntack_ftp.io
    1 装载专用模块
      insmod nf_conntrack_ftp.so
    2 放行请求报文
      命令连接 NEW,ESTABLISHED
      数据连接 RELATED,ESTABLISHED 
      iptables -A INPUT -d 172.18.23.60 -p tcp --dport 21 -m state --state NEW,ESTABLISHED - j ACCEPT
      iptables -A INPUT -d 172.18.23.60 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
    3 放行响应报文
      iptables -A OUTPUT -s 172.18.23.60 -p tcp -m state --state ESTABLISHED -j ACCEPT
8 log的扩展:记录日志,方便后期做检测
   -j LOG --log-levle level --log-prefix "connect:" 
     iptables -I INPUT -s 172.18.0.0/16 -p tcp -m multimport --dports 80,21,22,23 -m state --state NEW -j LOG --log-prefix "new connections: "
  • nat
nat 安全性  完成隐藏本地主机的目的 network address translation 网络层或传输层实现
proxy  代理  应用层
redirect #实现端口转发
nat
SNAT 只修改请求报文的源地址   在POSTROUTING 位置实现
DNAT 只修改请求报文的目标地址 在PREROUTING 位置实现
pnat 端口映射,防止nat的服务,端口冲突,发出去的报文无法回来,地址冲突
redirect 端口转发
  iptables -t nat -A PREROUTING -d ip -p tcp -m multiport --dports port1,port2 -j REDIRECT --to-ports 80
网关设置 nat 转换
  iptables -t nat -A POSTROUTING -s 192.168.150.0/24 -d ! 192.168.150.0/24 -p tcp --dport 80  -j SNAT  --to-source 172.18.23.60(有服务的外网主机)
  iptables -t nat -APREROUTING -d 172.18.23.60 -p  tcp  --dport 80 -j DNAT --to-destionation ip(有服务的内网主机)
ssh
  iptables -t nat -A PREROUTING -d 172.18.23.60 -p tcp --dport 22 -j DNAT --to-destination ip(有ssh服务器的主机)
端口映射
  iptables -t nat -A PREROUTING -d 172.18.23.60 -p tcp --dport 80 -j DNAT --to-destination ip:8080
  iptables -t nat -A PREROUTING -d 172.18.23.60 -p tcp --dport 22 -j DNAT --to-destination ip:222
adsl 拨号 ip 地址会经常改变
  iptables -t NAT POSTROUTING -s 192.168.150.0/24 -d ! 192.168.150.0/24 -j MASQUERADE  地址伪装
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,313评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,369评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,916评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,333评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,425评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,481评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,491评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,268评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,719评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,004评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,179评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,832评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,510评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,153评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,402评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,045评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,071评论 2 352

推荐阅读更多精彩内容