坚持#第283天~iptables防火墙(四表五链、内网访问外网的web、外网访问内网的web)

kvm存储池

 

防火墙:流量控制

iptables的四表五链分别为:

四表:raw(跟踪)、mangle(打标记/方便集群批量)、nat(网络地址转换/翻译表)、filter(过滤)

五链:INPUT(终点)、OUTPUT(起点)、FORWARD(穿越)、PREROUTING(dnat)、POSTROUTING(SNAT)

防火墙是否生效看表和链,而不只看链。

源地址解析是内网访问外网;目标地址解析是外网访问内网。

-A 和 -I 的区别:

-A是追加,-I是插入到第一行

过滤:进出转发

没有匹配到就走默认的,默认看policy后面是ACCEPT或DROP

 

何如知道行号显示:

iptables-nvxL --line-numbers(--line也行)

iptables-nxL --line-numbers带行号显示

插入成为第二条:.... -I INPUT 2 -s ....

不接行号就是默认插入到头条

 

删除防火墙:

iptables -tfilter -D INPUT 2删除行号为2的

iptables -tfilter -F INPUT 删除INPUT链中的所有规则

iptables--help | grep -i “\-D” 查看帮助

 

改防火墙:replace替换嘛

iptables -RINPUT 2 -s 192.168.1.30 -j ACCEPT

 

通过配置文件可以永久保存并且进行增删改查操作

临时的,重启全没了,怎么永久生效

iptables-save回车可以把当前的规则打印出来

systemctlsave iptables

rpm -qa |grep iptables

iptables-services必须要有这个才会有配置文件

rpm -qliptables

vim /etc/sysconfig/iptables防火墙的配置文件

没有这个配置文件是因为你没有安装iptables-services

iptables-save> /etc/sysconfig/iptables要有把握,不过最好直接用上面的vim去改,以免失误导致输出重定向覆盖了之前的规则

systemctlrestart iptables重启防火墙服务

 

-P默认策略:(VIP会员)

iptables -PINPUT DROP 就是INPUT链里面的policy变成了DROP

一般都是默认拒绝(只能写DROP或者ACCEPT)

 

192.168.1.63/24就是192.168.1.0

192.168.1.63/32就是192.168.1.63

127.0.0.1也是自己呀

 

让宋子奇不可以访问baidu

vim/etc/hosts

192.168.1.181www.baidu.com保存退出

iptables -tfilter -A FORWORD -s 192.168.1.10 -d www.baidu.com -j REJECT

 

从哪个网卡进来的-i(入口网卡名称,就不需要带ip地址了,直接写网卡名就行了)   外网进入到路由器转发给内网

 

sport把我当作源

dport把我当作目标

 

从哪个网卡出去的-o(出口网卡名称)

 

iptables -tnat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 80 -j REDIRECT --to-port3128设置防火墙策略地址转换,iptables -S查看设置成功了没;为什么要转到透明代理的,做上网的行为管理、拦截

 

443https

80web

打标记叫webs

可以批量处理

 

start:

需求:

小明的客户机能访问小强的网关,小强的服务器能访问小明的服务器:(全用仅主机模式)

解:需要3台:

内网上外网,防火墙的决策,外网上内网web网站

 

小明的客户机为仅主机模式192.168.1.10,那么小明的路由器一个为仅主机模式192.168.1.254,另一个为桥接模式1.1.1.1/30

 

宿主机:

cphost-only.xml host.xml

vim host.xml

改name、uuid、mac地址。 网桥的ip是172.16.1.0  255.255.255.0 范围range是172.16.1.1  172.16.1.254

virshnet-define host.xml

virshnet-start host

virshnet-autostart host

切换网卡点应用才会变成活跃的

 

用VMWare:

虚拟网络编辑器的仅主机模式的ip为172.16.1.0

clone1:网卡host-only

ip设置为172.16.1.100掩码24,网关172.16.1.254

不需要开防火墙

 

虚拟网络编辑器:添加网络vmnet2,并修改为1.1.1.0

clone2: 网卡host-only (host-only多个的话要使用custom选那个指定的vmnet几,不然就废了) 、网卡Custom:特别的虚拟网络,vmnet2刚才添加的应用保存

改ens33 ip为172.16.1.254掩码24

