<dl id="wqg5j"></dl>

    1. <menuitem id="wqg5j"></menuitem>

      <dl id="wqg5j"><font id="wqg5j"></font></dl>
    2. <dl id="wqg5j"><ins id="wqg5j"></ins></dl>
    3. <dl id="wqg5j"><ins id="wqg5j"><thead id="wqg5j"></thead></ins></dl>
      <li id="wqg5j"><ins id="wqg5j"></ins></li>
      安基网 首页 安全 安全学院 查看内容

      Linux 防火墙£º关于 iptables 和 firewalld 的那些事

      2018-10-8 13:21| 投稿: xiaotiger |来自: 互联网


      免责声明£º本站系公益性非盈利IT技术普及网£¬本文由投稿者转载自互联网的公开文章£¬文末均已注明出处£¬其内容和?#35745;?#29256;权归原网站或作者所有£¬文中所述不代表本站观点£¬若有无意侵权或转载不当之处请从网站右下角联系我们处理£¬谢谢合作£¡

      摘要: 防火墙是一组规则¡£当数据包进出受保护的网络区域?#20445;?#36827;出内容£¨特别是关于其来源¡¢目标和使用的协议等信息£©会根据防火墙规则进行检测£¬以确定是否允许其通过¡£下面是一个简单的例子:

      编译自£º https://opensource.com/article/18/9/linux-iptables-firewalld

      作者£º David Clinton

      译者£º heguangzhi

      以下是如何使用 iptables 和 firewalld 工具来管理 Linux 防火墙规则¡£

      这篇文章摘自我的书¡¶ Linux in Action ¡·£¬尚未发布的第二个曼宁出版项目¡£

      防火墙

      防火墙是一组规则¡£当数据包进出受保护的网络区域?#20445;?#36827;出内容£¨特别是关于其来源¡¢目标和使用的协议等信息£©会根据防火墙规则进行检测£¬以确定是否允许其通过¡£下面是一个简单的例子:



      防火墙可以根据协议或基于目标的规则过滤请求¡£

      一方面£¬ iptables 是 Linux 机器上管理防火墙规则的工具¡£

      另一方面£¬ firewalld 也是 Linux 机器上管理防火墙规则的工具¡£

      你有什么问题吗£¿如果我告诉你还有另外一种工具£¬叫做 nftables £¬这会不会糟蹋你的美好一天呢£¿

      好吧£¬?#39029;?#35748;整件事确实有点好笑£¬所以让我来解释一下¡£这一切都从 Netfilter 开始£¬它在 Linux 内核模块级别控制访问网络栈¡£几十年来£¬管理 Netfilter 钩子的主要命令行工具是 iptables 规则集¡£

      因为调用这些规则所需的语法看起来有点晦涩?#35759;®£?#25152;以各种用户友好的实现方式£¬如 ufw 和 firewalld 被引入£¬作为更高级别的 Netfilter 解?#25512;ö—?#28982;而£¬ufw 和 firewalld 主要是为解决单独的计算机所面临的各种问题而设计的¡£构建全方面的网络解决方案通常需要 iptables£¬或者从 2014 年起£¬它的替代品 nftables (nft 命令行工具)¡£

      iptables 没有消失£¬仍然被广泛使用着¡£事实上£¬在未来的许多年里£¬作为一名管理?#20445;?#20320;应该会使用 iptables 来保护的网络¡£但是 nftables 通过操作经典的 Netfilter 工具集带来了一些重要的崭新的功能¡£

      从现在开始£¬我将通过示例展示 firewalld 和 iptables 如何解决简单的连接问题¡£

      使用 firewalld 配置 HTTP 访问

      正如你能从它的名字中猜到的£¬firewalld 是 systemd 家族的一部分¡£firewalld 可以安装在 Debian/Ubuntu 机器上£¬不过£¬它默认安装在 RedHat 和 CentOS 上¡£如果您的计算机上运行着像 Apache 这样的 web 服务器£¬您可以通过浏览服务器的 web 根目录来确认防火墙是否正在工作¡£如果网站不可访问£¬那么 firewalld 正在工作¡£

      你可以使用 firewall-cmd 工具?#29992;?#20196;行管理 firewalld 设置¡£添加 ¨Cstate 参数将返回当前防火墙的状态:

      # firewall-cmd --state

      running

      默认情况下£¬firewalld 处于运行状态£¬并拒绝所有传入流量£¬但有几个例外£¬如 SSH¡£这意味着你的网站不会有太多的访?#25910;”]?#36825;无疑会为你节省大量的数据传输成本¡£然而£¬这不是你对 web 服务器的要求£¬你希望打开 HTTP 和 HTTPS 端口£¬按?#23637;?#20363;£¬这两个端口分别被指定为 80 和 443¡£firewalld 提供了两种方法来实现这个功能¡£一个是通过 ¨Cadd-port 参数£¬该参数直?#21491;?#29992;端口号及其将使用的网络协议£¨在本例中为TCP£©¡£ 另外一个是通过 ¨Cpermanent 参数£¬它告诉 firewalld 在?#30475;?#26381;务器启动时加载此规则£º

      # firewall-cmd --permanent --add-port=80/tcp

      # firewall-cmd --permanent --add-port=443/tcp

      ¨Creload 参数将这些规则应用于当前会话£º

      # firewall-cmd --reload

      查看当前防火墙上的设置£¬运行 ¨Clist-services£º

      # firewall-cmd --list-services

      dhcpv6-client http https ssh

      假设您已经如前所述添加了浏览器访问£¬那么 HTTP¡¢HTTPS 和 SSH 端口现在都应该是和 dhcpv6-client 一样开放的 ¡ª¡ª 它允许 Linux 从本地 DHCP 服务器请求 IPv6 IP 地址¡£

      使用 iptables 配置锁定的?#31361;?#20449;息亭

      我相信你已经看到了信息亭¡ª¡ª它们是放在机场¡¢图书馆和商务场所的盒子里的平板电脑¡¢触摸屏和 ATM 类电脑£¬邀请顾客和路人浏览内容¡£大多数信息亭的问题是£¬你通常不希望用户像在自己家一样£¬把他们当成自己的设备¡£它们通常不是用来浏览¡¢观看 YouTube 视频或对五角大楼发起拒绝服务攻击的¡£因此£¬为了确保它们没有被滥用£¬你需要锁定它们¡£

      一种方法是应用某种信息亭模式£¬无论是通过巧妙使用 Linux ?#20801;?#31649;理器还是控制在浏览器级别¡£但是为了确保你已经堵塞了所有的漏洞£¬你可能还想通过防火墙添加一些硬性的网络控制¡£在下一节中£¬我将讲解如何使用iptables 来完成¡£

      关于使用 iptables£¬有两件重要的事情需要记住£º你给出的规则的?#25215;?#38750;常关键£»iptables 规则本身在重新启动后将无法保持¡£?#19968;?#19968;次一个地在解释这些¡£

      信息亭项目

      为了说明这一切£¬让我们想象一下£¬我们为一家名为 BigMart 的大型连锁商店工作¡£它们已经存在了几十年£»事实上£¬我们想象中的祖父母可能是在那里?#20309;?#24182;长大的¡£但是如今£¬BigMart 公司总部的人可能只是在数着亚马?#26041;?#20182;们永远赶下去的时间¡£

      尽管如此£¬BigMart 的 IT 部门正在尽他们最大努力提供解决方案£¬他们向你发放了一些具有 WiFi 功能信息亭设备£¬你在整个商店的战略位置使用这些设备¡£其想法是£¬登录到 BigMart.com 产品页面£¬允许查找商品特征¡¢过道位置和库存水平¡£信息亭还允许进入 bigmart-data.com£¬那里储存着许多图像和视频媒体信息¡£

      除此之外£¬您还需要允许下载软件包更新¡£最后£¬您还希望只允许从本地工作站访问 SSH£¬并阻止其他人登录¡£下图说明了它将如何工作£º



      kiosk traffic flow ip tables

      *信息亭业务流由 iptables 控制¡£ *

      脚本

      以下是 Bash 脚本内容£º

      #!/bin/bash

      iptables -A OUTPUT -p tcp -d bigmart.com -j ACCEPT

      iptables -A OUTPUT -p tcp -d bigmart-data.com -j ACCEPT

      iptables -A OUTPUT -p tcp -d ubuntu.com -j ACCEPT

      iptables -A OUTPUT -p tcp -d ca.archive.ubuntu.com -j ACCEPT

      iptables -A OUTPUT -p tcp --dport 80 -j DROP

      iptables -A OUTPUT -p tcp --dport 443 -j DROP

      iptables -A INPUT -p tcp -s 10.0.3.1 --dport 22 -j ACCEPT

      iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 22 -j DROP

      我们从基本规则 -A 开始分析£¬它告诉 iptables 我们要添加规则¡£OUTPUT 意味着这条规则应该成为输出链的一部分¡£-p 表示该规则仅使用 TCP 协议的数据包£¬正如 -d 告诉我们的£¬目的地址是 bigmart.com ¡£-j 参数的作用是当数据包符合规则时要采取的操作是 ACCEPT¡£第一条规则表示允许£¨或接受£©请求¡£但£¬往下的规则你能看到丢弃£¨或拒绝£©的请求¡£

      规则?#25215;?#26159;很重要的¡£因为 iptables 会对一个请求遍历每个规则£¬直?#25509;?#21040;匹配的规则¡£一个向外发出的浏览器请求£¬比如访问 bigmart.com 是会通过的£¬因为这个请求匹配第一条规则£¬但是当它到达 dport 80 或 dport 443 规则时¡ª¡ª取决于是 HTTP 还是 HTTPS 请求¡ª¡ª它将被丢弃¡£当遇到匹配?#20445;¬iptables 不再继续往下检查了¡££¨LCTT 译注£º此处原文有误£¬径改¡££©

      另一方面£¬向 ubuntu.com 发出软件升级的系统请求£¬只要符合其适当的规则£¬就会通过¡£显然£¬我们在这里做的是£¬只允许向我们的 BigMart 或 Ubuntu 发送 HTTP 或 HTTPS 请求£¬而不允许向其他目的地发送¡£

      最后两条规则将处理 SSH 请求¡£因为它不使用端口 80 或 443 端口£¬而是使用 22 端口£¬所以之前的两个丢弃规则不会拒绝它¡£在这种情况下£¬来自我的工作站的登录请求将被接受£¬但是对其他任何地方的请求将被拒绝¡£这一点很重要£º确保用于端口 22 规则的 IP 地址与您用来登录的机器的地址相匹配¡ª¡ª如果不这样做£¬将立即被锁定¡£当然£¬这没什?#21019;?#19981;了的£¬因为按照目前的配置方式£¬只需重启服务器£¬iptables 规则就会全部丢失¡£如果使用 LXC 容器作为服务器并从 LXC 主机登录£¬则使用主机 IP 地址连接容器£¬而不是其公共地址¡£

      如果机器的 IP 发生变化£¬请记住更新这个规则£»否则£¬你会被拒绝访问¡£

      在家玩£¨是在某种一次性虚拟机上£©£¿太好了¡£创建自己的脚本¡£现在我可以保存脚本£¬使用 chmod 使其可执行£¬并以 sudo 的?#38382;?#36816;行它¡£不要担心¡°igmart-data.com 没找到¡±之类的错误 ¡ª¡ª 当然没找到£»它不存在¡£

      chmod +X scriptname.sh

      sudo ./scriptname.sh

      你可以使用 cURL 命令行测试防火墙¡£请求 ubuntu.com 奏效£¬但请求 manning.com 是失败的 ¡£

      curl ubuntu.com

      curl manning.com

      配置 iptables 以在系统启动时加载

      现在£¬我如何让这些规则在?#30475;?#20449;息亭启动时自动加载£¿第一步?#22681;?#24403;前规则保存¡£使用 iptables-save 工具保存规则文件¡£这将在根目录中创建一个包含规则列表的文件¡£管道后面跟着 tee 命令£¬?#22681;?#25105;的sudo 权限应用于字符串的第二部分?#33322;?#25991;件?#23548;?#20445;存到否则受限的根目录¡£

      然后我可以告诉系统?#30475;?#21551;动时运行一个相关的工具£¬叫做 iptables-restore ¡£我们在上一章节£¨LCTT 译注£º指作者的书£©中看到的常规 cron 任务并不适用£¬因为它们在设定的时间运行£¬但是我们不知道什么时候我们的计算机可能会决定?#35272;?#21644;重启¡£

      ?#34892;?#22810;方法来处理这个问题¡£这里有一个£º

      在我的 Linux 机器上£¬我将安装一个名为 anacron 的程序£¬该程序将在 /etc/ 目录中为我们提供一个名为 anacrontab 的文件¡£我将编辑该文件并添加这个 iptables-restore 命令£¬告诉它加载那个 .rule 文件的当前内容¡£当引导后£¬规则每天£¨必要?#20445;?1:01 时加载到 iptables 中£¨LCTT 译注£ºanacron 会?#38057;?#25191;行由于机器没有运行而错过的 cron 任务£¬因此£¬即便 01:01 时机器没有启动£¬也会在机器启动会尽快执行该任务£©¡£?#19968;?#32473;该任务一个标识符£¨iptables-restore£©£¬然后添?#29992;?#20196;本身¡£如果你在家和我一起这样£¬你应该通过重启系统来测试一下¡£

      sudo iptables-save | sudo tee /root/my.active.firewall.rules

      sudo apt install anacron

      sudo nano /etc/anacrontab

      1 1 iptables-restore iptables-restore < /root/my.active.firewall.rules

      我希望这些?#23548;?#20363;子已经说明了如何使用 iptables 和 firewalld 来管理基于 Linux 的防火墙上的连接问题¡£


      via: https://opensource.com/article/18/9/linux-iptables-firewalld

      作者£º David Clinton 选题£º lujun9972 译者£º heguangzhi 校对£º wxy

      本文由 LCTT 原创编译£¬ Linux中国 荣誉推出

      点击¡°了解更多¡±可访问文内链接


      Tag标签:

      小编推荐£º欲学习电脑技术¡¢系统维护¡¢网络管理¡¢编程开发和安全攻防等高端IT技术£¬请 点击这里 注册账号£¬公开课频道价值万元IT培训教程免费学£¬让您少走弯路¡¢事半功倍£¬好工作升职?#26377;„¦?/font>

      本文出自£ºhttps://www.toutiao.com/i6608102033981440519/

      免责声明£º本站系公益性非盈利IT技术普及网£¬本文由投稿者转载自互联网的公开文章£¬文末均已注明出处£¬其内容和?#35745;?#29256;权归原网站或作者所有£¬文中所述不代表本站观点£¬若有无意侵权或转载不当之处请从网站右下角联系我们处理£¬谢谢合作£¡


      鲜花

      ?#24080;?/a>

      雷人

      路过

      鸡蛋

      相关阅读

      最新评论

       最新
      返回顶部
      Ðþ»úͼ
      <dl id="wqg5j"></dl>

        1. <menuitem id="wqg5j"></menuitem>

          <dl id="wqg5j"><font id="wqg5j"></font></dl>
        2. <dl id="wqg5j"><ins id="wqg5j"></ins></dl>
        3. <dl id="wqg5j"><ins id="wqg5j"><thead id="wqg5j"></thead></ins></dl>
          <li id="wqg5j"><ins id="wqg5j"></ins></li>
          <dl id="wqg5j"></dl>

            1. <menuitem id="wqg5j"></menuitem>

              <dl id="wqg5j"><font id="wqg5j"></font></dl>
            2. <dl id="wqg5j"><ins id="wqg5j"></ins></dl>
            3. <dl id="wqg5j"><ins id="wqg5j"><thead id="wqg5j"></thead></ins></dl>
              <li id="wqg5j"><ins id="wqg5j"></ins></li>