12.07.2015 Views

2 小时玩转iptables 企业版v1.5.4.pdf - LinuxTone.Org

2 小时玩转iptables 企业版v1.5.4.pdf - LinuxTone.Org

2 小时玩转iptables 企业版v1.5.4.pdf - LinuxTone.Org

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

1. 概 述2.4.x、2.6.x 内 核netfilter/iptables


2.2 链 和 表£ 表£ 链filter:nat:顾 名 思 义 , 用 于 过 滤 的 时 候顾 名 思 义 , 用 于 做 NAT 的 时 候NAT:Network Address TranslatorINPUT: 位 于 filter 表 , 匹 配 目 的 IP 是 本 机 的 数 据 包FORWARD: 位 于 filter 表 , 匹 配 穿 过 本 机 的 数 据 包 ,PREROUTING: 位 于 nat 表 , 用 于 修 改 目 的 地 址 (DNAT)POSTROUTING: 位 于 nat 表 , 用 于 修 改 源 地 址 (SNAT)


3.2.1 -A-A < 链 名 >APPEND, 追 加 一 条 规 则 ( 放 到 最 后 )例 如 :iptables -t filter -A INPUT -j DROP在 filter 表 的 INPUT 链 里 追 加 一 条 规 则 ( 作 为 最 后 一 条 规 则 )匹 配 所 有 访 问 本 机 IP 的 数 据 包 , 匹 配 到 的 丢 弃


3.2.2 -I-I < 链 名 > [ 规 则 号 码 ]INSERT, 插 入 一 条 规 则例 如 :iptables -IINPUT -j DROP在 filter 表 的 INPUT 链 里 插 入 一 条 规 则 ( 插 入 成 第 1 条 )iptables -IINPUT 3 -j DROP在 filter 表 的 INPUT 链 里 插 入 一 条 规 则 ( 插 入 成 第 3 条 )注 意 : 1、-t filter 可 不 写 , 不 写 则 自 动 默 认 是 filter 表2、-I 链 名 [ 规 则 号 码 ], 如 果 不 写 规 则 号 码 , 则 默 认 是 13、 确 保 规 则 号 码 ≤ ( 已 有 规 则 数 + 1), 否 则 报 错


3.2.3 -D-D < 链 名 > < 规 则 号 码 | 具 体 规 则 内 容 >DELETE, 删 除 一 条 规 则例 如 :iptables -D INPUT 3( 按 号 码 匹 配 )删 除 filter 表 INPUT 链 中 的 第 三 条 规 则 ( 不 管 它 的 内 容 是 什 么 )iptables -D INPUT -s 192.168.0.1 -j DROP( 按 内 容 匹 配 )删 除 filter 表 INPUT 链 中 内 容 为 “-s 192.168.0.1 -j DROP” 的 规 则( 不 管 其 位 置 在 哪 里 )注 意 :1、 若 规 则 列 表 中 有 多 条 相 同 的 规 则 时 , 按 内 容 匹 配 只 删 除 序 号 最 小 的 一 条2、 按 号 码 匹 配 删 除 时 , 确 保 规 则 号 码 ≤ 已 有 规 则 数 , 否 则 报 错3、 按 内 容 匹 配 删 除 时 , 确 保 规 则 存 在 , 否 则 报 错


3.2.4 -P-P < 链 名 > < 动 作 >POLICY, 设 置 某 个 链 的 默 认 规 则例 如 :iptables -P INPUT DROP设 置 filter 表 INPUT 链 的 默 认 规 则 是 DROP注 意 :当 数 据 包 没 有 被 规 则 列 表 里 的 任 何 规 则 匹 配 到 时 , 按 此 默 认 规 则 处 理 。动 作 前 面 不 能 加 –j, 这 也 是 唯 一 一 种 匹 配 动 作 前 面 不 加 –j 的 情 况 。


