setenforce 0 //临时关闭selinux
getenforce //查询selinux状态
vim /etc/selinux/config //修改配置文件,永久关闭selinux,重启生效
centos7之前使用netfilter防火墙
centos7开始使用firewalld防火墙
两者使用的工具都是iptables
先关闭firewalld防火墙
systemctl disable firewalld //开机不启动
systemctl stop firewalld //关闭firewalld防火墙
开启netfilter防火墙,需先安装iptables安装命令: yum install -y iptables-services
开启iptables服务
systemctl enable iptables //开机启动服务
systemctl start iptables //开启服务
iptables -nvL //查看iptables规则
netfilter的5个表
filter表用于包过滤,是默认的表,有三条内置的链(INPUT、FORWARD、OUTPUT)
INPUT:通过路由表,目的为本机,数据包进入到本机时经过的链
FORWARD:数据包不是给本机出来,数据包到达本机,但不会进入内核,判断目标地址是否为本机,不是本机经过FORWARD转发
OUTPUT:由本机产生,向外发出
nat表用于网络地址转换,有三条链(PREROUTING、OUTPUT、POSTROUTING)
PREROUTING:,通过路由表后,目的不为本机,进入本机之前更改数据包
OUTPUT:由本机产生,向外发出
POSTROUTING:发送到网卡接口之前更改数据包
managle表用于给数据包做标记,几乎用不到
raw表可以实现不追踪某些数据包,几乎用不到
sercurity表在centos6中并没有,用于强制访问控制(MAC)的网络规则,几乎用不到
iptables传输数据包的过程
① 当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。
② 如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出。
③ 如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出。
iptables语法
iptables -nvL //查看iptables规则
service iptables restart //重启防火墙服务
/etc/sysconfig/iptables //iptables配置文件路径
iptables -F //清空iptables规则,配置文件信息还是存在的
service iptables save //保存当前iptables规则
重启iptables服务,重新加载配置文件规则
iptables -t nat -nvL //查询nat表规则,不加-t参数指定表名,默认操作filter表
iptables -Z //可以把计数器清零,数据包和大小时刻增加
增加一条规则
iptables -A INPUT -s 192.168.0.100 -p tcp --sport 1234 -d 192.168.0.188 --dport 80 -j DROP //没有指点-t参数,默认操作filter表,表示将IP192.168.0.100端口为1234通过tcp协议访问IP192.168.0.188的80端口的数据包直接丢弃
-A:增加一条规则,这里针对的链是INPUT链,增加的规则默认在最后一条
-s:指定源IP
-p:指定协议,这里指定的协议为tcp
--sport:指点源端口
-d:指定目的IP
--dport:指定目的端口
-j:指定后面的行为动作
DROP:丢弃
REJECT:拒绝
iptables -I INPUT -p tcp --dport 80 -j DROP //向INPUT链插入一条
-I:插入一条规则,插入的规则默认在最前面,规则过滤优先从第一条到最后一条匹配,同时满足匹配2条规则,优先匹配最前面一条规则
iptables -D INPUT -p tcp --dport 80 -j DROP //-D参数,删除规则
iptables -nvL --line-number //--line-number打印规则序列号
iptables -D INPUT 7 //删除第七条规则
iptables -I INPUT -s 192.168.0.0/24 -i en33 -j ACCEPT //-i指定网卡,匹配192.168.0.0这个段的IP数据包允许通过en33这个网卡
iptables -P INPUT DROP //-P参数更改默认策略,表示更改INPUT链的策略为DROP丢弃,没有具体的规则匹配就走默认策略
iptables小案例
需求:放行80,21,22端口,并指定一个IP段可以访问22端口,其他IP都不可以访问
vi /usr/local/sbin/iptables.sh //加入如下内容
#!/bin/bash
ipt="/usr/sbin/iptables" //定义变量
$ipt -F //清空之前的规则
$ipt -P INPUT DROP //INPUT链丢弃
$ipt -P OUTPUT ACCEPT //OUTPU链放行
$ipt -P FORWARD ACCEPT //FORWARD链放行
$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT //-m state指定状态,目的是为了相关数据包顺利的相互连接,RELATED表示边缘状态,客户端和服务端建立完链接后,还有额外的链接,ESTABLISHED表示保持链接
$ipt -A INPUT -s 192.168.0.0/24 -p tcp --dport 22 -j ACCEPT //网段192.168.0.0/24访问22端口的规则放行
$ipt -A INPUT -p tcp --dport 80 -j ACCEPT //80端口数据包放行
$ipt -A INPUT -p tcp --dport 21 -j ACCEPT //21端口数据包放行
cat /usr/local/sbin/iptables.sh //查看脚本内容
sh /usr/local/sbin/iptables.sh //执行脚本
icmp示例
重启iptables服务,恢复默认状态
使用其他机器ping该服务器IP,正常ping通
iptables -I INPUT -p icmp --icmp-type 8 -j DROP //禁止外部网络ping通本机IP
无法ping通该服务器IP,达到禁ping的效果
nat表应用
A机器两块网卡ens33(192.168.0.236)、ens37(192.168.100.1),ens33可以上外网,ens37仅仅是内部网络,B机器只有ens37(192.168.100.100),和A机器ens37可以通信互联。
需求1:可以让B机器连接外网
准备工作:准备2台虚拟机(study-01、study-02)
保留study-01原来的网卡不变,增加多一块网卡
选择网络适配器,下一步
选择完成
创建局域网
选择创建的区段,确认
开启服务器
study-02设置
断开study-02服务器原来的网卡连接,新建一个网卡步骤和study01一样
断开原来网卡的连接
和study-01连接到同一台交换机,启动服务器
study-01新增网卡名称为:ens37
study-02新增网卡名称为:ens37,由于study-02原来的网卡已经断开连接,虽然获取到IP,但是还是无法通信,所以无法使用xshell远程连接
ifconfig ens37 192.168.100.1/24 //临时配置ens37网卡的IP,重启不生效,永久生效需复制ens33的配置文件修改
ifdown ens33 //把ens33的网卡down掉,确保ens33无连接
ifconfig ens37 192.168.100.100/24 //临时配置ens37网卡的IP
study-01pingstudy-02,网络通信正常
检查study-02是否可以ping通
准备工作已完成
开始试验
study-01操作
检查A机器系统是否开启内核转发,默认为0表示没开启
echo "1">/proc/sys/net/ipv4/ip_forward //改为1表示打开端口转发
iptables -F //添加规则前先清空iptables规则
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE //增加一条规则,使192.168.100.0/24这个网段可以上网
iptables -t nat -nvL //查看增加的规则
study-02操作
B机器上设置网关为192.168.100.1
route -n //查看路由
route add default gw 192.168.100.1 //增加一条默认网关
测试study-02可以正常ping通
配置dns,ping公网dns,测试正常,可以正常上外网
需求2:C机器只能和A通信,让C机器可以直接连通B机器的22端口
study-01操作
A上打开路由转发 echo "1">/ proc/sys/net/ipv4/ip_forward
iptables -t nat -D POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE //删除上一个试验的操作记录
A上执行 iptables -t nat -A PREROUTING -d 192.168.0.236 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22 //c机器进去时访问目的IP为192.168.0.236端口为1122转发到192.168.100.100:22
iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.0.236 //B机器回来的源IP经过A机器
study-02操作
B上设置网关为192.168.100.1
验证是否可以远程登录
验证成功
验证是否可以连接外网
iptables详解:http://www.cnblogs.com/metoy/p/4320813.html