firewall | iptables | 防火墙

防火墙

防火墙介绍

  • 防火墙:在计算机领域,防火墙是用于保护内网信息安全的设备,其会依照用户定义的规则,允许或限制数据的传输

  • 分类

    • 逻辑:

      • 主机防火墙:针对单个主机
      • 网络防火墙:针对网络进行防护,处于网络边缘,防火墙背后是局域网
    • 物理:

      • 硬件防火墙:在硬件级别实现防火墙,另一部分基于软件实现,性能高,成本高。常处于网络边缘

        • 如cisco(思科)ASA

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mRPd5vSY-1639297473097)(Firewall%E9%98%B2%E7%81%AB%E5%A2%99.assets/image-20211203162148285.png)]

      • 软件防火墙:单独使用 具备配置数据包通过规则 的软件来实现数据包过滤,其性能相较于硬件防火墙低,成本低,在一定程度上会影响到主机系统性能。对于Linux系统已自带,直接使用即可。多见于单主机系统,个人计算机或网络安全组

    • web应用防火墙(WAF):Web应用防火墙是对web防护(网页保护)的安全防护设备(软件),主要用于截获所有HTTP数据或仅仅满足某些规则的会话,多见于云平台中。

  • 防火墙性能指标

    • 吞吐量:在没有帧丢失的情况下,设备能接受并转发的最大数据速率,与防火墙的网卡速率,背板(主板)转发能力有关
    • 并发连接数:越大越好
    • 新建连接数:适宜
    • 时延:越小越好
    • 抖动:抖动会影响防火墙正常工作

iptables介绍

介绍

  • iptables不是防火墙,是防火墙用户代理,用于把用户的安全设置添加到“安全框架”中
  • “安全框架”是防火墙,名称为netfifilter
  • netfifilter位于内核空间中,是Linux操作系统核心层内部的一个数据包处理模块
  • iptables是用于在用户空间对内核空间的netfifilter进行操作的命令行工具

功能

  • netfifilter/iptables可简称为iptables,为Linux平台下的包过滤防火墙。作用在OSI七层参考模型的第三层,可过滤源IP,目的IP,相关传输协议(TCP,UDP等)
  • 具体功能
    • 数据包过滤(防火墙)
    • 数据包重定向(转发)
    • 网络地址转换(NAT)

规则(rules)

  • 规则是iptables的工作依据

  • iptables是按照运维人员所定义的条件(规则rules)来工作

  • 规则存储在内核空间的数据包过滤表中,这些规则分别指定了源地址、目的地址,传输协议(TCP、UDP、ICMP)和服务类型(HTTP、FTP)等

  • 数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,比如放行(ACCEPT)、拒绝(REJECT)、丢弃(DROP)等

  • 配置防火墙主要工作就是对iptables规则进行增删改

  • 当客户端访问服务器端的web服务时,客户端发送访问请求报文至网卡,而tcp/ip协议栈是属于内核的一部分,所以,客户端的请求报文会通过内核的TCP协议传输到用户空间的web服务,而客户端报文的目标地址为web服务器所监听的套接字(ip:port)上,当web服务器响应客户端请求时,web服务所回应的响应报文的目标地址为客户端地址,我们说过,netfifilter才是真正的防火墙,属于内核的一部分,所以,我们要想让netfifilter起到作用,我们就需要在内核中设置“关口”,所有进出的数据报文都要通过这些关口,经检查,符合放行条件的准允放行,符合阻拦条件的则被阻止,于是就出现了input和output关口,在iptables中我们把关口叫做链由很多规则组成

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bIrOExaJ-1639297473098)(Firewall%E9%98%B2%E7%81%AB%E5%A2%99.assets/image-20211203172443672.png)]

  • 如果客户端发到本机的报文中包含的服务器地址并不是本机,而是其他服务器,此时本机就应该能够进行转发(内核支持的IP_FORWARD功能),此时我们的主机类似于路由器,所以我们会看到在iptables中,所谓的关口并只有上面所提到的input及output这两个,应该还有“路由前”,“转发”,“路由后”,它们所对应的英文名称分别为“prerouting”, “forward”, “postrouting” 这就是我们说到的==5链==

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hXbPhoIM-1639297473099)(Firewall%E9%98%B2%E7%81%AB%E5%A2%99.assets/image-20211203173005680.png)]

  • 把不同的“规则链”组合成能够完成某一特定功能集合分类,而这个集合分类我们就称为

  • iptables中共有5张表

    • fifilter: 过滤功能,确定是否放行该数据包,属于真正防火墙,内核模块:iptables_fifilter
    • nat: 网络地址转换功能,修改数据包中的源、目标IP地址或端口;内核模块:iptable_nat
    • mangle: 对数据包进行重新封装功能,为数据包设置标记;内核模块:iptable_mangle
    • raw: 确定是否对数据包进行跟踪;内核模块:iptables_raw
    • security:是否定义强制访问控制规则(后来添加,我们常说的四表,不包括这个)
  • 我们在应用防火墙时是以操作入口的,只要在相应的表中的规则链上添加规则即可实现某一功能

  • 表中的链

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-icybwQ8Y-1639297473099)(Firewall%E9%98%B2%E7%81%AB%E5%A2%99.assets/image-20211206163234890.png)]

    • CentOS7中,nat表新增INPUT规则链
  • 表的优先级

    raw>mangle>nat>fifilter(由高至低)

  • 数据包流经iptables流程

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LvRxDokX-1639297473100)(Firewall%E9%98%B2%E7%81%AB%E5%A2%99.assets/image-20211206165810242.png)]