3.2.5 -F-F [ 链 名 ]FLUSH, 清 空 规 则例 如 :iptables -F INPUT清 空 filter 表 INPUT 链 中 的 所 有 规 则iptables -t nat -F PREROUTING清 空 nat 表 PREROUTING 链 中 的 所 有 规 则注 意 :1、-F 仅 仅 是 清 空 链 中 规 则 , 并 不 影 响 -P 设 置 的 默 认 规 则2、-P 设 置 了 DROP 后 , 使 用 -F 一 定 要 小 心 !!!3、 如 果 不 写 链 名 , 默 认 清 空 某 表 里 所 有 链 里 的 所 有 规 则


3.2.6 -[vxn]L-L [ 链 名 ]LIST, 列 出 规 则v: 显 示 详 细 信 息 , 包 括 每 条 规 则 的 匹 配 包 数 量 和 匹 配 字 节 数x: 在 v 的 基 础 上 , 禁 止 自 动 单 位 换 算 (K、M)n: 只 显 示 IP 地 址 和 端 口 号 码 , 不 显 示 域 名 和 服 务 名 称例 如 :iptables -L粗 略 列 出 filter 表 所 有 链 及 所 有 规 则iptables -t nat -vnL用 详 细 方 式 列 出 nat 表 所 有 链 的 所 有 规 则 , 只 显 示 IP 地 址 和 端 口 号iptables -t nat -vxnL PREROUTING用 详 细 方 式 列 出 nat 表 PREROUTING 链 的 所 有 规 则 以 及 详 细 数 字 , 不 反 解


3.3 匹 配 条 件£ 流 入 、 流 出 接 口 (-i、-o)£ 来 源 、 目 的 地 址 (-s、-d)£ 协 议 类 型 (-p)£ 来 源 、 目 的 端 口 (--sport、--dport)


3.3.1 按 网 络 接 口 匹 配-i < 匹 配 数 据 进 入 的 网 络 接 口 >例 如 :-i eth0匹 配 是 否 从 网 络 接 口 eth0 进 来-i ppp0匹 配 是 否 从 网 络 接 口 ppp0 进 来-o 匹 配 数 据 流 出 的 网 络 接 口例 如 :-o eth0-o ppp0


3.3.2 按 来 源 目 的 地 址 匹 配-s < 匹 配 来 源 地 址 >可 以 是 IP、NET、DOMAIN, 也 可 空 ( 任 何 地 址 )例 如 :-s 192.168.0.1 匹 配 来 自 192.168.0.1 的 数 据 包-s 192.168.1.0/24 匹 配 来 自 192.168.1.0/24 网 络 的 数 据 包-s 192.168.0.0/16 匹 配 来 自 192.168.0.0/16 网 络 的 数 据 包-d < 匹 配 目 的 地 址 >可 以 是 IP、NET、DOMAIN, 也 可 以 空例 如 :-d 202.106.0.20 匹 配 去 往 202.106.0.20 的 数 据 包-d 202.106.0.0/16 匹 配 去 往 202.106.0.0/16 网 络 的 数 据 包-d www.abc.com 匹 配 去 往 域 名 www.abc.com 的 数 据 包


3.3.3 按 协 议 类 型 匹 配-p < 匹 配 协 议 类 型 >可 以 是 TCP、UDP、ICMP 等 , 也 可 为 空例 如 :-p tcp-p udp-p icmp --icmp-type 类 型ping: type 8 pong: type 0


3.3.4 按 来 源 目 的 端 口 匹 配--sport < 匹 配 源 端 口 >可 以 是 个 别 端 口 , 可 以 是 端 口 范 围例 如 :--sport 1000 匹 配 源 端 口 是 1000 的 数 据 包--sport 1000:3000 匹 配 源 端 口 是 1000-3000 的 数 据 包 ( 含 1000、3000)--sport :3000 匹 配 源 端 口 是 3000 以 下 的 数 据 包 ( 含 3000)--sport 1000: 匹 配 源 端 口 是 1000 以 上 的 数 据 包 ( 含 1000)--dport < 匹 配 目 的 端 口 >可 以 是 个 别 端 口 , 可 以 是 端 口 范 围例 如 :--dport 80 匹 配 目 的 端 口 是 80 的 数 据 包--dport 6000:8000 匹 配 目 的 端 口 是 6000-8000 的 数 据 包 ( 含 6000、8000)--dport :3000 匹 配 目 的 端 口 是 3000 以 下 的 数 据 包 ( 含 3000)--dport 1000: 匹 配 目 的 端 口 是 1000 以 上 的 数 据 包 ( 含 1000)注 意 :--sport 和 --dport 必 须 配 合 -p 参 数 使 用


