From Fedora Project Wiki

在这篇文档里里我们将主要举例介绍三种编辑 iptables 规则的方式:

  • CLI: iptables 命令行接口和系统配置文件 /etc/sysconfig/iptables.
  • TUI 基于文本的接口: setup 或 system-config-firewall-tui
  • GUI: system-config-firewall

需要注意的是本篇文章只是说明了如何编辑已有 iptables 规则,并不包含开始的创建规则链。

CLI(命令行接口)

对 iptables 的更改即时生效

下面的过程可以在防火墙运行的情况下改变防火墙策略。


警告
不当的 iptables 规则可能会破坏 Fedora 系统的网络连接。

阅读 man 手册中关于 iptables 的部分(man iptables)来获取深入的解释和高级复杂的规则实例。

需要超级用户权限
这些命令必须要有超级用户权限才能执行,请使用 sudo 或者 su 来获取超级用户权限。


列出现有规则

使用

iptables -L

命令可以查看当前正在使用的 iptables 规则。

端口数值
使用 -L 选项列出的端口数值是其对应的服务名称而不是端口号。如果要看端口号,请包含 -n 选项。
iptables -L -n
查看计数器
使用 -L 选项列出的规则并不包含匹配的计数。使用 -v 选项来显示匹配计数。
iptables -L -v

允许已经建立及其相关的连接、icmp 请求、所有本地数据和 ssh 通讯的 iptables 规则例子:


[root@server ~]# iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

注意规则是按顺序匹配的,只要有匹配的规则便不会再往下接着检查。因此,举个例子来说,如果一条规则拒绝 ssh 连接,其后又有一条规则允许 ssh,那么就会应用拒绝 ssh 的规则,后面允许 ssh 连接的规则就不会应用,也就无法起到作用。

追加规则

下面在指定的链的最后面添加一条规则:

[root@server ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
[root@server ~]# iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

注意 INPUT 链的最后一行。现在该链中已经有 5 条规则了。

删除规则

要删除一条规则就必须要知道该规则在链中的位置。下面的例子删除之前添加的那一条规则(在 INPUT 链的第5条):

[root@server ~]# iptables -D INPUT 5
[root@server ~]# iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

插入规则

替换规则

清空规则

使规则永久生效

TUI(基于文本的接口)

GUI