iptables例子
一些例子。
设置链的默认规则
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
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。