最全的iptables防火墙详解

Cao-Leif

贡献于2016-03-03

字数:0 关键词: 路由器/防火墙

iptables iptables iptables iptables 官 方网 站: http://netfilter.org/http://netfilter.org/http://netfilter.org/http://netfilter.org/ • 数 据包 经过 防火 墙的 路径 • 禁 止端 口 • 强 制访 问某 站点 • 发 布内 部网 络服 务器 • 智能DNS • 端 口映 射 • 通过NAT 上网 •IP规 则的 保存 与恢 复 • iptables 指 令语 法 • iptables 实例 数据包经过防火墙的路径 图1比 较完 整地 展示 了一 个数 据包 是如 何经 过防 火墙 的 ,考 虑到 节省 空间 ,该 图实 际上 包了 三种 情 况: 来 自外 部, 以防 火墙 (本 机) 为目 的地 的包 ,在 图 1中 自上 至下 走左 边一 条路 径。 由 防火 墙( 本机 )产 生的 包, 在图 1中从“本 地进 程 ”开 始, 自上 至下 走左 边一 条路 径 来 自外 部, 目的 地是 其它 主机 的包 ,在 图 1中 自上 至下 走右 边一 条路 径。 图1 如 果我 们从 上图 中略 去比 较少 用的 mangle 表 的图 示 ,就 有图 2所 显示 的更 为清 晰的 路径 图 . 图2 禁止端口的实例 禁止 ssh ssh ssh ssh 端口 只 允许 在 192.168.62.1上 使用 ssh 远 程登 录, 从其 它计 算机 上禁 止使 用 ssh #iptables -AINPUT-s 192.168.62.1 -p tcp --dport 22 -j ACCEPT #iptables -AINPUT-p tcp --dport 22 -j DROP 禁止代理端口 #iptables -AINPUT-p tcp --dport 3128 -j REJECT 禁止 icmp icmp icmp icmp 端口 除192.168.62.1外 ,禁 止其 它人 ping 我 的主 机 #iptables -AINPUT-i eth0 -s 192.168.62.1/32 -p icmp -m icmp --icmp-type echo-request -j ACCEPT #iptables -AINPUT-i eth0 -p icmp --icmp-type echo-request –j ?DROP 或 #iptables -AINPUT-i eth0 -s 192.168.62.1/32 -p icmp -m icmp --icmp-type 8 -j ACCEPT #iptables -AINPUT-i eth0 -p icmp -m icmp --icmp-type 8 -j DROP 注 :可 以用 iptables --protocol icmp --help 查看ICMP 类型 还 有没 有其 它办 法实 现 ? 禁止 QQQQQQQQ端口 #iptables -DFORWARD-p udp --dport 8000 -j REJECT 强制访问指定的站点 图3 要使192.168.52.0/24网 络内 的计 算机 (这 此计 算机 的网 关应 设为 192.168.52.10)强 制访 问指 定的 站 点,在 做为 防火 墙的 计算 机 (192.168.52.10)上 应添 加以 下规 则 : 1. 打开ip 包 转发 功能 echo 1 > /proc/sys/net/ipv4/ip_forward 2. 在NAT/防 火墙 计算 机上 的 NAT 表 中添 加目 的地 址转 换规 则 : iptables -t nat -IPREROUTING-i eth0 -p tcp --dport 80 -j DNAT--to-destination 202.96.134.130:80 iptables -t nat -IPREROUTING-i eth0 -p udp --dport 80 -j DNAT--to-destination 202.96.134.130:80 3. 在NAT/防 火墙 计算 机上 的 NAT 表 中添 加源 地址 转换 规则 : iptables -t nat -IPOSTROUTING-o eth1 -p tcp --dport 80 -s 192.168.52.0/24 -j SNAT--to-source 202.96.134.10:20000-30000 iptables -t nat -IPOSTROUTING-o eth1 -p udp --dport 80 -s 192.168.52.0/24 -j SNAT--to-source 202.96.134.10:20000-30000 4. 测试:在 内部 网的 任一 台计 算机 上打 开浏 览器 ,输 入任 一非 本网 络的 IP,都 将指 向 IP 为 202.96.134.130的 网站 . 发布内部网络服务器 图4 要 使因 特网 上的 计算 机访 问到 内部 网的 FTP 服 务器 、 WEB 服 务器 ,在 做为 防火 墙的 计算 机上 应 添 加以 下规 则 : 1. echo 1 > /proc/sys/net/ipv4/ip_forward 2. 发 布内 部网 web 服 务器 iptables -t nat -IPREROUTING-p tcp -i eth1 -s 202.96.134.0/24 --dport 80 -j DNAT--to-destination 192.168.52.15:80 iptables -t nat -IPOSTROUTING-p tcp -i eth0 -s 192.168.52.15 --sport 80 -j SNAT--to-source 202.96.134.10:20000-30000 3. 发 布内 部网 ftp 服 务器 iptables -t nat -IPREROUTING-p tcp -i eth1 -s 202.96.134.0/24 --dport 21 -j DNAT--to-destination 192.168.52.14:21 iptables -t nat -IPOSTROUTING-p tcp -i eth0 -s 192.168.52.14 --sport 21 -j SNAT--to-source 202.96.134.10:40000-50000 4. 注意:内 部网 的计 算机 网关 要设 置为 防火 墙的 ip(192.168.52.1) 5. 测试: 用 一台 IP 地 址为 202.96.134.0段 的计 算机 虚拟 因特 网访 问 ,当 在其 浏览 器中 访 问 http://202.96.134.10时,实 际应 看到 的是 192.168.52.15的的web 服务; 当 访问 ftp://202.96.134.10时,实 际应 看到 的是 192.168.52.14上 的的 ftp 服务 智能 DNSDNSDNSDNS 图5 1. echo 1 > /proc/sys/net/ipv4/ip_forward 2. 在NAT 服 务器 上添 加以 下规 则 : 在PREROUTING 链 中添 加目 的地 址转 换规 则 : iptables -t nat -IPREROUTING-i eth0 -p tcp --dpor 53 -j DNAT--to-destination 202.96.134.130 iptables -t nat -IPREROUTING-i eth0 -p udp --dpor 53 -j DNAT--to-destination 202.96.134.130 在POSTROUTING 链 中添 加源 地址 转换 规则 : iptables -t nat -IPOSTROUTING-o eth1 -s 192.168.52.0/24 -p tcp --dpor 53 -j SNAT--to-source 202.96.134.10:40000-50000 iptables -t nat -IPOSTROUTING-o eth1 -s 192.168.52.0/24 -p udp --dpor 53 -j SNAT--to-source 202.96.134.10:40000-50000 3. 测试 在 内部 网任 一台 计算 机上 ,将DNS 设 置为 任意 的外 网 IP,就 可以 使用 DNS 测 试工 具如 nslookup 来 解析 DNS 服 务器 202.96.134.130上 的名 称 . 端口映射 见 上节 透明 代理 设置 #iptables -t nat -APREROUTING-i eth0 -p tcp -s 192.168.62.0/24 --dport 80 -j REDIRECT --to-ports 3128 通过 NAT NAT NAT NAT 上网 典型 NAT NAT NAT NAT 上网 一 般做 为 NAT 的 计算 机同 时也 是局 域网 的网 关, 假定 该机 有两 块网 卡 eth0、eth1,eth0连 接外 网,IP为202.96.134.134;eth1连 接局 域网 , IP为192.168.62.10 1. 先 在内 核里 打开 ip 转 发功 能 #echo 1 > /proc/sys/net/ipv4/ip_forward 2.?使 局域 网用 户能 访问 internet 所 要做 的 nat #iptables -t nat -APOSTROUTING-p tcp -o eth0 -j SNAT--to?202.96.134.134 如 果上 网的 IP是 动态 IP, 则使 用以 下规 则: #iptables -t nat -APOSTROUTING-o eth0 -s 192.168.62.0/24 -j MASQUERADE 如 果是 通过 ADSL 上 网, 且公 网 IP是 动态 IP, 则使 用以 下规 则: #iptables -t nat -APOSTROUTING-o ppp0 -s 192.168.62.0/24 -j MASQUERADE 3. 使internet 用 户可 以访 问局 域网 内 web 主 机所 要做 的 nat #iptables -t nat -APREROUTING-p tcp -d 202.96.134.134 --dport 80 -j DNAT--to-destination 192.168.62.10 注 :局 域网 内的 客户 端需 将默 认网 关、 DNS 设 为防 火墙 的 IP 在我们的网络机房实现 NAT NAT NAT NAT 共享上网 工 作环 境 :上 层代 理 192.168.60.6(4480), 只授 予教 师机 (192.168.62.111)使 用该 代理 的权 限 目 标: 不使 用 squid 代 理上 网, 而是 使用 NAT 的 方式 上网 方 法: 1) 确 保停 止教 师机 (192.168.62.111)的squid 或 其它 代理 服务 2) 客 户端 网关 、 DNS 均 指向 192.168.62.111, 浏览 器代 理设 置为 192.168.60.6(4480)。 测试 在当 前 情况 下能 否上 网 3) 在 教师 机 (192.168.62.111)上 添加 如下 iptables 规 则: #iptables -t nat -APOSTROUTING-p tcp -d 192.168.60.6/32 --dport 4480 -j SNAT--to-source 192.168.62.111:10000-30000 解释:对 于目 的地 为 192.168.60.6、目 的端 口为 4480的TCP 包,在 经过 防火 墙路 由后 ,将 其源 地 址 转换 为 192.168.62.111, 端口 转换 为 10000-30000间 的某 个端 口。 4) 客 户端 测试 能否 上网 IP IP IP IP 规则的保存与恢复 iptables-save 把 规则 保存 到文 件中 ,再 由目 录 rc.d 下 的脚 本( /etc/rc.d/init.d/iptables) 自动 装载 使 用命 令 iptables-save 来 保存 规则 。一 般用 iptables-save > /etc/sysconfig/iptables 生 成保 存规 则的 文件 /etc/sysconfig/iptables, 也 可以 用 service iptables save 它 能把 规则 自动 保存 在 /etc/sysconfig/iptables 中。 当 计算 机启 动时 ,rc.d 下 的脚 本将 用命 令 iptables-restore 调 用这 个文 件 ,从 而就 自动 恢复 了规 则 。 iptablesiptablesiptablesiptables 指令语法 iptables [-t table] command [match] [-j target/jump] [-t[-t[-t[-t table]table]table]table] 指定规则表 -t 参 数用 来 ,内 建的 规则 表有 三个 ,分 别是 :nat、mangle 和filter,当 未指 定规 则表 时 ,则一 律 视为 是 filter。 个规 则表 的功 能如 下: nat: 此规 则表 拥有 PREROUTING 和POSTROUTING 两 个规 则链 ,主 要功 能为 进行 一对 一 、 一 对多 、多 对多 等网 址转 换工 作 (SNAT、DNAT),这 个规 则表 除了 作网 址转 换外 ,请 不要 做 其 它用 途。 mangle:此 规则 表拥 有 PREROUTING、FORWARD 和POSTROUTING 三 个规 则链 。除 了进 行 网址 转换 工作 会改 写封 包外 ,在 某些 特殊 应用 可能 也必 须去 改写 封包 ( TTL、TOS) 或者 是 设定MARK(将 封包 作记 号 ,以 进行 后续 的过 滤 ),这 时就 必须 将这 些工 作定 义在 mangle 规 则 表中 ,由 于使 用率 不高 ,我 们不 打算 在这 里讨 论 mangle 的 用法 。 filter:这 个规 则表 是默 认规 则表 ,拥有INPUT、FORWARD 和OUTPUT 三 个规 则链 ,这个 规 则表 顾名 思义 是用 来进 行封 包过 滤的 处理 动作 (例如:DROP、LOG、ACCEPT 或REJECT), 我 们会 将基 本规 则都 建立 在此 规则 表中 。 commandcommandcommandcommand 常用命令列表: 命令-A,--append 范例iptables -AINPUT... 说明新 增规 则到 某个 规则 链中 ,该 规则 将会 成为 规则 链中 的最 后一 条规 则。 命令-D,--delete 范例iptables -DINPUT--dport 80 -j DROP iptables -DINPUT 1 说明从 某个 规则 链中 删除 一条 规则 ,可 以输 入完 整规 则, 或直 接指 定规 则编 号加 以删 除。 命令-R,--replace 范例iptables -RINPUT 1 -s 192.168.0.1 -j DROP 说明取 代现 行规 则, 规则 被取 代后 并不 会改 变顺 序。 命令-I,--insert 范例iptables -IINPUT 1 --dport 80 -j ACCEPT 说明插 入一 条规 则, 原本 该位 置上 的规 则将 会往 后移 动一 个顺 位。 命令-L,--list 范例1 iptables -LINPUT 说明列 出某 规则 链中 的所 有规 则。 范例2 iptables -t nat -L 说明列出nat 表 所有 链中 的所 有规 则。 命令-F,--flush 范例iptables -FINPUT 说明删除filter 表中INPUT 链 的所 有规 则。 命令-Z,--zero 范例iptables -ZINPUT 说明将 封包 计数 器归 零 。封 包计 数器 是用 来计 算同 一封 包出 现次 数 ,是 过滤 阻断 式攻 击不 可或 缺 的工 具。 命令-N,--new-chain 范例iptables -N allowed 说明定 义新 的规 则链 。 命令-X,--delete-chain 范例iptables -X allowed 说明删 除某 个规 则链 。 命令-P,--policy 范例iptables -PINPUTDROP 说明定 义过 滤政 策。 也 就是 未符 合过 滤条 件之 封包 , 默 认的 处理 方式 。 命令-E,--rename-chain 范例iptables -E allowed disallowed 说明修 改某 自 定义 规则 链的 名称 。 [match][match][match][match] 常用封包匹配参数 参数-p, --protocol 范例iptables -AINPUT-p tcp 说明匹 配通 讯协 议类 型是 否相 符, 可以 使用 ! 运 算符 进行 反向 匹配 ,例 如: -p !tcp 意 思是 指除 tcp 以 外的 其它 类型 ,如 udp、icmp ...等。 如 果要 匹配 所有 类型 ,则 可以 使用 all 关 键词 ,例 如: -p all 参数-s, --src, --source 范例iptables -AINPUT-s 192.168.1.1 说明用 来匹 配封 包的 来源 IP, 可以 匹配 单机 或网 络, 匹配 网络 时请 用数 字来 表示 子 网掩 码 , 例 如: -s 192.168.0.0/24 匹配IP 时 可以 使用 ! 运 算符 进行 反向 匹配 ,例 如: -s !192.168.0.0/24。 参数-d, --dst, --destination 范例iptables -AINPUT-d 192.168.1.1 说明用 来匹 配封 包的 目的 地 IP, 设定 方式 同上 。 参数-i, --in-interface 范例iptables -AINPUT-i eth0 说明用 来匹 配封 包是 从哪 块网 卡进 入, 可以 使用 通配 字符 + 来 做大 范围 匹配 ,例 如: -i eth+ 表 示所 有的 ethernet 网卡 也 可以 使用 ! 运 算符 进行 反向 匹配 ,例 如: -i !eth0 参数-o, --out-interface 范例iptables -AFORWARD-o eth0 说明用 来匹 配封 包要 从哪 块 网卡 送出 ,设 定方 式同 上。 参数--sport, --source-port 范例iptables -AINPUT-p tcp --sport 22 说明用 来匹 配封 包的 源端 口, 可以 匹配 单一 端口 ,或 是一 个范 围, 例如 : --sport 22:80 表 示从 22 到80 端 口之 间都 算是 符合 条件 ,如 果要 匹配 不连 续的 多个 端口 ,则 必须 使用 --multiport 参 数, 详见 后文 。匹 配端 口号 时, 可以 使用 ! 运 算符 进行 反向 匹配 。 参数--dport, --destination-port 范例iptables -AINPUT-p tcp --dport 22 说明用 来匹 配封 包的 目的 地端 口号 ,设 定方 式同 上 参数--tcp-flags 范例iptables -p tcp --tcp-flags SYN,FIN,ACKSYN 说 明匹 配 TCP 封 包的 状态 标志 ,参 数分 为两 个部 分 ,第 一个 部分 列举 出想 匹 配的 标志 ,第二 部 分则 列举 前述 标志 中哪 些有 被设 置 ,未 被列 举的 标志 必须 是空 的 。TCP 状 态标 志包 括 :SYN ( 同步 )、ACK(应答)、FIN(结束)、RST(重设)、URG(紧急)、PSH(强 迫推 送 )等 均 可使 用于 参数 中, 除此 之外 还可 以使 用关 键词 ALL 和NONE 进 行匹 配。 匹配 标志 时, 可 以 使用 ! 运 算符 行反 向匹 配。 参数--syn 范例iptables -p tcp --syn 说明用 来表 示 TCP 通 信协 议中 , SYN 位 被打 开, 而 ACK 与FIN 位 关闭 的分 组, 即 TCP 的初 始 连接 ,与 iptables -p tcp --tcp-flags SYN,FIN,ACKSYN 的 作用 完全 相同 ,如 果使 用 !运 算符 , 可 用来 匹 配非 要求 连接 封包 。 参数-m multiport --source-port 范例iptables -AINPUT-p tcp -m multiport --source-port 22,53,80,110 说 明用 来匹 配不 连续 的多 个源 端口 ,一 次最 多可 以匹 配 15 个 端口 ,可 以使 用 ! 运 算符 进行 反 向 匹配 。 参数-m multiport --destination-port 范例iptables -AINPUT-p tcp -m multiport --destination-port 22,53,80,110 说 明用 来 匹 配不 连续 的多 个目 的地 端口 号, 设定 方式 同上 参数-m multiport --port 范例iptables -AINPUT-p tcp -m multiport --port 22,53,80,110 说明这 个参 数比 较特 殊, 用来 匹配 源端 口和 目的 端口 号相 同的 封包 ,设 定方 式同 上。 注意 :在 本 范例 中, 如果 来源 端口 号为 80目 的地 端口 号为 110, 这种 封包 并不 算符 合条 件。 参数--icmp-type 范例iptables -AINPUT-p icmp --icmp-type 8 说 明用 来匹 配 ICMP 的 类型 编号 ,可 以使 用代 码或 数字 编号 来进 行 匹配。请打iptables -p icmp --help 来 查看 有哪 些代 码可 用。 参数-m limit --limit 范例iptables -AINPUT-m limit --limit 3/hour 说明用 来匹 配某 段时 间内 封包 的平 均流 量, 上面 的例 子是 用来 匹 配: 每小 时平 均流 量是 否超 过 一次 3 个 封包 。 除 了每 小时 平均 次外 ,也 可以 每秒 钟、 每分 钟或 每天 平均 一次 ,默 认值 为 每 小时 平均 一次 ,参 数如 后: /second、/minute、/day。除 了进 行封 包 数量 的匹 配外 ,设 定 这 个参 数也 会在 条件 达成 时, 暂停 封包 的匹 配动 作, 以避 免因 骇客 使用 洪水 攻击 法, 导致 服务 被 阻断 。 参数--limit-burst 范例iptables -AINPUT-m limit --limit-burst 5 说明用 来匹 配瞬 间大 量封 包的 数量 ,上 面的 例子 是用 来匹 配一 次同 时涌 入的 封包 是否 超过 5 个 (这 是默 认值 ), 超过 此上 限的 封包 将被 直接 丢弃 。使 用效 果同 上。 参数-m mac --mac-source 范例iptables -AINPUT-m mac --mac-source 00:00:00:00:00:01 说明用 来匹 配封 包来 源网 络接 口的 硬件 地址 ,这 个参 数不 能用 在 OUTPUT 和 POSTROUTING 规 则链 上, 这是 因为 封包 要送 到网 卡 后, 才能 由网 卡驱 动程 序透 过 ARP 通 讯 协议 查出 目的 地的 MAC 地址,所以iptables 在 进行 封包 匹配 时 ,并 不知 道封 包会 送到 哪个 网 络接 口去 。 参数--mark 范例iptables -t mangle -AINPUT-m mark --mark 1 说明用 来匹 配封 包是 否被 表示 某个 号码 ,当 封包 被 匹 配成 功时 ,我 们可 以透 过 MARK 处理 动 作, 将该 封包 标示 一个 号码 ,号 码最 大不 可以 超过 4294967296。 参数-m owner --uid-owner 范例 iptables -AOUTPUT-m owner --uid-owner 500 说明用 来匹 配来 自本 机的 封包 ,是 否为 某特 定使 用者 所产 生的 ,这 样可 以避 免服 务器 使用 root 或 其它 身分 将敏 感数 据传 送出 ,可 以降 低系 统被 骇的 损失 。可 惜这 个功 能无 法 匹 配出 来自 其它 主 机的 封包 。 参数-m owner --gid-owner 范例iptables -AOUTPUT-m owner --gid-owner 0 说明用 来匹 配来 自本 机的 封包 ,是 否为 某特 定使 用者 群组 所产 生的 ,使 用时 机同 上。 参数-m owner --pid-owner 范例 iptables -AOUTPUT-m owner --pid-owner 78 说明用 来匹 配来 自本 机的 封包 ,是 否为 某特 定进 程所 产生 的, 使用 时机 同上 。 参数-m owner --sid-owner 范例 iptables -AOUTPUT-m owner --sid-owner 100 说明用 来匹 配来 自本 机的 封包 ,是 否为 某特 定 连接(Session ID)的 响应 封包 ,使 用时 机同 上 。 参数-m state --state 范例 iptables -AINPUT-m state --state RELATED,ESTABLISHED 说明用 来匹 配连 接状 态, 连 接状 态共 有四 种: INVALID、ESTABLISHED、NEW 和 RELATED。 INVALID 表 示该 封包 的连 接编 号( Session ID) 无法 辨识 或编 号不 正确 。 ESTABLISHED 表 示该 封包 属于 某个 已经 建立 的连 接。 NEW 表 示该 封包 想要 起始 一个 连接 (重 设连 接或 将连 接重 导向 )。 RELATED 表 示该 封包 是属 于某 个已 经建 立的 连接 ,所 建立 的新 连接 。例如:FTP-DATA 连接 必 定是 源自 某个 FTP 连 接。 [-j[-j[-j[-j target/jump]target/jump]target/jump]target/jump] 常用的处理动作: -j 参 数用 来指 定要 进行 的处 理动 作, 常用 的处 理动 作包 括: ACCEPT、REJECT、DROP、 REDIRECT、MASQUERADE、LOG、DNAT、SNAT、MIRROR、QUEUE、RETURN、MARK, 分 别说 明如 下: ACCEPT:将 封包 放行 ,进 行完 此处 理动 作后 ,将 不再 匹配 其它 规则 ,直 接跳 往下 一个 规则 链 (natostrouting)。 REJECT:拦 阻该 封包 ,并 传送 封包 通知 对方 ,可 以传 送的 封包 有几 个选 择: ICMP port-unreachable、ICMP echo-reply 或是tcp-reset(这 个封 包会 要求 对方 关闭 连接),进 行完 此 处 理动 作后 ,将 不再 匹配 其它 规则 ,直 接中 断过 滤程 序。 范 例如 下: iptables -AFORWARD-p TCP--dport 22 -j REJECT--reject-with tcp-reset DROP:丢 弃封 包不 予处 理 ,进 行完 此处 理动 作后 ,将 不再 匹配 其它 规则 ,直 接中 断过 滤程 序 。 REDIRECT:将 封包 重新 导向 到另 一个 端口 ( PNAT) ,进 行完 此处 理动 作后 ,将 会继 续匹 配 其 它规 则。 这 个功 能可 以用 来实 现透 明代 理或 用来 保护 web 服 务器 。例 如: iptables -t nat -APREROUTING-p tcp --dport 80 -j REDIRECT--to-ports 8080 MASQUERADE:改 写封 包来 源 IP 为 防火 墙 NICIP,可 以指 定 port 对 应的 范围 ,进 行完 此 处 理动 作后 ,直 接跳 往下 一个 规则 链(manglepostrouting) 。这 个功 能与 SNAT 略 有不 同 ,当 进行IP 伪 装时 ,不 需指 定要 伪装 成哪 个 IP,IP会 从网 卡直 接读 取, 当使 用拨 号 接连 时, IP 通 常是 由 ISP 公 司的 DHCP 服 务器 指派 的, 这个 时候 MASQUERADE 特 别有 用。 范例 如下 : iptables -t nat -APOSTROUTING-p TCP-j MASQUERADE--to-ports 1024-31000 LOG:将 封包 相关 讯息 纪录 在 /var/log 中 ,详 细位 置请 查阅 /etc/syslog.conf 配 置文 件, 进行 完 此处 理动 作后 ,将 会继 续匹 配其 规则 。例 如: iptables -AINPUT-p tcp -j LOG--log-prefix "INPUT packets" SNAT:改 写封 包来 源 IP 为 某特 定 IP 或IP 范围,可 以指 定 port 对 应的 范围 ,进 行完 此处 理 动作 后, 将直 接跳 往下 一个 规则 ( mangleostrouting) 。范 例如 下: iptables -t nat -APOSTROUTING-p tcp -o eth0 -j SNAT --to-source?194.236.50.155-194.236.50.160:1024-32000 DNAT:改 写封 包目 的地 IP 为 某特 定 IP 或IP 范围,可 以指 定 port 对 应的 范围 ,进 行完 此 处 理动 作后 ,将 会直 接跳 往下 一个 规则 链( filter:input 或filter:forward) 。范 例如 下: iptables -t nat -APREROUTING-p tcp -d 15.45.23.67 --dport 80 -j DNAT--to-destination 192.168.1.1-192.168.1.10:80-100 MIRROR:镜 射封 包 ,也 就是 将来 源 IP 与 目的 地 IP 对 调后 ,将 封包 送回 ,进 行完 此处 理动 作 后, 将会 中断 过滤 程序 。 QUEUE:中 断过 滤程 序, 将封 包放 入队 列, 交给 其它 程序 处理 。通 过自 行开 发的 处理 程序 , 可 以进 行其 它应 用, 例如 :计 算连 接费 用等 。 RETURN:结 束在 目前 规则 链中 的过 滤程 序 ,返 回主 规则 链继 续过 滤 ,如 果把 自定 义规 则链 看 成 是一 个子 程序 ,那 么这 个动 作, 就相 当于 提前 结束 子程 序并 返回 到主 程序 中。 MARK:将 封包 标上 某个 代号 ,以 便提 供作 为后 续过 滤的 条件 判断 依据 ,进 行完 此处 理动 作后 , 将 会继 续匹 配其 它规 则。 范例 如下 : iptables -t mangle -APREROUTING-p tcp --dport 22 -j MARK--set-mark 2 iptables iptables iptables iptables 实例 单个规则实例 iptables -F? #-F 是 清除 的意 思, 作用 就是 把 FILTRETABLE 的 所有 链的 规则 都清 空 iptables -AINPUT-s 172.20.20.1/32 -m state --state NEW,ESTABLISHED,RELATED-j ACCEPT #在FILTER 表的INPUT 链 匹配 源地 址是 172.20.20.1的 主机 ,状 态分 别 是 NEW,ESTABLISHED,RELATED 的 都放 行。 iptables -AINPUT-s 172.20.20.1/32 -m state --state NEW,ESTABLISHED-p tcp -m multiport --dport 123,110 -j ACCEPT #-p 指 定协 议, -m 指 定模 块 ,multiport 模 块的 作用 就是 可以 连续 匹配 多各 不相 邻的 端口 号。 完 整 的意 思就 是源 地址 是 172.20.20.1的 主机 ,状 态分 别是 NEW, ESTABLISHED,RELATED 的, TCP 协 议, 目的 端口 分别 为 123 和110 的 数据 包都 可以 通过 。 iptables -AINPUT-s 172.20.22.0/24 -m state --state NEW,ESTABLISHED-p tcp -m multiport --dport 123,110 -j ACCEPT iptables -AINPUT-s 0/0 -m state --state NEW-p tcp -m multiport --dport 123,110 -j DROP #这 句意 思为 源地 址是 0/0的NEW 状 态的 的 TCP 数 据包 都禁 止访 问我 的 123和110端 口。 iptables -AINPUT-s ! 172.20.89.0/24 -m state --state NEW-p tcp -m multiport --dport 1230,110 -j DROP #"!"号 的意 思 取 反。 就是 除了 172.20.89.0这个IP段 的地 址都 DROP。 iptables -RINPUT 1 -s 192.168.6.99 -p tcp --dport 22 -j ACCEPT 替换INPUT 链 中的 第一 条规 则 iptables -t filter -LINPUT-vn 以 数字 形式 详细 显示 filter 表INPUT 链 的规 则 #-------------------------------NATIP-------------------------------------- #以 下操 作是 在 NATTABLE 里 面完 成的 。请 大家 注意 。 iptables -t nat -F iptables -t nat -APREROUTING-d 192.168.102.55 -p tcp --dport 90 -j DNAT--to 172.20.11.1:800 #-APREROUTING 指 定在 路由 前做 的 。完 整的 意思 是在 NATTABLE 的 路由 前处 理 ,目 的地 为192.168.102.55 的目 的端 口为 90的 我们 做 DNAT 处 理, 给他 转向 到 172.20.11.1:800那 里去 。 iptables -t nat -APOSTROUTING-d 172.20.11.1 -j SNAT--to 192.168.102.55 #-APOSTROUTING 路 由后 。意 思为 在 NATTABLE 的 路由 后处 理 ,凡 是目 的地 为 172.20.11.1 的 ,我 们都 给他 做 SNAT 转 换, 把源 地址 改写 成 192.168.102.55 。 iptables -AINPUT-d 192.168.20.0/255.255.255.0 -i eth1 -j DROP iptables -AINPUT-s 192.168.20.0/255.255.255.0 -i eth1 -j DROP iptables -AOUTPUT-d 192.168.20.0/255.255.255.0 -o eth1 -j DROP iptables -AOUTPUT-s 192.168.20.0/255.255.255.0 -o eth1 -j DROP # 上 例中 ,eth1是 一个 与外 部 Internet 相连,而192.168.20.0则 是内 部网 的网 络号 ,上 述规 则用 来 防止IP 欺 骗, 因为 出入 eth1的 包的 ip 应 该是 公共 IP iptables -AINPUT-s 255.255.255.255 -i eth0 -j DROP iptables -AINPUT-s 224.0.0.0/224.0.0.0 -i eth0 -j DROP iptables -AINPUT-d 0.0.0.0 -i eth0 -j DROP # 防 止广 播包 从 IP代 理服 务器 进入 局域 网: iptables -AINPUT-p tcp -m tcp --sport 5000 -j DROP iptables -AINPUT-p udp -m udp --sport 5000 -j DROP iptables -AOUTPUT-p tcp -m tcp --dport 5000 -j DROP iptables -AOUTPUT-p udp -m udp --dport 5000 -j DROP # 屏 蔽端 口 5000 iptables -AINPUT-s 211.148.130.129 -i eth1 -p tcp -m tcp --dport 3306 -j DROP iptables -AINPUT-s 192.168.20.0/255.255.255.0 -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT iptables -AINPUT-s 211.148.130.128/255.255.255.240 -i eth1 -p tcp -m tcp --dport 3306 -j ACCEPT iptables -AINPUT-p tcp -m tcp --dport 3306 -j DROP # 防止Internet 网 的用 户访 问 MySQL 服 务器 (就 是 3306 端 口) iptables -AFORWARD-p TCP--dport 22 -j REJECT--reject-with tcp-reset #REJECT, 类 似于 DROP, 但向 发送 该包 的主 机回 复由 --reject-with 指 定的 信息 ,从 而可 以很 好 地 隐藏 防火 墙的 存在 www www www www 的iptables iptables iptables iptables 实例 #!/bin/bash export PATH=/sbin:/usr/sbin:/bin:/usr/bin #加 载相 关模 块 modprobe iptable_nat modprobe ip_nat_ftp modprobe ip_nat_irc modprobe ip_conntrack modprobe ip_conntrack_ftp modprobe ip_conntrack_irc modprobe ipt_limit echo 1 >;/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts echo 0 >;/proc/sys/net/ipv4/conf/all/accept_source_route echo 0 >;/proc/sys/net/ipv4/conf/all/accept_redirects echo 1 >;/proc/sys/net/ipv4/icmp_ignore_bogus_error_responses echo 1 >;/proc/sys/net/ipv4/conf/all/log_martians echo 1 >;/proc/sys/net/ipv4/tcp_syncookies iptables -F iptables -X iptables -Z ## 允 许本 地回 路 ?Loopback - Allow unlimited traffic iptables -AINPUT-i lo -j ACCEPT iptables -AOUTPUT-o lo -j ACCEPT ## 防止SYN 洪水?SYN-Flooding Protection iptables -N syn-flood iptables -AINPUT-i ppp0 -p tcp --syn -j syn-flood iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN iptables -A syn-flood -j DROP ## 确 保新 连接 是设 置了 SYN 标 记的 包 ?Make sure that new TCP connections are SYN packets iptables -AINPUT-i eth0 -p tcp !--syn -m state --state NEW-j DROP ## 允许HTTP 的 规则 iptables -AINPUT-i ppp0 -p tcp -s 0/0 --sport 80 -m state --state ESTABLISHED,RELATED-j ACCEPT iptables -AINPUT-i ppp0 -p tcp -s 0/0 --sport 443 -m state --state ESTABLISHED,RELATED-j ACCEPT iptables -AINPUT-i ppp0 -p tcp -d 0/0 --dport 80 -j ACCEPT iptables -AINPUT-i ppp0 -p tcp -d 0/0 --dport 443 -j ACCEPT ## 允许DNS 的 规则 iptables -AINPUT-i ppp0 -p udp -s 0/0 --sport 53 -m state --state ESTABLISHED-j ACCEPT iptables -AINPUT-i ppp0 -p udp -d 0/0 --dport 53 -j ACCEPT ##IP包 流量 限制 ?IP packets limit iptables -AINPUT-f -m limit --limit 100/s --limit-burst 100 -j ACCEPT iptables -AINPUT-i eth0 -p icmp -j DROP ## 允许SSH iptables -AINPUT-p tcp -s ip1/32 --dport 22 -j ACCEPT iptables -AINPUT-p tcp -s ip2/32 --dport 22 -j ACCEPT ## 其 它情 况不 允许 ?Anything else not allowed iptables -AINPUT-i eth0 -j DROP 一个包过滤防火墙实例 环 境: redhat9 加 载了 string time 等 模块 eth0 接 外网 ──ppp0 eth1 接 内网 ──192.168.0.0/24 #!/bin/sh # modprobe ipt_MASQUERADE modprobe ip_conntrack_ftp modprobe ip_nat_ftp iptables -F iptables -t nat -F iptables -X iptables -t nat -X ###########################INPUT 键################################### iptables -PINPUTDROP iptables -AINPUT-m state --state ESTABLISHED,RELATED-j ACCEPT iptables -AINPUT-p tcp -m multiport --dports 110,80,25 -j ACCEPT iptables -AINPUT-p tcp -s 192.168.0.0/24 --dport 139 -j ACCEPT #允 许内 网 samba,smtp,pop3,连接 iptables -AINPUT-i eth1 -p udp -m multiport --dports 53 -j ACCEPT #允许dns 连接 iptables -AINPUT-p tcp --dport 1723 -j ACCEPT iptables -AINPUT-p gre -j ACCEPT #允 许外 网 vpn 连接 iptables -AINPUT-s 192.186.0.0/24 -p tcp -m state --state ESTABLISHED,RELATED-j ACCEPT iptables -AINPUT-i ppp0 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP #为 了防 止 DoS 太 多连 接进 来 ,那 么可 以允 许最 多 15个 初始 连接 ,超 过的 丢弃 iptables -AINPUT-s 192.186.0.0/24 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP #为 了防 止 DoS 太 多连 接进 来 ,那 么可 以允 许最 多 15个 初始 连接 ,超 过的 丢弃 iptables -AINPUT-p icmp -m limit --limit 3/s -j LOG--log-level INFO--log-prefix "ICMP packet IN: " iptables -AINPUT-p icmp -j DROP #禁止icmp 通信-ping 不通 iptables -t nat -APOSTROUTING-o ppp0 -s 192.168.0.0/24 -j MASQUERADE #内 网转 发 iptables -N syn-flood iptables -AINPUT-p tcp --syn -j syn-flood iptables -I syn-flood -p tcp -m limit --limit 3/s --limit-burst 6 -j RETURN iptables -A syn-flood -j REJECT #防止SYN 攻击轻量 #######################FORWARD 链########################### iptables -PFORWARDDROP iptables -AFORWARD-p tcp -s 192.168.0.0/24 -m multiport --dports 80,110,21,25,1723 -j ACCEPT iptables -AFORWARD-p udp -s 192.168.0.0/24 --dport 53 -j ACCEPT iptables -AFORWARD-p gre -s 192.168.0.0/24 -j ACCEPT iptables -AFORWARD-p icmp -s 192.168.0.0/24 -j ACCEPT #允许vpn 客 户走 vpn 网 络连 接外 网 iptables -AFORWARD-m state --state ESTABLISHED,RELATED-j ACCEPT iptables -IFORWARD-p udp --dport 53 -m string --string "tencent" -m time --timestart 8:15 --timestop 12:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP #星 期一 到星 期六 的 8:00-12:30禁止qq通信 iptables -IFORWARD-p udp --dport 53 -m string --string "TENCENT"-m time --timestart 8:15 --timestop 12:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP #星 期一 到星 期六 的 8:00-12:30禁止qq通信 iptables -IFORWARD-p udp --dport 53 -m string --string "tencent" -m time --timestart 13:30 --timestop 20:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP iptables -IFORWARD-p udp --dport 53 -m string --string "TENCENT"-m time --timestart 13:30 --timestop 20:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP #星 期一 到星 期六 的 13:30-20:30禁止QQ通信 iptables -IFORWARD-s 192.168.0.0/24 -m string --string "qq.com" -m time --timestart 8:15 --timestop 12:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP #星 期一 到星 期六 的 8:00-12:30禁止qq网页 iptables -IFORWARD-s 192.168.0.0/24 -m string --string "qq.com" -m time --timestart 13:00 --timestop 20:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP #星 期一 到星 期六 的 13:30-20:30禁止QQ网页 iptables -IFORWARD-s 192.168.0.0/24 -m string --string "ay2000.net" -j DROP iptables -IFORWARD-d 192.168.0.0/24 -m string --string "宽 频影 院 "-j DROP iptables -IFORWARD-s 192.168.0.0/24 -m string --string "色情"-j DROP iptables -IFORWARD-p tcp --sport 80 -m string --string "广告"-j DROP #禁止ay2000.net, 宽频 影院 ,色 情, 广告 网页 连接 ! 但中 文 不 是很 理想 iptables -AFORWARD-m ipp2p --edk --kazaa --bit -j DROP iptables -AFORWARD-p tcp -m ipp2p --ares -j DROP iptables -AFORWARD-p udp -m ipp2p --kazaa -j DROP #禁止BT 连接 iptables -AFORWARD-p tcp --syn --dport 80 -m connlimit --connlimit-above 15 --connlimit-mask 24 -j DROP #只 允许 每组 ip 同时15个80端 口转 发 ####################################################################### sysctl -w net.ipv4.ip_forward=1 &>/dev/null #打 开转 发 ####################################################################### sysctl -w net.ipv4.tcp_syncookies=1 &>/dev/null #打开syncookie ( 轻量 级预 防 DOS 攻 击) sysctl -w net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=3800 &>/dev/null #设 置默 认 TCP 连 接痴 呆时 长为 3800 秒 (此 选项 可以 大大 降低 连接 数) sysctl -w net.ipv4.ip_conntrack_max=300000 &>/dev/null #设 置支 持最 大连 接树 为 30W( 这个 根据 你的 内存 和 iptables 版 本来 ,每 个 connection 需要 300 多 个字 节) ####################################################################### iptables -IINPUT-s 192.168.0.50 -j ACCEPT iptables -IFORWARD-s 192.168.0.50 -j ACCEPT #192.168.0.50是 我的 机子 ,全 部放 行! squid+iptablessquid+iptablessquid+iptablessquid+iptables [原创] squid+iptables 实 现网 关防 火墙 http://www.chinaunix.net 作者:jackylau 发 表于 : 2007-05-27 10:40:01 【 发表 评论 】【 查看 原文 】【 Proxy 服 务器 讨论 区】 【关 闭】 需 求说 明: 此服 务器 用作 网关 、 MAIL(开启web、smtp、pop3)、FTP、DHCP 服 务器 ,内 部一 台 机器 (192.168.0.254)对 外提 供 dns 服务,为 了不 让无 意者 轻易 看出 此服 务器 开启 了 ssh 服 务器 , 故把ssh 端 口改 为 2018.另把proxy 的 端口 改为 60080 eth0:218.28.20.253,外 网口 eth1:192.168.0.1/24,内 网口 [jackylau@proxyserver init.d]$cat /etc/squid/squid.conf(部 份如 下 ) http_port 192.168.0.1:60080 httpd_accel_port 80 httpd_accel_host virtual httpd_accel_with_proxy on httpd_accel_uses_host_header on acl allow_lan src 192.168.0.0/24 http_access allow allow_lan visible_hostname proxyserver [jackylau@proxyserver init.d]$ cat firewall #!/bin/sh # Author: jackylau ; # chkconfig: 2345 08 92 # description: firewall # Time on 2005.08.02 # killproc # Set ENV INET_IP="218.28.20.253" INET_IFACE="eth0" LAN_IP="192.168.0.1" LAN_IP_RANGE="192.168.0.0/24" LAN_BROADCAST_ADDRESS="192.168.0.255" LAN_IFACE="eth1" LO_IFACE="lo" LO_IP="127.0.0.1" IPTABLES="/sbin/iptables" start(){ echo -n $"Starting firewall:" /sbin/depmod -a /sbin/modprobe ip_tables /sbin/modprobe ip_conntrack /sbin/modprobe iptable_filter /sbin/modprobe iptable_mangle /sbin/modprobe iptable_nat /sbin/modprobe ipt_LOG /sbin/modprobe ipt_limit /sbin/modprobe ipt_state echo "1" >; /proc/sys/net/ipv4/ip_forward # Set policies $IPTABLES -PINPUTDROP $IPTABLES -POUTPUTDROP $IPTABLES -PFORWARDDROP # Add bad_tcp_packets, allowed and icmp_packets $IPTABLES -N bad_tcp_packets $IPTABLES -N tcp_packets $IPTABLES -N udp_packets $IPTABLES -N allowed $IPTABLES -N icmp_packets # bad_tcp_packets $IPTABLES -A bad_tcp_packets -p tcp !--syn -m state --state NEW-j LOG--log-level INFO --log-prefix "New not syn:" $IPTABLES -A bad_tcp_packets -p TCP!--syn -m state --state NEW-j DROP # allowed $IPTABLES -A allowed -p TCP--syn -j ACCEPT $IPTABLES -A allowed -p TCP-m state --state ESTABLISHED,RELATED-j ACCEPT $IPTABLES -A allowed -p TCP-j DROP $IPTABLES -AINPUT-p ALL-i $LAN_IFACE -d $LAN_BROADCAST_ADDRESS -j ACCEPT #TCP rules $IPTABLES -A tcp_packets -p TCP-s 0/0 --dport 20 -j allowed $IPTABLES -A tcp_packets -p TCP-s 0/0 --dport 21 -j allowed $IPTABLES -A tcp_packets -p TCP-s 0/0 --dport 25 -j allowed $IPTABLES -A tcp_packets -p TCP-s 0/0 --dport 80 -j allowed $IPTABLES -A tcp_packets -p TCP-s 0/0 --dport 110 -j allowed $IPTABLES -A tcp_packets -p TCP-s 0/0 --dport 2018 -j allowed #UDP rules $IPTABLES -A udp_packets -p UDP-s 0/0 --destination-port 67 -j ACCEPT #ICMP rules $IPTABLES -A icmp_packets -p ICMP-s 0/0 --icmp-type 8 -j ACCEPT $IPTABLES -A icmp_packets -p ICMP-s 0/0 --icmp-type 11 -j ACCEPT #INPUT chain $IPTABLES -AINPUT-p tcp -j bad_tcp_packets $IPTABLES -AINPUT-p ALL-i $LAN_IFACE -s $LAN_IP_RANGE -j ACCEPT $IPTABLES -AINPUT-p ALL-i $LO_IFACE -s $LO_IP -j ACCEPT $IPTABLES -AINPUT-p ALL-i $LO_IFACE -s $LAN_IP -j ACCEPT $IPTABLES -AINPUT-p ALL-i $LO_IFACE -s $INET_IP -j ACCEPT $IPTABLES -AINPUT-p ALL-d $INET_IP -m state --state ESTABLISHED,RELATED-j ACCEPT $IPTABLES -AINPUT-p TCP-i $INET_IFACE -j tcp_packets $IPTABLES -AINPUT-p UDP-i $INET_IFACE -j udp_packets $IPTABLES -AINPUT-p ICMP-i $INET_IFACE -j icmp_packets $IPTABLES -AINPUT-m limit --limit 3/minute --limit-burst 3 -j LOG--log-level DEBUG --log-prefix "IPTINPUT packet died: " #FORWARD chain $IPTABLES -AFORWARD-p tcp -j bad_tcp_packets $IPTABLES -AFORWARD-i $LAN_IFACE -j ACCEPT $IPTABLES -AFORWARD-m state --state ESTABLISHED,RELATED-j ACCEPT $IPTABLES -AFORWARD-m limit --limit 3/minute --limit-burst 3 -j LOG--log-level DEBUG --log-prefix "IPTFORWARD packet died: " #OUTPUT chain $IPTABLES -AOUTPUT-p tcp -j bad_tcp_packets $IPTABLES -AOUTPUT-p ALL-s $LO_IP -j ACCEPT $IPTABLES -AOUTPUT-p ALL-s $LAN_IP -j ACCEPT $IPTABLES -AOUTPUT-p ALL-s $INET_IP -j ACCEPT $IPTABLES -AOUTPUT-m limit --limit 3/minute --limit-burst 3 -j LOG--log-level DEBUG --log-prefix "IPTOUTPUT packet died: " #SNAT table $IPTABLES -t nat -APOSTROUTING-o $INET_IFACE -j SNAT--to-source $INET_IP #DNAT table $IPTABLES -t nat -APREROUTING-p ! icmp -d $INET_IP -dport 53 -j DNAT--to-destination 192.168.0.254:53 #REDIRECT $IPTABLES -t nat -APREROUTING-i $LAN_IFACE -p tcp -s $LAN_IP_RANGE --dport 80 -j REDIRECT--to-ports 60080 touch /var/lock/subsys/firewall } stop(){ echo -n $"Stoping firewall:" echo "0">;/proc/sys/net/ipv4/ip_forward $IPTABLES -PINPUTACCEPT $IPTABLES -PFORWARDACCEPT $IPTABLES -POUTPUTACCEPT $IPTABLES -t nat -PPREROUTINGACCEPT $IPTABLES -t nat -PPOSTROUTINGACCEPT $IPTABLES -t nat -POUTPUTACCEPT $IPTABLES -t mangle -PPREROUTINGACCEPT $IPTABLES -t mangle -POUTPUTACCEPT $IPTABLES -F $IPTABLES -t nat -F $IPTABLES -t mangle -F $IPTABLES -X $IPTABLES -t nat -X $IPTABLES -t mangle -X rm -f /var/lock/subsys/firewall } status(){ clear echo "-------------------------------------------------------------------" $IPTABLES -L echo "-------------------------------------------------------------------" $IPTABLES -t nat -LPOSTROUTING echo "-------------------------------------------------------------------" $IPTABLES -t nat -LPREROUTING } case "$1" in start) start ;; stop) stop ;; restart) stop start ;; *) echo "$0 [start|stop|restart|status]" ;; esac cp firewall /etc/init.d/ chmod 700 /etc/init.d/firewall chkconfig --add firewall rc.firewall rc.firewall rc.firewall rc.firewall 脚本代码 #!/bin/sh # # rc.firewall - Initial SIMPLEIP Firewall script for Linux 2.4.x and iptables # # Copyright (C) 2001?Oskar Andreasson # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 2 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUTANYWARRANTY; without even the implied warranty of #MERCHANTABILITY or FITNESSFORAPARTICULAR PURPOSE.?See the #GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program or from the site that you downloaded it # from; if not, write to the Free Software Foundation, Inc., 59 Temple # Place, Suite 330, Boston, MA?02111-1307?USA # ########################################################################### # # 1. 配 置选 项 . # # # 1.1 Internet 相 关变 量设 置 . # INET_IP="194.236.50.155" INET_IFACE="eth0" INET_BROADCAST="194.236.50.255" # # 1.1.1 DHCP 相 关设 置 # # # 1.1.2 PPPoE 相 关设 置 # # # 1.2 局 域网 相关 变量 设置 . # LAN_IP="192.168.0.2" #防 火墙 连接 局域 网的 IP地址 LAN_IP_RANGE="192.168.0.0/16" #局 域网 地址 LAN_IFACE="eth1" #防 火墙 连接 局域 网的 网络 接口 # # 1.3 DMZ 非 军事 区相 关变 量设 置 . # # # 1.4 本 机相 关变 量设 置 . # LO_IFACE="lo" #本 地接 口名 称 LO_IP="127.0.0.1" #本 地接 口 IP # # 1.5 IPTables 路 径设 置 . # IPTABLES="/usr/sbin/iptables" # # 1.6 其 它配 置 . # ########################################################################### # # 2. 要 加载 的模 块 . # # # 初 始加 载的 模块 # /sbin/depmod -a # # 2.1 需 加载 的模 块 # /sbin/modprobe ip_tables /sbin/modprobe ip_conntrack /sbin/modprobe iptable_filter /sbin/modprobe iptable_mangle /sbin/modprobe iptable_nat /sbin/modprobe ipt_LOG /sbin/modprobe ipt_limit /sbin/modprobe ipt_state # # 2.2 不 需加 载的 模块 # #/sbin/modprobe ipt_owner #/sbin/modprobe ipt_REJECT #/sbin/modprobe ipt_MASQUERADE #/sbin/modprobe ip_conntrack_ftp #/sbin/modprobe ip_conntrack_irc #/sbin/modprobe ip_nat_ftp #/sbin/modprobe ip_nat_irc ########################################################################### # # 3. /proc 设置. # # # 3.1 需 要的 proc 配置 # echo "1" > /proc/sys/net/ipv4/ip_forward # # 3.2 不 需要 的 proc 配置 # #echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter #echo "1" > /proc/sys/net/ipv4/conf/all/proxy_arp #echo "1" > /proc/sys/net/ipv4/ip_dynaddr ########################################################################### # # 4. 建 立规 则 . # ###### # 4.1 Filter 表 # # # 4.1.1 建 立策 略 # $IPTABLES -PINPUTDROP $IPTABLES -POUTPUTDROP $IPTABLES -PFORWARDDROP # # 4.1.2 创 建自 定义 链 Create userspecified chains # # # 为 不可 靠的 tcp 包 建立 自定 义链 Create chain for bad tcp packets # $IPTABLES -N bad_tcp_packets # # 分 别为 ICMP,TCP 和UDP 协 议建 立自 定义 链 Create separate chains for ICMP,TCP and UDP to traverse # $IPTABLES -N allowed $IPTABLES -N tcp_packets $IPTABLES -N udp_packets $IPTABLES -N icmp_packets # # 4.1.3 在 自定 义链 建立 规则 Create content in userspecified chains # # # bad_tcp_packets 链bad_tcp_packets chain # #这 条链 包含 的规 则检 查进 入包 ( incoming packet) 的包 头是 否不 正常 或有 没有 其他 问题 ,并 进 行 相应 地处 理 。但 事实 上 ,我 们使 用它 只是 为了 过滤 掉一 些特 殊的 包 :没 有设 置 SYN 位 但又 是 NEW 状 态的 TCP 包 ,还 有那 些设 置了 SYN/ACK 但 也被 认为 是 NEW 状 态的 TCP 包 。这 条链 可 以用 来检 查所 有可 能的 不一 致的 东西 $IPTABLES -A bad_tcp_packets -p tcp --tcp-flags SYN,ACKSYN,ACK-m state --state NEW-j REJECT--reject-with tcp-reset $IPTABLES -A bad_tcp_packets -p tcp !--syn -m state --state NEW-j LOG--log-prefix "New not syn:" $IPTABLES -A bad_tcp_packets -p tcp !--syn -m state --state NEW-j DROP # # allowed 链?allowed chain # $IPTABLES -A allowed -p TCP--syn -j ACCEPT $IPTABLES -A allowed -p TCP-m state --state ESTABLISHED,RELATED-j ACCEPT $IPTABLES -A allowed -p TCP-j DROP # # TCP 规则?TCP rules # $IPTABLES -A tcp_packets -p TCP-s 0/0 --dport 21 -j allowed $IPTABLES -A tcp_packets -p TCP-s 0/0 --dport 22 -j allowed $IPTABLES -A tcp_packets -p TCP-s 0/0 --dport 80 -j allowed $IPTABLES -A tcp_packets -p TCP-s 0/0 --dport 113 -j allowed # # UDP 端口?UDP ports # #$IPTABLES -A udp_packets -p UDP-s 0/0 --destination-port 53 -j ACCEPT #$IPTABLES -A udp_packets -p UDP-s 0/0 --destination-port 123 -j ACCEPT $IPTABLES -A udp_packets -p UDP-s 0/0 --destination-port 2074 -j ACCEPT $IPTABLES -A udp_packets -p UDP-s 0/0 --destination-port 4000 -j ACCEPT # # 如 果网 络中 存在 Microsoft 网 络的 话 ,你 会遭 遇洪 水一 样的 广播 信息 ,下 面的 指令 将阻 止这 些 广 播并 在日 志中 #记 录. ?In Microsoft Networks you will be swamped by broadcasts. These lines # will prevent them from showing up in the logs. # #$IPTABLES -A udp_packets -p UDP-i $INET_IFACE -d $INET_BROADCAST --destination-port?135:139 -j DROP # # 如 果有 来自 我们 网络 之外 的 DHCP 请 求的 话 ,就 会很 快把 我们 的日 志塞 满 ,下 面的 指令 If we get DHCP requests from the Outside of our network, our logs will # be swamped as well. This rule will block them from getting logged. # #$IPTABLES -A udp_packets -p UDP-i $INET_IFACE -d 255.255.255.255 --destination-port 67:68 -j DROP # #ICMP 规则?ICMP rules # $IPTABLES -A icmp_packets -p ICMP-s 0/0 --icmp-type 8 -j ACCEPT $IPTABLES -A icmp_packets -p ICMP-s 0/0 --icmp-type 11 -j ACCEPT # # 4.1.4 INPUT 链?INPUT chain # # # 排 除不 良 TCP 包?Bad TCP packets we don't want. # $IPTABLES -AINPUT-p tcp -j bad_tcp_packets # # 非internet 网 络部 分的 规则 ?Rules for special networks not part of the Internet # $IPTABLES -AINPUT-p ALL-i $LAN_IFACE -s $LAN_IP_RANGE -j ACCEPT $IPTABLES -AINPUT-p ALL-i $LO_IFACE -s $LO_IP -j ACCEPT $IPTABLES -AINPUT-p ALL-i $LO_IFACE -s $LAN_IP -j ACCEPT $IPTABLES -AINPUT-p ALL-i $LO_IFACE -s $INET_IP -j ACCEPT # # 有 关本 地 DHCP 的 特殊 规则 ?Special rule for DHCP requests from LAN, which are not caught properly # otherwise. # $IPTABLES -AINPUT-p UDP-i $LAN_IFACE --dport 67 --sport 68 -j ACCEPT # # 来 自因 特网 的进 入包 的规 则 Rules for incoming packets from the internet. # $IPTABLES -AINPUT-p ALL-d $INET_IP -m state --state ESTABLISHED,RELATED-j ACCEPT $IPTABLES -AINPUT-p TCP-i $INET_IFACE -j tcp_packets $IPTABLES -AINPUT-p UDP-i $INET_IFACE -j udp_packets $IPTABLES -AINPUT-p ICMP-i $INET_IFACE -j icmp_packets # # 如 果防 火墙 外存 在 Microsoft 网 络的 话 ,你 会遭 遇洪 水一 样的 多播 信息 ,下 面的 指令 将丢 弃这 些 包, 所以 日志 就不 会被 这些 东西 淹没 # 记录If you have a Microsoft Network on the outside of your firewall, you may # also get flooded by Multicasts. We drop them so we do not get flooded by # logs # #$IPTABLES -AINPUT-i $INET_IFACE -d 224.0.0.0/8 -j DROP # # 将 不满 足上 述规 则的 形为 怪异 的包 记录 在案 Log weird packets that don't match the above. # $IPTABLES -AINPUT-m limit --limit 3/minute --limit-burst 3 -j LOG--log-level DEBUG --log-prefix "IPTINPUT packet died: " # # 4.1.5 FORWARD 链?FORWARD chain # # # 排 除不 良 TCP 包?Bad TCP packets we don't want # $IPTABLES -AFORWARD-p tcp -j bad_tcp_packets # # 接 收想 要转 发的 TCP 包?Accept the packets we actually want to forward # $IPTABLES -AFORWARD-i $LAN_IFACE -j ACCEPT $IPTABLES -AFORWARD-m state --state ESTABLISHED,RELATED-j ACCEPT # # 将 不满 足上 述规 则的 形为 怪异 的包 记录 在案 ?Log weird packets that don't match the above. # $IPTABLES -AFORWARD-m limit --limit 3/minute --limit-burst 3 -j LOG--log-level DEBUG --log-prefix "IPTFORWARD packet died: " # # 4.1.6?OUTPUT 链?OUTPUT chain # # # 排 除不 良 TCP 包?Bad TCP packets we don't want. # $IPTABLES -AOUTPUT-p tcp -j bad_tcp_packets # # 决 定允 许哪 个 IP包OUTPUT 的 规则 ?Special OUTPUT rules to decide which IP's to allow. # $IPTABLES -AOUTPUT-p ALL-s $LO_IP -j ACCEPT $IPTABLES -AOUTPUT-p ALL-s $LAN_IP -j ACCEPT $IPTABLES -AOUTPUT-p ALL-s $INET_IP -j ACCEPT # # 将 不满 足上 述规 则的 形为 怪异 的包 记录 在案 ?Log weird packets that don't match the above. # $IPTABLES -AOUTPUT-m limit --limit 3/minute --limit-burst 3 -j LOG--log-level DEBUG --log-prefix "IPTOUTPUT packet died: " ###### # 4.2 nat 表?nat table # # # 4.2.1 设 置策 略 ?Set policies # # # 4.2.2 创 建用 户自 定义 链 ?Create user specified chains # # # 4.2.3 在 用户 自定 义链 中建 立规 则 ?Create content in user specified chains # # # 4.2.4 PREROUTING 链?PREROUTING chain # # # 4.2.5 POSTROUTING 链?POSTROUTING chain # # # 允 许简 单的 IP 转 发及 网络 地址 转换 ?Enable simple IP Forwarding and Network Address Translation # $IPTABLES -t nat -APOSTROUTING-o $INET_IFACE -j SNAT--to-source $INET_IP # # 4.2.6 OUTPUT 链?OUTPUT chain # ###### # 4.3 mangle 表?mangle table # # # 4.3.1 设 置策 略 ?Set policies # # # 4.3.2 创 建用 户自 定义 链 ?Create user specified chains # # # 4.3.3 在 用户 自定 义链 中建 立规 则 ?Create content in user specified chains # # # 4.3.4 PREROUTING 链?PREROUTING chain # # # 4.3.5 INPUT 链?INPUT chain # # # 4.3.6 FORWARD 链?FORWARD chain # # # 4.3.7 OUTPUT 链?OUTPUT chain # # # 4.3.8 POSTROUTING 链?POSTROUTING chain # 初始化 IPTABLES-X IPTABLES-t nat -X IPTABLES-t mangle -X iptables -Z 定义策略 ((((默认规则 )))) iptables -PINPUTACCEPT iptables -POUTPUTACCEPT iptables -PFORWARDACCEPT iptables -AINPUT-i lo -j ACCEPT iptables -AINPUT-m state --state RELATED-j ACCEPT 练习 1. 设置iptables 规则,使 某几 台计 算机 能访 问本 机的 web 服务,其 它计 算机 不能 访问 本机 的 web 服务.

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档

相关文档