一些例子。

设置链的默认规则

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

删除所有规则和多余的链

iptables -t nat -F
iptables -t mangle -F
iptables -F
iptables -X

查看现有规则

iptables -L INPUT -v -n --line-number
iptables -L FORWARD -v -n --line-number
iptables -L OUTPUT -v -n --line-number

-L 列出规则
-v 详细模式
-n 不查找IP的reverse DNS,以免节约时间。不然显示结果的时候会比较卡。
--line-number 显示行号

通用规则

放行本机访问本地端口,放行已建立链接的数据包,丢弃未知数据包。

iptables -I INPUT -i lo -j ACCEPT
iptables -I INPUT -m conntrack --ctstate RELATED,ESTABLISHED --jump ACCEPT
iptables -I INPUT -m conntrack --ctstate INVALID --jump DROP
  • -m conntrack --ctstate-m state --state有什么区别?
    后者已经被前者取代,在新版本的操作系统中,后者会直接被转换为前者。
  • ctstate 有哪些?是什么意思?
    NEW,这个数据包想开启一个连接。
    RELATED,这个数据包想开启一个连接,且其他已知连接相关。
    ESTABLISHED,已建立连接的数据包。
    INVALID,找不到与其相关的连接。

允许IP和IP段

iptables -A INPUT -p tcp --src 1.1.1.1 --jump ACCEPT
iptables -A INPUT -p all --src 1.1.1.1/24 --jump ACCEPT

开放指定端口

一条命令可以开启1个端口,也可以同时开启多个端口。

iptables -A INPUT -p tcp --dport 80 --jump ACCEPT
iptables -A INPUT -p tcp -m multiport --dports http,https --jump ACCEPT
iptables -A INPUT -m conntrack --ctstate NEW -p tcp --dport 23333 -m comment --comment "SSH Port" --jump ACCEPT

允许指定协议

iptables -A INPUT -p tcp --dport 80 --jump ACCEPT
iptables -A INPUT -p udp --dport 80 --jump ACCEPT

添加注释

iptables -A INPUT -s 113.68.4.8/32 -m comment --comment "Home PC" --jump ACCEPT

新增规则

# 新规则放顶部
iptables -I INPUT -p tcp --dport 80 --jump ACCEPT

# 新规则放底部
iptables -A INPUT -p tcp --dport 80 --jump ACCEPT

# 插入新规则,使其成为第2条
iptables -I INPUT 2 -p tcp --dport 80 --jump ACCEPT

删除规则

删除INPUT链第二条规则
iptables -D INPUT 2

删除指定规则
iptables -D INPUT -p tcp --dport 80 --jump ACCEPT

记录

把这条记录添加到末尾,就可以记录被拒绝的数据包。可以通过tail /var/log/syslog -f来查看。

iptables -A INPUT -m limit --limit 10/min -j LOG --log-prefix "iptables denied: " --log-level 7

保存

规则须保存,否则重启后失效。
先安装 iptables-persistent,再运行命令。

netfilter-persistent save

导入导出

iptables-save > v4.rules
iptables-restore < v4.rules
文章目录