什么是防火墙里面的表
一共三张表filter nat mangle里面的内容要知道
要知道几个名词:
input output forward postrouting prerouting
三张表 五条链都要明白
以上这些是最基本的
如果要访问某台主机上面的http服务
必须先经过那台主机的内核允许,才可以进行访问
防火墙其实也是在内核上面开启的一个服务
防火墙里面有表格,写一些规则,允许哪个主机访问什么服务
这个表格由iptables进行控制
但是有两种规则:iptables 与 firewalld
当1.1.1.1这个主机想去访问172.25.254.111的时候
因为二者不在一个网段
因此中间需要有一个具有地址伪装功能的主机,它有两个网卡
第一张表:filter表格:放的是经过内核的ip input output forward
第二张表:nat表格:放的不是经过内核的服务 input output postrouting prerouting
第三张表:备用表格:mangle input output forward postrouting prerouting
先将firewalld
######################################学会安装firewalld防火墙,并且使用图形界面管理
systemctl stop iptables
systemctl mask iptables
systemctl start firewalld
systemctl enable firewalld
firewalld域:网络区名称 默认配置
1.firewall-config 输入这个命令,firewalld图形化管理
在里面进行一系列设置,**
2.学会使用命令管理firewalld
使用命令行接口配置防火墙
firewall-cmd --state 查看防火墙的状态
firewall-cmd --get-active-zones 查看正在使用的域
firewall-cmd --get-default-zones 查看系统默认使用的域
firewall-cmd --get-zones 查看域
firewall-cmd --zone=public --list-all 列出公共域里面所有可以支持添加的服务
firewall-cmd --get-services 列出所有的服务
firewall-cmd --set-defaults-zone=dmz 更改默认的域
能列出来的服务和端口是集成在一块的
3.域对ssh服务的影响
实验器材:一个真机,两个虚拟机,其中一个虚拟机是双网卡,得有apache服务
下载Apache服务
在desktop上面:
firewall-cmd --list-all eth0和eth1均在public域里面,不允许外来主机访问apache
firewall-cmd --remove-interface=eth1 --zone=public将eth1从public域上面移走
firewall-cmd --list-all
firewall-cmd --add-interface=eth1 --zone=trusted
firewall-cmd --list-all --zone=trusted
此时desktop的eth1在trusted
在server上面:
输入firefox打开浏览器
输入1.1.1.111想访问desktop的apache,可以访问
在desktop上面:
firewall-cmd --list-all
firewall-cmd --list-all --zone=trusted
firewall-cmd --change-interface=eth1 --zone=public
firewall-cmd --permanent --zone=internal --add-source=172.25.0.0/24指定服务
firewall-cmd --permanent --zone=internal --remove-source=172.25.0.0/24移走服务
firewall-cmd --permanent --zone=internal --add-interface=eth0添加网卡所在的域
firewall-cmd --permanent --zone=internal --change-interface=eth0改变网卡所在的域
firewall-cmd --permanent --zone-internal --remove-interface=eth0将eth0网卡从internal域上面移走
firewall-cmd --permanent --zone=public --add-service=smtp永久添加服务
firewall-cmd --permanent --zone=public --remove-service=smtp永久移走服务
firewall-cmd --zone=public --list-ports列出允许的端口
firewall-cmd --permanent --zone=public --add-port=8080/tcp永久添加,开机依然生效
firewall-cmd --permanent --zone=public --remove-port=8080/tcp永久移走,开机依然生效
如果改域里面的服务不加permanent的话,直接改,直接查就会生效
reload后,就会返回原来的状态
firewall-cmd --reload 改完重新加载使其生效,但是不会断开已经连接的
firewall-cmd --complete-relode 改完加载,并且断开所有的连接
实验步骤:
在desktop上面:
firewall-cmd --list-all有ssh服务
firewall-cmd --permanent --remove-service=ssh永久移走ssh服务
firewall-cmd --list-all
在真机上面:
ssh root@172.25.254.111可以连接上
在desktop上面:
firewall-cmd --reload
firewall-cmd --list-all
在真机上面
发现刚才的连接没有断开
因为此时已经没有使用22端口
netstat -antlupe | grep ssh
在desktop上面:
firewall-cmd --complete-reload 完全加载,断开
在真机上面:发现断开了已经用不了了
在真机里面打开一个shell,killall -9 ssh断开了
在desktop上面:
cd /etc/firewalld配置文件
ls
cd zones/进入域
ls
vim public.xml查看这个域的服务
vim public.xml.old之前的服务(因此比较人性化)
firewall-cmd --permanent --add-service=ssh添加ssh服务,不加载
vim public.xml现在没有ssh
vim public.xml.old之前有ssh
firewall-cmd --reload加载
vim public.xml现在有ssh
vim public.xml.old之前没有
cd /lib/firewalld/函数库
cd services/服务的配置文件
ls
vim ssh.xml发现服务和端口是捆绑在一块的
22--->23改端口
systemctl restart firewalld重启防火墙,使其加载生效
在真机上面: ssh root@172.25.254.105连接不上
因为ssh连接默认会找desktop的22端口,此时desktop的ssh服务是23端口,因此连接不上
现在只想要172.25.254.72真机ssh访问desktop(服务端指定什么人访问什么服务)
服务端一共有三个动作
accept(接受客户端的请求)
reject(拒绝请求,但是给客户端有回应,客户端不再访问)
drop(丢弃,没有回应,客户端会一直发数据包,加大负载)
实验步骤:
在desktop上面:
firewall-cmd --list-all 发现有ssh服务
此时真机和server都可以ssh连接desktop虚拟机
现在我想指定只有真机可以,server不可以
firewall-cmd --direct --
firewall-cmd --direct --add-rule
firewall-cmd --direct --add-rule ipv4
firewall-cmd --direct --add-rule ipv4 filter(规则表) INPUT(链) 1(写在第一条) -s(源ip) 172.25.254.11 -p(协议类型) tcp --dport(目的端口) 22 -j(动作) ACCEPT
firewall-cmd --list-all
firewall-cmd --remove-service=ssh
firewall-cmd --list-all
测试:
此时真机可以ssh连接desktop,server不可以ssh连接desktop
在desktop上面:
firewall-cmd --direct --get-all-rules
firewall-cmd --direct --remove-rule ipv4 filter INPUT 1 -s 172.25.254.11 -p tcp --dport 22 -j ACCEPT
firewall-cmd --direct --get-all-rules
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 ! -s 172.25.254.11 -p tcp --dport 22 -i ACCEPT
不让72走允许这条策略,走原来默认的策略
测试:
此时只有server可以ssh,真机不可以ssh
4.怎样解决ssh连接慢的问题?
因为DNS的原因
连接谁就在哪设置,客户端连接服务端,在服务端设置
vim /etc/ssh/sshd_config
UseDNS no
systemctl restart sshd重启服务
5.firewalld的地址伪装和端口转发
路由之前(地址伪装),,,,,,路由之后(端口转发)都要知道
地址伪装实验步骤:
现在想用server1.1.1.211ping通desktop172.25.254.111
因为二者不在一个网段,因此不通
在server上面:
cd /etc/sysconfig/network-scripts
ls
vim ifcfg-eth0
GATEWAY=1.1.1.111 加入desktop的ip作为网关
systemctl restart network
route -n查看一下网关
在desktop上面:
firewall-cmd --list-all看地址伪装功能是否开启
firewall-cmd --permanent --add-masquerade添加伪装功能
firewall-cmd --reload
firewall-cmd --list-all
sysctl -a | grep ip_forward
如果为0,则在/etc/sysctrol.conf 下添加这一行
在server上面:
firewall-cmd --list-all 看eth0是否在public里面,如果不在的话就添加
firewall-cmd --get-active-zones
firewall-cmd --set-default-zone=public
ping 172.25.254.105可以
端口转发实验步骤:
现在在desktop上面开启端口转发功能
在desktop上面:
firewall-cmd --list-all
firewall-cmd --add-forward-port=port=22:proto=tcp:toport=22:toaddr=1.1.1.205
firewall-cmd --list-all
测试:
在真机上面ssh root@172.25.254.105
输入server的密码,直接连上1.1.1.205
ifconfig查看一下ip
##################################################################
5.iptables(另一种火墙)
和三表五链关系大
-t ##指定表名称
-n ##不作解析
-L ##列出指定表中的策略
-A ##增加策略
-p ##网络协议
--dport ##端口
-s ##数据来源
-j ##动作
ACCEPT ##允许
REJECT ##拒绝
DROP ##丢弃
-N ##增加链
-E ##修改链名称
-X ##删除链
-D ##删除指定策略
-I ##插入
-R ##修改策略
-P ##修改默认策略
在desktop上面:
systemctl stop firewalld关闭firewalld
systemctl mask firewalld锁住
systemctl start iptables开启iptables
iptables -t filter -nL查看filter表格里面的链
-t后面跟表格的名称,不过不跟-t,默认为filter表格
iptablde -L查看所有链
iptables -F清除所有策略
iptables -nL查看
service iptables save保存
vim /etc/sysconfig/iptables查看
iptables -t filter -A INPUT -i lo -j ACCEPT将lo回环接口加入INPUT链
iptables -nL查看
iptables -t filter -A INPUT -s 172.25.254.72-j ACCEPT接受
iptables -nL
测试:
在真机里面连接ssh root@172.25.254.105因为防火墙从上往下读,匹配之后就不再读
在desktop上:
iptables -D INPUT 2删除第二条
iptables -nL查看
iptables -R INPUT 2 -S 172.25.254.11 -J REJECT修改策略
iptables -nL查看
测试:
在真机里面连接ssh root@172.25.254.105因为防火墙从上往下读,匹配之后就不再读
在desktop上:
iptables -I INPUT 2 -s 172.25.254.72 -p tcp --dport 22 -j ACCEPT插入策略
iptables -nL
测试:
在真机里面ssh可以,但是访问apache不行
在desktop上:
iptables -P INPUT DROP修改默认策略
iptables -nL
测试:
在真机里面连接ssh root@172.25.254.105因为防火墙从上往下读,匹配之后就不再读
在desktop上:
iptables -nL
iptables -N westos添加链
iptables -nL
iptables -E westos WESTOS修改链的名字
iptables -nL
iptables -X WESTOS删除链
iptables -nL
策略其实就是一行规则
握手过程当中:smp协议
火墙就是内核上面的插件
在desktop上面:
iptables -t nat -nL查看一下nat表
添加地址伪装功能
iptables -t nat -A PREROUTING -i(input) eth0 -p(协议类型) tcp --dport 22 -j DNAT --to-dest 1.1.1.205:22(转发到这个地址)
iptables -t nat -nL
此时eth0是在路由之前
在真机上面:
ssh root@172.25.254.111desktop
ifconfig发现是server
端口转发(从里面到外面 目的地地址转换)---->出去:(这个也要网关)
现在1.1.1.205ping172.25.254.105就可以,因为172.25.254.105与1.1.1.105在一个主机上,在同一个内核(网线上),这个是伪装的前提
在server上面:
ping 172.25.254.105通
1.1.1.205ping172.25.254.72不可以
当内网访问外网的时候,内网知道外网的存在
这个也需要在1.1.1.205上面设置网关1.1.1.105
现在想实现1.1.1.205ping172.25.254.72
在desktop上面:
iptabldes -t nat -nL
开启端口伪装功能
iptables -t nat -A POSTROUTING -o(output) eth0 -j SNAT --to-source 172.25.254.105在172.25.254.105上面进行伪装)
iptables -t nat -nL
此时eth0是在路由之后的
在server上面:
ping 172.25.254.72通