在阿里云或ucloud上买了两台云主机,但只买了一个公网ip。公网ip只能绑定在一台主机上,但两台云主机的内网之间是通的,所以,可以通过有公网ip的云主机将另一台云主机的22端口转发出去
第一台做客户端,ip:10.0.3.64
第二台有两块网卡:ip1:10.0.80,ip2:192.168.1.137
第三台主机:ip:192.168.1.138
现在要通过10.0.3.80机器的2222端口连接到192.168.1.138机器
10.0.3.80机器
[root@ng1 ~]# iptables -t nat -F
[root@ng1 ~]# iptables -t nat -vnL
第二条
[root@ng1 ~]# iptables -t nat -A PREROUTING -p tcp --dport 2222 -j DNAT --to-destination 192.168.1.138:22
[root@ng1 ~]# iptables -t nat -A POSTROUTING -j MASQUERADE
可以看下面这个图:
-t nat 指定要修改的是nat表
-A PREROUTING 指定时nat表的PREROUTING链
-p tcp 指定协议为tcp,不想指定也没事,-p all就是指定所有协议
-dport 2222 指定目标端口为2222
-j DNAT 指定操作类型为DNAT
--to-destination 192.168.1.138:22 指定新的目标地址192.168.1.138:22
-j MASQUERADE 表示MASQUERADE会自动读取网卡现在的ip地址然后做SNAT出去
[root@client ~]# ssh 10.0.3.80 -p2222
[email protected]'s password:
Last login: Mon Feb 18 19:49:23 2019 from 192.168.1.137
[root@ng2 ~]# ip a
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:63:21:88 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.138/24 brd 192.168.1.255 scope global noprefixroute dynamic ens33
valid_lft 1411sec preferred_lft 1411sec
inet6 fe80::20c:29ff:fe63:2188/64 scope link
valid_lft forever preferred_lft forever
tcpdump -i ens33 src host 10.0.3.64 -n -vvv
第十八章:iptables防火墙应用
一、iptables防火墙基础;
二、iptables规则编写;
三、实战演练;
一、iptables防火墙基础;
1.概述:保护内部主机和内部网络的安全,通过过滤的方式对网络层的ip地址和端口进行处理;
2.了解防火墙:
硬件防火墙:ASA
软件防火墙:iptables(linux平台)、ISA(windows自带的)
3.iptables防火墙结构:
netfilter内核模块、iptables用户工具、firewall用户工具
4.iptables的表:按照不同功能来划分;
raw(状态跟踪)、mangle(标记)、nat(修改)、filter(过滤)
raw:主要是为了提高效率使用的,raw本身的含义是指“原生的”、“未经过加工 的”,符合raw表所对应规则的数据包将会跳过一些检查,这样就可以提高效率;
mangle:mangle表的规则可以对数据包进行修改,比如修改ttl值等;
nat:进行源地址或目标地址修改转换;
filter:通过过滤数据包的ip地址、mac地址、协议、端口,对数据包进行控制;
5.iptables规则链:根据不同时机来划分链,在链中存放规则;
INPUT(入站)、OUTPUT(出站)、FORWARD(转发)、PREROUTING(路由前)、POSTROUTING(路由后)
6.表中默认包含链:
raw:PREROUTING、OUTPUT
mangle:PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING
nat: PREROUTING、POSTROUTING、OUTPUT
filter:INPUT、FORWARD、OUTPUT
总结:表相当于内核空间的一个容器,在表容器中又包含不同的链,在链中包含不同的规则;
7.iptables匹配流程:(根据数据流的方向确定匹配顺序)
链:入站数据流向:PREROUTING、INPUT
出站数据流向:OUTPUT、POSTROUTING
转发数据流向:PREROUTING、FORWARD、POSTROUTING
表:raw--mangle--nat--filter
总结:链内规则匹配顺序:从上到下、匹配即停止、未匹配使用默认规则;
二、编写iptables规则:
语法:iptables -t 表名 选项 链名 条件 -j 动作
1.编写规则语法注意:
省略表名,默认表示filter表,省略链名,表示表内所有链;
除非设置默认规则,否则必须设置匹配的规则;
选项、链名、动作必须大写,其他小写;
2.动作:对匹配的条件进行处理;
ACCEPT:允许
DROP:丢弃
REJECT:拒绝
LOG:日志
3.选项:对链中的规则进行增删改查操作;
a.增加:-A链的末尾添加、-I 链的指定位置添加,需要指定序号(若不指定,默认作为第一条规则),例:-I INPUT 2
b.删除:-D 删除一条规则,-F清空链内所有规则,例:iptables -D 链名 2
c.查看:-L -n 查看规则,-L -n -v 查看更详细的信息,-L -n --line-number显示规则的序号(大写为选项,后边小写为子选项, 子选项需要跟在链名的后边)
d.设置默认规则:-P 链名 DROP或ACCEPT
4.匹配条件:
a.通用匹配条件:
-p 协议 ##常用的协议ICMP、TCP、UDP协议;
-s 源地址 ##控制源地址访问,网段书写格式:192.168.1.0/24
-d 目的地址 ##控制目的地址访问
-i 入站网卡名称 ##控制传输数据的入站网卡
-o 出站网卡名称 ##控制传输数据的出站网卡
注:编写规则时,需要判断主机数据的流向,如INPUT链只能用-i入站网卡;
b.隐含匹配条件:
端口:-p 协议 --dport 目的端口
-p 协议 -sport 源端口
c.显式匹配条件:
多端口:-m multiport -p tcp或udp --dports 端口号 ##指定多个端口,若连续端口11:22,若不连续端口11,22
mac地址:-m mac --mac-source MAC地址 ##MAC地址中间用:隔开,指定的mac地址为源地址
ip地址范围:-m iprange --src-range 192.168.1.1-192.168.1.10 ##指定的ip地址范围是源地址
数据包的状态:-m state --state NEW,ESTABLISHED,RELATED ##三个选项分别表示,新建,已经建立的连接,已经相关,例:默认规则为DROP并且无允许ssh22号端口,但是允许已经建立的连接,ssh不会断开,ss命令查看当前的连接;
三、实战演练:
[root@lwh ~]# /etc/init.d/iptables stop ##清空防火墙规则;
iptables:将链设置为政策 ACCEPT:filter [确定]
iptables:清除防火墙规则: [确定]
iptables:正在卸载模块: [确定]
[root@lwh ~]# iptables -A INPUT -i lo -j ACCEPT ##允许本地网卡所有访问
[root@lwh ~]# iptables -A INPUT -s 192.168.100.1-p tcp -m multiport --dports 80,443,20,21,22,25,45000:50000 -j ACCEPT ##设置开启的端口
[root@lwh ~]# iptables -A INPUT -m mac --mac-source 00:0C:29:D9:32:C9 -p icmp -j ACCEPT ##设置此mac地址可以ping访问本主机
[root@lwh ~]# iptables -A INPUT -m iprange --src-range 192.168.100.1-192.168.100.10 -d 192.168.100.150 -p icmp -j ACCEPT ##设置此ip地址范围可以访问ping此主机
[root@lwh ~]# iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT ##设置数据的状态,本机可以访问别的主机
[root@lwh ~]# iptables -P INPUT DROP ##设置INPUT入站链的默认规则为丢弃
[root@lwh ~]# iptables -P FORWARD DROP ##设置FORWARD转发链的默认规则为丢弃
[root@lwh ~]# /etc/init.d/iptables save ##保存防火墙配置到/etc/sysconfig/iptables文件中,每次开机都会加载这个文件中的防火墙规则
iptables:将防火墙规则保存到 /etc/sysconfig/iptables: [确定]
[root@lwh ~]# chkconfig iptables on ##设置开机启动防火墙
第十九章:iptables高级应用
一、SNAT源地址转换;
二、DNAT目的地址转换;
三、SNAT和DNAT实战案例;
一、SNAT源地址转换;
1.原理:在路由后链POSTROUTING将内网主机的ip地址转换成外网网卡的ip地址;
2.应用场景:共享内部主机上网,在网关主机上设置;
3.设置SNAT:
a.设置内外网网卡的网络参数;
b.开启路由转发功能;
sed -i '/ip_forward/s/0/1/g' /etc/sysctl.conf
sysctl -p
c.编写规则;
iptables -t nat -I POSTROUTING -o 外网网卡 -s 内网的网段/24 -j SNAT --to-source 外网网卡的ip地址 ##适用于 外网ip地址固定的环境
iptables -t nat -I POSTROUTING -o 外网网卡 -s 内网的网段/24 -j MASQUERADE ##适用于网关服务器外网网卡 地址不是固定的环境
d.做好安全控制:使用FORWARD时机进行控制,严格设置INPUT规则;
e.配置客户端网关;
二、DNAT目的地址转换;
1.原理:在路由前链PREROUTING将来自外网访问网关公网ip及对应端口的目的ip及端口修改为内部服务器的ip及端口,实现发布内网服务器;
2.应用场景:发布内网主机到公网
3.设置DNAT:网关主机上设置
a.设置ip地址,开启路由,设置SNAT,保证内部主机和内部服务器可以连接公网;
b.编写防火墙规则;
iptables -t nat -I PREROUTING -i 外网网卡名 -d 外网网卡的ip地址 -p tcp --dport 发布的端口 -j DNAT --to-destination 内网服务器ip地址 ##将内网服务器发布到网关主机的外网ip地址并对应其端口,后边的端口可以省略;
c.外网客户端访问网关外网ip地址进行测试;
三、SNAT和DNAT的实战案例:
1.需求:共享公网ip上网,发布ftp和httpd服务,控制网关安全;
2.配置过程:
a.配置好ip地址等参数后,开启路由转发功能;
b.编写规则:
编写SNAT和DNAT规则:
[root@lwh ~]# /etc/init.d/iptables stop
[root@lwh ~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o eth1 -j MASQUERADE
[root@lwh ~]# iptables -t nat -A PREROUTING -d 192.168.50.101 -i eth1 -p tcp -m multiport --dports 21,20,40000:45000,80,443 -j DNAT --to-destination 192.168.100.153
编辑网关安全控制规则:
[root@lwh ~]# iptables -A INPUT -i lo -j ACCEPT ##允许本地网卡访问
[root@lwh ~]# iptables -A INPUT -s 192.168.100.0/24 -i eth0 -p icmp -j ACCEPT ##允许内网ping
[root@lwh ~]# iptables -A INPUT -s 192.168.100.250 -p tcp --dport 22 -j ACCEPT ##允许主机100.250远程登陆主机
[root@lwh ~]# iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT ##允许放行主机已经建立的连接
[root@lwh ~]# iptables -A FORWARD -s 192.168.100.0/24 -j ACCEPT ##转发源地址为内网地址的流量
[root@lwh ~]# iptables -A FORWARD -d 192.168.100.0/24 -j ACCEPT ##转发目的地址为内网地址的流量
[root@lwh ~]# iptables -P INPUT DROP
[root@lwh ~]# iptables -P FORWARD DROP
d.保存规则:
[root@lwh ~]# /etc/init.d/iptables save
[root@lwh ~]# chkconfig iptables on
[root@lwh ~]# iptables-save >/root/1.txt ##将iptables规则导入到某文件中
[root@lwh ~]# iptables-restore