121 lines
4.9 KiB
Markdown
121 lines
4.9 KiB
Markdown
作者:沐安大数据运维
|
|
链接:https://www.zhihu.com/question/23063802/answer/1967299165974423120
|
|
来源:知乎
|
|
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
|
|
|
|
|
|
都很明确:**开,必须开,除非你想体验半夜被报警电话吵醒的刺激感。**
|
|
|
|
前任运维说“咱们有云防火墙,系统层iptables没必要开,影响性能”。
|
|
|
|
有个业务部门偷偷开了个[Redis](https://zhida.zhihu.com/search?content_id=754271874&content_type=Answer&match_order=1&q=Redis&zhida_source=entity)端口在外网,没设密码。一个月后,我们成了别人的挖矿肉鸡,CPU常年100%,清理后门花了两天时间。
|
|
|
|
养成个好习惯:新服务器上线,第一件事就是配iptables。
|
|
|
|
### iptables不是累赘,是你的“安全底线”
|
|
|
|
很多人觉得,现在都是云时代了,有云厂商的安全组,iptables多余。这话对了一半。
|
|
|
|
[云安全组](https://zhida.zhihu.com/search?content_id=754271874&content_type=Answer&match_order=1&q=%E4%BA%91%E5%AE%89%E5%85%A8%E7%BB%84&zhida_source=entity)确实好用,像大楼的物业保安。但iptables是你家的防盗门。**保安可能会看走眼,但防盗门永远忠实地守在你家门口。**
|
|
|
|
如果云平台控制台故障,安全组规则突然失效。
|
|
|
|
如果服务器上的iptables还开着,那几千台机器就能否避免全暴露在公网上。
|
|
|
|
想想都头皮发麻。
|
|
|
|
### 性能影响?别自己吓自己
|
|
|
|
“开防火墙影响性能”——这是最大的误解。
|
|
|
|
看到过过一个测试:开启基础防护规则(开22、80、443端口,默认拒绝其他入站),对网络性能的影响可以忽略不计。除非你每条规则都带着几十个复杂的字符串匹配,那确实会慢。但正常使用,根本感觉不出来。
|
|
|
|
**比起性能那点微不足道的损失,安全带来的收益太大了。**
|
|
|
|
### 怎么配置才既安全又省心?
|
|
|
|
```text
|
|
我现在的标准配置模板,用了很多年,分享给大家:
|
|
# 清空现有规则
|
|
iptables -F
|
|
# 设置默认策略:进来的包都拒绝,出去的都允许
|
|
iptables -P INPUT DROP
|
|
iptables -P FORWARD DROP
|
|
iptables -P OUTPUT ACCEPT
|
|
# 本机访问本机全部允许
|
|
iptables -A INPUT -i lo -j ACCEPT
|
|
|
|
# 允许已建立的连接和相关的连接通过(最关键的一条!)
|
|
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
|
|
|
|
# 开SSH端口(根据实际情况改)
|
|
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
|
|
|
|
# 开Web端口(如果需要)
|
|
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
|
|
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
|
|
|
|
# 最后,允许ping(调试用)
|
|
iptables -A INPUT -p icmp -j ACCEPT
|
|
```
|
|
|
|
这套规则的核心思想是:**先堵死所有入口,再按需开小门。**
|
|
|
|
### 不同场景下的灵活用法
|
|
|
|
根据服务器角色,配置要有侧重:
|
|
|
|
**Web服务器**:主要开80、443,数据库端口3306只对内部IP开放
|
|
|
|
```text
|
|
iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 3306 -j ACCEPT
|
|
```
|
|
|
|
**数据库服务器**:尽量不暴露在外网,业务端口只对应用服务器IP开放
|
|
|
|
**跳板机**:SSH端口可以改成非标准端口,减少被扫描的概率
|
|
|
|
```text
|
|
iptables -A INPUT -p tcp --dport 58222 -j ACCEPT
|
|
```
|
|
|
|
### 运维老鸟的小技巧
|
|
|
|
1. **规则顺序很重要**:iptables按顺序匹配,常用的规则放前面
|
|
2. **保存规则是必须的**:配置完一定要`service iptables save`,否则重启就没了
|
|
3. **先放行再操作**:远程操作时,先在crontab里设置5分钟后清空规则的备份计划,防止把自己锁在外面
|
|
4. **日志记录**:对可疑的访问尝试记录日志,方便排查
|
|
|
|
```text
|
|
iptables -A INPUT -p tcp --dport 22 -m limit --limit 5/min -j LOG --log-prefix "SSH attempt: "
|
|
```
|
|
|
|
### 新时代的替代品?各有各的好
|
|
|
|
现在确实有更现代的方案:
|
|
|
|
- **[firewalld](https://zhida.zhihu.com/search?content_id=754271874&content_type=Answer&match_order=1&q=firewalld&zhida_source=entity)**:RedHat系的主流,配置更直观,适合桌面和服务器
|
|
- **[ufw](https://zhida.zhihu.com/search?content_id=754271874&content_type=Answer&match_order=1&q=ufw&zhida_source=entity)**:Ubuntu的简化工具,几条命令就能搞定基础防护
|
|
- **云安全组**:管理方便,不耗服务器资源
|
|
|
|
习惯iptables,因为它:
|
|
|
|
- **通用**:哪个Linux发行版都有
|
|
- **透明**:每条规则我都知道在干什么
|
|
- **灵活**:想怎么配就怎么配,没有黑盒子
|
|
|
|
### 讲话
|
|
|
|
运维这行干久了,你会明白一个道理:**安全往往败在侥幸心理上**。
|
|
|
|
“就一会儿,应该没事”
|
|
“咱们系统小,没人会盯上”
|
|
“有云防火墙呢,够了”
|
|
|
|
不要等代价产生了再后悔。
|
|
|
|
开启iptables,就像是给你的服务器买了份保险。
|
|
|
|
平时感觉不到它的存在,真出事了,它能救你的命。
|
|
|
|
在运维的世界里,谨慎从来都不是坏事。 |