关于linux:Linux命令iptables

35次阅读

共计 2236 个字符,预计需要花费 6 分钟才能阅读完成。

作用 :用于 IP 包的过滤和实现 NAT.

表和链

罕用的表有 2 个:filternat. 每张表又蕴含多条链,每条链就是规定序列.

  • filter 表蕴含 INPUTFORWARDOUTPUT 链.
  • nat 表蕴含 PREROUTINGOUTPUTPOSTROUTING 链.

接管到数据包的处理过程

  1. 本机收到数据包,由 nat.PREROUTING 先进行解决;
  2. 如果数据包的目标地址是本机,则交由 filter.INPUT 进一步解决;而后将数据包交给本机下层协定栈.
  3. 如果数据包的目标地址不是本机,则交由 filter.FORWARD 进一步解决;而后交由 nat.POSTROUTING 进行解决.

发送数据包的处理过程

  1. 数据包先后通过 nat.OUTPUTfilter.OUTPUT 进行解决;
  2. 而后交由 nat.POSTROUTING 进行解决.

罕用选项

  • -t: 指定要解决哪张表,默认是 filter.
  • -n: 以数字模式显示地址和端口号.

1. 列举规定

[root@controller ~]# iptables -t nat -L POSTROUTING -n --line-number
Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination
1    RETURN     all  --  192.168.122.0/24     224.0.0.0/24
2    RETURN     all  --  192.168.122.0/24     255.255.255.255
3    MASQUERADE  tcp  --  192.168.122.0/24    !192.168.122.0/24     masq ports: 1024-65535
4    MASQUERADE  udp  --  192.168.122.0/24    !192.168.122.0/24     masq ports: 1024-65535
5    MASQUERADE  all  --  192.168.122.0/24    !192.168.122.0/24
6    POSTROUTING_direct  all  --  0.0.0.0/0            0.0.0.0/0
7    POSTROUTING_ZONES_SOURCE  all  --  0.0.0.0/0            0.0.0.0/0
8    POSTROUTING_ZONES  all  --  0.0.0.0/0            0.0.0.0/0

-L: 列出指定链蕴含的规定.
--line-number: 显示每条规定在链中的地位(行号).

2. 创立链

[root@localhost ~]# iptables -t filter -N chain1

-N: 创立指定名称的链.

3. 追加规定

[root@localhost ~]# iptables -A chain1 -p tcp --dport 22 -j DROP

-A: 追加规定至指定链的开端.
-p: 匹配指定的协定.
--dport: 匹配指定的目标端口号.
-j DROP: 如果匹配规定,则抛弃数据包.

4. 插入规定

[root@localhost ~]# iptables -I INPUT 1 -s 116.56.140.61 -d 192.168.122.132 -j chain1

-I: 插入指定规定到指定链的指定中央,此处是插入链首(序号为 1).
-s: 匹配指定的源 IP 地址.
-d: 匹配指定的目标 IP 地址.
-j chain1: 如果匹配规定,则跳转到 chain1 链去持续匹配.

5. 替换规定

[root@localhost ~]# iptables -R INPUT 1 -s 192.168.122.1 -d 192.168.122.132 -j chain1

-R: 替换指定链指定规定为新的规定,此处替换第一条规定.

6. 删除规定

[root@localhost ~]# iptables -D INPUT 1

-D: 删除指定链上指定的规定,此处删除第一条规定.

7. 清空规定

[root@localhost ~]# iptables -F chain1

-F: 清空指定链上的所有规定.

8. 重命名自定义链

[root@localhost ~]# iptables -E chain1 CHAIN1

-E: 此处将 chain1 重命名为 CHAIN1.

9. 删除自定义链

[root@localhost ~]# iptables -X CHAIN1

-X: 删除指定的自定义链,须要确保没有其余链援用要删除的链.

10. 设置内建链的默认指标规定

[root@localhost ~]# iptables -P INPUT ACCEPT

-P: 设置指定链(须要是内建链)的默认指标规定,此处示意,如果所有规定都不匹配,则承受该数据包.

11. SNAT

[root@localhost ~]# iptables -t nat -A POSTROUTING -s 10.10.177.0/24 -o eth0 -j SNAT --to-source 10.10.188.232

-o: 从指定的网络接口发送数据包.
--to-source: 将数据包的源地址替换为指定的地址.

[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE

-j MASQUERADE: 主动应用适合的地址替换数据包源地址.

12. DNAT

[root@localhost ~]# iptables -t nat -A PREROUTING -d 192.168.31.168 -p tcp --dport 80 -i eth0 -j DNAT --to-destination 192.168.31.167:8080

-i: 从指定的网络接口接管到数据包.
--to-destination: 将数据包的目标地址替换为指定的地址.

正文完
 0