使用iptable和Firewalld工具来管理Linux防火墙连接规则

防火墙

防火墙是一套规则。当数据包进入或离开受保护的网络空间时,将根据防火墙规则测试数据包的内容(特别是有关其来源、目标和计划使用的协议的信息),以确定是否应该允许数据包通过。下面是一个简单的例子:

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

一方面,iptables是管理Linux机器上防火墙规则的工具。

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

你对此有意见吗?如果我告诉你外面还有另一个工具,叫做nftable?

好吧,我承认整件事闻起来有点怪怪的,所以让我解释一下。这一切都是从Netfilter开始的,Netfilter控制Linux内核模块级别对网络堆栈的访问。几十年来,管理Netfilter钩子的主要命令行工具是iptables规则集。

因为调用这些规则所需的语法可能有点神秘,各种用户友好的实现如下UFW并引入了Firewalld作为高级Netfilter解释器.然而,UFW和Firewalld主要是为了解决独立计算机所面临的各种问题而设计的。构建全尺寸的网络解决方案通常需要iptables的额外功能,或者自2014年以来,它的替代品nftable(通过nft命令行工具)。
iptables没有去任何地方,而且仍然被广泛使用。事实上,在未来的许多年里,您应该会在管理员的工作中遇到受iptables保护的网络。但是nftable通过添加到经典的Netfilter工具集,带来了一些重要的新功能。

从现在开始,我将通过示例演示Firewalld和iptables如何解决简单的连接问题。

使用Firewalld配置HTTP访问

正如您从其名称中可能猜到的那样,Firewalld是systemd一家人。Firewalld可以安装在Debian/Ubuntu机器上,但在RedHat和CentOS上是默认的。如果在计算机上运行了像Apache这样的Web服务器,则可以通过浏览服务器的Web根目录来确认防火墙是否正常工作。如果这个网站无法到达,那么Firewalld就在做它的工作。

您将使用firewall-cmd工具来管理命令行中的Firewalld设置。添加–state参数返回当前防火墙状态:

# firewall-cmd --state
running

默认情况下,Firewalld将处于活动状态,并将拒绝所有传入通信量,但有几个例外情况,如SSH。这意味着您的网站将不会有太多的访问者,这肯定会为您节省大量的数据传输成本。但是,由于这可能不是您对Web服务器的想法,所以您需要打开HTTP和HTTPS端口,按照约定,这两个端口分别被指定为80和443。Firewalld提供了两种方法来做到这一点。一个是通过–add-port参数,直接引用端口号以及它将使用的网络协议(在本例中为TCP)。这,这个,那,那个–permanent参数告诉Firewalld在每次服务器启动时加载此规则:

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

–reload参数将这些规则应用于本届会议:

# firewall-cmd --reload

对防火墙上的当前设置很好奇吗?跑–list-services:

# firewall-cmd --list-services
dhcpv6-client http https ssh

假设您添加了前面描述的浏览器访问,HTTP、HTTPS和SSH端口现在都应该是打开的dhcpv6-client,它允许Linux从本地DHCP服务器请求IPv 6 IP地址。

使用iptables配置锁定的客户信息亭

我敢肯定你见过售货亭-它们是平板电脑、触摸屏和类似ATM的个人电脑-在一个包厢里,机场、图书馆和商务室随处可见,邀请顾客和过路人浏览内容。大多数信息亭的特点是,你通常不希望用户在家里把自己当成自己的设备。它们通常不是用来浏览、观看youtube视频或对五角大楼发起拒绝服务攻击的。所以,为了确保它们不被滥用,你需要把它们锁起来。

一种方法是应用某种Kiosk模式,无论是通过聪明地使用Linux显示管理器还是在浏览器级别。但是,为了确保所有的漏洞都已堵塞,您可能还需要通过防火墙添加一些硬网络控件。在下一节中,我将描述如何使用iptable来实现它。

关于使用iptables,有两件重要的事情要记住:您给出的规则的顺序是至关重要的,仅凭它本身,Iptable规则将无法在重新启动后存活下来。我会在这里一次讲一遍。

亭工程
为了说明这一切,让我们想象一下,我们在一家名为BigMart的大型连锁商店工作。他们已经存在了几十年;事实上,我们想象中的祖父母很可能是在那里购物长大的。但如今,BigMart公司总部的人可能只是在数着亚马逊(Amazon)把他们永远赶下去之前的几个小时。

尽管如此,BigMart的IT部门正在尽力而为,他们刚刚给您发送了一些WiFi准备的信息亭设备,您可以在整个商店的战略位置安装这些设备。他们的想法是,他们将显示一个登录到BigMart.com产品页面的网页浏览器,允许他们查找商品特征、走道位置和库存级别。这些信息亭还需要访问bigmart-data.com,那里存储了许多图像和视频媒体。

除此之外,您还希望允许更新,并在必要时允许包下载。最后,您希望只允许从本地工作站访问入站SSH,并阻止其他所有人。下图说明了这一切将如何运作:

