日常运维 2
firewalld和netfilter
getenforce命令获取当前SELinux的状态。Enforcing(开启)/Permissive(关闭)
selinux 临时关闭 使用命令setenforce 0
永久关闭需要更改配置文件/etc/selinux/config ,将SELINUX后面的enforcing改为disabled ,重启系统后方可生效。
在之前的centos6防火墙叫netfilter ,而在centos7中叫firewalld 都是使用工具iptables
systemctl disable firewalld 禁止firewalld 开机启动
systemctl stop firewalld 是关闭该服务 因为centos7默认是firewalld
netfilter
下载iptables
yum install -y iptables-services 下载命令
安装完后开启服务
systemctl enable iptables
systemctl start iptables
iptables -nvL 查看默认规则
netfilter5表5链介绍
1. netfilter的5个表
在centos6中只有4个表,没有security 常用的是前两个
1 · filter
这个表主要用于过滤包的,是系统预设的表,这个表也是阿铭用的最多的。内建三个链INPUT、OUTPUT以及FORWARD。INPUT作用于进入本机的包;OUTPUT作用于本机送出的包;FORWARD作用于那些跟本机无关的包
2. nat
主要用处是网络地址转换,也有三个链。PREROUTING 链的作用是在包刚刚到达防火墙时改变它的目的地址,如果需要的话。OUTPUT链改变本地产生的包的目的地址。POSTROUTING链在包就要离开防火墙之前改变其源地址。
3 · mangle
此表用于专门的包更改。直到内核2.4.17有两个内置的链:预发布(用于在崩溃前改变传入的包?ing)和输出(在路由之前改变本地生成的数据包)。自内核2.4.18,也支持其他三种内置链:输入(用于包?ets己进入这个盒子本身),向前(用于改变被路由的数据包通过盒子)和postr郊游(为了改变它们即将要去的数据包出)。
4 · raw
此表主要用于对连接跟踪的豁免权进行配置 与NOTRACK目标相结合。它在netfilter钩子上注册具有更高的优先级,因此在ipconntrack或任何其他IP之前调用表格。它提供以内置的链:预发布(用于包通过任何网络接口到达)输出(对于由本地专业人员生成的数据包流程)
5 · security
此表用于强制访问控制(MAC)网络规则,例如 由SECMARK和CONNSECMARK实现的目标。强制访问控制 是由诸如SELinux这样的Linux安全模块实现的。安全表在过滤表之后调用,允许任意的访问控制 (DAC)规则在过滤表中,在MAC规则之前生效。这个表提供以下内置的链:输入(用于进入盒内的信息包它本身),输出(在路由之前改变本地生成的数据包), 转发(用于更改通过该框路由的数据包)。
规则链:
1.INPUT——进来的数据包应用此规则链中的策略
2.OUTPUT——外出的数据包应用此规则链中的策略
3.FORWARD——转发数据包时应用此规则链中的策略
4.PREROUTING——对数据包作路由选择前应用此链中的规则
(记住!所有的数据包进来的时侯都先由这个链处理)
5.POSTROUTING——对数据包作路由选择后应用此链中的规则
(所有的数据包出来的时侯都先由这个链处理)
iptables传输数据包的过程
① 当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。
② 如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出。
③ 如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出。
iptables语法
iptables -nvL 查看默认规则 默认针对的是filter表
默认规则保存在 cat /etc/sysconfig/iptables 配置文件中
iptables -F 清空规则
重启后 systemctl restart iptables 回复默认规则
/etc/sysconfig/iptables该文件保存着默认规则 ,如果想把当前的规则保存到配置文件里面,需要执行 service iptables save
iptables -Z 可以把计数器清零 (写脚本用)
pkts 表示多少包 bytes 表示多少字节
iptables -t nat -nvL 查看nat表的规则
添加一条规则,默认filter表
iptables -A INPUT -s 192.168.188.1 -p tcp --sport 1234 -d 192.168.188.128 --dport 80 -j DROP
-A/-D :增加删除一条规则;
-I :插入一条规则,其实跟-A的效果一样;
-p :指定协议,可以是tcp,udp或者icmp;
--dport
:跟-p一起使用,指定目标端口;
--sport
:跟-p一起使用,指定源端口;
-s :指定源IP(可以是一个ip段);
-d :指定目的IP(可以是一个ip段);
-i :指定网卡(不常用,但有时候能用到);
-j :后跟动作,其中ACCEPT表示允许包,DROP表示丢掉包,REJECT表示拒绝包;
插入一条规则
-I 选项表示插入一条规则,插入到最前面最先执行 效果与A一样
iptables -I INPUT -p tcp --dport 80 -j DROP 简写规则插入到最前面
-D 删除一条规则
iptables -D INPUT -p tcp --dport 80 -j DRO 删除规则
iptables -nvL --line-number 查看规则编号
iptables -D INPUT 6 按编号删除
-P 修改链的默认策略
iptables -P OUTPUT DROP/ACCEPT 没有需要不要随便改动
iptables filter表脚本小案例
需求把80 端口、22与21端口放行,其中22端口需要指定IP段(只有该IP段的IP,访问时才能访问到。其他段的IP 一概拒绝)。以上操作需要脚本来实现
vi /usr/local/sbin/iptables //编写一下内容
#!/bin/bash
ipt="/usr/sbin/iptables"
$ipt -F
$ipt -P INPUT DROP
$ipt -P OUTPUT ACCEPT
$ipt -P FORWARD ACCEPT
$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$ipt -A INPUT -s 192.168.217.0/24 -p tcp --dport 22 -j ACCEPT
$ipt -A INPUT -p tcp --dport 80 -j ACCEPT
$ipt -A INPUT -p tcp --dport 21 -j ACCEPT
解释说明:
ipt 定义了变量更加方便简洁(写脚本时,应当使用绝对路径)
$ipt -F // 清空之前的规则 默认对象是filter表
$ipt -P INPUT DROP // 定义默认策略 INPUT全部禁止
$ipt -P OUTPUT ACCEPT // OUTPUT 和 FORWARD全部允许
$ipt -P FORWARD ACCEPT
$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT //指定状态 ,针对这些状态放行 目的是为了更顺利的让80,22,21端口的数据包连接
$ipt -A INPUT -s 192.168.217.0/24 -p tcp --dport 22 -j ACCEPT
$ipt -A INPUT -p tcp --dport 80 -j ACCEPT
$ipt -A INPUT -p tcp --dport 21 -j ACCEP // 192.168.217.0/24网段的22端口80和21端口三种情况全部放行
sh /usr/local/sbin/iptables.sh 执行脚本看是否生效
icmp示例
让你能ping通外网,但不能ping通本机
iptables -I INPUT -p icmp --icmp-type 8 -j DROP
Windows无法ping通本机了 但本机仍可以ping通外网
iptables -D INPUT -p icmp --icmp-type 8 -j DROP 删除这条规则
iptables nat表应用
需求:有A机器与B机器,其中A机器有2块网卡,一个外网网卡ens33(192.168.217.129)和一个内网网卡ens37(192.168.100.1),而B机器只有一块内网网卡ens37(192.168.100.100) ,和A机器ens37可以通信互联
最终想要的结果是B机器连接外网
A机器关机后添加一块网卡 下一步默认确定
点击网络适配器2 选择LAN区段添加一个123LAN区段
完成后选择LAN区段123
N区段就相当于将外网网卡连到了一个内网的交换机上,Windows机器是连不上的,A机器与B机器连接到同一内网交换机上,就可以A与B机器通信。(需要添加区段)
B台机器关机后也添加一块网卡步骤同上 然后在选择之前创建的123LAN区段确定(取消网络适配器1的已连接状态)
A机器重启会多出一块后给ens37网卡 然后设置IP (临时修改,重启后失效)
永久添加IP需要修改配置文件
ifconfig ens37 192.168.100.1/24
B机器重启会多出一块后给ens37网卡 然后设置IP (临时修改,重启后失效)
ifconfig ens37 192.168.100.100/24
然后用A机器ping一下B机器的ip看能否ping通 (如果没ping通看一下A机器的ip是否生效如果失效需要重新设置一下)
ping 192.168.100.100
B机器也能ping通A机器
在A机器上打开路由转发 (cat /proc/sys/net/ipv4/ip_forward 查看是否开启 ,0表示未开启 ,1表示开启
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 192.168.100.1/24 -o ens33 -j MASQUERADE
写一条nat规则让192.168.100.1/24 网关能上外网
B机器上设置网关为192.168.100.1
先用route -n 查看网关Gateway
然后 route add default gw 192.168.100.1 来设置网关
ping 192.168.217.129 A机器的另一个网卡能ping通就表示能上网了
vi 打开/etc/resolv.conf
添加 : nameserver 119.29.29.29
ping 119.29.29.29 试一下dns能否ping通
ping www.qq.com 然后你的B机器就ping通外网了
nat端口映射
需求: C机器只能和A通信,让C机器可以直接连通B机器的22端口
把A机器的192.168.217.129的1122端口映射到192.168.100.100的22端口
在A机器上执行
在A机器上打开路由转发 (cat /proc/sys/net/ipv4/ip_forward 查看是否开启 ,0表示未开启 ,1表示开启
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -D POSTROUTING -s 192.168.100.1/24 -o ens33 -j MASQUERADE
删除之前的nat规则
iptables -t nat -A PREROUTING -d 192.168.217.129 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22
把进去的包做个端口转发 把192.168.217.129的1122端口转发到192.168.100.100的22端口
iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.217.129
把回来的包做个sant操作
给B机器做个网关
然后打开远程连接工具
新建会话 192.168.217.129 端口1122 即可登录192.168.100.100
iptables规则备份和恢复
service iptables save 会把规则保存到/etc/sysconfig/iptables里面
重启服务会自动加载/etc/sysconfig/iptables 文件里的规则
iptables-save > /tmp/123.txt 备份到另一个文件里
iptables-restore < /tmp/123.txt 恢复备份的规则