3.3.5 匹 配 应 用 举 例1、 端 口 匹 配-p udp --dport 53匹 配 网 络 中 目 的 端 口 是 53 的 UDP 协 议 数 据 包2、 地 址 匹 配-s 10.1.0.0/24 -d 172.17.0.0/16匹 配 来 自 10.1.0.0/24 去 往 172.17.0.0/16 的 所 有 数 据 包3、 端 口 和 地 址 联 合 匹 配-s 192.168.0.1 -d www.abc.com -p tcp --dport 80匹 配 来 自 192.168.0.1, 去 往 www.abc.com 的 80 端 口 的 TCP 协 议 数 据 包注 意 :1、--sport、--dport 必 须 联 合 -p 使 用 , 必 须 指 明 协 议 类 型 是 什 么2、 条 件 写 的 越 多 , 匹 配 越 细 致 , 匹 配 范 围 越 小


3.4 动 作 ( 处 理 方 式 )£ ACCEPT£ DROP£ SNAT£ DNAT£ MASQUERADE


3.4.1 -j j ACCEPT-j ACCEPT通 过 , 允 许 数 据 包 通 过 本 链 而 不 拦 截 它类 似 Cisco 中 ACL 里 面 的 permit例 如 :iptables -A INPUT -j ACCEPT允 许 所 有 访 问 本 机 IP 的 数 据 包 通 过


3.4.2 -j j DROP-j DROP丢 弃 , 阻 止 数 据 包 通 过 本 链 而 丢 弃 它类 似 Cisco 中 ACL 里 的 deny例 如 :iptables -A FORWARD -s 192.168.80.39 -j DROP阻 止 来 源 地 址 为 192.168.80.39 的 数 据 包 通 过 本 机


3.4.4 -j j DNAT-j DNAT --to IP[-IP][: 端 口 - 端 口 ](nat 表 的 PREROUTING 链 )目 的 地 址 转 换 ,DNAT 支 持 转 换 为 单 IP, 也 支 持 转 换 到 IP 地 址 池( 一 组 连 续 的 IP 地 址 )例 如 :iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 \-j DNAT --to 192.168.0.1把 从 ppp0 进 来 的 要 访 问 TCP/80 的 数 据 包 目 的 地 址 改 为 192.168.0.1iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 81 \-j DNAT --to 192.168.0.2:80iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 \-j DNAT --to 192.168.0.1-192.168.0.10


3.4.3 -j j SNAT-j SNAT --to IP[-IP][: 端 口 - 端 口 ](nat 表 的 POSTROUTING 链 )源 地 址 转 换 ,SNAT 支 持 转 换 为 单 IP, 也 支 持 转 换 到 IP 地 址 池( 一 组 连 续 的 IP 地 址 )例 如 :iptables -t nat -A POSTROUTING -s 192.168.0.0/24 \-j SNAT --to 1.1.1.1将 内 网 192.168.0.0/24 的 原 地 址 修 改 为 1.1.1.1, 用 于 NATiptables -t nat -A POSTROUTING -s 192.168.0.0/24 \-j SNAT --to 1.1.1.1-1.1.1.10同 上 , 只 不 过 修 改 成 一 个 地 址 池 里 的 IP


3.4.5 -j j MASQUERADE-j MASQUERADE动 态 源 地 址 转 换 ( 动 态 IP 的 情 况 下 使 用 )例 如 :iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE将 源 地 址 是 192.168.0.0/24 的 数 据 包 进 行 地 址 伪 装


