目录html
什么是交换?什么是路由?什么是路由表?node
交换是指同网络访问(两台机器连在同一个交换机上,配置同网段的不一样IP地址就能够直接通信)web
路由就是跨网络访问(路径选择)shell
路由表是记录路由信息的表vim
//route命令用来查看和设置路由表信息 [root@ceshi ~]# route -n Kernel IP routing table 目标网络 网关 子网掩码 路由标志 网卡 Destination Gateway Genmask Flags Metric Ref Use Iface 169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0 10.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 eth0 0.0.0.0 10.1.1.1 0.0.0.0 UG 0 0 0 eth0 U:up,启动状态 UG:该网关为路由器
讨论1: 按上图中的路由表来看,若是ping一个公网IP(如ping 14.200.151.38),应该怎么走? 1)先看目标IP是否为本机IP,若是是,则直接访问本地;若是不是,则找路由表里是否有想访问的网段 2)若是路由表有则从这个路由条目后面指定的网卡出去;若是路由表里没有你要访问的网段,则会找默认路由(也就是网关) 讨论2: 按上面的路由表来看,若是ping一个局域网IP为10.1.1.10,怎么走? 直接走本地路由从eth0网卡出去 讨论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 x.x.x.x 注意事项: 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 eth0 10.1.1.0 eth1 结果: 它会实现从两张网卡进来的包,却从一张网卡出去,问题将产生了。假设eth0网卡有问题,路由表咯匹配到第一条后,依然走eth0,不走eth1 解决方法(好比多路由表或者双网卡绑定)
route -n 查看路由,显示IP,不解析 route del default 删除默认路由 route add default gw 192.168.1.110 添加一个默认网关,把全部不知道的网络交给网关来转发 route add -net 192.168.2.0/24 dev eth0 对一个网络添加一个新的路由(另外一个网段) route add -host 192.168.3.1 gw 192.168.1.110 对一个具体的IP添加路由
环境准备: 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做为路由进行转发 具体步骤
思考1:服务如何进行网络访问控制?安全
配置文件、xinetd、tcp_wrappers服务器
思考2:系统如何进行访问控制?网络
防火墙app
做用:ssh
防火墙做为内部网和外部网之间的一种访问控制设备,经常安装在内部网络和外部网络的边界上。防火墙具备很好的网络安全保护做用,入侵者必须首先穿过防火墙的安全防线,才能接触目标计算机。能够将防火墙配置成许多不一样保护级别。高级别的保护可能会禁止一些服务,如视频流等,但至少这是你本身的保护选择。 主要做用: 一、Internet防火墙能够防止Internet上的危险传播到网络内部 二、能强化安全策略 三、能有效记录Internet上的活动
总结:
四张表
[root@ceshi ~]# iptables -t filter -L
五条链
[root@ceshi ~]# iptables -t mangle -L Chain PREROUTING (policy ACCEPT) target prot opt source destination Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination
总结:iptables是由表组成的,表是链的集合,链是规则的集合
iptables [-t 表名] 命令选项 [链名] [规则号码] [条件匹配] [-j 目标动做]
小写 大写 大写 小写 大写
说明:
表名和链名:用于指定iptables命令所操做的表和链
命令选项:用于指定管理iptables规则的方式(好比:插入、增长、删除、查看等)
规则号码:用于指定规则的编号
条件匹配:用于指定对符合什么样条件的数据包进行处理(好比:什么协议、出入网卡等)
目标地址:用于指定数据包的处理方式(好比:容许处理、拒绝、丢弃等)
iptables -L iptables -t filter -L iptables -t nat -L iptables -t raw -L iptables -t mangle -L
iptables 的启动和关闭及保存
/etc/rc.d/init.d/iptables //脚本文件 软链接 /etc/init.d/iptables //临时中止|启动|查看状态|从新加载|从新启动 service iptables stop|start|status|reload|restart //开机是否自启动 chkconfig iptables off|on //永久保存规则 vim /etc/sysconfig/iptables ...
iptables 经常使用的命令选项
-L 查看 -A 追加,放置在最后一条 -I 插入,默认插入成第一条 -D 删除 -F 清空flush -P 设置默认策略policy 处理动做: filter表: -j ACCEPT 容许 -j DROP 丢弃,没有任何提示信息 -j REJECT 拒绝,有提示信息 -j LOG 写日志 /var/log/messages 而后将数据包传递给下一条规则 nat表: -j SNAT 源地址转换 POSTROUTING -j DNAT 目标地址转换 PREROUTING
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表
匹配的条件: -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
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 IPPUT -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出去的包所有容许
iptables -t filter -A INPUT -p tcp -s 10.1.1.2 -j DROP iptables -t filter -A INPUT -p tcp --dport 22 -s 10.1.1.2 -j DROP 拒绝ssh 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:只容许本身ping通别人,不容许别人ping通本身(在policy DROP前提下加规则) 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 -A INPUT -s 10.1.1.2 -p icmp --icmp-type 8 -j ACCEPT
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 echo 0> /proc/sys/net/ipv4/icmp_echo_ignore_all echo 1> /proc/sys/net/ipv4/icmp_echo_ignore_all 练习: 1.禁止你的另一台服务器访问你的80端口,在INPUT和OUTPUT iptables -A INPUT -s 10.1.1.3 -p tcp --dport 80 -j DROP iptables -A OUTPUT -s 10.1.1.3 -p tcp --dport 80 -j DROP 2.只容许别人访问你的80端口 iptables -A INPUT ! -s 10.1.1.1 -p tcp --dport 80 -j ACCEPT 3.拒绝全部人登陆你的sshd服务 iptables -A INPUT -p tcp --dport 22 -j DROP 4.只容许你能够ping通另一台主机,可是不容许它ping通你 INPUT 默认策略:DROP OUTPUT :DROP iptables -t filter -A OUTPUT -p icmp --icmp-type 8 -d 10.1.1.2 -j ACCEPT iptables -t filter -A INPUT -p icmp --icmp-type 0 -s 10.1.1.2 -j ACCEPT
1.5 iptables 内置模块(扩展)
-m 参数+<模块名> 1.multiport 多端口 目的:指定多个不连续的端口,减小iptables的条目,达到优化效果 用法: iptables -m multiport --help multiport match options: [!] --source-ports port[,port:port,port...] --sports ... match source port(s) [!] --destination-ports port[,port:port,port...] --dports ... match destination port(s) [!] --ports port[,port:port,port] match both source and destination po 示例: 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 -A INPUT -s 10.1.1.2 -p tcp -m multiport --dports 22,80 -j ACCEPT 2.iprange ip范围 用法: iptables -m iprange --help 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 iptables -t filter -I INPUT -m iprange --src-range 10.1.1.2-10.1.1.10 -p tcp --dport 80 -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 例子:ftp开启防火墙下被动模式 1.ftp服务,须要固定被动模式下的端口 vim /etc/vsftpd/vsftpd.conf 增长如下内容 pasv_min_port=2000 pasv_max_port=3000 重启服务 service vsftpd restart iptables -t filter -A INPUT -p tcp --dport 2000:3000 -j ACCEPT iptables -t filter -A OUTPUT -p tcp --sport 2000:3000 -j ACCEPT iptables -t filter -A INPUT -m multiport -p tcp --dports 20:21,2000:3000 -j ACCEPT iptables -A INPUT -d 10.1.1.1 -s 10.1.1.3 -p tcp --sport 2000:3000 -j ACCEPT 2.使用链接追踪模式(扩展)(INPUT和OUTPUT都是DROP下) iptables -I INPUT -p tcp --dport 20:21 -j ACCEPT iptables -I OUTPUT -m state --state ESTABLISHED -j ACCEPT 作完这步后只能访问,不能查看数据 这两个规则至关于iptables -I INPUT -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT modprobe nf_conntrack_ftp //加载链接追踪模块(临时) vim /etc/sysconfig/iptables-config //开机自动加载 IPTABLES_MODULES="nf_conntrack_ftp" 作完这两步就能查看数据 nf_conntrack_ftp:针对数据端口链接时,将三次握手第一次的状态由NEW识别成RELATED iptables-save 注意:修改完配置文件须要重启防火墙 service iptables restart 常见协议的端口 /etc/services grep ^http /etc/services 服务 协议 端口/传输协议 httpd http 80/tcp
环境: server 10.1.1.1 部署了ftp,http,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服务
具体步骤:
首先,server端部署相关服务并启动 //查看相应的软件包是否成功安装,没安装请安装 rpm -q vsftpd httpd samba openssh-server
功能:地址转换(源地址和目标地址) 三条链: PREROUTING POSTROUTING OUTPUT 处理动做: nat表: -j SNAT 源地址转换 POSTROUTING -j DNAT 目标地址转换 PREROUTING -j MASQERRADE 地址假装
环境: 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服务器 (把‘中间人10.1.1.1’的IP添加网络做为网关,此处已有,故不添加net,只加gw) route add default gw 10.1.1.1 route -n 2.nat-server端:开启路由转发功能并添加防火墙规则 (路由后POSTROUTING) 还原 iptables -F 包括配置文件/etc/sysconfig/iptables也要还原(此处注意,提早备份) echo 1 > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -j SNAT --to 2.2.2.1 3.web-servcer端:搭建web服务 echo "this is snat test page" > /var/www/html/index.html service httpd restart netstat -nltp|grep 80 route -n 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端测试验证:client10.1.1.2是否能够访问web-server端2.2.2.2的web服务 wget http://2.2.2.2 能够访问 1.家里实现上网和上面有什么不一样? iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -j MASQUERADE(公网地址变的状况下) 2.地址转换是在NAT表上进行,若是在nat-server端的filter表的FORWARD链拒绝转发,是否能够正常访问? 能够,由于是路由后POSTROUTING转换
路由前 web-server:10.1.1.3 nat-server:10.1.1.1和2.2.2.1(两个网卡,网络适配器增长,配置好eth1) client:2.2.2.2 需求:公网用户client访问私网服务器提供的WEB服务 步骤: 1.web-server端:10.1.1.3上搭建web服务 echo "this is dnat test page">/var/www/html/index.html 2.nat-server端:10.1.1.一、2.2.2.1端开启路由转发功能并添加DNAT规则 echo 1 > /proc/sys/net/ipv4/ip_forward route -n 查看路由表信息,确认有到达目标的网关 (默认ACCEPT) 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客户端测试验证 elinks --dump http://2.2.2.1 this is dnat test page 网关必定要指定‘中间人’的IP网关