第十章 日常运维-系统管理(2)

一、关于SELINUX

二、firewalld、iptables和netfilter之间的关系

三、netfilter5表5链介绍

四、iptables语法

五、iptables filter表案例

六、iptables nat表案例

 

一、关于SELINUX

1.1简介:
安全增强型 Linux(SecurityEnhancedLinux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统。SELinux 主要由美国国家安全局开发。2.6 及以上版本的 Linux 内核都已经集成了 SELinux 模块。SELinux 的结构及配置非常复杂,而且有大量概念性的东西,要学精难度较大。很多 Linux 系统管理员嫌麻烦都把 SELinux 关闭了。

1.2如何关闭SELinux
1.2.1临时关闭SELINUX的方式:

  • #setenforce 0   //此命令可以临时关闭SELINUX,重启后SELINUX还会自动启动。
  • #getenforce     //getenforce可以获取SELINUX的运行状态。

第十章 日常运维-系统管理(2)_第1张图片

1.2.2关于SELINUX的运行状态

  • enforcing #开启状态,会强制执行SELINUX的安全策略
  • permissive #提示状态,会打印触发SELINUX安全策略的警告,但是不会执行相应的策略。
  • disabled #关闭SELINUX,重启后也不会再启动SELINUX。

1.2.3永久关闭SELINUX:(关闭后不能远程登录)
永久关闭SELINUX需要修改SELINUX的配置文件/etc/selinux/config
修改方法1
vim /etc/selinux/config #使用vim编辑器编辑/etc/selinux/config文件。
将文件中的SELINUX=enforcing修改为SELINUX=disabled后,保存退出。
修改方法2:执行下面这条命令:
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
检查修改结果:
# grep -i"selinux=disabled" /etc/selinux/config
SELINUX=disabled
grep能过滤出结果,表示修改正确。然后重启系统就能完全关闭SELINUX了。
# getenforce
Disabled

 

二、firewalld、iptables和netfilter之间的关系

2.1在centos6上,我们用的是iptables服务,而在centos7上,我们用的是firewalld服务。同样的,centos6上安装的是iptables包,而centos7上安装的是firewalld包。不管是centos6还是centos7,核心其实都是netfilter,netfilter是linux的一个内核模块,iptables命令是linux内核自带的。
centos6上的iptables服务和centos7上的firewalld服务,其实都是用来定义防火墙规则功能的防火墙管理工具。
它们都是将定义好的规则交由内核中的netfilter即网络过滤器来读取,从而真正实现防火墙功能,所以其实在配置规则的思路上是完全一致的。

注:

  1. netfilter才是防火墙;

  2. firewalld和iptables是两种不同的防火墙管理工具,其底层都是iptables命令。

三者关系图:

第十章 日常运维-系统管理(2)_第2张图片

2.2 iptables
2.2.1 CentOS7默认使用的时Firewalld工具,学些iptables前需要将Firewalld关闭并设置开机不启动

# systemctl disable firewalld #先禁止firewalld开机自启动

# systemctl stop firewalld #再关闭firewalld服务

第十章 日常运维-系统管理(2)_第3张图片

2.2.2 CentOS7默认是没有安装iptables服务的。需要安装iptables服务才能使用iptables。
# yum install -y iptables-services
# systemctl enable iptables && systemctl start iptables  #设置开机自启动iptables服务,并启动iptables服务
Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service.

第十章 日常运维-系统管理(2)_第4张图片

2.2.3 查看iptables服务是否正常开启。
# systemctl status iptables

第十章 日常运维-系统管理(2)_第5张图片

 

三、netfilter5表5链介绍

3.1 5表

①filter表——三个链:INPUT、FORWARD、OUTPUT

  • 作用:过滤数据包
  • 内核模块:iptables_filter.

②Nat表——三个链:PREROUTING、POSTROUTING、OUTPUT

  • 作用:用于网络地址转换(IP、端口)
  • 内核模块:iptable_nat

③Mangle表——五个链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD

  • 作用:修改数据包的服务类型、TTL、并且可以配置路由实现QOS
  • 内核模块:iptable_mangle(别看这个表这么麻烦,咱们设置策略时几乎都不会用到它)

④Raw表——两个链:OUTPUT、PREROUTING

  • 作用:决定数据包是否被状态跟踪机制处理
  • 内核模块:iptable_raw

⑤Security表——三个链:INPUT、OUTPUT和FORWARD

  • 作用:Security表在centos6中并没有,用于强制访问控制(MAC)的网络规则
  • 内核模块:iptable_security

3.2 5链

netfilter的5个链:

  • PREROUTING:数据包进入路由表之前
  • INPUT:通过路由表后目的地为本机
  • FORWARD:通过路由表后,目的地不为本机
  • OUTPUT:由本机产生,向外发出
  • POSTROUTING:发送到网卡接口之前

3.3数据包的传输过程:

如下图:
第十章 日常运维-系统管理(2)_第6张图片

3.4 参考文章:http://www.cnblogs.com/metoy/p/4320813.html

第十章 日常运维-系统管理(2)_第7张图片

 

四、iptables语法

4.1 iptables一般语法格式:
iptables的命令格式较为复杂,一般的格式如下:
iptables [-t table] 命令 [chain] [rules] [-j target]
格式说明:

  • table————指定表名,iptables内置包括filter表、nat表、mangle、raw表和security表。
  • 命令—————对链的操作命令
  • chain————链名
  • rules————匹配规则
  • target————动作如何进行

4.2操作命令选项说明

4.2.1命令 说明

  • -P或–policy <链名>:定义默认策略
  • -L或–list <链名>:查看iptables规则列表
  • -A或—append <链名>:在规则列表的最后追加1条规则
  • -I或–insert <链名>:在指定的位置插入1条规则
  • -D或–delete <链名>:从规则列表中删除1条规则
  • -R或–replace <链名>:替换规则列表中的某条规则
  • -F或–flush <链名>:删除表中所有规则
  • -Z或–zero <链名>:将表中数据包计数器和流量计数器归零

4.2.2规则选项说明

  • -t:指定表名
  • -i或–ininterface<网络接口名>:指定数据包从哪个网络接口进入,如ppp0、eth0和eth1等
  • -o或–outinterface<网络接口名>:指定数据包从哪块网络接口输出,如ppp0、eth0和eth1等
  • -p或—proto协议类型 < 协议类型>:指定数据包匹配的协议,如TCP、UDP和ICMP等
  • -s或–source <源地址或子网>:指定数据包匹配的源地址
  • –sport <源端口号>:指定数据包匹配的源端口号,可以使用“起始端口号:结束端口号”的格式指定一个范围的端口
  • -d或–destination <目标地址或子网>:指定数据包匹配的目标地址
  • –dport <目标端口号>:指定数据包匹配的目标端口号,可以使用“起始端口号:结束端口号”的格式指定一个范围的端口

4.2.3动作选项说明

  • ACCEPT:接受数据包
  • DROP:丢弃数据包
  • REDIRECT:与DROP基本一样,区别在于它除了阻塞包之外, 还向发送者返回错误信息。
  • SNAT:源地址转换,即改变数据包的源地址
  • DNAT:目标地址转换,即改变数据包的目的地址
  • MASQUERADE:IP伪装,即是常说的NAT技术,MASQUERADE只能用于ADSL等拨号上网的IP伪装,也就是主机的IP是由ISP分配动态的;如果主机的IP地址是静态固定的,就要使用SNAT
  • LOG日志功能,将符合规则的数据包的相关信息记录在日志中,以便管理员的分析和排错

4.3 iptables常用操作示例:
4.3.1 查看iptables规则:
命令:iptables -nvL
选项说明:
n:数字输出。IP地址和端口会以数字的形式打印
v:详细输出。这个选项让list命令显示接口地址、规则选项等信息
L list:显示所选链的所有规则。如果没有选择链,则会显示所有链的所有规则

第十章 日常运维-系统管理(2)_第8张图片

4.3.2 清空iptables规则:
命令:iptables -F
选项说明:
F:清空iptables的规则。

第十章 日常运维-系统管理(2)_第9张图片

注:这里清空的只是当前内存中设置的iptables规则,不会清空已经保存的规则。
重启iptables服务即可恢复保存过的规则。
# systemctl restart iptables #重启iptables服务。

第十章 日常运维-系统管理(2)_第10张图片

4.3.3 保存iptables规则:
命令:service iptables save
说明:执行这条命令会把当前iptables的所有规则保存到/etc/sysconfig/iptables文件中。

第十章 日常运维-系统管理(2)_第11张图片

4.3.4 数据包计数器清零
命令:iptables -Z
选项说明:
-Z选项可以清空所有规则相关的数据包数量

第十章 日常运维-系统管理(2)_第12张图片

4.3.5 追加一条规则:
##丢弃来自192.168.1.130的tcp协议数据包。可以使192.168.1.130这台主机ping不通这台服务器。
# iptables F   //先清空iptables的规则。
# iptables -A INPUT -s 192.168.1.130 -p tcp -j DROP
# iptables -nvL INPUT //查看INPUT链的规则
验证:ping 主机IP

4.3.6 删除一条规则

方法1:
##删除刚才添加的那一条规则

#iptables -D INPUT -s 192.168.1.130 -p tcp -j DROP
# iptables -nvL INPUT
这样删除需要知道添加这一条规则的完整命令,非常不方便。
方法2:
第二种方法是通过规则编号来删除规则。
查看规则编号的选项是 --line-numbers
# iptables -A INPUT -s 192.168.239.130-p tcp -j DROP
# iptables -nvL INPUT --line-numbers
#第一列的 num便是规则编号了。

##下面通过规则编号删除规则就方便多了
# iptables -D INPUT 1    //D选项 跟上链名,和规则编号即可删除指定的规则
# iptables -nvL INPUT --line-numbers

4.3.7添加默认规则:
说明:默认规则就是除了可以匹配iptables规则的数据包以外的所有数据包都交给默认规则来处理。

例:#iptables -P INPUT DORP

 

五、iptables filter表案例

案例需求1:放行端口
只放行80、21、22三个端口的数据包,并且22端口只有指定的IP段才能通过。
这个案例我们可以编写一个shell脚本来实现。
vim /usr/local/sbin/iptables.sh ##编辑脚本文件

加入以下内容
#! /bin/bash      //定义执行脚本的shell
IPT="/usr/sbin/iptables"    //定义变量,iptables命令的绝对路径。
$IPT -F       //清空iptables规则
$IPT -P INPUT DROP   //默认规则,丢弃所有数据包。
$IPT -P OUTPUT ACCEPT   //默认规则,放行所有OUTPUT链的数据包
$IPT -P FORWARD ACCEPT   //默认规则,放行所有FORWARD链的数据包
##下面这条规则允许通过RELATED和ESTABLISHED状态的数据包,这条规则必加,否则
可能导致某些服务连不上。
$IPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -A INPUT -s 10.1.1.0/24 -p tcp --dport 22 -j ACCEPT   //仅允许10.1.1.0/24网段链接22端口
$IPT -A INPUT -p tcp --dport 80 -j ACCEPT   //允许通过所有80端口的数据包
$IPT -A INPUT -p tcp --dport 21 -j ACCEPT   //允许通过所有21端口的数据包


# vi /usr/local/sbin/iptables.sh
# cat /usr/local/sbin/iptables.sh
执行这个脚本后查看添加的规则。
# bash /usr/local/sbin/iptables.sh
# iptables -nvL
第十章 日常运维-系统管理(2)_第13张图片

案例需求2:禁ping
让本机可以ping通别的机器,但是别的机器ping不通本机。

#iptables -I INPUT -p icmp --icmp-type 8 -j DROP

#首先清空之前的规则,并且允许所有数据包通过INPUT链,必须一条命令执行,否则远程连接会断开
# iptables -F; iptables -P INPUT -j ACCEPT
#丢弃icmp包类型为8的数据包。icmp类型为8的数据包是icmp请求,类型为0的是应答包。
##添加这条规则后,可以本机可以ping通其他ip,但是其他机器ping不通本机了。

第十章 日常运维-系统管理(2)_第14张图片

 

 

六、iptables nat表案例

6.1 A机器两块网卡ens33(192.168.133.130)、ens37(192.168.100.1),ens33可以上外网,ens37仅仅是内部网络,B机器只有ens37(192.168.100.100),和A机器ens37可以通信互联。
 需求1:可以让B机器连接外网
 A机器上打开路由转发 echo "1">/proc/sys/net/ipv4/ip_forward
 A上执行 iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE 
 B上设置网关为192.168.100.1

6.2 需求2:C机器只能和A通信,让C机器可以直接连通B机器的22端口(端口映射)
 A上打开路由转发echo "1">/ proc/sys/net/ipv4/ip_forward
  A上执行iptables -t nat -A PREROUTING -d 192.168.133.130 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22
 A上执行iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.133.130
 B上设置网关为192.168.100.1

 

 

你可能感兴趣的:(Linux新手学习笔记)