IPTables系列:如何配置Ubuntu 14.04中的IPTables防火墙

IPTables基本命令

在向你们介绍复杂防火墙规则以前,仍是先上一些简单的料,让你们对IPTables最为基本的命令有一些简单了解。sql

首先要说明的是IPTables命令必需以root权限运行,这意味着你须要使用root身份登陆或者可以有权限使用su或sudo -i取得root Shell。下面的内容中咱们都使用sudo,这也是Ubuntu系统上的首选方法。安全

最好的起点就是先经过“-L”参数来查看下当前系统的全部IPTables规则:服务器

sudo iptables -L

咱们能够看到Linux中都有的3个经常使用默认链(INPUT、OUTPUT和FORWARD),同时也能够看到每一个链的缺省策略(每一个链对默认策略都是接受),在此咱们能够看到Ubuntu中并无添加任何默认规则集。网络

若是你但愿经过命令来查看每一个链的默认规则,可使用“-S”参数:tcp

sudo iptables -S

若是你看到IPTables里面已经有规则了,并但愿取消这些规则后从新更配置话,可使用“-F”参数来清空已有的规则集:oop

sudo iptables -F

虽然“-F”参数能够清空并刷新链中全部的现有规则集,但并不会对链的默认策略进行更改。所以,若是你是在更改远程VPS防火墙策略的话须要在“-F”清 空全部规则时先将INPUT和OUTPUT链的默认策略恢复到ACCEPT,以避免规则清空后SSH链接被阻断。要作到这一点可执行以下命令:spa

sudo iptables -P INPUT ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -F

在配置好容许SSH链接后(下面介绍),再将INPUT和OUTPUT链的默认规则更改成DROP便可。code

建立自已的IPTables规则

如今就要开始为咱们的VPS建立自定义的防火墙规则啦,正如上篇文章中所说,因为INPUT链会处理全部链接到服务器的入站数据包,所以咱们的全部操做都与INPUT链有关。如今先来配置服务器容许SSH链接。blog

完整命令应该是这样的:ip

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

大多朋友可能会以为看起来怎么这么复杂,那咱们来逐一分拆说明下。

  • -A INPUT :代表咱们要将此规则追加到某个链的最后,因为咱们要操做INPUT连接,因此这么写。
  • -m conntrack :iptables除了本身的核心功能外还只有一些实用的扩展和模块,这个参数代表添加conntrack模块提供的能力。(conntrack模块能够根据先前的链接来肯定数据包之间的关系)
  • –ctstate :该参数是conntrack模块提供的,它能够肯定如何用如今的数据包去匹配先前得到的数据包。ESTABLISHED值将自动容许现有链接的数据包,RELATED值将容许已创建链接的相关数据包。(这样就与SSH会话特性相匹配上了)
  • -j ACCEPT :这个参数用于指定匹配的数据包的目标。用在这里表示接受和容许符合上述标准的数据包经过。

配置好后咱们来看一下:

sudo iptables -L

如今,你应该已经知道IPTables的基本语法了,下面咱们继续添加规则打怪,以期尽快升级为高手。

接受其它必要链接

你们的VPS上通常SSH服务的22端口,Web服务器的80端口及Mysql的3306端口都是须要打开的,否则怎么对外提供服务呢。所以咱们也须要经过以下命令在IPTables中打开这些端口:

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT

为了保证咱们的VPS可以正常运行,还须要添加一条容许规则。一般,计算机上的服务都会发送网络数据包以保持彼此之间的通讯。而这种通讯会利用到一个名叫loopback的伪网卡将流量引导回本身。所以,咱们还须要为loopback网卡添加一条容许规则。

sudo iptables -I INPUT 1 -i lo -j ACCEPT
  • -I INPUT 1 :与“-A”不一样,它能够指定要将规则添加到该链的位置。

实施Drop规则

前面讲的内容其实都是基于一个前提假设的,但事先咱们须要先把防火墙的2种经常使用模式说明一下。一种是明肯定义容许经过防火墙的规则,不匹配的都丢 弃。另一种是明肯定义拒绝经过防火墙的规则,其他的都容许。咱们的前提假设采用的就是第一种方式,这样配置起来相对简单,规则也较少,也更加安全。

前面咱们已经为INPUT连接定义了一些容许规则,但默认INPUT链是容许全部包,因此咱们如今须要将INPUT链的默认规则更改成“Drop”即丢弃。经过以下命令完成更改:

sudo iptables -P INPUT DROP

查看和保存配置

IPTables的配置是当即生效的,前面已经介绍过,在配置好以后咱们能够直接用“-L”参数进行查看,这里再另外增长一个“–line-numbers”参数,它主要用于显示行数,对于规则较多时的查看很是方便。

sudo iptables -L --line-numbers

虽然IPTables的命令执行后会当即生效,但这个生效过程实际上是临时的,系统在重启以后便会丢失。所以,咱们还须要将这些配置添加到配置文件当中,以保证系统在下次重启后会自动载入咱们的IPTables防火墙规则。

sudo apt-get update
sudo apt-get install iptables-persistent

该命令脚本下载执行后会询问咱们是否对IPTables配置进行保存,若是肯定的话选择“是”便可。保存后下次重启系统也不会形成配置丢失了。

相关文章
相关标签/搜索