防火墙是一种控制网络流入和流出的安全工具,通常由一系列规则来实现。防火墙的作用是让我们的云服务器免受黑客的扫描、嗅探和攻击。防火墙有硬件防火墙和软件防火墙两种。在CentOS 6云服务器上,默认安装的防火墙是iptables,这是一种软件防火墙。
本文将演示iptables在Web应用场景中的使用方法。我们将屏蔽除了SSH、Ping、Web、DNS、NTP之外的其他服务,这也是iptables最基本的使用方法,是运维人员必须掌握的内容。本文不涉及到IPv6防火墙的使用,因为IPv6防火墙有另外一个工具叫做ip6tables。另外值得注意的是,在CentOS 7中,iptables不再是默认安装的防火墙,而代之以firewalld,不过我们仍然可以在CentOS 7中重新安装并启用iptables。
我们需要先准备好一台部署CentOS 6的云服务器,并确保可以用root账户登录系统。
第一步:规划iptables规则
在本文的演示环境中,这台云服务器将提供网站服务,不提供其他服务,诸如FTP、邮件、IRC等。我们规划的需要开启的服务、协议和端口如下表,除此之外全部屏蔽。
服务 | 协议 | 端口 |
---|---|---|
HTTP | TCP | 80 |
HTTPS | TCP | 443 |
SSH | TCP | 22 |
NTP | TCP | 123 |
DNS | TCP & UDP | 53 |
Ping | ICMP | All |
正如上文所述,iptables是由一系列的规则来控制网络访问的。当网络数据包发送到云服务器上时,iptables将会依次按照这些规则来检测并处理数据包。如果满足某条规则,其他规则将被略过。如果没有满足任何规则,则使用iptables的默认规则来处理。
网络数据包分为三类:INPUT、OUTPUT、FORWARD。对于这三类数据包,我们将采取不同的处理方式,这也作为iptables的默认规则使用。
- INPUT:流入数据包可能是安全的,也可能是有害的,因此需要区别对待。
- OUTPUT:流出数据包通常认为是安全的,因此设置为接受。
- FORWARD:转发数据包一般没有用处,因此设置为丢弃。
第二步:创建iptables规则
好了,下面我们就根据规划来设置iptables防火墙规则。以下命令都是用root账户登录系统后执行的,请确保登录账户有root权限。
查看当前规则:
iptables -L -n
清空当前规则:
iptables -F; iptables -X; iptables -Z
拒绝来自127.0.0.0/8的流量,除了loopback(回环流量)之外:
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -d 127.0.0.0/8 -j REJECT
阻止一些常见的攻击:
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
接受所有已建立的流入连接:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
接受HTTP和HTTPS连接:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
接受SSH连接:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
接受NTP连接:
iptables -A INPUT -p udp --dport 123 -j ACCEPT
接受DNS请求:
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
允许Ping:
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
最后,设置iptables默认规则:
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
第三步:保存iptables规则
需要注意的是,虽然以上设置都是即时生效的,但并非永久有效。如果没有保存,一旦系统重启后,规则将会失效。因此我们还需要把刚才设置好的规则保存到云服务器硬盘中。保存iptables的规则是:
service iptables save
iptables的规则将被保存到/etc/sysconfig/iptables文件中,你可以直接查看或修改这个文件。
cat /etc/sysconfig/iptables
我被锁在外面了,怎么办?
因为iptables的规则都是即时生效的,所以我们一旦设置错误,就有可能把自己锁在外面,无法远程管理云服务器了,怎么办呢?有两种解决办法。
- 如果你还没保存iptables规则,那很简单,只要到朝暮数据管理中心=》业务管理=》云服务器管理中,执行重启云服务器即可。
- 如果你已经保存了iptables规则,别忘了还可以通过控制台管理云服务器。打开朝暮数据管理中心=》业务管理=》云服务器管理=》控制台,输入用户名和密码进入系统后,执行iptables -F命令,清空所有iptables规则,就可以远程进入系统了。