1)、查看 iptables 规则
# iptables -t nat -nvL
-t 指定查看的表,如果不加,默认查看 filter 表
-n 表示不针对 IP 反解析主机名
-L 表示列出
-v 更详细
显示内容为:
num – 指定链中的规则编号
target – 前面提到的target的特殊值
prot – 协议:tcp, udp, icmp等
source – 数据包的源IP地址
destination – 数据包的目标IP地址
filter 表是过滤包的,包括 INPUT, OUTPUT, FORWARD
nat 表是网络地址转换的,包括 PREROUTING, OUTPUT, POSTROUTING
mangle 表是用于给数据包打标记,然后根据标记去操作哪些包,包括 PREROUTING, OUTPUT, POSTROUTING,INPUT,FORWARD
2)、清空 iptables
iptables --flush
或者
iptables -F
这两条命令是等效的。但是并非执行后就万事大吉了。你仍然需要检查规则是不是真的清空了,因为有的linux发行版上这个命令不会清除NAT表中的规则,此时只能手动清除:
iptables -t NAT -F
3)、保存与启动 iptables
# 保存iptables规则
service iptables save
# 重启iptables服务
service iptables stop
service iptables start
查看当前规则:
cat /etc/sysconfig/iptables
4)、包以及流量计数器置零
# iptables -Z
5)、增加/删除一条规则
# iptables -A INPUT -s 10.72.11.12 -p tcp --sport 1234 -d 10.72.137.159 --dport 80 -j DROP (添加到规则的下面)
# iptables -I INPUT -s 10.72.11.12 -p tcp --sport 1234 -d 10.72.137.159 --dport 80 -j DROP (添加到规则的上面)
# iptables -D INPUT -s 10.72.11.12 -p tcp --sport 1234 -d 10.72.137.159 --dport 80 -j DROP (删除一条规则)
注:位于上面的规则先生效
6)、备份恢复 iptables
#iptables-save >1.ipt
#iptables-restore <1.ipt
7)、例子:
# 1.清空所有iptables规则 iptables -F
# 2.接收目标端口为22的数据包 iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
# 3.拒绝所有其他数据包 iptables -A INPUT -j DROP
在 Linux的下面部署了apache,为了安全我们使用非root用户进行启动,但是在域名绑定时无法直接访问80端口号。众所周知,在unix下,非root用户不能监听1024以下的端口号,这个apache服务器就没办法绑定在80端口下。所以这里需要使用linux的端口转发机制,把到80端口的服务请求都转到8080端口上。
在root账户下面运行一下命令:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
如果指定了 ip
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-destination IP:8080
vim iptables.sh
#!/bin/bash
ipt="/sbin/iptables"
$ipt -F
$ipt -P INPUT ACCEPT
$ipt -P OUTPUT ACCEPT
$ipt -P FORWARD ACCEPT
$ipt -A INPUT -s 192.168.0.0/24 -p tcp --dport 22 -j ACCEPT
$ipt -A INPUT -p tcp --dport 80 -j ACCEPT
$ipt -A INPUT -p tcp --dport 21 -j ACCEPT
$ipt -A INPUT -p tcp --dport 22 -j DROP