中header 如何配置_在Ubuntu中如何用iptables配置防火墙?

网络安全对于企业的信息安全极为重要,也对Ubuntu server的系统安全至关重要。网络不安全了,即使操作系统武装到牙齿,也难免不中招。

不要老是迷信什么“土办法”或“偏方”就一定要比大厂的整体安全方案强,多数时候,在网络安全上缩减必要的成本是不明智的,企业为了从安全方面省点小钱而招致巨大损失,血淋淋的例子实在太多了。

6960632f85fbe114c29cd3cbb8b18a43.png

— 防火墙的选择 —

Ubuntu server环境,防火墙有很多选择,从最为易用便捷的UFW防火墙,到较新的动态防火墙Firewalld,再到较为专业的防火墙iptables一应俱全,如何选择一款合适的防火墙呢?没有标准答案,但肯定有最合适的选择。

其中,iptables这个工具功能全面强大,可以实现很多UFW及Firewalld无法完成的网络功能,推荐有一定基础的用户使用。

下面将以iptables为例,就防火墙的部署及配置等多个方面提高系统的安全性进行演示。

— iptables防火墙的结构 —

iptables是Linux中功能最为强大的防火墙,使用灵活,可以对流入和流出服务器的数据包进行很精细的控制,当然如果只是用来开启或禁止某个网络服务的某个网络端口,它和UFW以及Firewalld都差不多。

iptables的三大核心要素是表,链和规则。

一言以蔽之,iptables是表的集合,包含四张表(常用的三张),表则是链的集合,每个表都包含若干个链, 而链则是规则的集合,真正过滤规则是属于链,iptables的内部结果如图所示。

071c86d9249d06cad1f7b6671ab11951.png

— iptables的部署 —

iptables可以说是Linux系统中功能最为强大的防火墙了,虽然Ubuntu server预置的防火墙是UFW,但可以自动动手将iptables安装到Ubuntu server,关键操作如下:

sudo aptitude updatesudo aptitude purge ufwsudo aptitude purge firewalldsudo aptitude install -y iptables #默认安装,仅在没有安装的系统中执行

— iptables的使用 —

成功安装后就可以使用iptables功能强大的命令行工具了,需要注意的是,iptables的命令仅当前会话有效,如果不保存的话,重启后防火墙规则全部丢失。

此外,每条iptables的命令都可以翻译成一条规则定义并保存到iptables的相关文件,随时调用,即使重启服务器也不怕。先来熟悉iptable的通用命令结构:

iptables [-t tbl] -COMMAND 链名 匹配条件 相应操作 #[-t tbl]为可选参数,-t用来指定具体操作那张表,不指定的话默认是Filter表

◆COMMAND

命令选项用于指定iptables的执行方式,包括插入规则,删除规则和添加规则,高频命令如下:

-A:在规则列表的最后增加1条规则 #简写(一个横杠)和全称(两个横杠),敲对了使用那个都可以,推荐使用简写不容易犯错

-D:从规则列表中删除1条规则

-F:删除表中所有规则

-I:在指定的位置插入1条规则

-L:查看iptables规则列表

-P:定义默认策略

-R:替换规则列表中的某条规则

-X:删除自定义链

-Z:将表中数据包计数器和流量计数器归零

◆匹配条件

匹配条件用来实现更为精细和具体的条件,如网络接口名称,协议名称,源目的端口号等,高频匹配条件如下:

-i:网络接口名称 #指定数据包从哪个网络接口进入

-m:匹配的模块 #指定数据包规则所使用的过滤模块

-o:网络接口名称 #指定数据包从哪个网络接口输出

-p:协议名称 #指定数据包匹配的协议,如TCP、UDP和ICMP等

-s:源地址或子网地址 #指定数据包匹配的源地址

-state:数据包当前状态 #指定ESTABLISHED,RELATED等

-sport:源端口号 #指定数据包匹配的源端口号

-dport:目的端口号 #指定数据包匹配的目的端口号iptables规则的动作

◆相应操作

对于符合过滤规则或条件的数据包,需要进行相应的操作,如下:

