如何使用iptables和NAT

简介

iptables 是集成在 Linux 内核中的包过滤防火墙系统。使用 iptables 可以添加、删除具体的过滤规则,iptables 默认维护着 4 个表和 5 个链,所有的防火墙策略规则都被分别写入这些表与链中。

“四表”是指 iptables 的功能,默认的 iptable s规则表有 filter 表(过滤规则表)、nat 表(地址转换规则表)、mangle(修改数据标记位规则表)、raw(跟踪数据表规则表):

1.filter 表:控制数据包是否允许进出及转发,可以控制的链路有 INPUT、FORWARD 和 OUTPUT。 2.nat 表:控制数据包中地址转换,可以控制的链路有 PREROUTING、INPUT、OUTPUT 和 POSTROUTING。 3.mangle:修改数据包中的原数据,可以控制的链路有 PREROUTING、INPUT、OUTPUT、FORWARD 和 POSTROUTING。 4.raw:控制 nat 表中连接追踪机制的启用状况,可以控制的链路有 PREROUTING、OUTPUT。

“五链”是指内核中控制网络的 NetFilter 定义的 5 个规则链。每个规则表中包含多个数据链:INPUT(入站数据过滤)、OUTPUT(出站数据过滤)、FORWARD(转发数据过滤)、PREROUTING(路由前过滤)和POSTROUTING(路由后过滤),防火墙规则需要写入到这些具体的数据链中。

Linux 防火墙的过滤框架,如图 1 所示。

iptables语法格式

iptables 命令的基本语法格式如下:

 

iptables [-t table] COMMAND [chain] CRETIRIA -j ACTION

各参数的含义为:

  • -t:指定需要维护的防火墙规则表 filter、nat、mangle或raw。在不使用 -t 时则默认使用 filter 表。

  • COMMAND:子命令,定义对规则的管理。

  • chain:指明链表。

  • CRETIRIA:匹配参数。

  • ACTION:触发动作。

iptables 命令常用的选项及各自的功能如表 2 所示

选 项功 能
-A添加防火墙规则
-D删除防火墙规则
-I插入防火墙规则
-F清空防火墙规则
-L列出添加防火墙规则
-R替换防火墙规则
-Z清空防火墙数据表统计信息
-P设置链默认规则

iptables 命令常用匹配参数及各自的功能如表 3 所示。

参 数功 能
[!]-p匹配协议,! 表示取反
[!]-s匹配源地址
[!]-d匹配目标地址
[!]-i匹配入站网卡接口
[!]-o匹配出站网卡接口
[!]--sport匹配源端口
[!]--dport匹配目标端口
[!]--src-range匹配源地址范围
[!]--dst-range匹配目标地址范围
[!]--limit匹配数据表速率
[!]--mac-source匹配源MAC地址
[!]--sports匹配源端口
[!]--dports匹配目标端口
[!]--stste匹配状态(INVALID、ESTABLISHED、NEW、RELATED)
[!]--string匹配应用层字串

iptables 命令触发动作及各自的功能如表 4 所示。

触发动作功 能
ACCEPT允许数据包通过
DROP丢弃数据包
REJECT拒绝数据包通过
LOG将数据包信息记录 syslog 曰志
DNAT目标地址转换
SNAT源地址转换
MASQUERADE地址欺骗
REDIRECT重定向

永久生效

当你删除、添加规则后,这些更改并不能永久生效,这些规则很有可能在系统重启后恢复原样。如下配置让配置永久生效。

# 保存iptables规则
service iptables save
​
# 重启iptables服务
service iptables stop
service iptables start

查看当前规则:

cat  /etc/sysconfig/iptables

防火墙的备份与还原

iptables-save命令

iptables-save > /etc/sysconfig/iptables

iptables-save > 文件名称

iptables-restore命令

iptables-restore < 文件名称

例子

iptables --list

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    RH-Firewall-1-INPUT  all  --  0.0.0.0/0            0.0.0.0/0
​
Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination
1    RH-Firewall-1-INPUT  all  --  0.0.0.0/0            0.0.0.0/0
​
Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination
​
Chain RH-Firewall-1-INPUT (2 references)
num  target     prot opt source               destination
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           icmp type 255
3    ACCEPT     esp  --  0.0.0.0/0            0.0.0.0/0
4    ACCEPT     ah   --  0.0.0.0/0            0.0.0.0/0
5    ACCEPT     udp  --  0.0.0.0/0            224.0.0.251         udp dpt:5353
6    ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           udp dpt:631
7    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:631
8    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
9    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
10   REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

以上输出包含下列字段:

  • num – 指定链中的规则编号

  • target – 前面提到的target的特殊值

  • prot – 协议:tcp, udp, icmp等

  • source – 数据包的源IP地址

  • destination – 数据包的目标IP地址

NAT规则实战举例:

需求

把本地的mysql 3306端口映射出去变成63306,外面连接的语句是

mysql -uroot -p'password' -h xxxxx -P 63306

注:当访问63306的时候,会自动去请求3306,然后返回数据。

实现

先允许数据包转发

echo 1 >/proc/sys/net/ipv4/ip_forward
sysctl -w net.ipv4.conf.eth0.route_localnet=1
sysctl -w net.ipv4.conf.default.route_localnet=1

nat规则

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 63306 -j DNAT --to-destination 127.0.0.1:3306
iptables -t nat -A POSTROUTING -p tcp -m tcp --dport 63306 -j SNAT --to-source 127.0.0.1

注:这是允许所有外来的IP访问,慎用。

我们来做个ip限制,限制单个来源IP

iptables -t nat -R PREROUTING 4 -s 192.168.40.154 -p tcp -m tcp --dport 63306 -j DNAT --to-destination 127.0.0.1:3306
iptables -t nat -R POSTROUTING 4 -s 192.168.40.154 -p tcp -m tcp --dport 63306 -j SNAT --to-source 127.0.0.1

注:这是只给外网的192.168.40.154连接, 其他的都连不上,

修改规则(4代表编号, --line-number可查看对应编号, -s 指定来源IP)。

查看nat规则

iptables -L -t nat --line-number

删除nat规则

iptables -t nat -D POSTROUTING 1
-A 追加规则-->iptables -A INPUT
-D 删除规则-->iptables -D INPUT 1(编号)
-R 修改规则-->iptables -R INPUT 1 -s 192.168.12.0 -j DROP 取代现行规则,顺序不变(1是位置)
-I 插入规则-->iptables -I INPUT 1 --dport 80 -j ACCEPT 插入一条规则,原本位置上的规则将会往后移动一个顺位
-L 查看规则-->iptables -L INPUT 列出规则链中的所有规则
-N 新的规则-->iptables -N allowed 定义新的规则

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值