Fork me on GitHub
Maxie's Notes

iptables进阶

在这章我们会介绍iptables中如何配置NAT(Network Address Translation),
也就是网络地址转换的功能。

在iptables中,定义NAT时,需要在自带的五表之中的nat表中定义:

1
2
3
SNAT 源地址转换 --> POSTROUTING链
DNAT 目标地址转换 --> PREROUTING链
PAT 端口转换 --> 端口映射

SNAT

SNAT:Source NAT;请求来自内网,隐藏客户端IP地址

1
-j SNAT --to-source [ipaddr[-ipaddr]]

SNAT实例

实验拓扑图:

NAT IP: 172.16.1.70 ; 192.168.1.254
Client IP: 172.16.1.100
http IP: 192.168.1.10

实验目标:

1
2
1、实现三台机器之间互通,开启NAT服务器的核心转发功能
2、通过iptables的SNAT的功能,对http服务器隐藏客户端的IP地址
开启核心转发功能

在NAT服务器上进行操作:

1
2
3
$ sysctl -w net.ipv4.ip_forward=1
$ cat /proc/sys/net/ipv4/ip_forward/
1

在外网客户端上进行操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.16.0.1 0.0.0.0 UG 0 0 0 eth0
172.16.0.0 0.0.0.0 255.255.0.0 U 100 0 0 eth0
$ route del -net 0.0.0.0
$ route add defalut gw 172.16.1.70
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.16.1.70 0.0.0.0 UG 0 0 0 eth0
172.16.0.0 0.0.0.0 255.255.0.0 U 100 0 0 eth0

在http服务器上的操作:

配置好网关为NAT服务器的内网网卡地址

1
2
3
4
5
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.254 0.0.0.0 UG 100 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
配置SNAT

在NAT服务器上进行操作:

1
2
3
$ iptables -t nat -F
$ iptables -F
$ iptables -t nat -A POSTROUTING -s 172.16.0.0/16 -p tcp --dport 80 -j SNAT --to-source 192.168.1.254
测试SNAT

在外网客户端上进行操作:

1
2
3
4
$ curl http://192.168.1.10
<h1> hello world</h1>
<font size=4 color="#3299CC" > IP: 192.168.1.10 HTTP </font>

在http服务器上查看http访问日志:

1
2
$ cat /var/log/httpd/access_log
192.168.1.254 - - [10/Jun/2017:13:33:54 +0800] "GET / HTTP/1.1" 200 84 "-" "curl/7.29.0"

DNAT

DNAT:Destination NAT;请求来自外网,隐藏服务器

1
-j DNAT --to-destination [ipaddr[-ipaddr]][:port[-port]]

DNAT实例

实验拓扑图:

NAT IP: 172.16.1.70 ; 192.168.1.254
Client IP: 172.16.1.100
http IP: 192.168.1.10

实验目标:

1
2
1、实现三台机器之间互通,开启NAT服务器的核心转发功能
2、通过iptables的DNAT的功能,对客户端隐藏http服务器的IP地址
配置DNAT

在NAT服务器上进行操作:

1
2
3
$ iptables -t nat -F
$ iptables -F
$ iptables -t nat -A PREROUTING -d 172.16.1.70 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10
测试DNAT

在外网客户端上进行操作:

1
2
3
4
$ curl http://172.16.1.70
<h1> hello world</h1>
<font size=4 color="#3299CC" > IP: 192.168.1.10 HTTP </font>

在http服务器上查看http访问日志:

1
2
3
$ cat /var/log/httpd/access_log
192.168.1.254 - - [10/Jun/2017:13:33:54 +0800] "GET / HTTP/1.1" 200 84 "-" "curl/7.29.0"
172.16.1.100 - - [10/Jun/2017:13:40:24 +0800] "GET / HTTP/1.1" 200 84 "-" "curl/7.29.0"

iptables NAT转换实操视频

哔哩哔哩视频源:


iptables放行ftp服务并使远程可以正常访问

哔哩哔哩视频源:


创建iptables配置文件开机自动导入的Unit File文件

1、先复制一份别的程序的Unit File:

1
$ cp /usr/lib/systemd/system/httpd.service /usr/lib/systemd/system/iptables.service

2、编辑复制好的配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
$ vim /usr/lib/systemd/system/iptables.service
[Unit]
Description=iptables rules constructor #描述
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=notify
ExecStart=/usr/sbin/iptables-restore /root/iptables-rules/rules1 #启动时执行
ExecReload=/usr/sbin/iptables-restore /root/iptables-rules/rules1 #重载时执行
ExecStop=/usr/sbin/iptables -F #停止时执行
[Install]
WantedBy=multi-user.target #多用户模式下运行

3、装载配置文件

1
$ systemctl daemon-reload

4、启动自定义配置

1
2
$ systemctl enable iptables
$ systemctl start iptables

呃。。。这篇博客可能写的有点不太完善,有点草草应付了事的样子,最近为了学习Nginx,练习iptables,实在是无暇完善博客内容了。该做的都录屏了,以后再完善吧

本文出自Maxie’s Notes博客,转载请务必保留此出处。

-------------本文结束感谢您的阅读-------------

本文标题:iptables进阶

文章作者:阿蓝

发布时间:2017年06月10日 - 14:06

最后更新:2017年06月11日 - 20:06

原始链接:http://maxiecloud.com/2017/06/10/iptables-advanced/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。