-ACCEPT:接受数据包

-DNAT:目标地址转换,即改变数据包的目的地址。例如:将的广域网IP(222.101.98.54/24) ==> 局域网的IP(.1/24),且在NAT表的PREROUTING链上进行该动作

-DROP:丢弃数据包

-LOG:日志功能,将符合规则的数据包的相关信息记录在日志中,便于分析和排错

-MASQUERADE:IP伪装,改写数据包来源IP为防火墙的IP及端口,和SNAT不同的是,当进行IP伪装时,不需指定要伪装成哪个IP,IP会从网卡直接读取

-EDIRECT:与DROP基本一样,区别在于它除了阻塞包之外,还向发送者返回错误信息

-SNAT:源地址转换,即改变数据包的源地址

356dc9f3b7b2a547f8dbda66e7c9c801.png

— iptables命令实例 —

掌握了那么多参数,学以致用一下,下面就是三个典型的iptables命令:

sudo iptables -A INPUT -i ens33 -p tcp --sport 22 -j ACCEPT

sudo iptables -A INPUT -i ens33 -p tcp --sport 80 -j ACCEPT

sudo iptables -A INPUT -i ens33 -p tcp --sport 443 -j ACCEPT

上述命令看似复杂,但将其拆开来看的话,其实真的很简单。

首先,这条命令或规则中的-A表示将此条规则附加到的iptables规则上,由于没有指定链名,故采用默认的链Filter。

随后的-i参数指定了此规则所用的网络接口 ens33,在编写自己的规则时,由于服务器网口众多,请确保知道通过哪个网口连接到网络。

-p参数用于指定协议,以上这条规则适用于TCP协议,-m参数有点不同,用于判断必须满足的条件才能使流量不被拒绝,过滤条件是数据包的状态。

--state参数后接具体状态名,如ESTABLISHED或RELATED等,还有就是--sport参数表示源端口,告诉iptables流量来自哪个端口,后还有-j参数,它用于对符合此条iptables规则的数据包所执行的操作,如ACCEPT、DROP或REJECT等。

152761b3511be35e387bc4a5e02b217b.png

— iptables高频规则及命令 —

对于Ubuntu server而言,实现基本的安全,iptables高频使用的规则及命令如下,由于服务器网卡众多,下面将采用默认的网卡ens33。

◆查看当前所有规则

查看当前所有规则,可以运行如下命令:

sudo iptables -vnL

开始使用iptables之前,需要注意的是,使用iptables时,规则添加的顺序至关重要,当然这一条对其他防火墙也或多或少地适用。

◆清除当前所有规则

彻底清除之前添加了一些规则,可以通过如下命令将其清除:

sudo iptables -Fsudo iptables -Xsudo iptables -Z

清理当前所有规则的目的是防止当前的规则影响自己规则,并能够按照自己的想法生效,建议先将老规则保存后再执行此命令比较稳妥,具体方法详见下文。

◆允许回路Loopback

环回接口Loopback是Linux系统所使用的内部接口,一定要允许回路Loopback,关键操作如下:

sudo iptables -A INPUT -i lo -j ACCEPT

◆禁止其他主机Ping Ubuntu服务器

通常服务器不允许其他主机ping自己,实现方法如下:

sudo iptables -A INPUT -i ens33 -p icmp -j DROP

如果要禁止来自某一IP的ping,可以使用如下命令:

sudo iptables -A INPUT -i ens33 -p icmp -s 192.168.1.4 -j DROP #禁止192.168.1.4发出的ping

◆封杀指定IP

可使用iptables封杀指定IP,关键操作如下:

sudo iptables -I INPUT -i ens33 -s 192.168.1.4 -j DROP #DROP掉来自192.168.1.4的所有数据包

在上述规则存在的添加下,要解封IP 192.168.1.23,只需将参数-I换成-D即可。此外如果要想清空封掉的IP地址,可以运行如下命令:

sudo iptables -F

◆封杀指定网段

要添加IP段到封停列表中,使用下面的命令:

sudo iptables -I INPUT -i ens33 -s 192.168.1.0/24 -j DROP #DROP掉所有来自192.168.1.0网段的数据包