改ens35 ip为1.1.1.1掩码24位

公网不需搞网关

重启网卡

 

clone3:网卡Custom:特别的虚拟网络,vmnet2刚才添加的应用保存

改ens33 ip为1.1.1.2掩码24位

公网不需搞网关

重启网卡

 

clone1:

ping 1.1.1.2不通(要去防火墙那边开启路由转发)

 

clone2:

ping 1.1.1.2通了(防火墙肯定夹在中间做路由转发呀)

sysctl -p

sysctl -a |grep ip_for

echo “net.ipv4.ip_forward=1”>> /etc/sysctl.conf

sysctl -p 立即生效

 

clone1:

ping 1.1.1.2还是不通

 

clone3:

yum install-y httpd

echowww.badu.com > /var/www/html/index.html

systemctlstart httpd

 

clone2:

curl 1.1.1.2可以

 

clone1:

curl 1.1.1.2不可以

 

clone2:

iptables -F

iptables -X

iptables -Z

 

iptables -tnat -A POSTROUTING源地址翻译 -s172.16.1.0/24 -p tcp --dport 80 -j SNAT --to源地址要替换为 1.1.1.1

 

clone1:

curl 1.1.1.2还是不行

ping192.168.1.254都不通,出bug 了

 

clone2:

iptables -nL-t nat

ping 1.1.1.2通的

ping172.16.1.254不通,出bug 了

重启虚拟机,可以解决bug

yum -yinstall iptables-services

systemctlrestart iptables

六道仙李做全是仅主机模式的实验:

虚拟网络编辑器:仅主机模式有两个:192.168.220.0和 192.168.221.0

内网:192.168.220.111

防火墙:192.168.220.50 和 192.168.221.50

外网:192.168.221.111

ip不要设置为1,2了因为有bug

郭老师的添加路由的方法对仅主机模式也有效果,相互添加了路由添加全了两者才能互相ping通

 

黄老师没有在clone3里面添加路由,只在clone1里面添加了路由,所以就出现了问题

 

黄老师继续:

ping的通但访问不了网站是因为selinux、firewalld没有关

 

防火墙的坏了

rpm -eiptables --nodeps卸载iptables

坏的解释器,python没有了

scp/usr/lib64/ld-linux-x86-64.so.2  废了,重装系统

 

黄老师居然也成功了,总结:

与郭老师的区别:黄老师就是不在第三台机子上操作,先在第一台机子上和郭老师一样的操作添加路由,然后把郭老师在第三台机子上操作的改为了在第二台机子上操作,第二台机子做一个防火墙策略,POSTROUTING源地址翻译!即可:

在防火墙的机子上添加:

iptables -tnat -A POSTROUTING -s 172.16.1.0/24 -p tcp --dport 80 -j SNAT --to 1.1.1.1是不是如果访问80端口就做动作: SNAT将源地址转换为与第三台ping的通的中间那台的那张网卡,这个过程叫做源地址翻译,只不过这个源地址要写为网段/24的形式

上面这个就相当于在第三台机子里面添加了路由,但实际上有没有添加呢,有待验证:没有添加,实际上就是如果第一台访问80端口就做动作: SNAT将源地址转换为与第三台ping的通的中间那台的那张网卡,这个过程叫做源地址翻译,只不过这个源地址要写为网段/24的形式

注意SNAT或DNAT后面都有一个--to翻译成什么ip

 

next start:

现在来研究PREROUTING:

把上面的实验反过来,我做网站,让别人外网来访问我的网站:

先在第一台上安装httpd网站服务,并写一个index.html

第一台机子添加路由

第二台机子开启路由转发

要让第三台机子去访问第二台机子的能ping的通的那张网卡能访问的到第一台的网站

 

第二台:

先试试这个策略:

iptables -tnat -A PREROUTING -s 1.1.1.0/24 -p tcp --dport 80 -j DNAT --to 172.16.1.254这个-s和-d不是随便写的,一般都是-s

 