亭的交通流量由iptable控制。

剧本

下面是如何将所有这些都放入一个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作为当数据包与规则匹配时要采取的操作。在第一条规则中,该操作是允许或接受请求。但在更低的范围内,您可以看到将被删除或拒绝的请求。

记住秩序很重要。这是因为iptables将运行一个请求,超过它的每个规则,但只有在它得到匹配为止。所以一个向外发送的浏览器请求,比如说,youtube.com将通过前四条规则,但是当它到达–dport 80或–dport 443规则-取决于它是HTTP请求还是HTTPS请求-它将被删除。Iptable不会再费心检查了,因为那是匹配的。

另一方面,如果系统请求ubuntu.com进行软件升级,那么当它达到适当的规则时,它就会通过。显然,我们在这里所做的是只允许发送HTTP或HTTPS请求到我们的BigMart或Ubuntu目的地,而不是其他目的地。

最后两个规则将处理传入的SSH请求。由于它们不使用端口80或443,而是使用22,所以它们不会被前面的两个DROP规则所拒绝。在这种情况下,从我的工作站登录请求将被接受,但其他任何地方的请求将被删除。这一点很重要:确保用于端口22规则的IP地址与用于登录的机器的地址相匹配-如果不这样做,您将立即被锁在门外。当然,这没什么大不了的,因为按照当前的配置方式,您可以简单地重新启动服务器,而iptables规则就会被删除。如果您使用LXC容器作为您的服务器并从您的LXC主机登录,那么使用您的主机用来连接到容器的IP地址,而不是它的公共地址。

如果我的机器的IP曾经改变,您需要记住更新这个规则;否则,您将被锁在门外。

在家里玩(希望是在一个丢弃的VM上)?太棒了创建自己的脚本。现在我可以保存脚本,使用chmod使其可执行,并将其运行为sudo。别担心bigmart-data.com not found错误-当然找不到;它不存在。

chmod +X scriptname.sh
sudo ./scriptname.sh

您可以在命令行中使用cURL。请求ubuntu.com有效,但是manning.com失败了。

curl ubuntu.com
curl manning.com

将iptables配置为在系统启动时加载

现在,我如何使这些规则自动加载每次售货机启动?第一步是使用iptables-save工具。这将在根目录中创建一个包含规则列表的文件。这个管道,后面跟着tee命令,是应用我的sudo权限到字符串的第二部分:将文件实际保存到其他受限制的根目录。

然后,我可以告诉系统运行一个名为iptables-restore每次它启动。像我们在前面的模块中看到的那样的常规cron作业不会有帮助,因为它们是在设定的时间运行的,但是我们不知道我们的计算机何时会决定崩溃和重新启动。

有很多方法来处理这个问题。这里有一个:

在我的Linux机器上,我将安装一个名为anacron这将在/etc/目录中提供一个名为anacrontab的文件。我将编辑该文件并添加以下内容iptables-restore命令,告诉它每天(必要时)在启动后一分钟将该.Rule文件的当前值加载到iptables中。我会给作业一个标识符(iptables-restore),然后添加命令本身。既然你在家里和我一起玩,你应该重新启动你的系统来测试这一切。

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

我希望这些实际的例子已经说明了如何使用iptables和Firewalld来管理基于Linux的防火墙上的连接问题。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接

(0)