匹配规则分类

基本匹配

  • 无需加载扩展模块,可以匹配源地址,目标地址,源端口,目标端口等

  • 常用选项

    -p 指定规则协议,tcp|udp|icmp|all 
    -s 指定数据包的源地址,ip|hostname 
    -d 指定目的地址 
    -i 输入接口 
    -o 输出接口 
    !  取反
    

扩展匹配

  • 需要加载扩展模块,匹配规则才能生效。分为显示匹配和隐式匹配

  • 显示匹配:必须使用**-m选项指明要调用的扩展模块的扩展机制以及需要手动**加载扩展模块

    常用选项

    • multiport:多端口
    iptables -I INPUT -d 192.168.139.20 -p tcp -m multiport --dports 22,80 -j ACCEPT
    #在INPUT链中开放 目标地址 192.168.139.20的 tcp 22,tcp80 端口 
    
    iptables -I OUTPUT -s 192.168.139.20 -p tcp -m multiport --sports 22,80 -j ACCEPT
    #在OUTPUT链中开放 源地址 192.168.139.20的 tcp 22,tcp80 端口 
    
    • iprange:多ip地址
    iptables -A INPUT -d 192.168.139.20 -p tcp --dport 23 -m iprange --src-range 192.168.139.10-192.168.139.20 -j ACCEPT
    iptables -A OUTPUT -s 192.168.139.20 -p tcp --sport 23 -m iprange --dst-range 192.168.139.10-192.168.139.20 -j ACCEPT
    
    • time:指定访问时间
    iptables -A INPUT -d 192.168.139.20 -p tcp --dport 888 -m time --weekdays Mon,Tus,Wed,Thu,Fri --timestart 08:00:00 --timestop 17:00:00 -j ACCEPT
    
    • string:字符串,对报文中的应用层数据做字符串模式匹配检测(通过算法实现)
    --algo {
         bm|kmp}			字符匹配查找时使用算法
    --string "STRING"		要查找的字符串
    --hex-string "HEX-STRING"	要查找的字符,先编码成16进制格式
    
    • connlimit:连接限制
    --connlimit-upto n	连接数小于等于n时匹配
    --connlimit-above n	连接数大于n时匹配
    
    • state:追踪本机上的请求和响应之间的数据报文的状态
    --state state
    NEW			新连接请求
    ESTABLISHED	已建立的连接(连接态)
    INVALID		无法识别的连接(无效态)
    RELATED		相关联的连接,当前连接是一个新请求,但附属于某个已存在的连接(衍生态)
    UNTRACKED	未追踪的连接
    
    • 对于进入的状态为ESTABLISHED都应该放行

    • 对于出去的状态为ESTABLISHED都应该放行

    • 严格检查进入的状态为NEW的连接

    • 所有状态为INVALIED都应该拒绝

  • 隐式匹配:使用**-p**选项指明协议时,无需再同时使用-m选项指明扩展模块以及不需要手动加载扩展模块

    常用选项

    • -p tcp
      	--sport 匹配报文源端口(可以是多个连续范围的端口)
          --dport 匹配报文目标端口(可以是多个连续范围的端口)
          --tcp-flags mask|comp 匹配报文中的tcp协议的标志位
      -p udp 
      	--sport 匹配报文源端口(可以是多个连续范围的端口)
      	--dport 匹配报文目标端口(可以是多个连续范围的端口)
      --icmp-type 
      	0/0:echo reply		允许其他主机ping 
      	8/0:echo request	允许ping其他主机
      

动作(target)

  • ACCEPT:允许数据包通过

  • DROP:直接丢弃数据包,不回应信息

  • REJECT:拒绝数据包通过,回应信息给客户端

  • SNAT:源地址转换

    • 修改数据包源地址,当内网数据包到达防火墙后,防火墙会使用外部地址替换掉数据包的源IP地址(目的IP地址不变),使网络内部主机能够与网络外部主机通信

    • iptables -t nat -A POSTROUTING -s 192.168.139.20 -o eth1 -j SNAT --to-source 202.12.10.100
      
  • DNAT:目标地址转换

    • 修改数据包目的地址,当防火墙收到来自外网的数据包后,会将该数据包的目的IP地址进行替换(源IP地址不变),重新转发到内网的主机

    • iptables -t nat -A PREROUTING -d 202.12.10.100 -p tcp --dport 80 -j DNAT --to- destination 192.168.139.20
      
  • MASQUERADE伪装。类似于SNAT,适用于动态的、临时会变的ip地址上,例如:家庭使用的宽带。用发送数据的网卡上的IP来替换源IP,对于IP地址不固定场合使用

  • REDIRECT:在本机做端口映射

  • LOG:在/var/log/message文件中记录日志信息,然后将数据包传递给下一条规则

