思考:
什么是交换,什么是路由,什么是路由表?
交换是指同网络访问(两台机器连在同一个交换机上,配置同网段的不同ip就可以直接通迅) 路由就是跨网络访问(路径选择) 路由表是记录路由信息的表,在Linux中⾸先是⼀张可见的,可更改的表,它的作⽤就是当数据包发到Linux的时候 ,系统(或者说内核)就根据这张表中定义好的信息来决定这个数据包接下来该怎么⾛.
x//route命令用来查看和设置路由表信息
[root@server ~]# route -n //查看路由表信息
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
10.1.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 10.1.1.254 0.0.0.0 UG 0 0 0 eth0
目标网络 网关 子网掩码 路由标志 网卡
Up:启动状态
UG:该网关为路由器
xxxxxxxxxx
讨论1:
按上面的路由表来看,如果我ping一个公网IP(如ping 14.200.151.38),应该怎么走?
1) 先看目标ip是否为本地ip,如果是,则直接访问本地;如果不是,则找路由表里是否有你访问的网段.
2) 如果路由表有则从这个路由条目后面指定的网卡出去;如果路由表里没有你访问的网段,则会找默认路由
(也就是网关)。
3) 如果网关也没有的话,则会报错网络不可达。
讨论2:
按上面的路由表来看,如果我ping一个局域网IP为10.1.1.10,会怎么走?
ping 10.1.1.10不会走网关,而是走本地路由从eth0网卡出去(因为路由表里有10.1.1.0/24的路由)。
讨论3:
如何加网关和删除网关,加网关有什么要求?
route add default gw x.x.x.x 临时加网关,马上生效
route del default gw x.x.x.x 临时删网关,马上生效
永久增加网关:
vim /etc/sysconfig/network-scripts/ifcfg-eth0
GATEWAY=x.x.x.x
或者
vim /etc/rc.local
..
route add default gw xxxxx
注意事项:
1. 加网关只能加你已经有的路由网段里的一个IP才行(此IP不一定存在)
2. 加网关可以不用指定子网掩码(因为是已有的一个网段的ip,所以掩码已经确认了)
讨论4:
一个linux服务器上能有几个有效网关?
准确来说:一个路由表上可以加多个网关,但只有一个生效。
讨论5:
我一台linux上如果有双物理网卡,请问可不可以两个网卡配置同网段的不同IP呢?
eth0 10.1.1.1/24
eth1 10.1.1.2/24
如果两个网卡同网段,则会有下面两条路由
10.1.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
10.1.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
结果:
它会实现从两张网卡进来的包,却从一张网卡出去,问题就产生了。假设eth0网卡有问题时,路由表里匹配到第一条后,依然会走eth0网卡,而不会走eth1。
也有解决方法(比如多路由表或者双网卡绑定),这里不涉及。
xxxxxxxxxx
route -n 查看路由,显示ip,不解析
route del default gw 10.1.1.254 删除默认路由
route add default gw 192.168.1.110 添加一个默认网关,把所有不知道的网络交给网关来转发
rouate add -net 192.168.2.0/24 dev eth0 对一个网络添加一个新的路由(另一个网段)
route add -host 192.168.3.1 gw 192.168.1.110 对一个具体的ip添加路由
xxxxxxxxxx
环境准备:
node1:10.1.1.1和192.168.0.1 作为网关服务器,开启路由转发功能/proc/sys/net/ipv4/ip_forward
node2:172.16.0.254
node3:10.12.0.254
要求:
实现不同网络(10.12.0.0/24和172.16.0.254/24)之间的互通,使用第三方主机node1作为路由进行转发
xxxxxxxxxx
1. node2上配置172.16.0.254的静态IP地址
略
2. node3上配置10.12.0.254的静态IP地址
略
3. 在node1上开启路由转发的功能
1) 添加路由信息,分别到达node2和node3的网络
[root@node1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.1.1.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0
0.0.0.0 10.1.1.254 0.0.0.0 UG 0 0 0 eth0
[root@node1 ~]# route add -net 172.16.0.0/24 dev eth0
[root@node1 ~]# route add -net 10.12.0.0/24 dev eth0
[root@node1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
172.16.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
10.12.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
10.1.1.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0
0.0.0.0 10.1.1.254 0.0.0.0 UG 0 0 0 eth0
2) 开启路由转发的功能
临时开启:
[root@node1 ~]# cat /proc/sys/net/ipv4/ip_forward
0
[root@node1 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@node1 ~]# cat /proc/sys/net/ipv4/ip_forward
1
永久开启:
[root@node1 ~]# vim /etc/sysctl.conf
# Controls IP packet forwarding
net.ipv4.ip_forward = 0
重启系统或者执行以下命令让其生效:
[root@node1 ~]# sysctl -p
4. 在node2和node3上分别增加node1的IP作为默认网关
[root@node2 Desktop]# route add -net 10.1.1.0/24 dev eth1
[root@node2 Desktop]# route add default gw 10.1.1.1
[root@node2 Desktop]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
172.16.0.0 0.0.0.0 255.255.255.0 U 1 0 0 eth1
10.1.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
0.0.0.0 10.1.1.1 0.0.0.0 UG 0 0 0 eth1
[root@node3 ~]# route add -net 10.1.1.0/24 dev eth0
[root@node3 ~]# route add default gw 10.1.1.1
[root@node3 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.12.0.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0
10.1.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 10.1.1.1 0.0.0.0 UG 0 0 0 eth0
5. 测试验证
[root@node2 Desktop]# ping 10.12.0.254
PING 10.12.0.254 (10.12.0.254) 56(84) bytes of data.
From 10.1.1.1: icmp_seq=1 Redirect Host(New nexthop: 10.12.0.254)
64 bytes from 10.12.0.254: icmp_seq=1 ttl=63 time=0.448 ms
From 10.1.1.1: icmp_seq=2 Redirect Host(New nexthop: 10.12.0.254)
64 bytes from 10.12.0.254: icmp_seq=2 ttl=63 time=0.341 ms
64 bytes from 10.12.0.254: icmp_seq=3 ttl=64 time=0.478 ms
[root@node3 ~]# ping 172.16.0.254
PING 172.16.0.254 (172.16.0.254) 56(84) bytes of data.
From 10.1.1.1: icmp_seq=1 Redirect Host(New nexthop: 172.16.0.254)
64 bytes from 172.16.0.254: icmp_seq=1 ttl=64 time=0.341 ms
64 bytes from 172.16.0.254: icmp_seq=2 ttl=64 time=0.205 ms
64 bytes from 172.16.0.254: icmp_seq=3 ttl=64 time=0.230 ms
注意:
node2和node3的网关必须指向node1的ip而不是网关。
课堂练习:
node2:192.168.0.254(路由转发功能,并且是node1和node3的默认网关)
node1:10.1.1.1
node3:172.10.0.1
需求:实现node1和node3之间网络互通
思考:服务如何进行网络访问控制?
防火墙分类和作用
作用:
xxxxxxxxxx
防火墙作为内部网与外部网之间的一种访问控制设备, 常常安装在内部网络和外部网络的边际上。防火墙具有很好的网络安全保护作用。入侵者必须首先穿越防火墙的安全防线,才能接触目标计算机。你可以将防火墙配置成许多不同保护级别。高级别的保护可能会禁止一些服务,如视频流等,但至少这是你自己的保护选择。
主要作用:
1、Internet防火墙可以防止Internet上的危险传播到网络内部;
2、能强化安全策略;
3、能有效记录Internet上的活动;
总结:
四张表
五条链
总结:
xxxxxxxxxx
防火墙是表的集合,表示链的集合,链是规则的集合,规则是作用在链上。
思考:B主机一直尝试登录A主机的ssh服务,怎么拒绝?
iptables(推荐)
iptables [-t 表名] 命令选项 [链名] [规则号码] [条件匹配] [-j 目标动作]
xxxxxxxxxx
小写 大写 大写 小写 大写
说明: 表名和链名:用于指定 iptables命令所操作的表和链; 命令选项:用于指定管理iptables规则的方式(比如:插入、增加、删除、查看等); 规则号吗:用于指定规则的编号; 条件匹配:用于指定对符合什么样条件的数据包进行处理(比如:什么协议、出入网卡等); 目标动作:用于指定数据包的处理方式(比如:允许通过、拒绝、丢弃等)
xxxxxxxxxx
示例:
iptables -L
iptables -t filter -L
iptables -t nat -L
iptables -t raw -L
iptables -t mangle -L
xxxxxxxxxx
//临时停止|启动|查看状态|重新加载|重新启动
service iptables stop|start|status|reload|restart
//开机是否自启动
chkconfig iptables off|on
//永久保存规则
vim /etc/sysconfig/iptables
...
//命令自动保存
service iptables save
增加规则
xxxxxxxxxx
常见的命令选项:
-L 查看
-A 追加,放置最后一条
-I 插入,默认插入成第一条
-D 删除
-F 清空flush
-P 设置默认策略policy
-R 覆盖已有策略
处理动作:
filter表:
-j ACCEPT 允许
-j DROP 丢弃,没有任何提示信息
-j REJECT 拒绝,有提示信息
-j LOG 写日志 /var/log/messages 然后将数据包传递给下一条规则
nat表:
-j SNAT 源地址转换 POSTROUTING
-j DNAT 目标地址转换 PREROUTING
xxxxxxxxxx
iptables -t filter -A INPUT -j DROP 添加规则,丢弃所有进来的数据包
iptables -t filter -A INPUT -j ACCEPT 添加规则,允许所有进来的数据包
//指定位置插入规则,允许所有进来的数据包第1条规则
iptables -t filter -I INPUT 1 -j ACCEPT
iptables -t filter -A OUTPUT -j DROP 添加规则,丢弃所有出去的数据包
//指定位置插入规则,拒绝所有进来的数据包为第3条规则
iptables -t filter -I INPUT 3 -j REJECT
iptables -t filter -L --line-numbers 查看规则编号
iptables -t filter -R INPUT 1 -j ACCEPT 覆盖已有规则
iptables -t filter -D INPUT 3 删除INPUT链的第3条规则
iptables -t filter -F 清空filter表的所有规则
iptables -A INPUT -j LOG 增加规则,先写日志,然后将数据包传递给下一条规则
iptables -I INPUT 2 -j DROP
iptables -t filter -P INPUT DROP 设置链上的默认规则
iptables -D INPUT 1
说明:如果不指定表名,默认操作filter表
课堂练习1:
xxxxxxxxxx
匹配的条件:
-s 192.168.134.0/24 源地址
-d 192.168.134.1 目标地址
-p tcp|udp|icmp 协议
-i lo input 从lo接口进入的数据包
-o eth0 output 从eth0出去的数据包
-p tcp --dport 80 目标端口是80,必须和-p tcp|udp 连用
-p udp --dport 53 目标端口是53/udp
思考:什么是源地址和目标地址?
xxxxxxxxxx
iptables -t filter -A INPUT -s 10.1.1.3 -j ACCEPT 允许源地址为10.1.1.3进入
iptables -t filter -A INPUT ! -s 10.1.1.3 -j ACCEPT 不允许源地址为10.1.1.3进入
iptables -t filter -A INPUT -s 10.1.1.3 -j DROP 拒绝源地址为10.1.1.3进入
iptables -t filter -A OUTPUT -d 10.1.1.3 -j DROP 丢弃到达目标地址为10.1.1.3的包
iptables -t filter -A OUTPUT ! -d 10.1.1.3 -j ACCEPT 丢弃到达目标地址为10.1.1.3的包
iptables -t filter -A INPUT -d 10.1.1.2 -j DROP 丢弃所有到目标地址10.1.1.2的包
iptables -t filter -A OUTPUT -s 10.1.1.2 -j ACCEPT 源地址为10.1.1.2出去的包全部允许
课堂练习2:
禁止你的另外一台服务器访问你(INPUT和OUTPUT)
1002 iptables -t filter -I INPUT -s 10.1.1.2 -j DROP
1004 iptables -t filter -I INPUT -d 10.1.1.1 -j REJECT //拒绝了所有
1008 iptables -t filter -I OUTPUT -d 10.1.1.2 -j DROP
1011 iptables -t filter -I OUTPUT -s 10.1.1.1 -j REJECT //拒绝了所有
//以下规则拒绝了所有人的访问
[root@server ~]# iptables -t filter -A INPUT -d 10.1.1.1 -j DROP
[root@server ~]# iptables -t filter -A OUTPUT -s 10.1.1.1 -j DROP
xxxxxxxxxx
iptableS -A INPUT -s 10.1.1.3 -p icmp -j DROP
iptables -A INPUT -s 10.1.1.3 -p tcp -j DROP
iptables -A INPUT -s 10.1.1.3 ! -p tcp -j DROP
icmp协议中:
icmp-type 8 类型为8代表请求回显,ping请求
icmp-type 0 类型为0代表回显应答,ping应答
需求1:INPUT和OUTPUT默认都是DROP
只允许自己ping通别人,不允许别人ping通自己
iptables -t filter -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT
iptables -t filter -A INPUT -p icmp --icmp-type 0 -j ACCEPT
需求2:INPUT和OUTPUT默认都是DROP
只允许自己和10.1.1.2相互ping通,其他人不能ping通自己,但是允许自己ping通别人
# iptables -t filter -I OUTPUT -p icmp --icmp-type 8 -j ACCEPT
# iptables -t filter -I INPUT -p icmp --icmp-type 0 -j ACCEP
# iptables -t filter -I INPUT -p icmp --icmp-type 8 -s 10.1.1.2 -j ACCEPT
# iptables -t filter -I OUTPUT -p icmp --icmp-type 0 -d 10.1.1.2 -j ACCEPT
xxxxxxxxxx
iptables -A INPUT -s 10.1.1.2 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -s 10.1.1.2 -p tcp --dport 20:21 -j ACCEPT
iptables -A INPUT -s 10.1.1.2 -p tcp --dport 22 -j ACCEPT
课堂练习3:
INPUT 默认策略:ACCEPT
OUTPUT 默认:ACCEPT
1. 禁止你的另外一台服务器访问你的80端口,在INPUT和OUTPUT
[root@node1 Desktop]# iptables -t filter -I INPUT -p tcp --dport 80 -s 10.1.1.2 -j DROP
[root@node1 Desktop]# iptables -t filter -I OUTPUT -p tcp --sport 80 -d 10.1.1.2 -j DROP
2. 只允许别人访问你的80端口
方法1:
[root@node1 Desktop]# iptables -t filter -I INPUT -p tcp --dport 20:22 -j DROP
[root@node1 Desktop]# iptables -t filter -I INPUT -p tcp --dport 139 -j DROP
[root@node1 Desktop]# iptables -t filter -I INPUT -p tcp --dport 445 -j DROP
放法2:
[root@node1 Desktop]# iptables -t filter -I INPUT -p tcp -j DROP
[root@node1 Desktop]# iptables -t filter -I INPUT -p udp -j DROP
[root@node1 Desktop]# iptables -t filter -I INPUT -p tcp --dport 80 -j ACCEPT
以上也可以再OUTPUT完成
3. 拒绝所有人登录你的sshd服务
[root@node1 Desktop]# iptables -t filter -I INPUT -p tcp --dport 22 -j DROP
[root@node1 Desktop]# iptables -t filter -I OUTPUT -p tcp --sport 22 -j DROP
4. 只允许你可以ping通另外一台主机,但是不允许它ping通你
INPUT 默认策略:DROP
OUTPUT 默认:DROP
ICMP --icmp-type 8 ping请求 --icmp-type 0 ping回显
[root@node1 Desktop]# iptables -t filter -I OUTPUT -p icmp --icmp-type 8 -j ACCEPT
[root@node1 Desktop]# iptables -t filter -I INPUT -p icmp --icmp-type 0 -j ACCEPT
xxxxxxxxxx
-m 参数+ <模块名>
1. multiport 多端口 目的:指定多个不连续的端口,减少iptables的条目,达到优化效果
用法:
iptables -m multiport --help
-m multiport
--dports port[,port:port,port...]
--sports port[,port:port,port...]
示例1:
iptables -t filter -A INPUT -s 10.1.1.2 -p tcp --dport 22 -j ACCEPT
iptables -t filter -A INPUT -s 10.1.1.2 -p tcp --dport 80 -j ACCEPT
等于
iptables -t filter -I INPUT -s 10.1.1.2 -p tcp -m multiport --dports 22,80 -j ACCEPT
示例2:
[root@node1 Desktop]# iptables -t filter -I INPUT -p tcp --dport 22 -j ACCEPT
[root@node1 Desktop]# iptables -t filter -I INPUT -p tcp --dport 139 -j ACCEPT
[root@node1 Desktop]# iptables -t filter -I INPUT -p tcp --dport 445 -j ACCEPT
等于:
[root@node1 Desktop]# iptables -t filter -I INPUT -p tcp -m multiport --dports 22,139,445 -j ACCEPT
2. iprange ip范围
用法:
iptable -m iprange --help
-m iprange
--src-range ip[-ip]
--dst-range ip[-ip]
iprange match options:
[!] --src-range ip[-ip] Match source IP in the specified range
[!] --dst-range ip[-ip] Match destination IP in the specified range
示例1:
iptable -t filter -A INPUT -m iprange --src-range 10.1.1.2-10.1.1.5 -j DROP
示例2:
# iptables -t filter -I INPUT -p tcp -m multiport --dports 22,139,445 -m iprange --src-range 10.1.1.10-10.1.1.254 -j ACCEPT
3. state 连接状态 目的:根据连接请求的状态进行数据过滤
状态值:
NEW: 首次访问,比如:打开网站看到首页文件,后续点击叫后续操作
ESTABLISHED: 连接完成 1)某服务的后续所有访问 2)服务器的所有响应
RELATED: 相关联的连接,比如ftp连接,命令连接成功后,建立数据连接
INVALID: 无效链接
示例:
iptables -A OUTPUT -p tcp -m multiport --sports 20:22,80,137,445 -j ACCEPT
等于
iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
xxxxxxxxxx
环境:
server:10.1.1.1 部署了FTP服务,httpd服务,samba服务,ssh服务
client1:10.1.1.2
client2:10.1.1.3
要求:
1. server端根据权限最小化原则,INPUT的默认规则改为DROP
2. client2可以访问server端的所有服务
3. client1只能访问server端的ftp服务和ssh服务
4. IP地址为10.1.1.100到10.1.1.200之间的人只能访问server端的samba服务
具体步骤:
xxxxxxxxxx
首先,server端部署相关服务并启动
//查看相应的软件包是否成功安装,没安装请安装它
[root@server ~]# rpm -q vsftpd httpd samba openssh-server
vsftpd-2.2.2-11.el6_4.1.x86_64
httpd-2.2.15-29.el6.centos.x86_64
samba-3.6.9-164.el6.x86_64
openssh-server-5.3p1-94.el6.x86_64
//启动相应的服务
[root@server ~]# service vsftpd start
[root@server ~]# service httpd restart
[root@server ~]# service nmb start
[root@server ~]# service smb start
[root@server ~]# service sshd restart
//检查端口是否处于监听状态
[root@server ~]# netstat -anltp|grep vsftpd tcp/21号端口
[root@server ~]# netstat -anltp|grep httpd tcp/80号端口
[root@server ~]# netstat -anltp|grep smb tcp/139,445号端口
[root@server ~]# netstat -anltp|grep sshd tcp/22号端口
1. server端根据权限最小化原则,INPUT链的默认规则改为DROP
[root@server ~]# iptables -F
[root@server ~]# iptables -L
[root@server ~]# iptables -P INPUT DROP
[root@server ~]# iptables -L
Chain INPUT (policy DROP) //默认拒绝
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
2. client2可以访问server端的所有服务
[root@server ~]# iptables -A INPUT -s 10.1.1.3 -d 10.1.1.1 -m multiport -p tcp --dports 20:22,80,139,445 -j ACCEPT
//ftp服务比较麻烦,需要固定被动模式下的端口
vim /etc/vsftpd/vsftpd.conf
增加如下内容:
pasv_min_port=2000
pasv_max_port=3000
[root@server ~]# iptables -A INPUT -d 10.1.1.1 -s 10.1.1.3 -p tcp --sport 2000:3000 -j ACCEPT
3. client1只能访问server端的ftp服务和ssh服务
//client1访问server端的ssh服务,server端规则如下:
[root@server ~]# iptables -A INPUT -s 10.1.1.2 -d 10.1.1.1 -p tcp --dport 22 -j ACCEPT
注意:此时server如果不能远程访问client1主机,解决方案如下:
则需要再添加如下规则:
[root@server ~]# iptables -A INPUT -s 10.1.1.2 -d 10.1.1.1 -m state --state ESTABLISHED -j ACCEPT
//client1访问server端ftp服务,server端规则如下:
[root@server ~]# iptables -A INPUT -s 10.1.1.2 -d 10.1.1.1 -m multiport -p tcp --dports 20:21,2000:3000 -j ACCEPT
4. IP地址为10.1.1.100到10.1.1.200之间的人只能访问server端的samba服务
iptables -A INPUT -m iprange --src-range 10.1.1.100-10.1.1.200 -p tcp -m multiport --dports 139,445 -j ACCEPT
扩展:
FTP服务除了在server端指定被动模式下的随机端口号的范围外,还有没有其他方法实现?
xxxxxxxxxx
方法一: 为vsftpd指定数据端口
# iptables -I INPUT -p tcp --dport 20:21 -j ACCEPT
# vim /etc/vsftpd/vsftpd.conf
pasv_min_port=50000
pasv_max_port=60000
# iptables -I INPUT -p tcp --dport 50000:60000 -j ACCEPT
方法二: 使用连接追踪模块(扩展)
[root@hou ~]# iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@hou ~]# iptables -I INPUT -p tcp --dport 20:21 -j ACCEPT
[root@hou ~]# modprobe nf_conntrack_ftp //加载连接追踪模块(临时)
[root@hou ~]# vim /etc/sysconfig/iptables-config //开机自动加载
IPTABLES_MODULES="nf_conntrack_ftp"
nf_conntrack_ftp: 针对数据端口连接时,将三次握手第一次的状态由NEW识别成RELATED
注意:修改完配置文件需要重启防火墙
说明:
以下策略ftp服务也可以正常访问:
[root@server ~]# iptables -nL
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state NEW,RELATED,ESTABLISHED
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state ESTABLISHED
xxxxxxxxxx
[root@server ~]# vim /etc/sysconfig/iptables-config
。。。
IPTABLES_MODULES="nf_conntrack_ftp"
重启防火墙
[root@server ~]# iptables -F
[root@server ~]# iptables -nL
Chain INPUT (policy DROP)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy DROP)
target prot opt source destination
[root@server ~]# iptables -t filter -A INPUT -p tcp --dport 20:21 -j ACCEPT
[root@server ~]# iptables -t filter -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
[root@server ~]# iptables -nL
结果只能访问,但是不能查看数据
[root@server ~]# iptables -t filter -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
xxxxxxxxxx
常见协议的端口 /etc/services
[root@hou ~]# grep ^http /etc/services
服务 协议 端口/传输协议
sshd ssh 22/tcp
httpd http 80/tcp
https 443/tcp
dns domain 53/udp,53/tcp
mail smtp 25/tcp
smtps 465/tcp
pop3 110/tcp
pop3s 995/tcp
imap 143/tcp
imaps 993/tcp
dhcp bootps 67/udp
nfs nfs 2049/tcp
samba 137,138,139/tcp
445/tcp
ftp ftp 21/tcp
ftp-data 20/tcp
tftp tftp 69/udp
ntp ntp 123/udp
syslog syslog 514/udp
xxxxxxxxxx
功能:地址转换 (源地址和目标地址)
三条链:
PREROUTING
POSTROUTING
OUTPUT
处理动作
nat表:
-j SNAT 源地址转换 POSTROUTING
-j DNAT 目标地址转换 PREROUTING
-j MASQUERADE 地址伪装
xxxxxxxxxx
环境:
client:10.1.1.2
nat-server:10.1.1.1 和 2.2.2.1
web-server:2.2.2.2
需求:
客户端client是私有IP,想要访问互联网中的web服务
步骤:
1. client端:设置自己的默认路由(网关)指向nat-server服务器
[root@client ~]# route add default gw 10.1.1.1
[root@client ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.1.1.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0
0.0.0.0 10.1.1.1 0.0.0.0 UG 0 0 0 eth0
2. nat-server端:开启路由转发功能并添加防火墙规则
[root@nat-server ~]# cat /proc/sys/net/ipv4/ip_forward
0
[root@nat-server ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@nat-server ~]# iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -j SNAT --to 2.2.2.1
3. web-server端:搭建web服务
[root@web-server ~]# echo "this is snat test page" > /var/www/html/index.html
[root@web-server ~]# service httpd restart
[root@web-server ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
2.2.2.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0
4. client端测试验证:client端10.1.1.2是否可以访问web-server端2.2.2.2的web服务
[root@client ~]# elinks --dump http://2.2.2.2
this is snat test page
思考1:家里实现上网和上面有什么不同?
[root@nat-server ~]# iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -j MASQUERADE
思考2:地址转换是在NAT表上进行,如果我在nat-server上的filter的FORWARD链拒绝转发,是否可以正常访问?
总结:
xxxxxxxxxx
环境:
web-server:10.1.1.3
nat-server:10.1.1.1 和 2.2.2.1
client:2.2.2.2
需求:公网用户client访问私网服务器提供的WEB服务
步骤:
1. web-server端:10.1.1.3上搭建web服务
2. nat-server端:10.1.1.1、2.2.2.1端开启路由转发功能并添加DNAT规则
[root@nat-server ~]# iptables -t nat -A PREROUTING -d 2.2.2.1 -p tcp --dport 80 -j DNAT --to 10.1.1.3
3. client端:2.2.2.2客户端测试验证
[root@client ~]# elinks --dump http://2.2.2.1
this is dnat test page