- 查看规则列表
sudo iptables -L INPUT -n -v
- 提取使用中的端口
# TCP
ss -tuln | awk '/LISTEN/ {print $5}' | cut -d: -f2 | grep -E '^[0-9]+$' | sort -u > /tmp/open_tcp_ports.txt
# UDP
ss -uln | awk '/UNCONN/ {print $5}' | cut -d: -f2 | grep -E '^[0-9]+$' | sort -u > /tmp/open_udp_ports.txt
- 校验文件内容
cat /tmp/open_tcp_ports.txt
cat /tmp/open_udp_ports.txt
注意,如果是远程连接,一定要确认文件中有22端口,否则后续操作直接断连!!!
- 清空所有原有规则
# 清空过滤表所有规则
sudo iptables -F
# 删除自定义链
sudo iptables -X
# 清空 nat 表
sudo iptables -t nat -F
sudo iptables -t nat -X
- 放行本地回环
sudo iptables -A INPUT -i lo -j ACCEPT
- 放行已建立的连接
sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
- 循环放行所有本机监听的 TCP、UDP 端口
# TCP
sudo bash -c 'while read port; do iptables -A INPUT -p tcp --dport "$port" -j ACCEPT; done < /tmp/open_tcp_ports.txt'
# UDP
sudo bash -c 'while read port; do iptables -A INPUT -p udp --dport "$port" -j ACCEPT; done < /tmp/open_udp_ports.txt'
- 设置规则
# 入站流量:没有匹配上面放行规则的端口,直接丢弃
sudo iptables -P INPUT DROP
# 转发流量默认丢弃(服务器无路由转发可保持)
sudo iptables -P FORWARD DROP
# 本机出站全部允许(服务器主动访问外网不受限)
sudo iptables -P OUTPUT ACCEPT
- 验证
sudo iptables -L INPUT -n --line-numbers
- 持久化
service iptables save
其他命令:
# 确认22端口已放行(有输出说明已放行,无输出说明已禁用)
sudo iptables -L INPUT -n | grep 22
# 手动放行22端口
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 清空所有规则,开放全部端口
iptables -F
iptables -P INPUT ACCEPT