Iptables 应用 | LINUX-TUTORIAL
iptables 是一个配置 Linux 内核 防火墙 (opens new window) 的命令行工具,是 netfilter (opens new window) 项目的一部分。 可以直接配置,也可以通过许多前端和图形界面配置。
iptables 也经常代指该内核级防火墙。iptables 用于 ipv4 (opens new window),ip6tables 用于 ipv6 (opens new window)。
nftables (opens new window) 已经包含在 Linux kernel 3.13 (opens new window) 中,以后会取代 iptables 成为主要的 Linux 防火墙工具。
环境:CentOS7
# 1. 简介
iptables 可以检测、修改、转发、重定向和丢弃 IPv4 数据包。
过滤 IPv4 数据包的代码已经内置于内核中,并且按照不同的目的被组织成 表 的集合。表 由一组预先定义的 链 组成,链包含遍历顺序规则。每一条规则包含一个谓词的潜在匹配和相应的动作(称为 目标),如果谓词为真,该动作会被执行。也就是说条件匹配。
# 2. 安装 iptables
(1)禁用 firewalld
CentOS 7 上默认安装了 firewalld 作为防火墙,使用 iptables 建议关闭并禁用 firewalld。
(2)安装 iptables
(3)服务管理
- 查看服务状态:
systemctl status iptables - 启用服务:
systemctl enable iptables - 禁用服务:
systemctl disable iptables - 启动服务:
systemctl start iptables - 重启服务:
systemctl restart iptables - 关闭服务:
systemctl stop iptables
# 3. 命令
基本语法:
基本选项说明:
| 参数 | 作用 |
|---|---|
| -P | 设置默认策略:iptables -P INPUT (DROP |
| -F | 清空规则链 |
| -L | 查看规则链 |
| -A | 在规则链的末尾加入新规则 |
| -I | num 在规则链的头部加入新规则 |
| -D | num 删除某一条规则 |
| -s | 匹配来源地址 IP/MASK,加叹号"!"表示除这个 IP 外。 |
| -d | 匹配目标地址 |
| -i | 网卡名称 匹配从这块网卡流入的数据 |
| -o | 网卡名称 匹配从这块网卡流出的数据 |
| -p | 匹配协议,如 tcp,udp,icmp |
| --dport num | 匹配目标端口号 |
| --sport num | 匹配来源端口号 |
顺序:
# 4. iptables 示例
# 4.1. 清空当前的所有规则和计数
# 4.2. 配置允许 ssh 端口连接
# 4.3. 允许本地回环地址可以正常使用
# 4.4. 设置默认的规则
# 4.5. 配置白名单
# 4.6. 开启相应的服务端口
# 4.7. 保存规则到配置文件中
# 4.8. 列出已设置的规则
iptables -L [-t 表名][链名]
- 四个表名
raw,nat,filter,mangle - 五个规则链名
INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING - filter 表包含
INPUT、OUTPUT、FORWARD三个规则链
# 4.9. 清除已有规则
# 4.10. 删除已添加的规则
将所有 iptables 以序号标记显示,执行:
比如要删除 INPUT 里序号为 8 的规则,执行:
# 4.11. 开放指定的端口
# 4.12. 屏蔽 IP
# 4.13. 指定数据包出去的网络接口
只对 OUTPUT,FORWARD,POSTROUTING 三个链起作用。
# 4.14. 查看已添加的规则
# 4.15. 启动网络转发规则
公网210.14.67.7让内网192.168.188.0/24上网
# 4.16. 端口映射
本机的 2222 端口映射到内网 虚拟机的 22 端口
# 4.17. 字符串匹配
比如,我们要过滤所有 TCP 连接中的字符串test,一旦出现它我们就终止这个连接,我们可以这么做:
# 4.18. 阻止 Windows 蠕虫的攻击
# 4.19. 防止 SYN 洪水攻击
# 5. 参考资料
- https://wiki.archlinux.org/index.php/iptables_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
- https://wangchujiang.com/linux-command/c/iptables.html