制定规则策略

  • 黑名单:没有被拒绝的流量都可以通过,这种策略下管理员必须针对每一种新出现的攻击,制定新的规则(不推荐)

  • 白名单:没有被允许的流量都要拒绝,根据需要,将主机逐渐开放,目前一般都采用白名单策略(推荐

  • 制定iptables规则的思路

  • 选表,此表决定了数据报文处理的方式

  • 选链,此链决定了数据报文流经哪些位置

  • 制定匹配条件

  • 制定合适的动作,也就是相应的防火墙规则

语法结构

iptables [-t 表名] 管理选项 [链名] [条件匹配] [-j 目标动作]
表名:不指定表名时,默认filter表
管理选项:如A表示追加
链名:不指定链名时,默认表示该表内所有链,除非设置规则链的默认策略
条件匹配:如匹配源地址:-s 192.168.139.20
目标动作:如-j ACCEPT表允许数据包通过

# 案例:
iptables -t nat -A POSTROUTING -s 192.168.139.20 -o eth1 -j SNAT --to-source 202.12.10.100

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9hKILl10-1639297473100)(Firewall%E9%98%B2%E7%81%AB%E5%A2%99.assets/image-20211206193942710.png)]

  • 规则管理
-A|--append chain	追加新规则于指定链的尾部
-I|--insert chain [rulenum]	插入新规则于指定链的指定位置,默认为首部
-D|--delete chain rulenum	根据规则编号删除规则
  • 链管理
-N|--new chain		新建一个自定义的规则链
-X|--delete chain	删除用户自定义的引用计数为0的空链
-F|--flush [chain]	清空指定的规则链上的规则
-E|--rename-chain old-chain new-chain	重命名链
-P|--policy chain target	制定链表的默认策略(ACCEPT|DROP|REJECT),不建议更改!
  • 规则显示
-L|--list [chain [rulenum]]	列出规则
-v|--verbose	详细信息(常与L连用:-vL)
-n|--numeric	数字格式显示主机地址和端口号(常与L连用:-nL)
--line-numbers	列出规则时,显示其在链上的相应的编号
-S|--list-rules [chain [rulenum]]	显示指定链的所有规则
  • 查看端口

/etc/services文件记录了所有端口信息

[root@server2 ~]# cat /etc/services |grep ssh
ssh             22/tcp                          # The Secure Shell (SSH) Protocol
ssh             22/udp                          # The Secure Shell (SSH) Protocol
x11-ssh-offset  6010/tcp                        # SSH X11 forwarding offset
ssh             22/sctp                 # SSH
sshell          614/tcp                 # SSLshell
sshell          614/udp                 #       SSLshell
netconf-ssh     830/tcp                 # NETCONF over SSH
netconf-ssh     830/udp                 # NETCONF over SSH
sdo-ssh         3897/tcp                # Simple Distributed Objects over SSH
sdo-ssh         3897/udp                # Simple Distributed Objects over SSH
snmpssh         5161/tcp                # SNMP over SSH Transport Model
snmpssh-trap    5162/tcp                # SNMP Notification over SSH Transport Model
tl1-ssh         6252/tcp                # TL1 over SSH
tl1-ssh         6252/udp                # TL1 over SSH
ssh-mgmt        17235/tcp               # SSH Tectia Manager
ssh-mgmt        17235/udp               # SSH Tectia Manager
  • 常见端口及协议(空格的地方表示同上)
服务 协议 端口
ftp ftp 20/tcp :数据端口 21/tcp :控制端口
sshd ssh 22/tcp
telnet telnet 23 /tcp
mail smtp 25/tcp
smtps 465/tcp
pop3 110/tcp
pop3s 995/tcp
imap 143/tcp
imaps 993/tcp
dns domain 53/tcp 53/udp
dhcp bootps 67/udp
httpd http 80/tcp
https 443/tcp
nginx nginx 80/tcp
ntp ntp 123/udp
smaba \ 137,138,139/tcp
rsyslog rsyslog 514/udp
rsync rsync 873/tcp
nfsd nfs 2049/tcp
mysqld mysql 3306/tcp
redis redis 6379/tcp
tomcat tomcat 8080访问web的端口,
8005tomcat本身自己的端口,
8009与http等服务器建立连接的端口
php php-fpm 9000/tcp
zabbix zabbix-agent 10050/tcp
zabbix-server 10051/tcp
memcached memcached 11211/tcp

iptables应用

iptables-services

  • centos7系统中默认存在iptables命令,但此命令仅为简单查询及操作命令,不包含配置文件,安装iptables-services后,将直接生成配置文件,便于配置与保存

  • 为防止firewalld影响,建议先关闭firewalld

  • 在云平台,非必要时,不建议安装iptables-services。云平台自带安全组,安装iptables-services会降低性能

  • 安装
[root@server2 ~]# yum install -y iptables-services.x86_64 
[root@server2 ~]# rpm -ql iptables-services
/etc/sysconfig/ip6tables
/etc/sysconfig/iptables
/usr/lib/systemd/system/ip6tables.service
/usr/lib/systemd/system/iptables.service
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值