iptables命令
iptables 是 Linux 操作系统中用于配置 IPv4 数据包过滤规则的工具。它允许系统管理员定义数据包的走向,从而实现网络安全性的控制。
语法
iptables(选项)(参数)
选项
-t<表>:指定要操纵的表;
-A:向规则链中添加条目;
-D:从规则链中删除条目;
-i:向规则链中插入条目;
-R:替换规则链中的条目;
-L:显示规则链中已有的条目;
-F:清楚规则链中已有的条目;
-Z:清空规则链中的数据包计算器和字节计数器;
-N:创建新的用户自定义规则链;
-P:定义规则链中的默认目标;
-h:显示帮助信息;
-p:指定要匹配的数据包协议类型;
-s:指定要匹配的数据包源ip地址;
-j<目标>:指定要跳转的目标;
-i<网络接口>:指定数据包进入本机的网络接口;
-o<网络接口>:指定数据包要离开本机所使用的网络接口。
iptables命令选项输入顺序:
iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作
表名包括:
raw:高级功能,如:网址过滤。
mangle:数据包修改(QOS),用于实现服务质量。
net:地址转换,用于网关路由器。
filter:包过滤,用于防火墙规则。
规则链名包括:
INPUT链:处理输入数据包。
OUTPUT链:处理输出数据包。
PORWARD链:处理转发数据包。
PREROUTING链:用于目标地址转换(DNAT)。
POSTOUTING链:用于源地址转换(SNAT)。
动作包括:
accept:接收数据包。
DROP:丢弃数据包。
REDIRECT:重定向、映射、透明代理。
SNAT:源地址转换。
DNAT:目标地址转换。
MASQUERADE:IP伪装(NAT),用于ADSL。
LOG:日志记录。
实例
说明: iptables 防火墙的策略匹配顺序为从上向下,当有多条相互排斥的策略在一起时,上面的策略先匹配,并且一旦策略匹配数据包就放行或阻止掉了,下面的策略不会再生效。
# 查看 iptables 现有规则
iptables -L -n
# 查看每个规则chain的序列号。
iptables -L -n --line-number
# 根据序列号删除指定一条防火墙规则,如:删除INPUT 表的第三条已添加规则,这里3代表第几行规则
iptables -D INPUT 3
# 清空所有默认规则
iptables -F
# 清空所有自定义规则
iptables -X
# 所有计数器归 0
iptables -Z
# 允许来自于 lo 接口的数据包(本地访问)
iptables -A INPUT -i lo -j ACCEPT
# 开放22端口(-A 将规则追加在原有规则的最后一条 -I 将新添加的规则加在原有规则的第一条)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 禁止访问80端口
iptables -A INPUT -p tcp --dport 80 -j DROP
# 允许ping
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
# 允许接受本机请求之后的返回数据 RELATED ,是为 FTP 设置的
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# 同时开放22和80端口
iptables -I INPUT -p tcp -m multiport --dport 22,80 -j ACCEPT
# 开放5000-6000端口
iptables -I INPUT -p tcp --dport 5000:6000 -j ACCEPT
# 允许某个网段的ip访问
iptables -I INPUT -p all -s 0.0.0.0/0 -j ACCEPT
# 允许某个ip的8080端口访问
iptables -I INPUT -s 0.0.0.0 -p tcp --dport 8080 -j ACCEPT
# 禁止某台主机的tcp访问访问
iptables -I INPUT -p tcp -s 0.0.0.0 -j DROP
# iptables 禁止指定 IP 段访问
iptables -I INPUT -s 117.41.187.0/24 -j DROP
# 只允许访问本机80端口(其他端口都禁止访问
iptables -A INPUT -p tcp ! --dport 80 -j DROP
# 禁止服务器访问此IP地址
iptables -I OUTNPUT -d 114.232.9.171 -j DROP
删除规则:
iptables -t filter -D INPUT 2 //删除filter表中INPUT链中的第二条规则
iptables -D INPUT -s 192.168.1.100 -j ACCEPT //删除源地址为192.168.1.100,动作为ACCEPT的规则
iptables -F INPUT //删除filter表中INPUT链
iptables -F //删除所有的规则(慎用)
# 允许对外访问的所有端口
sudo iptables -A INPUT -p tcp -j ACCEPT
# 拒绝所有其他端口的访问
sudo iptables -A INPUT -j DROP
# 保存上述规则
service iptables save
# 查看配置文件,看是否把临时文件加载进来
cat /etc/sysconfig/iptables