3.5 附 加 模 块£ 按 包 状 态 匹 配 (state)£ 按 来 源 MAC 匹 配 (mac)£ 按 包 速 率 匹 配 (limit)£ 多 端 口 匹 配 (multiport)


3.5.1 state-m state --state 状 态状 态 :NEW、RELATED、ESTABLISHED、INVALIDNEW: 有 别 于 tcp 的 synESTABLISHED: 连 接 态RELATED: 衍 生 态 , 与 conntrack 关 联 (FTP)INVALID: 不 能 被 识 别 属 于 哪 个 连 接 或 没 有 任 何 状 态例 如 :iptables -A INPUT -m state --state RELATED,ESTABLISHED \-j ACCEPT


3.5.2 mac-m mac --mac-source MAC匹 配 某 个 MAC 地 址例 如 :iptables -A FORWARD -m mac --mac-source xx:xx:xx:xx:xx:xx \-j DROP阻 断 来 自 某 MAC 地 址 的 数 据 包 , 通 过 本 机注 意 :报 文 经 过 路 由 后 , 数 据 包 中 原 有 的 mac 信 息 会 被 替 换 , 所 以 在 路 由后 的 iptables 中 使 用 mac 模 块 是 没 有 意 义 的


3.5.3 limit-m limit --limit 匹 配 速 率 [--burst 缓 冲 数 量 ]用 一 定 速 率 去 匹 配 数 据 包例 如 :iptables -A FORWARD -d 192.168.0.1 -m limit --limit 50/s \-j ACCEPTiptables -A FORWARD -d 192.168.0.1 -j DROP注 意 :limit 英 语 上 看 是 限 制 的 意 思 , 但 实 际 上 只 是 按 一 定 速 率 去 匹 配 而已 , 要 想 限 制 的 话 后 面 要 再 跟 一 条 DROP


3.5.4 multiport-m multiport 端 口 1[, 端 口 2,.., 端 口 n]一 次 性 匹 配 多 个 端 口 , 可 以 区 分 源 端 口 , 目 的 端 口 或 不 指 定 端 口例 如 :iptables -A INPUT -p tcp -m multiport --dports \21,22,25,80,110 -j ACCEPT注 意 :必 须 与 -p 参 数 一 起 使 用


4. 实 例 分 析£ 单 服 务 器 的 防 护£ 如 何 做 网 关£ 如 何 限 制 内 网 用 户£ 内 网 如 何 做 对 外 服 务 器£ 连 接 追 踪 模 块


4.1 单 服 务 器 的 防 护£ 弄 清 对 外 服 务 对 象£ 书 写 规 则网 络 接 口 lo 的 处 理状 态 监 测 的 处 理协 议 + 端 口 的 处 理实 例 : 一 个 普 通 的 web 服 务 器iptables -A INPUT -i lo -j ACCEPTiptables -A INPUT -p tcp -m multiport --dports 22,80 -j ACCEPTiptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPTiptables -P INPUT DROP注 意 : 确 保 规 则 顺 序 正 确 , 弄 清 逻 辑 关 系 , 学 会 时 刻 使 用 -vnL


4.2 如 何 做 网 关£ 弄 清 网 络 拓 扑£ 本 机 上 网£ 设 置 nat启 用 路 由 转 发地 址 伪 装 SNAT/MASQUERADE实 例 :ADSL 拨 号 上 网 的 拓 扑echo "1" > /proc/sys/net/ipv4/ip_forwardiptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 \-j MASQUERADE


4.3 如 何 限 制 内 网 用 户£ 过 滤 位 置 filer 表 FORWARD 链£ 匹 配 条 件 -s -d -p --s/dport£ 处 理 动 作 ACCEPT DROP实 例 :iptables -A FORWARD -s 192.168.0.3 -j DROPiptables -A FORWARD -m mac --mac-source 11:22:33:44:55:66 \-j DROPiptables -A FORWARD -d bbs.chinaunix.net -j DROP


