netnr/ iptables.sh 2021-06-23 14:19
iptables 规则配置
# 安装
yum install iptables
yum update iptables 
yum install iptables-services
service iptables status

iptables -L # 列表
iptables -nL --line

iptables -A INPUT -p tcp --dport ssh -j ACCEPT # 开启 SSH
iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 开启 80 TCP
iptables -A INPUT -p tcp --dport 9900:9999 -j ACCEPT # 开启 9900-9999 TCP
iptables -I INPUT 2 -p tcp --dport 443 -j ACCEPT # 插入规则 开启 443 TCP

iptables -D INPUT 2 # 按行号删除规则

# 配置允许规则后,​​将输入策略更改为禁止 drop ,警告:至少已启用 SSH
iptables -P INPUT DROP

# 添加一段 IP 白名单
iptables -I INPUT -p tcp -s 192.168.0.0/16 -j ACCEPT

# 添加 IP 段白名单端口,禁止 3306 允许白名单 IP
iptables -I INPUT -p tcp --dport 3306 -j DROP && \
iptables -I INPUT -s 192.168.1.111 -p tcp --dport 3306 -j ACCEPT && \
iptables -I INPUT -m iprange --src-range 192.168.1.100-192.168.1.110 -p tcp --dport 3306 -j ACCEPT

# 重置
iptables -P INPUT ACCEPT # 警告:确保在刷新任何链之前将默认规则设置为 ACCEPT
iptables -F INPUT # 清除链
iptables -F # 刷新整个 iptables

# 保存规则 Saving firewall rules to /etc/sysconfig/iptables
service iptables save
iptables-save > /etc/sysconfig/iptables # 保存规则指定路径
iptables-restore < /etc/sysconfig/iptables # 恢复规则
iptables-restore -n < /etc/sysconfig/iptables # 添加保持当前规则的新规则

# 转发
sysctl net.ipv4.ip_forward=1 # 打开转发 cat /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp --dport 8088 -j REDIRECT --to-port 80 # 本机端口转发 8088 到 80
iptables -t nat -A OUTPUT -p tcp --dport 8088 -j REDIRECT --to-port 80 # 本机连接到本机的转发,需要修改 OUTPUT 链
# 端口转发(192.168.1.188:80 -> 192.168.1.177:81)
iptables -t nat -A PREROUTING -d 192.168.1.188 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.177:81

iptables -t nat -nL --line # 查看 nat 规则
iptables -t nat -D PREROUTING 1 # 按行号删除 nat 规则

systemctl reload iptables # 重新加载规则
systemctl restart iptables # 重启服务
systemctl enable iptables

yum install iptables-services # 安装

# iptables 命令的管理控制选项
-A 在指定链的末尾添加(append)一条新的规则
-D 删除(delete)指定链中的某一条规则,可以按规则序号和内容删除
-I 在指定链中插入(insert)一条新的规则,默认在第一行添加
-R 修改、替换(replace)指定链中的某一条规则,可以按规则序号和内容替换
-L 列出(list)指定链中所有的规则进行查看
-E 重命名用户定义的链,不改变链本身
-F 清空(flush)
-N 新建(new-chain)一条用户自己定义的规则链
-X 删除指定表中用户自定义的规则链(delete-chain)
-P 设置指定链的默认策略(policy)
-Z 将所有表的所有链的字节和数据包计数器清零
-n 使用数字形式(numeric)显示输出结果
-v 查看规则表详细信息(verbose)的信息
-V 查看版本(version)
-h 获取帮助(help)