iptables -tnat -A PREROUTING -i ens37 -p tcp --dport 80 -j DNAT --to 172.16.1.100这里为什么不是254?答:那就要看你的需求是什么呀,如果你想让第三台去curl第二台能ping的通的那个网卡就能访问到第一台的网站,那么你就写100,如果你的[需求]是第三台直接去curl第一台能访问到他的网站那么你就写254呀,主要是看地址被翻译成了什么,如果翻译成第二台的另一张网卡,你就能直接curl第一台机子访问第一台机子的网站了,如果翻译成第一台的网卡,你就能curl第二台能ping的通的ip来访问第一台的网站!

为什么写-i啊?-i是网卡名,写ip的话用:-s 1.1.1.10/24试一下能不能成功?能成功。

 

第三台:

curl1.1.1.10访问第二台你就能访问得到第一台写的网站了

 

然后思考上一个实验,你去访问别人外网的网站,怎么通过访问第二台机子能ping的通的ip就能访问得到第三台写的网站?不存在

 

POSTROUTING和PREROUTING总结:我去访问外网的网站用POSTROUTING源地址翻译内网访问外网;外网来访问我的网站用PREROUTING目标地址翻译外网访问内网

如果你采用的是POSTROUTING,那么必须要翻译成第二台另外一张网卡的ip(巧记:post另一张网卡:司令);

如果你采用的是PREROUTING,那么必须要翻译成有网站的那台网卡的ip(巧记:pre之前有网站)

 

过滤表,进出转发链,默认改为drop,看原来的还通不通

第一、二个实验:

iptables -PINPUT DROP能

iptables -POUTPUT DROP能

iptables -PFORWARD DROP不能了

说明过路人默认为DROP的话就会被丢弃了

 

练习题:

1.拒绝192.168.122.8访问我的网站(因为不知道是apache还是nginx还是代理,不管是什么,总之80端口不会变,所以从端口思考,拒绝那个人访问我的80端口):

iptables -tfilter -A INPUT -s 192.168.122.8(因为是INPUT所以是别人来访问我,别人就是源地址-s后面写别人的ip)   --prot 80 -j DROP错啦

    DROP       丢弃(不会回复对方,直接丢弃)

    REJECT     拒绝(还会回复对方已拒绝)

iptables -tfilter -A INPUT -s 192.168.122.8 -p tcp --dport 80 -j REJECT需要加-p tcp 端口都是在tcp协议里面的,端口是--dport

2.允许所有人访问我的ssh除了192.168.122.8(做了第一题之后其他的就都很简单了,SSH是22号端口)

iptables -tfilter -A INPUT -s 192.168.122.8 -p tcp --dport 22 -j REJECT

3.不允许我自己访问192.168.122.8的ssh(我变成了输出,就是OUTPUT)

iptables -tfilter -A OUTPUT -s 192.168.122.8 -P tcp --dport 22 -j REJECT错啦

-d是什么啊?哈哈哈,注意变成了OUTPUT之后别忘了-s源地址也要变成-d目标地址呀,协议-p是小写的条件辅助词

iptables -tfilter -A OUTPUT -d 192.168.122.8 -p tcp --dport 22 -j REJECT

发现一个iptables的规律哈:不加任何条件直接写动作-j 动作的话就会别人ping不通你,并且你也ping不同别人,这个-d和-s不能瞎写

防火墙还是叼啊,访问控制的真汉子

4.只允许192.168.122.8访问我的ssh,其他人全部拒绝

iptables -tfilter -A INPUT ! -s 192.168.122.8 -p tcp --dport 22 -j REJECT

 

主要下面这个iptables是什么意思?

iptables -tnat -A POSTROUTING源地址翻译 -s172.16.1.0/24 -p tcp --dport 80 -j SNAT --to源地址要替换为 1.1.1.1

意思就是内网访问外网,起点是172.16.1.0这个网段当访问80端口就会将起点ip翻译成1.1.1.1

 

还有之前squid的透明代理iptables是什么意思

iptables -t nat-A PREROUTING -s 192.168.1.0/24 -p tcp --dport 80 -j REDIRECT --to-port 3128设置防火墙策略地址转换,iptables -S查看设置成功了没;为什么要转到透明代理的,做上网的行为管理、拦截

意思就是外网访问内网,起点是1.0的网段当访问80端口就会重定向3128端口

 

-d是什么啊?哈哈哈,注意变成了OUTPUT之后别忘了-s源地址也要变成-d目标地址呀

规律:

POSTROUTING和PREROUTING后面接-s网段/24

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值