Linux网络守护者:iptables从入门到实战配置
1. iptables:Linux系统的网络守门人
第一次接触iptables时,我完全被它的命令行界面吓到了。直到有次服务器被恶意扫描,我才意识到这个看似复杂的工具,其实是Linux系统最可靠的网络保镖。简单来说,iptables就像是你家小区的保安系统,它能精确控制哪些网络流量可以进出你的服务器,哪些应该被拒之门外。
在Linux生态中,iptables是netfilter项目的用户空间工具,负责配置内核级的网络包过滤规则。它不仅能做传统的防火墙功能,还能实现NAT地址转换、流量整形等高级操作。我见过太多人因为轻视基础防护,导致服务器沦为肉鸡的案例。实际上,只要掌握几个核心概念,任何人都能快速构建起有效的防护墙。
举个例子,去年我帮朋友排查网站异常,发现他的服务器每小时收到上万次SSH暴力破解请求。用iptables加了三条规则后,异常流量立即下降了90%。这种立竿见影的效果,正是它被称为"Linux网络守护者"的原因。接下来,我会用最直白的语言带你掌握这个神器,从四表五链的基础到真实场景的防护配置。
2. 四表五链:理解iptables的骨架
2.1 四大功能表
想象iptables是个多功能工具箱,里面有四个专用工具层:
- filter表:最常用的基础工具层,就像门卫的登记簿。我管理过的服务器中,90%的规则都写在这里。它决定数据包能否通过(ACCEPT/DROP)
- nat表:网络地址转换层,相当于物业的快递代收服务。去年我给公司搭建VPN服务器时就靠它实现内网穿透
- mangle表:高级改装层,类似专业的汽车改装店。除非你要做QoS或特殊标记,否则平时很少碰
- raw表:连接追踪豁免层,好比VIP通道。在需要绕过系统自动跟踪的特殊场景才会用到
2.2 五大规则链
数据包在系统中流动时,会经过五个检查点(链):
- PREROUTING链:数据包刚进网卡的第一道安检
- INPUT链:目标为本机的数据包检查站
- FORWARD链:需要转发的数据包中转站
- OUTPUT链:本机发出的数据包出口
- POSTROUTING链:数据包发出前的最后处理
实际配置时,我常用这个记忆口诀:"外到内先PREROUTING,发给本机走INPUT,转发必经FORWARD,本机发出OUTPUT,最后都要POSTROUTING"。上周帮客户调试NAT时,就是靠这个理顺了规则顺序。
3. 手把手教你写第一条规则
3.1 基础命令结构
iptables命令看起来复杂,拆解后其实很简单:
iptables -t 表名 -操作 链名 匹配条件 -j 动作举个真实案例:阻止某个恶意IP的访问
iptables -t filter -A INPUT -s 123.123.123.123 -j DROP这条命令的意思是:在filter表的INPUT链末尾追加(-A)一条规则,匹配源地址(-s)为123.123.123.123的数据包,执行丢弃(-j DROP)动作。去年有个爬虫疯狂抓取我们网站,就是用这个方法瞬间解决了问题。
3.2 必须掌握的实用命令
- 查看现有规则:
iptables -L -n -v(建议加上--line-numbers显示行号) - 删除规则:
iptables -D INPUT 3(删除INPUT链第3条规则) - 清空所有规则:
iptables -F(调试时特别有用) - 保存规则:
service iptables save或iptables-save > /etc/iptables.rules
提醒一个我踩过的坑:在远程服务器操作时,一定要先放行自己的IP,再设置拒绝所有。有次不小心把自己锁在外面,只能去机房重置...
4. Web服务器防护实战
4.1 基础防护配置
给Nginx/Apache服务器配置防火墙时,我通常会设置这些基础防护:
# 允许已建立的连接 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 开放80/443端口 iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT # 限制SSH连接(仅允许办公室IP) iptables -A INPUT -p tcp --dport 22 -s 203.0.113.0/24 -j ACCEPT # 默认策略设为拒绝 iptables -P INPUT DROP iptables -P FORWARD DROP这个配置既保证了Web服务可用性,又极大减少了攻击面。根据我的经验,这样设置后服务器扫描日志能减少80%以上的恶意请求。
4.2 防CC攻击技巧
遇到CC攻击时,可以结合limit模块进行防护:
# 每分钟最多允许25个新连接 iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT去年电商大促期间,客户网站遭遇CC攻击,就是用这个方法在不停机的情况下缓解了攻击。同时建议安装fail2ban增强防护。
5. 家庭网络的高级应用
5.1 实现端口转发
我家里的NAS放在内网,通过iptables实现外网安全访问:
# 将公网IP的5000端口转发到内网NAS iptables -t nat -A PREROUTING -p tcp --dport 5000 -j DNAT --to 192.168.1.100:5000 iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.100 --dport 5000 -j SNAT --to 192.168.1.1 # 必须开启IP转发 echo 1 > /proc/sys/net/ipv4/ip_forward这样配置后,在外网访问公网IP:5000就能安全连接到内网NAS了。记得在filter表的FORWARD链放行相应流量。
5.2 家长控制方案
用iptables限制孩子设备的上网时间:
# 每天20:00-22:00允许上网 iptables -A FORWARD -m mac --mac-source 11:22:33:44:55:66 -m time --timestart 20:00 --timestop 22:00 -j ACCEPT # 其他时间拒绝 iptables -A FORWARD -m mac --mac-source 11:22:33:44:55:66 -j DROP这个方案比路由器自带的家长控制更灵活,还能针对不同设备设置不同规则。
