日常运维(上)

1.防火墙Firewalld和netfilter

SElinux

安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统。 SELinux 主要由美国国家安全局开发。2.6 及以上版本的 Linux 内核都已经集成了 SELinux 模块。 SELinux 的结构及配置非常复杂,而且有大量概念性的东西,要学精难度较大。

SElinux临时关闭防火墙 : setenforce 0

SElinux临时打开防火墙 : getenforce

d20822e558238839829d1a604b02c1d0f14.jpg

SElinux永久关闭防火墙:vi /etc/selinux/config----把SELINUX=disabled

a7c88082933d289e3c07a1f953d7f1bd68b.jpg

在使用netfilter之前我们先把selinux先关掉

  • systemctl disable firewalld   #不让开机启动
  • systemctl stop firewalld       #停掉服务

0852a52346b6d36dee8c61c3d4bfc8224d1.jpgce98ffe341c42b861854c25de8df287fbe1.jpg

netfilter

netfilter是由Rusty Russell提出的Linux 2.4内核防火墙框架,该框架既简洁又灵活,可实现安全策略应用中的许多功能,如数据包过滤、数据包处理、地址伪装、透明代理、动态网络地址转换(Network Address Translation,NAT),以及基于用户及媒体访问控制(Media Access Control,MAC)地址的过滤和基于状态的过滤、包速率限制等。

netfilter是之前CentOS 7之前的防火墙,CentOS 7的防火墙是firewalld。目前大多企业还是用CentOS6,防火墙还是用的是netfilter。iptables是设置防火墙的一种工具,因为有必要学习netfilter相关知识。

因为centos7没有netfilter我们先安装一个包 yum install -y iptables-services

0f8a5911f2f530017cd4658d18629fe9598.jpg

systemctl enables iptables     #先让iptables可用

systemctl start iptables         #再开启iptables

69360ecd71b1368186273b159cf73f446ac.jpg

查看CentOS上默认的iptables规则: iptables -nvL

72f5c3c507ad494e82a11237fea5ae87248.jpg