4.4 内 网 如 何 做 对 外 服 务 器£ 服 务 协 议 (TCP/UDP)£ 对 外 服 务 端 口£ 内 部 服 务 器 私 网 IP£ 内 部 真 正 服 务 端 口实 例 :iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 \-j DNAT --to 192.168.1.1iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 81 \-j DNAT --to 192.168.1.2:80


4.5 连 接 追 踪 模 块£ 为 什 么 要 使 用 连 接 追 踪 模 块FTP 协 议 的 传 输 原 理传 统 防 火 墙 的 做 法£ 如 何 使 用


4.5.1 FTP 协 议 传 输 原 理£ 使 用 端 口command portdata port£ 传 输 模 式主 动 模 式 (ACTIVE)被 动 模 式 (PASSIVE)


4.5.1 FTP 协 议 传 输 原 理主 动 模 式 (ACTIVE)clientserverxxxx |----|----------|--->| 21yyyy || 21yyyy |----|----------|--->| zzzzFW1FW2


4.5.2 传 统 防 火 墙 的 做 法£ 只 使 用 主 动 模 式 , 打 开 TCP/20£ 防 火 墙 打 开 高 范 围 端 口£ 配 置 FTP 服 务 , 减 小 被 动 模 式 端 口 范 围


4.5.3 如 何 使 用 连 接 追 踪 模 块modprobe ip_nat_ftpiptables -A INPUT -p tcp --dport 21 -j ACCEPTiptables -A INPUT -m state --state \RELATED,ESTABLISHED -j ACCEPTiptables -P INPUT DROP


5. 网 管 策 略£ 怕 什 么£ 能 做 什 么£ 让 什 么 vs 不 让 什 么£ 三 大 “ 纪 律 ” 五 项 “ 注 意 ”£ 其 他 注 意 事 项


5.1 必 加 项echo "1" > /proc/sys/net/ipv4/ip_forwardecho "1" > /proc/sys/net/ipv4/tcp_syncookiesecho "1" > \/proc/sys/net/ipv4/icmp_ignore_bogus_error_responsesmodprobe ip_nat_ftp


5.2 可 选 方 案堵 :iptables -A FORWARD -p tcp --dport xxx -j DROPiptables -A FORWARD -p tcp --dport yyy:zzz -j DROP通 :iptables -A FORWARD -p tcp --dport xxx -j ACCEPTiptables -A FORWARD -p tcp --dport yyy:zzz -j ACCEPTiptables -A FORWARD -m state --state RELATED,ESTABLISHED \-j ACCEPTiptables -P FORWARD DROP


5.3 三 大 “ 纪 律 ” 五 项 “ 注 意 ”£ 三 大 “ 纪 律 ”—— 专 表 专 用filternatmangle£ 五 项 “ 注 意 ”—— 注 意 数 据 包 的 走 向PREROUTINGINPUTFORWARDOUTPUTPOSTROUTING


5.4 其 他 注 意 事 项£ 养 成 好 的 习 惯iptables -vnLiptables -t nat -vnLiptables-save£ 注 意 逻 辑 顺 序iptables -A INPUT -p tcp --dport xxx -j ACCEPTiptables -IINPUT -p tcp --dport yyy -j ACCEPT£ 学 会 写 简 单 的 脚 本


6. 使 用 总 则£ 所 有 链 名 必 须 大 写INPUT/OUTPUT/FORWARD/PREROUTING/POSTROUTING£ 所 有 表 名 必 须 小 写filter/nat/mangle£ 所 有 动 作 必 须 大 写ACCEPT/DROP/SNAT/DNAT/MASQUERADE£ 所 有 匹 配 必 须 小 写-s/-d/-m /-p


