本文共 4049 字,大约阅读时间需要 13 分钟。
Iptables是Linux系统中的一种网络防火墙工具,用于管理网络流量。其核心功能是通过定义规则来过滤、转发数据包,从而实现对网络的访问控制。Iptables的规则由表(tables)和链(chains)组成,每条规则都有一个目标(-j option)。
数据包进入主机时,防火墙规则的执行顺序是从前到后依次执行。如果遇到匹配的规则,则执行该规则后停止检查其他规则;如果不匹配则继续向下进行。需要注意的是,匹配到了拒绝规则也会停止检查,防火墙的默认行为是拒绝所有未明确允许的数据包。
Iptables主要有以下几种表:
每个表包含多条链,链中的规则按顺序执行。一般情况下,用户不会经常使用mangle表,因为它相对复杂且不常用。
数据包的流向和流程如下:
在实际操作中,需要注意以下几点:
iptables-save
命令将规则保存到文件中,方便后续恢复。以下是一个常用的防火墙配置脚本示例:
#!/bin/bashIPT="/sbin/iptables"# 清空所有规则$IPT -F$IPT -X$IPT -Z# 允许SSH访问$IPT -A INPUT -s 192.168.1.0/24 -p tcp --dport 52113 -j ACCEPT$IPT -A INPUT -s 202.81.17.0/24 -p tcp --dport 52113 -j ACCEPT$IPT -A INPUT -s 10.0.0.0/24 -p tcp --dport 52113 -j ACCEPT$IPT -A INPUT -p tcp --dport 22 -j ACCEPT# 允许访问特定端口$IPT -A INPUT -s 192.168.1.0/24 -p all -j ACCEPT$IPT -A INPUT -s 202.81.17.0/24 -p all -j ACCEPT$IPT -A INPUT -s 10.0.0.0/24 -p all -j ACCEPT# 设置默认策略$IPT --policy INPUT ACCEPT$IPT --policy FORWARD DROP$IPT --policy OUTPUT ACCEPT# 允许环回接口访问$IPT -A INPUT -i lo -j ACCEPT$IPT -A OUTPUT -o lo -j ACCEPT# 拦截恶意地址$IPT -A INPUT -i eth0 -s 172.16.0.0/12 -j DROP$IPT -A INPUT -i eth0 -s 0.0.0.0/8 -j DROP$IPT -A INPUT -i eth0 -s 169.254.0.0/16 -j DROP$IPT -A INPUT -i eth0 -s 192.0.2.0/24 -j DROP# 防御潜在攻击$IPT -A INPUT -p tcp --tcp-flags ALL ALL -j DROP$IPT -A INPUT -p tcp --tcp-flags ALL NONE -j DROP$IPT -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP$IPT -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP$IPT -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP$IPT -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP$IPT -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP$IPT -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP$IPT -A INPUT -p tcp --tcp-flags ACK,URG URG -j DROP# 允许特定服务$IPT -A INPUT -s 192.168.1.0/24 -p tcp --dport 5666 -j ACCEPT$IPT -A INPUT -s 202.81.17.0/24 -p tcp --dport 5666 -j ACCEPT$IPT -A INPUT -s 202.81.18.0/24 -p tcp --dport 5666 -j ACCEPT$IPT -A INPUT -s 192.168.1.0/24 -p tcp --dport 3306 -j ACCEPT$IPT -A INPUT -s 192.168.1.0/24 -p tcp --dport 3307 -j ACCEPT$IPT -A INPUT -s 192.168.1.0/24 -p tcp --dport 3308 -j ACCEPT$IPT -A INPUT -s 192.168.1.0/24 -p tcp --dport 1521 -j ACCEPT$IPT -A INPUT -p tcp --dport 21 -j ACCEPT$IPT -A INPUT -p tcp --dport 80 -j ACCEPT$IPT -A INPUT -s 192.168.1.0/24 -p tcp -m multiport --dport 8080,8081,8082,8888,8010,8020,8030,8150 -j ACCEPT$IPT -A INPUT -s 202.81.17.0/24 -p tcp -m multiport --dport 8080,8081,8082,8888,8010,8020,8030,8150 -j ACCEPT$IPT -A INPUT -s 124.43.62.96/27 -p tcp -m multiport --dport 8080,8081,8082,8888,8010,8020,8030,8150 -j ACCEPT$IPT -A INPUT -s 192.168.1.0/24 -p udp --dport 161 -j ACCEPT$IPT -A INPUT -s 202.81.17.0/24 -p udp --dport 161 -j ACCEPT$IPT -A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 873 -j ACCEPT$IPT -A INPUT -s 202.81.17.0/24 -p tcp -m tcp --dport 873 -j ACCEPT$IPT -A INPUT -s 124.43.62.96/27 -p tcp -m tcp --dport 873 -j ACCEPT$IPT -A INPUT -s 192.168.1.0/24 -p udp -m multiport --dport 111,892,2049 -j ACCEPT$IPT -A INPUT -s 192.168.1.0/24 -p tcp -m multiport --dport 111,892,2049 -j ACCEPT$IPT -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT$IPT -A INPUT -s 124.43.62.96/27 -p icmp -m icmp --icmp-type any -j ACCEPT$IPT -A INPUT -s 192.168.1.0/24 -p icmp -m icmp --icmp-type any -j ACCEPT$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT$IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT# 脚本结束
在实际操作中,可以根据需要调整防火墙规则。例如:
转载地址:http://xqhe.baihongyu.com/