相关推荐

  • 解析Linux内核的基本的模块管理与时间管理操作

    内核模块管理 Linux设备驱动会以内核模块的形式出现,因此学会编写Linux内核模块编程是学习linux设备驱动的先决条件. Linux内核的整体结构非常庞大,其包含的组件非常多.我们把需要的功能都编译到linux内核,以模块方式扩展内核功能. 先来看下最简单的内核模块 #include <linux/init.h> #include <linux/module.h> static int __init hello_init(void) { printk(KERN_ALERT &

  • Linux date 时间设置同步命令分享

    date命令: #date 显示系统时间 hwclock命令 (即hardwareclock系统硬件时间) #hwclock 显示硬件时间 #hwclock -w 将系统时间写入到系统硬件当中 ntpdate ntpdate 是一个linux时间同步服务软件,具体的详细资料请参考下百度,有很多详细的资料 查看本机是否安装ntpdate服务,如果没有安装,请 yum install -y ntpdate 同步时间 输入ntpdate time.nist.gov同步网络时间 结果:3 Jun 15:

  • Linux内核设备驱动之内核的时间管理笔记整理

    /****************** * linux内核的时间管理 ******************/ (1)内核中的时间概念 时间管理在linux内核中占有非常重要的作用. 相对于事件驱动而言,内核中有大量函数是基于时间驱动的. 有些函数是周期执行的,比如每10毫秒刷新一次屏幕: 有些函数是推后一定时间执行的,比如内核在500毫秒后执行某项任务. 要区分: *绝对时间和相对时间 *周期性产生的事件和推迟执行的事件 周期性事件是由系统系统定时器驱动的 (2)HZ值 内核必须在硬件定时器的帮

  • Linux中可以节省你时间的15个命令别名

    前言 在管理和维护Linux系统的过程中,将会使用到大量命令,有一些很长的命令或用法经常被用到,重复而频繁地输入某个很长命令或用法是不可取的.这时可以使用命令别名功能将这个过程简单化. 在你安装的 Linux 发行版中默认就包含了一些别名. Linux 命令行别名非常适合帮助你提高工作效率.更好的是,在你安装的 Linux 发行版中默认就包含了一些别名. 这是 Fedora 27 中的命令别名的示例: 这个 alias 命令列出了已有的别名.设置别名也十分简单: alias new_name="

  • Linux中有效地管理进程的8个命令

    前言 进程管理的作用: 判断服务器健康状态:通过分析进程的状态(内存.CPU占有率等)判断服务器的负载和安全状态 查看系统中的所有进程 杀死进程 本文将给大家详细介绍关于Linux管理进程命令的相关内容,通过这些关键的命令来全程管理你的应用. 一般来说,应用程序进程的生命周期有三种主要状态:启动.运行和停止.如果我们想成为称职的管理员,每个状态都可以而且应该得到认真的管理.这八个命令可用于管理进程的整个生命周期. 启动进程 启动进程的最简单方法是在命令行中键入其名称,然后按回车键.如果要启动 N

  • 详解linux ntp服务器时间同步设置

    linux ntp服务器时间同步设置 时间同步这个需求在很多地方都有.比如安装cm和cdh的话,需要ntp时间同步,否则会出现红色警告 这里主要是设置一台服务器作为主服务器,让其他机器同步这台机器的时间,而且是配置的本地时间,没有同步internet时间,因为很多时候服务器不能联网 首先我们这里设置2台机器,主机器为192.168.5.102,另外一台为192.168.5.103 首先设置主机器 编辑/etc/ntp.conf文件 在里面加上 restrict 127.0.0.1 # 开启内部递

  • Linux配置和使用i3窗口管理器的教程

    在本篇文章中,我将向大家展示,如何在 Fedora 28 上安装与简单配置 i3. 1.安装 首先进入 Fedora 系统中,打开一个终端.使用 dnf 来安装需要的软件包,如下: 注意:在这个命令中,我排除了 rxvt-unicode 这个包,因为我更喜欢 terminator 作为我的终端模拟器. 据用户目前的系统状态,在命令执行过程中可能会安装很多依赖.等待所有的依赖安装完成,之后重启你的电脑. 2.首次登录与初始化 在你的机器重启之后,你便可以第一次体验 i3 了.在 GNOME 显示管

  • Linux/CentOS系统同步网络时间的2种方法详解

    由于硬件的原因,机器或多或少的跟标准时间对不上,一个月的误差几秒到几分钟不等.对于服务器来说时间不准,会有很多麻烦.例如,支付的时候,无法下单,游戏无法登录等. 方法一:用 ntpdate从时间服务器更新时间 如果系统没有 ntpdate 命令,可在线安装: yum -y install ntp 安装完了之后,你不要做什么配置,也不需要,直接测试一下 [root@snsgou-pc src]# date 2015年 05月 20日 星期三 22:42:19 CST [root@snsgou-pc

  • 如何在 Linux 中查找一个命令或进程的执行时间

    在类 Unix 系统中,你可能知道一个命令或进程开始执行的时间,以及一个进程运行了多久. 但是,你如何知道这个命令或进程何时结束或者它完成运行所花费的总时长呢? 在类 Unix 系统中,这是非常容易的! 有一个专门为此设计的程序名叫 GNU time. 使用 time 程序,我们可以轻松地测量 Linux 操作系统中命令或程序的总执行时间. time 命令在大多数 Linux 发行版中都有预装,所以你不必去安装它. 在 Linux 中查找一个命令或进程的执行时间 要测量一个命令或程序的执行时间,

  • Linux 按时间批量删除文件命令(删除N天前文件)

    需要根据时间删除这个目录下的文件,/home/lifeccp/dicom/studies,清理掉20天之前的无效数据. 可以使用下面一条命令去完成: find /home/lifeccp/dicom/studies -mtime +21 -name "*.*" -exec rm -Rf {} \; 这个是根据时间删除. 下面简要解释一下,这句shell命令: find /home/lifeccp/dicom/studies -mtime +21 -name "*.*"

  • 如何在Linux中的特定时间运行命令

    有一天,我使用 rsync 将大文件传输到局域网上的另一个系统.由于它是非常大的文件,大约需要 20 分钟才能完成.我不想再等了,我也不想按 CTRL+C 来终止这个过程.我只是想知道在 Linux 操作系统中是否有简单的方法可以在特定的时间运行一个命令,并且一旦超时就自动杀死它 -- 因此有了这篇文章.请继续阅读. 在 Linux 中在特定时间运行命令 我们可以用两种方法做到这一点. 方法 1 - 使用 timeout 命令 最常用的方法是使用 timeout 命令.对于那些不知道的人来说,t

随机推荐