[toc]html
扩展(selinux了解便可)linux
2.selinux pdf电子书 http://pan.baidu.com/s/1jGGdExK编程
若是系统没有ifconfig命令,可使用yum install -y net-tools) Linux上有多个网卡,而只想重启某一个网卡的话,可使用这个命令:vim
两个命令能够一块儿执行windows
[root@localhost ~]# ifdown ens33 //即停用网卡 [root@localhost ~]# ifup ens33 //从新启动 ifdown ens33 && ifup ens33 两个命令能够一块儿执行,表示重启网卡
须要注意的是,若是咱们远程登陆服务器,当使用ifdown ens33这个命令的时候,颇有可能后面的命令ifup eth33不会被运行,这样致使咱们断网而没法链接服务器,因此请尽可能使用 service network restart 这个命令来重启网卡。centos
ifdown ens33 && ifup ens33 //重启网卡
从上面能够看到,多了一个ens33:0虚拟网卡 而且在windows下是能够ping通的
安全
示例命令以下:bash
[root@localhost network-scripts]# mii-tool ens33 ens33: negotiated 1000baseT-FD flow-control, link ok
只要看到 “link ok” 就说明网卡为链接状态,若是显示 “no link” 说明网卡坏掉了或者没有链接网线。 另外还有一个命令也能够查看网卡状态:服务器
当装完系统后,默认主机名为localhost,使用hostname就能够知道你的linux的主机名:网络
[root@localhost ~]# hostname localhost.localdomain
使用hostname修改主机名字
[root@localhost /]# hostname xavi [root@localhost /]# hostname xavi
[root@localhost ~]# hostnamectl set-hostname zlinux [root@localhost ~]# hostname xavilinux [root@localhost ~]# bash //打开子shel即bashl就看到已经修改好了,重启也能够 [root@xavilinux ~]#
DNS是用来解析域名用的,平时咱们访问网站都是直接输入一个网址,而DNS把这个网址解析到一个IP。
在linux下面设置DNS很是简单,只要把DNS地址写到一个配置文件/etc/resolv.conf中便可。
[root@localhost /]# cat /etc/resolv.conf # Generated by NetworkManager nameserver 119.29.29.29
这个数据是从网卡配置文件中来的 /etc/sysconfig/network-scripts/ifcfg-ens33
[root@localhost /]# vi /etc/sysconfig/network-scripts/ifcfg-ens33 [root@localhost /]# ifdown ens33 && ifup ens33 成功断开设备 'ens33'。 成功激活的链接(D-Bus 激活路径:/org/freedesktop/NetworkManager/ActiveConnection/5) [root@localhost /]# cat /etc/resolv.conf # Generated by NetworkManager nameserver 119.29.29.29 nameserver 8.8.8.8
但这只是临时的,也能够在vim /etc/resolv,conf 若是须要永久生效,仍是要在网卡配置文件中添加。
该文件内容以下:
[root@localhost /]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
Selinux是Redhat/CentOS系统特有的安全机制。不过由于这个东西限制太多,配置也特别繁琐因此几乎没有人去真正应用它。因此装完系统,咱们通常都要把selinux关闭,以避免引发没必要要的麻烦。临时关闭selinux的方法为:
[root@localhost ~]# setenforce 0
[root@localhost ~]# setenforce 0 setenforce: SELinux is disabled [root@localhost ~]# getenforce Disabled
获得的结果与咱们设想的不一样,是由于咱们在以前的课程中已经改变了,SELINUX=enforcing改为了SELINUX=disabled.
Disabled 表明 SELinux 被禁用,Permissive 表明仅记录安全警告但不阻止 可疑行为,Enforcing 表明记录警告且阻止可疑行
[root@localhost ~]# vim /etc/selinux/config # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled //已经被关闭了,默认是enforencing # SELINUXTYPE= can take one of three two values: # targeted - Targeted processes are protected, # minimum - Modification of targeted policy. Only selected processes are protected. # mls - Multi Level Security protection. SELINUXTYPE=targeted
iptables是管理防火墙的工具,CentOS7默认防火墙为firewalld。,以前版本使用的netfilter。即便是firewalld,一样也支持以前版本的命令用法,向下兼容。
iptables和netfilter的关系: 这是第一个要说的地方,Iptables和netfilter的关系是一个很容易让人搞不清的问题。不少的知道iptables殊不知道 netfilter。其实iptables只是Linux防火墙的管理工具而已,位于/sbin/iptables。真正实现防火墙功能的是 netfilter,它是Linux内核中实现包过滤的内部结构。
我在网上看到的三者关系图:
systemctl disable firewalld //禁止firewalld服务开机启动
那么咱们先来用下以前的版本,关闭firewalld,开启iptables:
[root@localhost ~]# systemctl disable firewalld //禁止firewalld服务开机启动 Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service. Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service. [root@localhost ~]# systemctl stop firewalld //关闭firewalld服务 [root@localhost ~]# yum install -y iptables-services //安装iptables-services,这样就可使用以前版本的iptables了. [root@localhost ~]# systemctl enable iptables //让他开启服务 Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service. [root@localhost ~]# systemctl start iptables //启动iptables服务
[root@localhost ~]# iptables -nvL Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 205 13528 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 83 6783 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT 114 packets, 13000 bytes) pkts bytes target prot opt in out source destination
上例中,-nvL选项表示查看规则,-F选项表示清除当前规则,但清除只是临时的,重启系统或者重启iptables服务后还会加载已经保存的规则,因此须要使用service iptables save保存一下规则.
[root@localhost ~]# iptables -F; [root@localhost ~]# service iptables save iptables: Saving firewall rules to /etc/sysconfig/iptables:[ 肯定 ]
上例中咱们看到防火墙规则保存在/etc/sysconfig/iptables中,也能够查看一下这个文件。
这个表主要用于过滤包的,是系统预设的表,用的最多。内建三个链INPUT、OUTPUT以及FORWARD。INPUT做用于进入本机的包;OUTPUT做用于本机送出的包;FORWARD做用于那些跟本机无关的包。
主要用处是网络地址转换,也有三个链。PREROUTING 链的做用是在包刚刚到达防火墙时改变它的目的地址,若是须要的话。OUTPUT链改变本地产生的包的目的地址。POSTROUTING链在包就要离开防火墙以前改变其源地址。该表用的很少,但有时候会用到。
这个表主要是用于给数据包打标记,而后根据标记去操做哪些包。这个表几乎不怎么用。除非你想成为一个高级网络工程师,不然你就没有必要花费不少心思在它上面。
通常是为了避免再让iptables对数据包进行跟踪,提升性能。
这个表用于强制访问控制(MAC)网络规则,CentOS6中是没有的
数据包进去路由以前,做用是在包刚刚到达防火墙时改变它的目的地址,若是须要的话。
经过路由后目的地为本机,做用于输入本机的数据包。
经过路由表后,目的地部位本机。做用于与本机无关的包。
由本机产生,向外转发。做用与本机输出的数据包。
发送到网卡接口以前。在包离开防火墙以前改变其源地址。
表链的关系和做用能够理解为三个机器A\B\C之间,A和B有公网实现通信传输,B和C经过私网进行传输,为了能让A和C之间通讯,把B做为网络映射的过程.
??? security表在centos6中并无,用于强制访问控制(MAC)的网络规则
参考文章 http://www.cnblogs.com/metoy/p/4320813.html
iptables是一个很是复杂和功能丰富的工具,因此它的语法也是颇有特色的。
[root@localhost ~]# iptables -t nat -nvL Chain PREROUTING (policy ACCEPT 23 packets, 3004 bytes) pkts bytes target prot opt in out source destination Chain INPUT (policy ACCEPT 23 packets, 3004 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 120 packets, 8796 bytes) pkts bytes target prot opt in out source destination Chain POSTROUTING (policy ACCEPT 120 packets, 8796 bytes) pkts bytes target prot opt in out source destination 2 180 RETURN all -- * * 192.168.122.0/24 224.0.0.0/24 0 0 RETURN all -- * * 192.168.122.0/24 255.255.255.255 0 0 MASQUERADE tcp -- * * 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535 0 0 MASQUERADE udp -- * * 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535 0 0 MASQUERADE all -- * * 192.168.122.0/24 !192.168.122.0/24
以下所示
[root@localhost ~]# iptables -nvL Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 205 13528 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 83 6783 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT 114 packets, 13000 bytes) pkts bytes target prot opt in out source destination
上例中-nvL和-t filter打印的信息是同样的 关于清除规则的命令中,用的最多的就是下面两个:
[root@localhost ~]# iptables -F; //表示把全部规则所有删除 [root@localhost ~]# iptables -nvL Chain INPUT (policy ACCEPT 593 packets, 45671 bytes) pkts bytes target prot opt in out source destination Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 70 packets, 6796 bytes) pkts bytes target prot opt in out source destination
[root@localhost ~]# iptables -nvL Chain INPUT (policy ACCEPT 1095 packets, 89419 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT udp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53 0 0 ACCEPT tcp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53 0 0 ACCEPT udp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67 0 0 ACCEPT tcp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT all -- * virbr0 0.0.0.0/0 192.168.122.0/24 ctstate RELATED,ESTABLISHED 0 0 ACCEPT all -- virbr0 * 192.168.122.0/24 0.0.0.0/0 0 0 ACCEPT all -- virbr0 virbr0 0.0.0.0/0 0.0.0.0/0 0 0 REJECT all -- * virbr0 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable 0 0 REJECT all -- virbr0 * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable Chain OUTPUT (policy ACCEPT 149 packets, 14835 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT udp -- * virbr0 0.0.0.0/0 0.0.0.0/0 udp dpt:68
清零后:
下面举例来理解这些概念:
[root@localhost ~]# iptables -I INPUT -s 1.1.1.1 -j DROP
上例中表示插入一条规则,把来自1.1.1.1的数据包丢掉,下例表示删除刚刚插入的规则
[root@localhost ~]# iptables -D INPUT -s 1.1.1.1 -j DROP
注意上述实例中,删除一条规则时,必须和插入的规则一致,也就是说,两条iptables命令,除了-I和-D不同外,其余地方都同样.
[root@localhost ~]# iptables -I INPUT -s 2.2.2.2 -p tcp --dport 80 -j DROP
注意,--dport/--sport必须和-p选项一块儿使用,不然会出错.
下例表示把发送到10.0.1.14的22端口的数据包丢掉:
[root@localhost ~]# iptables -I OUTPUT -p tcp --dport 22 -d 10.0.1.14 -j DROP
[root@localhost ~]# iptables -nvL --line-numbers Chain INPUT (policy ACCEPT 1662 packets, 124K bytes) num pkts bytes target prot opt in out source destination 1 0 0 DROP tcp -- * * 2.2.2.2 0.0.0.0/0 tcp dpt:80 2 0 0 ACCEPT udp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53 3 0 0 ACCEPT tcp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53 4 0 0 ACCEPT udp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67 5 0 0 ACCEPT tcp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT all -- * virbr0 0.0.0.0/0 192.168.122.0/24 ctstate RELATED,ESTABLISHED 2 0 0 ACCEPT all -- virbr0 * 192.168.122.0/24 0.0.0.0/0 3 0 0 ACCEPT all -- virbr0 virbr0 0.0.0.0/0 0.0.0.0/0 4 0 0 REJECT all -- * virbr0 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable 5 0 0 REJECT all -- virbr0 * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable Chain OUTPUT (policy ACCEPT 264 packets, 28000 bytes) num pkts bytes target prot opt in out source destination 1 0 0 DROP tcp -- * * 0.0.0.0/0 10.0.1.14 tcp dpt:22 2 0 0 ACCEPT udp -- * virbr0 0.0.0.0/0 0.0.0.0/0 udp dpt:68
而后删除某一条规则,使用以下:
[root@localhost ~]# #iptables -A INPUT -s 192.168.122.0/24 -i eth0 -j ACCEPT [root@localhost ~]# iptables -nvL |grep '192.168.122.0/24' 0 0 ACCEPT all -- * virbr0 0.0.0.0/0 192.168.122.0/24 ctstate RELATED,ESTABLISHED 0 0 ACCEPT all -- virbr0 * 192.168.122.0/24 0.0.0.0/0
-t<表>:指定要操纵的表; -A:向规则链中添加条目; -D:从规则链中删除条目; -i:向规则链中插入条目; -R:替换规则链中的条目; -L:显示规则链中已有的条目; -F:清楚规则链中已有的条目; -Z:清空规则链中的数据包计算器和字节计数器; -N:建立新的用户自定义规则链; -P:定义规则链中的默认目标; -h:显示帮助信息; -p:指定要匹配的数据包协议类型; -s:指定要匹配的数据包源ip地址; -j<目标>:指定要跳转的目标; -i<网络接口>:指定数据包进入本机的网络接口; -o<网络接口>:指定数据包要离开本机所使用的网络接口。
iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动做
raw:高级功能,如:网址过滤。 mangle:数据包修改(QOS),用于实现服务质量。 net:地址转换,用于网关路由器。 filter:包过滤,用于防火墙规则。
INPUT链:处理输入数据包。 OUTPUT链:处理输出数据包。 PORWARD链:处理转发数据包。 PREROUTING链:用于目标地址转换(DNAT)。 POSTOUTING链:用于源地址转换(SNAT)。
accept:接收数据包。 DROP:丢弃数据包。 REDIRECT:重定向、映射、透明代理。 SNAT:源地址转换。 DNAT:目标地址转换。 MASQUERADE:IP假装(NAT),用于ADSL。 LOG:日志记录。
vim /usr/local/sbin/iptables.sh //输入一下脚步 #!/bin/bash ipt="/usr/sbin/iptables" // 用一个字符串来定义某个命令,这样易读。这里命令都是绝度路径俩表达 $ipt -F $ipt -P INPUT DROP $ipt -P OUTPUT ACCEPT $ipt -P FORWARD ACCEPT // Here Drop means throw away,and ACCEPT means allow.Drop丢弃的包,ACCEPT是接受该包。 $ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT //增长的规则,-m state指定了状态,--state里面是三次握手是的数据包状态ESTABLISHED表示创建了链接,RELATED额外的链接.为了保证通信正常 $ipt -A INPUT -s 192.168.72.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
[root@localhost ~]# sh /usr/local/sbin/iptables.sh [root@localhost ~]# iptables -nvL Chain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 44 3052 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 0 0 ACCEPT tcp -- * * 192.168.72.0/24 0.0.0.0/0 tcp dpt:22 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:21 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 26 packets, 2537 bytes) pkts bytes target prot opt in out source destination
[root@localhost ~]# service iptables restart Redirecting to /bin/systemctl restart iptables.service
3.1 ping 外网是正常的,外部ping虚拟机没法链接
iptables -A INPUT -p all -m state --state INVALID -j DROP
iptables -A INPUT all -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --syn --dport 22 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp --syn -m state --state NEW -m multiport --dport 21,22,23,24,25 -j ACCEPT
iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
cat /root/mac_list.txt | while read MAC
do
MAC=$( echo $MAC | awk '{print $1}' )
iptables -t filter -A FORWARD -i eth1 -o eth0 -m mac --mac-source $MAC -j ACCEPT
done
mangle表用法 MRAK模块匹配(单数据包)
iptables -t mangle -A PREROUTING -p tcp --dport 80 -j MARK --set-mark 80
iptables -A FORWARD -p all -m mark --mark 80 -j DROP
iptables -A OUTPUT -p tcp -m owner --uid--owner tom --dport 80 -j ACCEPT
iptables -A OUTPUT -p udp -m owner --uid--owner tom --dport 53 -j ACCEPT
iptables -A OUTPUT -p all -m owner --uid--owner tom -j DROP
iptables -A INPUT -m iprange --src-range 192.168.0.2-192.168.0.61 -j DROP
iptables -A INPUT -m iprange --dst-range 192.168.0.2-192.168.0.61 -j DROP
iptables -A INPUT -m ttl --ttl-eq 64 -j REJECT
--ttl-eq 等于
--ttl-lt 小于
--ttl-gt 大于
TCP NEW ESTABLISHED
UDP NEW ESTABLISHED
ICMP NEW RELATED
IPSEC SPI 值控制模块 iptables -A FORWARD -p ah -m ah --ahspi 300 -j ACCEPT iptables -A FORWARD -p esp -m esp --espspi 200 -j ACCEPT