10.11 Linux网络相关
10.12 firewalld和netfilter
10.13 netfilter5表5链介绍
10.14 iptables语法
扩展(selinux了解即可)
1.selinux教程 http://os.51cto.com/art/201209/355490.htm
2.selinux pdf电子书 http://pan.baidu.com/s/1jGGdExK
3.netfilter参考文章 http://www.cnblogs.com/metoy/p/4320813.html
网络相关
ifconfig是比较老的工具了,用来查看网卡ip。它在net-tools包中:yum install net-tools
。ifconfig
只显示当前工作的网卡,选项-a可以显示所有的,包括关掉的网卡。
ifup ens33
、ifdown ens33
这俩命令很好理解,分别是开启ens33网卡和关闭网卡。主要用在更改指定网卡后单独重启网卡。注意down后不要把自己坑了:如果只有着一个能连接的网卡请小心操作。
设定虚拟网卡的思路是拷贝一个ens33:1配置文件,然后修改避免与原网卡配置冲突,最后重启网卡即可。设定虚拟网卡在keeplived会用到。
mii-tool ens33
查看网卡是否物理连接,如果反馈“link ok”表示连接正常。也可以用另外一个工具:ethtool ens33
,反馈“link detected:ok”表示连接正常。
更改主机名:hostnamectl set-hostname xxx
,xxx是新的主机名。这个命令在centos6上不支持,主要是centos7开始使用systemd工具。两个系统都可以手动修改etc/hostname来更改主机名。
DNS是用来解析网址为ip的服务,具体概念不难,可以搜索关键字了解相关知识。在这里说以下自己关于网址、ip服务的理解:操作系统本地有host文件(和hostname无关,这是两个概念)、DNS文件,当我们要访问一个网址,操作系统首先在hosts文件中查找是否有对应网址ip的匹配,如果没有就去DNS文件中找。DNS文件里有本地记录的,也有网络服务商提供的服务器(远程记录),操作系统本地查找无果就去服务器中找。以上就是DNS的优先级。
linux上DNS配置文件是/etc/resolv.conf。这个文件是有netmanagerment生成的。我们直接在etc/sysconfig/network-scripts/ifcfg-ens33修改。上面说/etc/hosts文件只在当下有用,系统重启后hosts文件会重置。
防火墙
linux里有丰富的安全配制。selinux是红帽强大的安全机制,但是大多数公司都会关掉这个功能。因为其配置比较复杂,对后续服务影响较多,工作量较大。selinux临时关闭命令:setenforce 0
。selinux永久关闭:vi /etc/selinux/config
然后修改selinux一行。getenforce
可以查看selinux运行状态。
关于防火墙,centos7之前使用netfilter防火墙,centos7开始使用firewalld防火墙。两个工具机制不一样,但是内部的使用的iptables都一样。现在centos6使用率还是挺多的。所以下面先介绍netfilter。
在centos7,首先要关闭firewalld,然后开启netfilter:
systemctl stop firewalld #关掉firewalld
systemctl disable firewalled #关闭firewalld开机启动
yum install -y iptables-services #安装iptables-services,这样就可以使用之前版本的iptables了
systemctl enable iptables #设置开机启动
systemctl start iptables #启动服务
netfilter五个表
netfilter有5个表,实现防火墙规则配置。则五个表常用的是filter、nat两个表:
- filter表用于过滤包,最常用的表,有INPUT、FORWARD、OUTPUT三个链
- nat表用于网络地址转换,有PREROUTING、OUTPUT、POSTROUTING三个链
- managle表用于给数据包做标记,几乎用不到
- raw表可以实现不追踪某些数据包,几乎用不到
- security表在centos6中并没有,用于强制访问控制(MAC)的网络规则,几乎用不到
配置防火墙的工作就是添加、修改和删除一些网络包处理规则。这些规则存储在上面五个表中,分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。
数据包流向与netfilter的5个链:
- PREROUTING:数据包进入路由表之前
- INPUT:通过路由表后目的地为本机
- FORWARD:通过路由表后,目的地不为本机
- OUTPUT:由本机产生,向外发出
- POSTROUTING:发送到网卡接口之前
链(chains)是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定义的默认策略来处理数据包。
规则链之间的优先顺序:
第一种情况:入站数据流向
从外界到达防火墙的数据包,先被PREROUTING规则链处理(是否修改数据包地址等),之后会进行路由选择(判断该数据包应该发往何处),如果数据包 的目标主机是防火墙本机(比如说Internet用户访问防火墙主机中的web服务器的数据包),那么内核将其传给INPUT链进行处理(决定是否允许通 过等),通过以后再交给系统上层的应用程序(比如Apache服务器)进行响应。
第二冲情况:转发数据流向
来自外界的数据包到达防火墙后,首先被PREROUTING规则链处理,之后会进行路由选择,如果数据包的目标地址是其它外部地址(比如局域网用户通过网 关访问QQ站点的数据包),则内核将其传递给FORWARD链进行处理(是否转发或拦截),然后再交给POSTROUTING规则链(是否修改数据包的地 址等)进行处理。
第三种情况:出站数据流向
防火墙本机向外部地址发送的数据包(比如在防火墙主机中测试公网DNS服务器时),首先被OUTPUT规则链处理,之后进行路由选择,然后传递给POSTROUTING规则链(是否修改数据包的地址等)进行处理。
规则表之间的优先顺序:Raw——mangle——nat——filter
iptables操作
语法格式:iptables [-t 表名] 命令选项 [链名] [条件匹配] [-j 目标动作或跳转]
说明:表名、链名用于指定 iptables命令所操作的表和链,命令选项用于指定管理iptables规则的方式(比如:插入、增加、删除、查看等;条件匹配用于指定对符合什么样条件的数据包进行处理;目标动作或跳转用于指定数据包的处理方式,比如允许通过、拒绝、丢弃、跳转给其它链处理。
iptables命令选项:
-A 在指定链的末尾添加(append)一条新的规则
-D 删除(delete)指定链中的某一条规则,可以按规则序号和内容删除
-I 在指定链中插入(insert)一条新的规则,默认在第一行添加
-R 修改、替换(replace)指定链中的某一条规则,可以按规则序号和内容替换
-L 列出(list)指定链中所有的规则进行查看
-E 重命名用户定义的链,不改变链本身
-F 清空(flush)
-N 新建(new-chain)一条用户自己定义的规则链
-X 删除指定表中用户自定义的规则链(delete-chain)
-P 设置指定链的默认策略(policy)
-Z 将所有表的所有链的字节和数据包计数器清零
-n 使用数字形式(numeric)显示输出结果
-v 查看规则表详细信息(verbose)的信息
-V 查看版本(version)
-h 获取帮助(help)
防火墙处理数据包的四种方式
ACCEPT 允许数据包通过
DROP 直接丢弃数据包,不给任何回应信息
REJECT 拒绝数据包通过,必要时会给数据发送端一个响应的信息。
LOG 在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则
以下是iptables语法简图:
下面是范围匹配可选项:
以下是一些比较有代表性的iptables语句,可以参照上面语法熟悉以下:
iptables -nvL #查看iptables规则
iptables -F #清空规则
service iptables save #保存规则
iptables -t nat #-t指定表
iptables -Z #可以把计数器清零
iptables -A INPUT -s 192.168.188.1 -p tcp --sport 1234 -d 192.168.188.128 --dport 80 -j DROP
iptables -I/-A/-D INPUT -s 1.1.1.1 -j DROP
iptables -I INPUT -s 192.168.1.0/24 -i eth0 -j ACCEPT
iptables -nvL --line-numbers #查看iptables规则,并在前面标号
iptables -D INPUT 1 #删除标号为1的规则
iptables -P INPUT DROP #input链默认规则执行drop动作