虽然说Linux在安全方面确实相当于windows要更加可靠一些,但一般使用其作为服务器的我们,也不能大意,也是需要严格限制网络传输过程中的出入规则。上篇文章我们有聊到统计网络的信息,这篇文章来学习一下比较著名的防火墙
iptables
,它已经有十几年的历史了,算是不折不扣的Linux
系统的功臣。
一、命令介绍
iptables
命令可以制定一些规则,规定其它电脑可以使用哪些端口来连接你的电脑(对应入),以及你的电脑可以连接哪些端口(对应出),如果粒度更细,甚至也可以通过 IP 地址来进行过滤。
比较常见的操作有,拦截Mysql
的出入网络,那么可以用 iptables
封锁 3306 端口等。一般来说系统都会默认安装iptables
,如果没有安装,安装下面的指令完成安装。 ```
in Centos
$sudo yum install iptables
in Ubuntu/Debian
$sudo apt install iptables ``` 在接下来的实际操作时,需要注意的是,使用这个命令,需要使用到root权限。
二、操作实例
iptables -L 显示所有的防火墙规则。 $iptables -L
图上可以清晰的看到,对于我的服务器,明显防火墙规则分了好几个区域,包括: - Chain INPUT
: 对应控制“进入”的网络传输的规则 - Chain FORWARD
: 对应控制“转发”的网络传输的规则 - Chain OUTPUT
: 对应控制“出去”的网络传输的规则 - Chain DOCKER
: 对应控制Docker的网络传输的规则,包括其它以Docker开头的块区域,都是Docker具体细分的规则,比如用户,隔离等等。
这个命令让我们认识到了目前的防火墙过滤的规则,那么我们CRUD这些规则呢?
清除所有的规则 $iptables -F $iptables -X $iptables -Z
屏蔽IP ```
屏蔽单个 IP
$iptables -I INPUT -s 121.45.6.7 -j DROP
封整个段
$iptables -I INPUT -s 121.0.0.0/8 -j DROP **删除指定规则**
将所有 iptables 以序号标记显示
$iptables -L -n --line-numbers
执行删除 INPUT 里序号为 10 的规则
$iptables -D INPUT 10 ``` 其功能很强大,可以阅读官方语法深入操作。
三、扩展
在使用过程中,iptables
的配置和使用规则相当繁复,普通用户学习成本上是相当的高。另外一个命令可以帮助到我们,那就是UFW(Uncomplicated Firewall)
,顾名思义,就是简单的防火墙。很多Linux
的发行版本并不支持,可以去官方UFW去学习使用。 进一步说,如果你的系统支持图形界面,建议使用GUFW。 iptables
已经有这么多年的历史了,从 Linux 3.13
开始,官方实际上已经推出了新的命令nftables
以取代前者,这个新命令是新的防火墙子系统 / 包过滤引擎,提供了一个更简单的 Kernel ABI
(Application Binary Interface),减少重复代码,改进错误报告,更有效支持过滤规则。