Linux网络管理—iptables命令

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

1. 表和链

常用的表有2个:filternat. 每张表又包含多条链,每条链就是规则序列.

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

2. 处理流程

接收到数据包的处理过程

  1. 本机收到数据包,由 nat.PREROUTING 先进行处理;
  2. 如果数据包的目的地址是本机,则交由 filter.INPUT 进一步处理;然后将数据包交给本机上层协议栈.
  3. 如果数据包的目的地址不是本机,则交由 filter.FORWARD 进一步处理;然后交由 nat.POSTROUTING 进行处理.

发送数据包的处理过程

  1. 数据包先后经过 nat.OUTPUTfilter.OUTPUT 进行处理;
  2. 然后交由 nat.POSTROUTING 进行处理.

3. 命令组成

常用选项

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

规则组成

  • -p protocol: 指定协议,可以取指为 tcp, udp, icmp.
  • [! ]-s address[/mask]: 指定源地址,可以是主机名、网络名和IP地址. ‘!’ 表示取反.
  • [! ]-d address[/mask]: 指定目的地址,可以是主机名、网络名和IP地址.
  • [! ]-i [name]: 进入的网络接口.
  • [! ]-o [name]: 出去的网络接口.
  • [! ]--sport port[:port]: 指定源端口范围.
  • [! ]--dport port[:port]: 指定目的端口范围.

4. 操作

罗列规则

[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: 显示每条规则在链中的位置(行号).

创建链

[root@localhost ~]# iptables -t filter -N chain1
  • -N: 创建指定名称的链.

追加规则

[root@localhost ~]# iptables -A chain1 -p tcp --dport 22 -j DROP
  • -A: 追加规则至指定链的末尾.
  • --dport: 匹配指定的目的端口号.
  • -j DROP: 如果匹配规则,则丢弃数据包.

插入规则

[root@localhost ~]# iptables -I INPUT 1 -s 116.56.140.61 -d 192.168.122.132 -j chain1
  • -I: 插入指定规则到指定链的指定地方,此处是插入链首(序号为1).
  • -j chain1: 如果匹配规则,则跳转到 chain1 链去继续匹配.

替换规则

[root@localhost ~]# iptables -R INPUT 1 -s 192.168.122.1 -d 192.168.122.132 -j chain1
  • -R: 替换指定链指定规则为新的规则,此处替换第一条规则.

删除规则

[root@localhost ~]# iptables -D INPUT 1
  • -D: 删除指定链上指定的规则,此处删除第一条规则.

清空规则

[root@localhost ~]# iptables -F chain1
  • -F: 清空指定链上的所有规则.

重命名自定义链

[root@localhost ~]# iptables -E chain1 CHAIN1
  • -E: 此处将 chain1 重命名为 CHAIN1.

删除链

[root@localhost ~]# iptables -X CHAIN1
  • -X: 删除指定的自定义链,需要确保没有其他链引用要删除的链.

设置默认策略

[root@localhost ~]# iptables -P INPUT ACCEPT
  • -P: 设置指定链(需要是内建链)的默认目标规则,此处表示,如果所有规则都不匹配,则接受该数据包.

SNAT

注意:主机需要先开启转发功能:

  • 临时:echo "1" > /proc/sys/net/ipv4/ip_forward

  • 永久:编辑配置文件 /etc/sysctl.conf,设置 net.ipv4.ip_forward = 1,然后执行 sysctl -p

[root@localhost ~]# iptables -t nat -A POSTROUTING -s 10.10.177.0/24 -o eth0 -j SNAT --to-source 10.10.188.232
  • --to-source: 将数据包的源地址替换为指定的地址.
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE
  • -j MASQUERADE: 自动使用合适的地址替换数据包源地址.

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
  • --to-destination: 将数据包的目的地址替换为指定的地址.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值