标签:用户空间 简单介绍 目标地址 没有 system netfilter 清理 禁用 reject
其中, 网络防火墙也可以使用一台启用了iptables的Linux主机代替; 路由器或集线器等设施在拓扑中省略了;
我们知道Linux中所有的数据包接收和发送都是在 内核 中完成的, 但是iptables并不是工作在内核中的, 那如何实现防火墙的功能?
iptables工作在用户空间, 并向工作在内核中的netfilter定义规则, 由netfilter来完成过滤数据包的功能; netfilter是内核提供的框架;
五链包括: INPUT, OUTPUT, FORWARD, PREROUTING, POSTROUTING, 位置请参照上图, 如有不对请指正;
四表包括: filter <-- nat <-- mangle <-- raw (有优先级顺序)
filter: 过滤: INPUT, FORWARD, OUTPUT
nat: PREROUTING (DNAT做目标地址转换), OUTPUT, POSTROUTING(SNAT, 目标地址转换)
mangle: 拆解报文, 全部位置
raw: 连接追踪, PREROUTING, OUTPUT
注意: 连接追踪是一件比较耗资源的事情, 一般情况下不要使用;
iptables命令使用:
iptables [-t table] SUBCOMMAND CHAIN CRETERIA -j TARGET
作用于哪个表 子命令 链 匹配标准 处理动作
-t table 省略时, 默认作用于filter
具体使用说明请查看 链接, 详细易懂
iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作
我们列几个常用的:
查看: iptables -L -n
清空: iptables -F
删除空的自定义链: iptables -X
设定指定链的默认策略: iptables -P {INPUT | OUTPUT | ... } {DROP | ACCEPT | REJECT ... }
首先, 我们打开一台CentOS 7 的虚拟机, 使用 iptables -L -n 查看当前规则设定:
注意: 如果发现规则比较多, 可以先禁用Firewalld, 并使用 iptables -F && iptables -X 清理, 然后再显示;
备注: 禁用 firewalld 方法: systemctl disable firewalld
这时, 我们是通过 ssh 远程登陆到 Linux的, 那么我们首先要确保 ssh 登陆的 通过性, 换句话说, 就是, 开放 22 端口的INPUT和OUTPUT
# iptables -I INPUT -d 你的Linux的IP地址 -p tcp -dport 22 -j ACCEPT
# iptables -I OUTPUT -s 你的Linux的IP地址 -p tcp -sport 22 -j ACCEPT
接下来, 我们将 INPUT 和 OUTPUT 的默认策略改为 DROP
# iptables -P INPUT DROP
# iptables -P OUTPUT DROP
不出意外的话, 如果你的主机上有80端口提供web服务, 那么现在已经无法访问了; 为什么呢?
因为我们 DROP 掉了所有的包, 除了访问22端口的, 和从22端口响应出去的;
为什么我要先说明 开放22端口 呢? 因为我第一次设置的时候, 先改了INPUT的默认策略为DROP, 然后我就被自己锁在门外面了......
那么, 现在我需要让web服务能够访问:
# iptables -I INPUT -d 你的Linux的IP地址 -p tcp -dport 80 -j ACCEPT
# iptables -I OUTPUT -s 你的Linux的IP地址 -p tcp -sport 80 -j ACCEPT
那这样一来, 岂不是跟上面开放22端口一模一样, 只是换了个端口? 对, 就是换了个端口...
有没有办法能够一次搞定呢? 有:
# iptables -I INPUT -d 你的Linux的IP地址 -p tcp -m multiport --dports 22,80 -j ACCEPT
# iptables -I OUTPUT -s 你的Linux的IP地址 -p tcp -m multiport --sports 22,80 -j ACCEPT
-m 是什么呢?
显式扩展: 必须显式指明使用的扩展模块; 查看当前主机支持的扩展模块方法: rpm -ql iptables | grep "\.so"
保存规则至指定文件:
iptables-save > /root/iptables.1 存储当前防火墙规则
从指定文件重载规则:
iptables-restore < /root/iptables.1 读取并启用以保存的防火墙规则
# iptables -P FORWARD DROP # iptables -I FORWARD -d 192.168.50.2 -p tcp --dport 80 -j ACCEPT --> 放行进来的 # iptables -I FORWARD -s 192.168.50.2 -p tcp --sport 80 -j ACCEPT --> 放行出去的
# iptables -I FORWARD -m state --state ESTABLISHED -j ACCEPT # iptables -A FORWARD -d 192.168.50.2 -p tcp -m multiport --dports 22,80 -m state --state NEW -j ACCEPT
# modprobe nf-conntrack_ftp --> 加载模块 # iptables -R FORWARD 1 -m state --state RELATED,ESTABLISHED --> 添加RELATED规则 # iptables -R FORWARD 2 -d 192.168.50.2 -p tcp -m multiport --dports 21,22,80 -m state --state NEW -j ACCEPT
标签:用户空间 简单介绍 目标地址 没有 system netfilter 清理 禁用 reject
原文地址:https://www.cnblogs.com/gettolive/p/9215597.html