浅谈linux防火墙之iptables

浅谈linux防火墙

  • ❎ 防火墙概念
    • 1️⃣ 安全技术简介
    • 2️⃣ 防火墙的分类
    • 3️⃣ 网络层防火墙
    • 4️⃣ 应用层防火墙/代理服务型防火墙
  • ❎ iptables的简介
    • 1️⃣ Netfilter组件
    • 2️⃣ 防火墙工具
    • 3️⃣ iptables的组成
    • 4️⃣ 内核中数据包的传输过程
    • 5️⃣ iptables规则
    • 6️⃣ iptables添加要点
  • ❎ iptables命令
    • 1️⃣ 规则格式
    • 2️⃣ SUBCOMMAND:子命令
    • 3️⃣ 匹配条件
      • 基本匹配条件:无需加载模块,由iptables/netfilter自行提供
      • 扩展匹配条件:需要加载扩展模块(/usr/lib64/xtables/*.so),方可生效
        • ▶1 隐式扩展
        • ▶2 显式扩展
        • ▶3 iprange扩展
        • ▶4 mac扩展
        • ▶5 string扩展
        • ▶6 time扩展
        • ▶7 connlimit扩展
        • ▶8 limit扩展
        • ▶9 state扩展
    • 4️⃣ Target:处理动作
    • 5️⃣ 链管理
    • 6️⃣ iptables规则安排的基本原则
    • 7️⃣ iptables规则的保存和生效

❎ 防火墙概念

1️⃣ 安全技术简介

  • 入侵检测与管理系统(Intrusion Detection System)
    特点:不阻断任何网络访问
    功能:提供报告和事后监督
    旁路部署
  • 入侵防御系统(Intrusion Prevention System)
    特点:透明模式工作,分析数据包
    功能:判定为攻击时,立即阻断攻击连接
    在线部署
  • 防火墙(Firewall)
    特点:默认关闭所有通过访问,只开放允许访问的策略
    功能:基于设置的规则对进出网络或主机的数据包进行审查,并在符合相关规则时执行规则定义的某些行为
    工作在网络或主机的边缘,起到隔离的作用

2️⃣ 防火墙的分类

  • 按照服务范围分
    主机防火墙:服务范围为当前主机
    网络防火墙:服务范围为防火墙一侧的局域网
  • 按照实现方式分
    硬件防火墙:在专用硬件级别实现部分功能的防火墙,另一个部分功能基于软件实现,Checkpoint,NetScreen
    软件防火墙:运行于通用硬件平台之上的防火墙的应用软件
  • 按照工作的网络层次分
    网络层防火墙:OSI下面第三层
    应用层防火墙/代理服务器:代理网关,OSI七层

3️⃣ 网络层防火墙

  • 包过滤防火墙
  • 网络层对数据包进行选择,选择的依据是系统内设置的过滤逻辑,被称为访问控制列表(ACL),通过检查数据流中每个数据的源地址,目的地址,所用端口号和协议状态等因素,或他们的组合来确定是否允许该数据包通过
  • 优点:对用户来说透明,处理速度快且易于维护
  • 缺点:无法检查应用层数据,如病毒等

4️⃣ 应用层防火墙/代理服务型防火墙

  • 将所有跨越防火墙的网络通信链路分为两段
  • 内外网用户的访问都是通过代理服务器上的“链接”来实现
  • 优点:在应用层对数据进行检查,比较安全
  • 缺点:增加防火墙的负载

❎ iptables的简介

1️⃣ Netfilter组件

  • 内核空间,集成在linux内核中
  • 扩展各种网络服务的结构化底层框架
  • 内核中选取五个位置放了五个hook(勾子) function(INPUT, OUTPUT, FORWARD, PREROUTING, POSTROUTING),而这五个hook function向用户开放,用户可以通过一个命令工具(iptables)向其写入规则
  • 由信息过滤表(table)组成,包含控制IP包处理的规则集(rules),规则被分组放在链(chain)上
  • 三种报文流向:
    流入本机:PREROUTING --> INPUT-->用户空间进程
    流出本机:用户空间进程-->OUTPUT--> POSTROUTING
    转发:PREROUTING --> FORWARD --> POSTROUTING
  • 网络协议栈各个函数定义的点
    • NF_IP_PRE_ROUTING注意:进入网络堆栈后不久,任何传入流量都会触发此挂钩。在做出关于将数据包发送到何处的任何路由决策之前,将处理此挂钩。
    • NF_IP_LOCAL_IN注意:如果将数据包发送到本地系统,则在路由进来的数据包后触发此挂钩。
    • NF_IP_FORWARD注意:如果要将该数据包转发到另一台主机,则在路由传入数据包之后将触发此挂钩。
    • NF_IP_LOCAL_OUT:此钩子在到达网络堆栈后立即由任何本地创建的出站流量触发。
    • NF_IP_POST_ROUTING:此钩子在路由发生之后和即将被放置到线路上之前由任何传出或转发的流量触发。
      浅谈linux防火墙之iptables_第1张图片

2️⃣ 防火墙工具

  • iptables
    命令行工具,工作在用户空间
    用来编写规则,写好的规则被送往netfilter,告诉内核如何去处理信息包
  • firewalld
    • 软件包:
      firewalld
      firewalld-config
    • 管理工具:
      firewall-cmd 命令行工具
      firewall-config 图形工作
      浅谈linux防火墙之iptables_第2张图片

3️⃣ iptables的组成

  • 主要由四个表、五个链以及一些规则组成

  • 四个表(table): filter, nat, mangle, raw

  • filter: 过滤规则表,根据预定义的规则过滤符合条件的数据包

  • nat: network address translation 地址转换规则表

  • mangle: 修改数据标记位规则表

  • raw: 关闭NAT表上启用的连接跟踪机制,加快封包穿越防火墙速度

  • 优先级由高到低的顺序为: raw–>mangle–>nat–>filter

  • 五个内置链chain

    • PREROUTING:由NF_IP_PRE_ROUTING挂钩触发。
    • INPUT:由NF_IP_LOCAL_IN挂钩触发。
    • FORWARD:由NF_IP_FORWARD挂钩触发。
    • OUTPUT:由NF_IP_LOCAL_OUT挂钩触发。
    • POSTROUTING:由NF_IP_POST_ROUTING挂钩触发。
  • 表跟链的对应关系
    浅谈linux防火墙之iptables_第3张图片

4️⃣ 内核中数据包的传输过程

  • 当一个数据包进入网卡时,数据包首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去

  • 如果数据包就是进入本机的,数据包就会经过INPUT链供有关进程接收。本机上运行的程序可以发送数据包,这些数据包经过OUTPUT链,然后到达POSTROUTING链输出

  • 如果数据包是要转发出去的,且内核允许转发,数据包就会经过FORWARD链,然后到达POSTROUTING链输出

  • 流程图
    浅谈linux防火墙之iptables_第4张图片

5️⃣ iptables规则

  • 规则(rule):根据规则的匹配条件尝试匹配报文,对匹配成功的报文根据规则定义的处理动作作出处理

  • 匹配条件:默认为与条件,同时满足
    基本匹配:IP,端口,TCP的Flags(SYN, ACK等)
    扩展匹配:通过复杂高级功能匹配

  • 处理动作(target):
    内建处理动作:ACCEPT, DROP, REJECT, SNAT, DNAT, MASQUERADE, MARK, LOG...
    自定义处理动作:自定义chain,利用分类管理复杂情形

  • 链(chain):
    内置链:每个内置链对应于一个钩子函数
    自定义链:用于对内置链进行扩展或补充,可实现更灵活的规则组织管理机制
    只有Hook钩子调用自定义链时,才生效

6️⃣ iptables添加要点

  • iptables规则添加时考量点

    • 要实现哪种功能:判断添加在哪张表上
    • 报文流经的路径:判断添加在哪个链上
    • 报文的流向:判断源和目的
    • 匹配规则:业务需要
  • 链上规则的次序,即为检查的次序,因此隐含一定的法则

    • 同类规则(访问同一应用),匹配范围小的放上面
    • 不同类规则(访问不同应用),匹配到报文频率较大的放上面
    • 可由一条规则描述的多个规则合并为一个
    • 设置默认策略

❎ iptables命令

  • 环境准备
/ Centos7 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
/ Centos7 关闭防火墙
service iptables stop
chkconfig iptables off

1️⃣ 规则格式

浅谈linux防火墙之iptables_第5张图片

iptables [-t table] SUBCOMMAND chain rule-specification
rule-specification = [matches...] [target]
match = -m matchname [per-match-options]
target = -j targetname [per-target-options]
  • -t table:raw|mangle|nat|[filter]:指定表,filter表为默认
  • chain:PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING

2️⃣ SUBCOMMAND:子命令

查看类

  • 选项:
-L:list, 列出指定链上的所有规则,本选项须置后
-n:numberic,以数字格式显示地址和端口号
-v:verbose,详细信息
-vv:更详细
-x:exactly,显示计数器结果的精确值,而非单位转换后的易读值
--line-numbers:显示规则的序号
-S:selected,以iptables-save命令格式显示链上规则
  • 常用组合:
    --vnL
    --vnxL --line-numbers
  • 查看当前策略
[root@Centos7 ~]# iptables -vnL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination   
  • 查看当前的策略,并详细显示策略编号以及计数器的精确值
[root@Centos7 ~]# iptables -vnL --line-numbers
Chain INPUT (policy ACCEPT 73 packets, 5143 bytes)     / 计数器的值
num   pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 36 packets, 3136 bytes)
num   pkts bytes target     prot opt in     out     source               destination 

规则管理类

  • -A:append,追加

  • -I:insert, 插入,要指明插入至的规则编号,默认为第一条

  • -D:delete,删除
    (1) 指明规则序号
    (2) 指明规则本身

  • -R:replace,替换指定链上的指定规则编号

  • -F:flush,清空指定的规则链

  • -Z:zero,置零

  • iptables的每条规则都有两个计数器
    (1) 匹配到的报文的个数
    (2) 匹配到的所有报文的大小之和

  • 实验:iptables规则管理

  • 添加策略:阻止来自172.20.54.7主机的访问
    iptables -A INPUT -s 172.20.54.7 -j REJECT
    浅谈linux防火墙之iptables_第6张图片

  • 插入策略:阻止来自172.20.54.0/24网段的访问,并且此策略编号为1
    iptables -I INPUT 1 -s 172.20.54.0/24 -j REJECT
    浅谈linux防火墙之iptables_第7张图片

  • 替换策略:将策略2替换成阻止来自172.20.54.8主机的访问
    iptables -R INPUT 2 -s 172.20.54.8 -j REJECT
    浅谈linux防火墙之iptables_第8张图片

  • 删除策略:删除策略1
    iptables -D INPUT 1
    浅谈linux防火墙之iptables_第9张图片

  • 清空策略,并将计数器归0
    iptables -F
    iptables -Z
    浅谈linux防火墙之iptables_第10张图片

3️⃣ 匹配条件

  • 分类:
    基本:通用的,PARAMETERS
    扩展:需加载模块,MATCH EXTENTIONS

基本匹配条件:无需加载模块,由iptables/netfilter自行提供

  • 选项:
-s, --source address[/mask][,...]:源IP地址或范围
-d, --destination address[/mask][,...]:目标IP地址或范围
-p, --protocol protocol:指定协议
protocol: tcp, udp, icmp, 参看:/etc/protocols
-i, --in-interface name:报文流入的接口;只能应用于数据报文流入环节,只应用于INPUT, FORWARD, PREROUTING链
-o, --out-interface name:报文流出的接口;只能应用于数据报文流出的环节,只应用于FORWARD, OUTPUT, POSTROUTING链
  • 示例:阻止来自172.20.54.0/24网段主机的icmp连接
    iptables -A INPUT -s 172.20.54.0/24 -p icmp -j REJECT
    ping -c3 172.20.54.6
    浅谈linux防火墙之iptables_第11张图片

扩展匹配条件:需要加载扩展模块(/usr/lib64/xtables/*.so),方可生效

  • 查看帮助:man iptables-extensions (CentOS 7),man iptables (CentOS 6)

▶1 隐式扩展

  • 在使用-p选项指明了特定的协议时,无需再用-m选项指明扩展模块的扩展机制,不需要手动加载扩展模块
  • tcp协议的扩展选项
--source-port, --sport port[:port]
匹配报文源端口,可为端口范围
--destination-port, --dport port[:port]
匹配报文目标端口,可为端口范围
--tcp-flags mask comp
mask:需检查的标志位列表(例如SYN,ACK,FIN,RST),用","分隔
comp:在mask列表中必须为1的标志位列表,无指定则必须为0,用","分隔
  • 实验:拒绝telnet和ssh服务的建立新连接,旧连接保持原状
    分析:拒绝telnet和ssh服务可以封禁端口,只拒绝建立新连接即拒绝TCP状态位中只有SYN=1的状态
/ 设置策略(IP:172.20.54.6).以下两个命令等价,一个意思
iptables  -A INPUT -p tcp --dprot 22:23 --tcp-flages SYN,ACK,FIN,RST SYN -j REJECT
iptables -A INPUT -p tcp --dpot 22:23 --syn -j REJECT

/ 其他主机测试
[root@Centos7 ~]# ssh 172.20.54.6
ssh: connect to host 172.20.54.6 port 22: Connection refused
[root@Centos7 ~]# telnet 172.20.54.6
Trying 172.20.54.6...
telnet: connect to address 172.20.54.6: Connection refused
  • udp协议的扩展选项
--source-port, --sport port[:port]
匹配报文的源端口,可以是端口范围
--destination-port, --dport port[:port]
匹配报文的目标端口,可以是端口范围
  • icmp协议的扩展选项
--icmp-type {type[/code]|typename}
type/code
0/0 echo-reply:icmp应答
8/0 echo-request:icmp请求
  • 示例:阻止对本机的icmp请求
    iptables -A INPUT -p icmp --icmp-tyme 8/0 -j REJECT
    浅谈linux防火墙之iptables_第12张图片

▶2 显式扩展

  • 必须使用-m选项指明要调用的扩展模块的扩展机制,需要手动加载扩展模块
    [-m matchname[per-match-options]]
  • multiport扩展:以离散方式定义多端口匹配,最多指定15个端口
--source-ports, --sports port[,port|,port:port]...
指定多个源端口
--destination-ports, --dports port[,port|,port:port]...
指定多个目标端口
--ports port[,port|,port:port]...多个源或目标端口
  • 示例:阻止来自172.20.54.0/24网段主机在TCP的20-25, 80端口的访问请求
/ 设置策略(172.20.54.6)
iptables -A INPUT -s 172.20.54.0/24 -p tcp  -m multiport --dports 20:25,80 -j REJECT

/ 在其他主机测试
ftp 172.20.54.6
ssh 172.20.54.6
telnet 172.20.54.6
curl 172.20.54.6
  • 设置策略前
    浅谈linux防火墙之iptables_第13张图片
  • 设置策略后
    浅谈linux防火墙之iptables_第14张图片

▶3 iprange扩展

  • 指明连续的(但一般不是整个网络)ip地址范围
    --src-range from [-to] 源IP地址范围
    --dst-range from [-to] 目标IP地址范围
  • 示例:阻止IP在172.20.54.7-172.20.54.20范围内的主机建立tcp连接
    iptables -A INPUT -p tcp -m iprange --src-range 172.20.54.7-172.20.54.20 -j REJECT
    浅谈linux防火墙之iptables_第15张图片

▶4 mac扩展

  • 指明源MAC地址
  • 适用于:PREROUTING, FORWARD, INPUT chains
    --mac-source XX:XX:XX:XX:XX:XX
  • 示例:阻止来自MAC地址为00:50:56:3f:60:3c的主机建立icmp连接
    iptables -A INPUT -p icmp -m mac --mac-source 00:50:56:3f:60:3c -j REJECT
    浅谈linux防火墙之iptables_第16张图片

▶5 string扩展

  • 对报文中的应用层数据做字符串模式匹配检测
--algo {bm|kmp}:字符串匹配检测算法
  bm:Boyer-Moore
  kmp:Knuth-Pratt-Morris
--from offset:开始偏移
--to offset:结束偏移
--string pattern:要检测的字符串模式
--hex-string pattern:要检测字符串模式,16进制格式
  • 示例:阻断http服务器返回报文中包含goole字样的连接
    iptables -A OUTPUT -p tcp -sport 80 -m string --alog bm --string "goole" -j REJECT
    浅谈linux防火墙之iptables_第17张图片

▶6 time扩展

  • 注意:CentOS 8 此模块有问题
  • 根据将报文到达的时间与指定的时间范围进行匹配
--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] 日期
--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
--timestart hh:mm[:ss] 时间
--timestop hh:mm[:ss]
[!] --monthdays day[,day...] 每个月的几号
[!] --weekdays day[,day...] 星期几,17 分别表示星期一到星期日
--kerneltz:内核时区,不建议使用,CentOS 7系统默认为 UTC
注意: centos6 不支持kerneltz ,--localtz指定本地时区(默认)
  • 示例:设置工作日指定时间段禁止http连接
/ 设置时间段为UTC 04:00 - 10:00 ,当前时间在范围内,直接拒绝
iptables -A INPUT -p tcp -dport 80 -m time --timestart 04:00 --timestop 10:00 --weekdays Sau,Sun -j REJECT
/ 修改时间段为UTC 04:00 - 04:30 , 当前时间不在范围内,允许访问
iptables -R INPUT 1 -p tcp -dprot 80 -m time --timestart 04:00 --timestop 04:30 --weekdays Sau,Sun -j REJECT

浅谈linux防火墙之iptables_第18张图片

▶7 connlimit扩展

  • 根据每客户端IP做并发连接数数量匹配
  • 可防止Dos(Denial of Service,拒绝服务)攻击
--connlimit-upto n:连接的数量小于等于n时匹配,与默认的拒绝策略配合使用
--connlimit-above n:连接的数量大于n时匹配,与默认的允许策略配合使用
  • 示例:只允许来自172.20.54.7主机发起最多2个并发ssh连接
    iptables -A INPUT -s 172.20.54.7 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT
    浅谈linux防火墙之iptables_第19张图片

▶8 limit扩展

  • 基于收发报文的速率做匹配
  • 令牌桶过滤器
--limit rate [/second|/minute|/hour|/day]:限速
--limit-burst number:前多少个报文不做限速
  • 示例:对icmp发起的请求进行限速,前5个请求不限速,之后的请求每10秒允许一个
/ 定义允许规则
iptables -A INPUT -p icmp --icmp-type 8/0 -m limit --limit-burst 5 --limit 6/minute -j REJECT

/ 定义拒绝规则
iptables -A INPUT -p icmp --icmp-type 8/0 -j DROP

浅谈linux防火墙之iptables_第20张图片

▶9 state扩展

  • 根据连接追踪机制去检查连接的状态,较耗资源

  • conntrack机制:追踪本机上的请求和响应之间的关系,状态有如下几种:

    • NEW:到达的数据包与现有连接无关,但作为第一个数据包无效时,将使用此标签将新连接添加到系统。对于诸如TCP之类的可感知连接的协议以及对于诸如UDP之类的无连接协议,都会发生这种情况。
    • ESTABLISHED:一个连接是从改变NEWESTABLISHED时,它接收在相反方向上的有效响应。对于TCP连接,这意味着SYN/ACK,对于UDP和ICMP流量,这意味着在原始数据包的源和目的地之间进行交换的响应。
    • RELATED:不属于现有连接但与系统中已有连接关联的数据包标记为RELATED。这可能意味着一个辅助连接,例如FTP数据传输连接,或者可能是ICMP对其他协议对连接尝试的响应。
    • INVALIDINVALID如果数据包不与现有连接相关联并且不适合用于打开新连接,如果无法识别或在其他原因中不可路由,则可以进行标记。
    • UNTRACKED:可以将数据包标记为UNTRACKED好像已在raw表链中被定位为绕过跟踪一样。
    • SNAT:当通过NAT操作更改了源地址时设置的虚拟状态。连接跟踪系统使用它,以便它知道将源地址改回答复数据包。
    • DNAT:当通过NAT操作更改了目标地址时设置的虚拟状态。连接跟踪系统使用它,以便在路由答复数据包时知道将目标地址改回。
  • 查询连接追踪信息

    • 已经追踪到的并记录下来的连接信息库
      /proc/net/nf_conntrack
    • 调整连接追踪功能所能够容纳的最大连接数量
      /proc/sys/net/nf_conntrack_max
    • 查看连接跟踪有多少条目
      /proc/sys/net/netfilter/nf_conntrack_count
    • 不同的协议的连接追踪时长
      /proc/sys/net/netfilter/
      浅谈linux防火墙之iptables_第21张图片
    • 说明:
      • 连接跟踪,需要加载模块: modprobe nf_conntrack_ipv4
      • iptables的链接跟踪表最大容量为/proc/sys/net/nf_conntrack_max
      • 当服务器连接多于最大连接数时会出现kernel: ip_conntrack: table full, dropping packet错误
      • 各种状态的超时后,链接会从表中删除
  • 连接过多的解决方法两个:

    • 加大nf_conntrack_max
    vi /etc/sysctl.conf
    net.nf_conntrack_max = 393216
    net.netfilter.nf_conntrack_max = 393216
    
    • 降低 nf_conntrack timeout时间
    vi /etc/sysctl.conf
    net.netfilter.nf_conntrack_tcp_timeout_established = 300
    net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
    net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
    net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
    iptables -t nat -L -n
    
  • 实验:开放ftp服务的被动模式

  • 分析:ftp服务的被动模式端口不固定,一般指定端口的方法不适用,通过放行21端口的相关端口的方法设置相关策略

/ 查看模块是否加载
lsmod | grep ftp
/ 加载ftp模块
modprode nf_conntrack_ftp
/ 放行已经建立的命令连接、数据连接以及新发起的数据连接
iptables -A INPUT -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
/ 放行新发起的命令连接
iptables -A INPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT
/ 拒绝其他无关连接
iptables -A INPUT -j REJECT

浅谈linux防火墙之iptables_第22张图片

4️⃣ Target:处理动作

  • 语法:-j targetname [per-target-options]

  • 简单:
    ACCEPT:放行
    DROP:丢弃

  • 扩展:

REJECT:拒绝
RETURN:返回调用链
REDIRECT:端口重定向
LOG:记录日志,dmesg
MARK:做防火墙标记
DNAT:目标地址转换
SNAT:源地址转换
MASQUERADE:地址伪装
  • LOG:非中断target,本身不拒绝和允许,放在拒绝和允许规则前并将日志记录在/var/log/messages系统日志中
--log-level level 级别:emerg, alert, crit, error, warning, notice, info or debug
--log-prefix prefix 日志前缀,用于区别不同的日志,最多29个字符
  • 示例:将新发起的ssh和http请求记录在系统日志中,日志条目以"new connections: "作为前缀存储
    iptables -A INPUT -p tcp -m multiport --dports 22,80 -m state --state NEW -j LOG --log-prefix "new connections: "
    在这里插入图片描述

5️⃣ 链管理

  • 选项
-N:new,自定义一条新的规则链
-X:delete,删除自定义的空规则链
-P:Policy,设置默认策略;对filter表中的链而言,其默认策略有:
ACCEPT:接受
DROP:丢弃
-E:重命名自定义链
  • 注意:
    引用计数不为0的自定义链不能够被重命名,也不能被删除
    不建议修改链默认策略,可以设置策略兜底

  • 实验:自定义链"DENY_ICMP_SSH",作用为拒绝icmp和ssh连接。关联"DENY_ICMP_SSH"链至INPUT链,实现拒绝来自172.20.54.7-172.20.54.20范围内主机的icmp和ssh连接

/ 新建自定义链
iptables -N DENY_ICMP_SSH
iptables -A DENY_ICMP_SSH -p icmp -j REJECT
iptables -A DENY_ICMP_SSH -P tcp --dport 22 -j REJECT

/ 关联DENY_ICMP_SSH
iptables -A INPUT -m iprange --src-range 172.20.54.7-172.20.54.20 -j DENY_ICMP_SSH

/ 主机测试
ping -c3 172.20.54.6
ssh 172.20.54.6

/ 清楚自定义链
iptables -F INPUT 1                 / 清除INPUT链上关联DENY_ICMP_SSH规则
iptables -F DENY_ICMP_SSH           / 清除DENY_ICMP_SSH链上的规则
iptables -X DENY_ICMP_SSH           / 删除DENY_ICMP_SSH链
  • 设置完毕的策略:自定义链下两条策略,INPUT链的策略关联了自定义链
    浅谈linux防火墙之iptables_第23张图片
  • 在IP: 172.20.54.7主机测试ping和ssh登录,均失败
    浅谈linux防火墙之iptables_第24张图片
  • 在IP: 172.20.54.1主机测试ping和ssh登录,均成功
    浅谈linux防火墙之iptables_第25张图片

6️⃣ iptables规则安排的基本原则

  • 任何不允许的访问,应该在请求到达时给予拒绝

  • 规则在链接上的次序即为其检查时的生效次序

  • 基于上述,规则优化

    • 安全放行所有入站和出站的状态为ESTABLISHED状态连接
    • 谨慎放行入站的新请求
    • 有特殊目的限制访问功能,要在放行规则之前加以拒绝
    • 同类规则(访问同一应用),匹配范围小的放在前面,用于特殊处理
    • 不同类的规则(访问不同应用),匹配范围大的放在前面
    • 应该将那些可由一条规则能够描述的多个规则合并为一条
    • 设置默认策略,建议白名单(只放行特定连接)
    • 修改默认策略时不建议iptables -P,建议在规则的最后定义规则做为默认策略

7️⃣ iptables规则的保存和生效

  • 规则有效期限:
    使用iptables命令定义的规则,手动删除之前,其生效期限为kernel存活期限

  • 保存规则至指定的文件:

    • Centos6 环境
    / 将规则覆盖保存至/etc/sysconfig/iptables文件中
    service iptables save
    /  自动从/etc/sysconfig/iptables重新载入规则
    service iptables start
    
    • Centos7 8 环境
    / 规则文件重定向至文件,以下两条命令等效
    iptables -S > /PATH/TO/SOME_RULES_FILE
    iptables-save > /PATH/TO/SOME_RULES_FILE
    / 重新载入预存规则文件中的规则
    iptables-restore < /PATH/FROM/SOME_RULES_FILE
    
    • iptables-restore 选项:
      -n, --noflush:不清除原有规则
      -t, --test:仅分析生成规则集,但不提交
  • 开机自动重载规则文件中的规则:

    • CentOS 6:设置iptables开机启动
      chkconfig --list iptables
    • CentOS 7:在/etc/rc.d/rc.local文件添加规则恢复命令
    vim /etc/rc.d/rc.local
    iptables-restore < /PATH/FROM/SOME_RULES_FILE
    chmod +x /etc/rc.d/rc.local
    
    • 定义Unit File, CentOS 7,8 可以安装 iptables-services 实现iptables.service
    yum install iptables-services
    iptables-save > /etc/sysconfig/iptables
    systemctl enable iptables.service
    

你可能感兴趣的:(linux防火墙)