netfilter五表(一般常用filter和nat表

  • filter表主要用于过滤包,是系统预设的表,该表有3个链

    • INPUT:进入本机的包
    • OUTPUT:本机送出的包
    • FORWARD:那些跟本机无关的包
  • nat表主要用于网络地址转换,他也有3个链

    • PREROUTING:包刚刚到达防火墙时该表他的目的地址
    • OUTPUT:改变本地产生的包的目的地址
    • POSTROUTING:包即将离开防火墙时该表其源地址
  • mangle表主要用于给数据包做标记

  • raw表可以实现不追踪某些数据包,默认系统的数据包都会被追踪

  • security表用于强制访问MAC的网络规则; (在centos6中并没有)

netfiler的5个链

链名释义
PREROUTING数据包进入路由之前
INPUT通过路由表后,目的地为本机
FORWARDING通过路由表后,目的地不为本机
OUTPUT由本机产生,向外转变
POSTROUTING发送到网卡接口之前

表链的关系和作用可以理解为三个机器A\B\C之间,A和B有公网实现通讯传输,B和C通过私网进行传输,为了能让A和C之间通信,把B作为网络映射的过程.

iptables传输数据包的过程

  • 当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。
  • 如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出
  • 如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出

iptables语法

netfilter默认规则表  /etc/sysconfig/iptables

cff6f9c3d4a881f48b314b216a128f09108.jpg

把默认规则删除之后重启 netfliter命令这个是在不改变/etc/sysconfig/iptables文件的情况下把默认规则加载回来

service iptables restart

5390c8c8cbb3a0584ce372a143f48470b37.jpg

如果想要把规则重启之后也生效可以使用命令    service iptables save

d42feb902aaf8bfa71db5c9d85f46d4a314.jpg

查看规则:iptables -t 表名 -nvL ; 清除规则是:iptables -t 表名 -F(或z)

选项释义:

  • -nvL 表示查看该表的规则;
  • -n 表示不针对IP反解析主机名;
  • -L 表示列出;
  • -v 表示列出的信息更加详细;
  • -t 后面跟表名;没有此选项,默认为filter;
  • -F 表示把所有规则删除;
  • -Z 把包以及流量计数器重置为零

cd83e559bafadcbb704c2425658a114f745.jpg

iptables -nvL       iptables -t filter -nvL        #表示查看netfilter的表

73f7553842395f6a2dd8f8b0dfbfa316c35.jpg7d49125fe69f27a4a234d3cd0344fef083c.jpg

-F 清空所有规则

4c13dfe45b2f137ef2be387c1e16ebf9e98.jpg

-Z 把包以及流量计数器重置为零

816eaf94009d85bb384c48d466d448dc848.jpg3f35d9255204d8408d7ab8be520b4bba872.jpg3ddf80ae09a46767eb6ef4ce3a7a8419e3c.jpg

增加一条规则把192.168.71.100数据包丢掉iptables -A

b4b9e674944d8b83d3468fe7ba8836b8f2e.jpg0434ef2ac931d8be52afacf07edafdf5997.jpg728b355ecd8bb1930edc6aeda093ee63d95.jpg

插入一条规则把192.168.71.100数据包丢掉 iptables -I 

c367b35e9c2fe7d7516218842429984ea17.jpg

删除增加的规则 iptables -D INPUT 

49efdb6228458b0e014787059eae1d03299.jpg1034fd3949a934e50bf8045b838e6685d9f.jpg

iptables -nvL --line-numbers   #规则显示序列号为删除增加的规则更方便

dd972bccd7540910ca54e18e3f3fd677916.jpg

指定网卡接受数据包   iptables -I INPUT -s 192.168.21.125/端口 66 -i etho -i ACCEPT

f2a744a46230ae1ca40342483d4bfb11fda.jpg-P选项,它表示预设策略(这个规则最好保持默认)

3673af57d8b7abd44dc4dd8aba32f64b094.jpg

-P后面跟链名,策略内容或为DROP,或为ACCEPT,默认后者。需要注意的是:如果在连接远程服务器的时候,千万不要随便执行这个命令,执行后,远程连接会断开; 假如要恢复:需要执行命令:iptables -P OUTPUT ACCEPT

2.iptables filter表小案例

案列1

针对filter表,预设策略INPUT链DROP,其他2个链ACCEPT,然后针对192.168.112.0/24开通22端口,对所有网段开放80端口,对所有网段开放21端口

针对这个需求,我们需要些一个脚本

  • #!/bin/bash //定义解释器
  • IPT="/usr/sbin/iptables" //定义变量名
  • $IPT -F //清空所有规则
  • $IPT -P INPUT DROP //把INPUT链收到的数据包扔掉
  • $IPT -P FORWARD ACCEPT //接受FORWARD的数据包
  • $IPT -P OUTPUT ACCEPT //接受发送出去的所有数据包
  • $IPT -A INPUT -p tcp -s 192.168.112.0/24 --dport 22 -j ACCEPT //针对192.168.112.0/24开通22端口,
  • $IPT -A INPUT -p tcp --dport 80 -j ACCEPT //开放80端口
  • $IPT -A INPUT -p tcp --dport 21 -j ACCEPT //开放21端口

打开 vim /usr/local/sbin/iptables.sh 把上面的脚本写入这个shell

3ec72322b40b105a40dfee2473b640c132e.jpg

之后执行一下脚本

案例2

iptables -I INPUT -p icmp --icmp-type 8 -j DROP //不允许接受icmp数据包到本地

0054c519f82eddffbc79b59f57cb7aca47c.jpg

这条命令,作用是禁止他人ping你的机器,而你可以ping通其他机器

3.iptables nat表应用

 需求1:B机器联网外网

A机器2块网卡分别是外网和内网,B机器只有内网,可以让B机器联网外网

首先我们做个测试:

步骤1:在虚拟机。A机器添加一个内网网卡,B机器也添加内网网卡。 网卡模式并设置为LAN区段,自定义名字一样。

cbb785e8fe3a4564cd5d74a56f12dac1b76.jpg1735d170cd5d8c4b6ac5bdea16bbc0e2dd5.jpg

给ens37 设置IP;并查看使用ifconfig ens37 192.168.100.1/24给第一台机器

66f4ef4cc286e209617d4aa43fa4200b6ae.jpg

先给另一台机器关闭ens33   命令ifdown ens33使用相同的手法给ens37添加一个ip看是否能ping通第一台上的机器

db7d448344e880cf3cd8813cd335264ca2e.jpg

此时只是机器A和机器B相连,却不能连接外网

9a7e57bd709c69c04f2a86b4fffd54f2c25.jpg

在机器A上设置,打开路由转发

0404b2dfb63b22b089f7b13d14aba43ccff.jpgca16134721c80074f71d626d3e5db440061.jpg

增加规则,并查看 (规则的目的是让100.0的网段能够上网)

ac28af59ee87086b8d33bf363e80a20c1ca.jpga8858bcd09826c189f09e2b761f0eaa79b7.jpg

B机器设置网关

  • route -n   #查看网关
  • route add default gw 192.168.100.1   #添加网关命令

c174c0edb0f8557c61e5a0db6b227d6c785.jpg

设置DNS,在vi /etc/resolv.conf 添加 nameserver :119.29.29.29

ed83510f8d6c81cd3502a69838ccd6e9e45.jpg

C机器连接B机器

C机器只能和A通信,让C机器可以直接连通B机器的22端口

e426de6770bcba3aa52c18b04424ab4423f.jpg

首先设置机器A;清除之前设置的规则

iptables -t nat -D POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE #清除之前所设置的规则

35ea5538d50e248424bed7174d6c511ba67.jpgd510380e21ddd73151074bf90eb493b65c2.jpg

增加新的规则,并查看规则

  • iptables -t nat -A PREROUTING -d 192.168.71.130 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22 #进去的包
  • iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.71.130  #回来的包
  • 此时需要给B机器设置网关;之前已经设置了。若没有设置必须设置,才能联网

df9ed9e221f09fdb6ed791cc9f8c1820201.jpg

f69a3beac8f1672ec2252856c5a6abd49aa.jpg

注意:机器A有两个网卡:192.168.112.136和192.168.112.100.1;192.168.112.136这个一直和主机相连接;因此机器A一直可以用Xshell远程登录

 

用W查看系统负载,可以看到源来自192.168.71.1就是C机器

6b144668cefce2c10f0ca630f4b843d6f59.jpg

这说明了,机器C:192.168.71.1已经和机器B:192.168.100.100相连。机器C和A能够通信,而通过A机器来连接B机器的映射端口1122,达到了C和B通信;而且机器B也通过映射端口1122,能够连接外网

转载于:https://my.oschina.net/u/4000361/blog/2877665

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值