为什么会有本文
因为最近帮一个朋友布署一个上网梯子, 他那边本来用的是 v2ray, 但是他想用 ssr, 但是安装配置 ssr 过程中出了很多问题, 比如 Linux 内核版本 4.9 有点老, 不支持 bbr 加速, 无法连接 socket, 启动了连接不上等一系列问题, 趁着有时间, 就帮他看看, 帮他升级了内核, 改的防火墙...... 在修改防火墙的时候, 发现 iptables 中的知识点好多, 既然碰到了, 就稍微记一点常用的用法, 以待查验.
主要内容
语法:
iptables (选项) (参数)
iptables 命令选项输入顺序:
iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名 > -p 协议名 <-s 源 IP / 源子网 > --sport 源端口 <-d 目标 IP / 目标子网 > --dport 目标端口 -j 动作
参数说明:
表名包括:
raw: 高级功能, 如: 网址过滤.
mangle: 数据包修改 (QOS), 用于实现服务质量.
net: 地址转换, 用于网关路由器.
filter: 包过滤, 用于防火墙规则.
规则链名包括:
INPUT 链: 处理输入数据包.
OUTPUT 链: 处理输出数据包.
PORWARD 链: 处理转发数据包.
PREROUTING 链: 用于目标地址转换 (DNAT).
POSTOUTING 链: 用于源地址转换 (SNAT).
动作包括:
ACCEPT: 接收数据包.
DROP: 丢弃数据包.
REDIRECT: 重定向, 映射, 透明代理.
SNAT: 源地址转换.
DNAT: 目标地址转换.
MASQUERADE:IP 伪装 (NAT), 用于 ADSL.
LOG: 日志记录.
常用命令
查看现在 iptables 规则:
iptables -L -n -v
清空配置:
- iptables -F #清楚规则链中已有的条目; 使用 iptables -F 要小心, 搞不好, 你就马上同服务器断开连接了
- iptables -X #删除没有用户配置文件相关的 chain
- iptables -Z #清空规则链中的数据包计算器和字节计数器;
使用清空配置要小心, 可参考 https://blog.csdn.NET/ingiaohi/article/details/70559425
用规则配置:
- # 配置, 禁止进, 允许出, 允许回环网卡
- iptables -P INPUT DROP
- iptables -A OUTPUT -j ACCEPT
- iptables -A INPUT -i lo -j ACCEPT
- # 允许 ping
- iptables -A INPUT -p icmp -j ACCEPT
- # 允许 SSH
- iptables -A INPUT -p tcp --dport 22 -j ACCEPT
- # 允许 ftp
- iptables -A INPUT -p tcp --dport 21 -j ACCEPT
- iptables -A INPUT -p tcp --dport 20 -j ACCEPT
- # 允许 ftp 被动接口范围, 在 ftp 配置文件里可以设置
- iptables -A INPUT -p tcp --dport 20000:30000 -j ACCEPT
- # 学习 felix, 把 smtp 设成本地
- iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT -s 127.0.0.1
- iptables -A INPUT -p tcp -m tcp --dport 25 -j REJECT
- # 允许 DNS
- iptables -A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
- iptables -A INPUT -p udp -m udp --dport 53 -j ACCEPT
- # 允许 http 和 https
- iptables -A INPUT -p tcp --dport 80 -j ACCEPT
- iptables -A INPUT -p tcp --dport 443 -j ACCEPT
- # 允许已建立的或相关连的通行
- iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
- # 禁止其他未允许的规则访问
- iptables -A INPUT -j REJECT #(注意: 如果 22 端口未加入允许规则, SSH 链接会直接断开.)
- iptables -A FORWARD -j REJECT
屏蔽 ip-- 使用 - I 参数
- iptables -I INPUT -s 123.45.6.7 -j DROP #屏蔽单个 IP 的命令
- iptables -I INPUT -s 123.0.0.0/8 -j DROP #封整个段即从 123.0.0.1 到 123.255.255.254 的命令
- iptables -I INPUT -s 124.45.0.0/16 -j DROP #封 IP 段即从 123.45.0.1 到 123.45.255.254 的命令
- iptables -I INPUT -s 123.45.6.0/24 -j DROP #封 IP 段即从 123.45.6.1 到 123.45.6.254 的命令是
删除已添加的 iptables 规则 -- 使用 - D 参数
- # 假设之前用 iptables -A INPUT -s 192.168.1.4 -j DROP 添加的规则
- iptables -D INPUT -s 192.168.1.4 -j DROP
- # 或者
- # 查出当前规则的列表, 使用当前列表下的序号: 由下至下顺序
- iptables -D INPUT 3 #这里是删除第三条
修改规则 -- 使用 - R 参数
- # 假设之前用 iptables -A INPUT -s 192.168.1.4 -j DROP 添加的规则
- iptables -R INPUT -s 192.168.1.4 -j DROP
- # 或者
- # 查出当前规则的列表, 使用当前列表下的序号: 由下至下顺序
- iptables -R INPUT 3 -j ACCEPT
规则永久生效: 包括重启
- service iptables save #保存
- service iptables restart #重启 iptables 防火墙
备份与还原
- # 保存配置
- iptables-save> /etc/iptables #(注意: 后边这个文件路径可以自选)
- # 还原配置
- iptables-restore </etc/iptables #(注意: 后边这个文件路径可以自选, 要是前边备份文件的位置)
关于不重启规则不生效的解决
使用 iptables 命令操作的规则仅对当前会话有效, 规则存在于内存中, 如果重启就会丢失规则, 上边提到永久生效的方法, 经测试 debian 下没有成功, 所以这里额外记述一些解决方案
本方法的原理是使用重启后系统会扫描并执行指定文件夹下的脚本, 在脚本内执行还原之前保存的规则文件
- step1
- # 保存规则
- iptables-save> /etc/iptables/iptables-script
- step2
- # 在 / etc/network/if-pre-up.d 目录下创建脚本
- VIM /etc/network/if-pre-up.d/auto_restore_iptables
- step3
- # 添加如下内容, 其中后边的路径为保存的规则文件路径
- #!/bin/sh
- /sbin/iptables-restore </etc/iptables/iptables-script
- # 保存退出
- step4
- # 为脚本添加可执行权限
- sudo chmod +x /etc/network/if-pre-up.d/auto_restore_iptables
至此, 已经完成开机自动还原规则的操作了
那么增, 删, 改等操作就简单了
- #1. 使用命令修改规则
- #2. 保存规则
- iptables-save> /etc/iptables/iptables-script
- --End--
本文内容来自网络, 如有雷同, 不胜荣幸
来源: https://www.cnblogs.com/hellxz/p/9688044.html