◆封杀指定端口

可使用iptables封杀指定IP端口,关键操作如下:

sudo iptables -I INPUT -i ens33 -p tcp --dport 1234 -j DROP #封杀123端口

如果要放行某些IP的1234端口,可以进行如下操作:

sudo iptables -I INPUT -i ens33 -s 192.168.1.0/24 -p tcp --dport 1234 -j ACCEPT #放行源地址来自192.168.1.0网段1234端口的所有数据包

◆允许SSH服务

服务器大多需要SSH服务,iptables需要开启SSH端口,具体操作如下:

sudo iptables -A INPUT -i ens33 -p tcp --dport 22 -j ACCEPT

◆允许Web服务

服务器大多需要访问Web服务的,可用如下规则打开Web服务访问:

sudo iptables -A INPUT -i ens33 -p tcp --dport 80 -j ACCEPTsudo iptables -A INPUT -i ens33 -p tcp --dport 443 -j ACCEPT

◆允许域名服务

服务器要启用DNS服务,iptables需要开启相应端口,关键操作如下:

sudo iptables -A INPUT -i ens33 -p tcp --dport 53 -j ACCEPTsudo iptables -A INPUT -i ens33 -p udp --dport 53 -j ACCEPT #大于512字节的请求将使用TCP的53端口,因为UDP报文的最大长度为512字节,而TCP的报文长度则可以超过512字节

◆允许时间服务

需要允许的计算机连接到NTP服务器以获取时间,具体操作如下:

sudo iptables -A INPUT -i ens33 -p udp --dport 123 -j ACCEPT

◆允许Email服务

对于电子邮件的发送和接收比较麻烦,这里采用默认和安全两种方式,关键操作如下:

SMTPsudo iptables -A INPUT -i ens33 -p tcp --dport 25 -j ACCEPTsudo iptables -A INPUT -i ens33 -p tcp --dport 465 -j ACCEPTPOP3sudo iptables -A INPUT -i ens33 -p tcp --dport 110 -j ACCEPTsudo iptables -A INPUT -i ens33 -p tcp --dport 995 -j ACCEPTIMAPsudo iptables -A INPUT -i ens33 -p tcp --dport 143 -j ACCEPTsudo iptables -A INPUT -i ens33 -p tcp --dport 993 -j ACCEPT

如果是上述之外的服务,如MySQL或Postgre等,请用相应端口替换即可。

◆拒绝其它数据包

需要的端口和协议都开启了,最后就需要iptables绝对拒绝上面规则之外的数据包内容,参考操作如下:

sudo iptables -A INPUT -j REJECTsudo iptables -A FORWARD -j REJECTsudo iptables -A OUTPUT -j REJECT

由于企业的需求千变万化,需求又不尽相同,而防火墙的配置参数既多又复杂,故上述所有的防火墙规则仅供学习和参考,待掌握之后再在此基础上定制出最适合自己应用环境的防火墙规则,让防火墙为服务器的安全出一份力。

— iptables命令保存为规则文件 —

前面展示了iptables的强大功能及高频操作,所有操作都可以通过命令行来实现,缺点是配置繁琐,且无法保存防火墙规则。

企业应用实际中,如果总是一条条的键入iptables规则,一方面很容易出错,因为iptable命令大多很长,另一方面,好不容易键入的规则一旦服务器重启将全部丢失。

可以通过创建iptables规则文件来实现,并且规则文件可以保存,重启服务器后可以直接调用,比通过命令行的方式便捷得多,关键操作如下:

sudo iptables-save > ~/iptables_save_03062019.txt

— 导入iptables规则 —

前面保存了iptables的规则,如何恢复呢?只需运行如下命令即可导入保存号的iptables规则文件:

sudo iptables-restore < ~/iptables_save_03062019.txt

最后还需要强调的是,通过手动或规则文件添加的iptables规则都不是永久的。如果重启服务器,这些规则都将被清空,需要重新添加或从文件导入。

关注微信公众号:安徽思恒信息科技有限公司,了解更多技术内容……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值