6. FAQ.1Q: 我 设 置 了 iptables -A OUTPUT -d 202.xx.xx.xx -j DROP为 何 内 网 用 户 还 是 可 以 访 问 那 个 地 址 ?A:filter 表 的 OUTPUT 链 是 本 机 访 问 外 面 的 必 经 之 路 , 内 网 数 据 不 经 过 该 链Q: 我 添 加 了 iptables -A FORWARD -d 202.xx.xx.xx -j DROP为 何 内 网 用 户 还 是 可 以 访 问 那 个 地 址 ?A: 检 查 整 个 规 则 是 否 存 在 逻 辑 错 误 , 看 是 否 在 DROP 前 有 ACCEPTQ:iptables -t nat -A POSTROUTING -i eth1 -o eth2 -j MASQUERADE这 条 语 句 为 何 报 错 ?A:POSTROUTING 链 不 支 持 “ 流 入 接 口 ” -i 参 数同 理 ,PREROUTING 链 不 支 持 “ 流 出 接 口 ” -o 参 数


6. FAQ.2Q: 我 应 该 怎 么 查 看 某 个 模 块 具 体 该 如 何 使 用 ?A:iptables -m 模 块 名 -hQ: 执 行 iptables -A FORWARD -m xxx -j yyy提 示 iptables: No chain/target/match by that nameA:/lib/modules/`uname -r`/kernel/net/ipv4/netfilter 目 录 中 ,缺 少 与 xxx 模 块 有 关 的 文 件 , 或 缺 少 与 yyy 动 作 有 关 的 文 件名 字 为 ipt_xxx.o(2.4 内 核 ) 或 ipt_yyy.ko(2.6 内 核 )Q: 脚 本 写 好 了 , 内 网 上 网 没 问 题 ,FTP 访 问 不 正 常 , 无 法 列 出 目 录 , 为 什 么 ?A: 缺 少 ip_nat_ftp 这 个 模 块 ,modprobe ip_nat_ftp


6. FAQ.3更 多 FAQ 内 容http://www.netfilter.org/documentation/FAQ/netfilter-faq.html


7. 实 战 .1CU: 202.106.0.20202.106.0.254(eth0)192.168.0.254(eth1)client: 192.168.0.1


7. 实 战 .1- - 参 考 答 案CU:ifconfig eth0 202.106.0.20 netmask 255.255.255.0Client:ifconfig eth0 192.168.0.1 netmask 255.255.255.0route add default gw 192.168.0.254Firewall:ifconfig eth0 202.106.0.254 netmask 255.255.255.0ifconfig eth1 192.168.0.254 netmask 255.255.255.0service iptables stopmodprobe ip_nat_ftpecho 1 > /proc/sys/net/ipv4/ip_forwardiptables -A INPUT -i lo -j ACCEPTiptables -A INPUT -i eth1 -p tcp --dport 22 -j ACCEPTiptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPTiptables -P INPUT DROPiptables -t nat -A POSTROUTING -s 192.168.0.0/24 –o eth0 -j SNAT --to 202.106.0.254


7. 实 战 .2CU: 202.106.0.20202.106.0.254(eth0)172.17.0.254(eth2)192.168.0.254(eth1)web server: 172.17.0.1client: 192.168.0.1


7. 实 战 .2- - 参 考 答 案CU:ifconfig eth0 202.106.0.20 netmask 255.255.255.0Server:ifconfig eth0 172.17.0.1 netmask 255.255.255.0route add default gw 172.17.0.254Client:ifconfig eth0 192.168.0.1 netmask 255.255.255.0route add default gw 192.168.0.254Firewall:ifconfig eth0 202.106.0.254 netmask 255.255.255.0ifconfig eth1 192.168.0.254 netmask 255.255.255.0ifconfig eth2 172.17.0.254 netmask 255.255.255.0service iptables stopmodprobe ip_nat_ftpecho 1 > /proc/sys/net/ipv4/ip_forwardiptables -A INPUT -i lo -j ACCEPTiptables -A INPUT -i eth1 -p tcp --dport 22 -j ACCEPTiptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPTiptables -P INPUT DROPiptables -t nat -A POSTROUTING -s 192.168.0.0/24 –o eth0 -j SNAT --to 202.106.0.254iptables -t nat -A PREROUTING -d 202.106.0.254 -p tcp -dport 80 -j DNAT --to 172.17.0.1iptables -A FORWARD -i eth2 -o eth1 -m state --state NEW -j DROP

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!