一、Linux网络相关

1. ifconfig 查看网卡IP

ifconfig命令被用于配置和显示Linux内核中网络接口的网络参数。用ifconfig命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在。要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件了。 语法:

# ifconfig [参数]

参数:

可参考(包含用法):http://man.linuxde.net/ifconfig

实例: **1、**ifconfig类似与windows的ipconfig,不加任何选项和参数只打印当前网卡的IP相关信息(子网掩码、网关等)。在windows下设置IP非常简单,然而在命令窗口下如何设置?这就需要去修改配置文件/etc/sysconfig/network-scripts/ifcfg-eth33了,如果是lo那么配置文件是/etc/sysconfig/network-scripts/ifcfg-lo。

[root@localhost ~]# ifconfig       //直接输入该命令即可查看当前网卡信息
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.204.128  netmask 255.255.255.0  broadcast 192.168.204.255
        inet6 fe80::9045:61b6:c7f7:5501  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:34:a9:bc  txqueuelen 1000  (Ethernet)
        RX packets 76554  bytes 26401473 (25.1 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 71194  bytes 17838448 (17.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 96  bytes 8300 (8.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 96  bytes 8300 (8.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

**2、**Linux上有多个网卡,而只想重启某一个网卡的话,可以使用这个命令:

[root@localhost ~]# ifdown ens33; ifup ens33
成功断开设备 'ens33'。
成功激活的连接(D-Bus 激活路径:/org/freedesktop/NetworkManager/ActiveConnection/4)

ifdown即停掉网卡,ifup即启动网卡。有一点要提醒你的是,如果我们远程登录服务器,当使用ifdown ens33这个命令的时候,很有可能后面的命令ifup eth33不会被运行,这样导致我们断网而无法连接服务器,所以请尽量使用 service network restart 这个命令来重启网卡。 3、给一个网卡设定多个IP: 在linux系统中,网卡是可以设定多重IP的,比如给ens33在设置一个ip。

[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens33\:1             //这里的反斜杠是为‘:’脱义
[root@localhost network-scripts]# ls ifcfg*
ifcfg-ens33  ifcfg-ens33:1  ifcfg-lo

然后编辑ifcfg-ens33:1

[root@localhost network-scripts]# vim ifcfg-ens33:1
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33:1                                                        //修改名字
UUID=27834d68-e1eb-499d-8cd9-1063a3144551
DEVICE=ens33:1                                                     //修改设备名
ONBOOT=yes
IPADDR=192.168.204.150                                      //修改IP
NETMASK=255.255.255.0
GATEWAY=192.168.204.2
DNS1=119.29.29.29

修改好之后重启网卡,之后在查看IP,多了一个ens33:1。

[root@localhost ~]# ifdown ens33 && ifup ens33
成功断开设备 'ens33'。
成功激活的连接(D-Bus 激活路径:/org/freedesktop/NetworkManager/ActiveConnection/5)
[root@localhost ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.204.128  netmask 255.255.255.0  broadcast 192.168.204.255
        inet6 fe80::9045:61b6:c7f7:5501  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:34:a9:bc  txqueuelen 1000  (Ethernet)
        RX packets 78147  bytes 26515636 (25.2 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 71719  bytes 17894280 (17.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens33:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.204.150  netmask 255.255.255.0  broadcast 192.168.204.255
        ether 00:0c:29:34:a9:bc  txqueuelen 1000  (Ethernet)

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 112  bytes 9660 (9.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 112  bytes 9660 (9.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

**3、**查看网卡连接状态

[root@localhost ~]# mii-tool ens33
ens33: negotiated 1000baseT-FD flow-control, link ok

只要看到 “link ok” 就说明网卡为连接状态,如果显示 “no link” 说明网卡坏掉了或者没有连接网线。 另外还有一个命令也可以查看网卡状态:

[root@localhost ~]# ethtool ens33
Settings for ens33:
	Supported ports: [ TP ]
	Supported link modes:   10baseT/Half 10baseT/Full 
	                        100baseT/Half 100baseT/Full 
	                        1000baseT/Full 
	Supported pause frame use: No
	Supports auto-negotiation: Yes
	Advertised link modes:  10baseT/Half 10baseT/Full 
	                        100baseT/Half 100baseT/Full 
	                        1000baseT/Full 
	Advertised pause frame use: No
	Advertised auto-negotiation: Yes
	Speed: 1000Mb/s
	Duplex: Full
	Port: Twisted Pair
	PHYAD: 0
	Transceiver: internal
	Auto-negotiation: on
	MDI-X: off (auto)
	Supports Wake-on: d
	Wake-on: d
	Current message level: 0x00000007 (7)
			       drv probe link
	Link detected: yes

查看最后一行Link detected,yes则是连接成功的,如果没有连接则显示:no。 **4、**更改主机名 当装完系统后,默认主机名为localhost,使用hostname就可以知道你的linux的主机名是什么:

[root@localhost ~]# hostname
localhost.localdomain

更改主机名:

[root@localhost ~]# hostname
localhost.localdomain
[root@localhost ~]# hostnamectl set-hostname zlinux
[root@localhost ~]# hostname
zlinux
[root@localhost ~]# bash
[root@zlinux ~]#                                              //打开子shell就看到已经修改好了,重启也可以          

**5、**设置DNS DNS是用来解析域名用的,平时我们访问网站都是直接输入一个网址,而dns把这个网址解析到一个IP。关于dns的概念,如果很陌生的话,那就去网上查一下。在linux下面设置dns非常简单,只要把dns地址写到一个配置文件中即可。这个配置文件就是/etc/resolv.conf。但这只是临时的,如果需要永久生效,还是要在网卡配置文件中添加。

[root@zlinux ~]# cat /etc/resolv.conf 
# Generated by NetworkManager
nameserver 119.29.29.29                             //dns地址,可以直接在下面加另一dns地址:nameserver x.x.x.x

resolv.conf有它固有的格式,一定要写成nameserver IP的格式,上面那行以 ‘#’ 为开头的行是一行注释,没有实际意义,建议写两个或多个namserver ,默认会用第一个namserver去解析域名,当第一个解析不到时会使用第二个。在linux下面有一个特殊的文件/etc/hosts也能解析域名,不过是需要我们手动在里面添加IP+域名这些内容,它的作用是临时解析某个域名,非常有用。在里面添加一个IP+域名。

[root@zlinux ~]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.204.2 www.baidu.com    //添加的ip和域名

保存退出之后,ping以下域名就会连接到ip:

[root@zlinux ~]# ping -c 2 www.baidu.com
PING www.baidu.com (192.168.204.2) 56(84) bytes of data.
64 bytes from www.baidu.com (192.168.204.2): icmp_seq=1 ttl=128 time=0.202 ms
64 bytes from www.baidu.com (192.168.204.2): icmp_seq=2 ttl=128 time=0.160 ms

--- www.baidu.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.160/0.181/0.202/0.021 ms

/etc/hosts 的格式很简单,每一行作为一条记录,分成两部分,第一部分是IP,第二部分是域名。关于hosts文件,有几点需要你注意:

1)一个IP后面可以跟多个域名,可以是几十个甚至上百个; 2)每行只能有一个IP,也就是说一个域名不能对应多个IP; 3)如果有多行中出现相同的域名(前面IP不一样),会按最前面出现的记录来解析。

二、Linux的防火墙

1、SELinux

Selinux是Redhat/CentOS系统特有的安全机制。不过因为这个东西限制太多,配置也特别繁琐所以几乎没有人去真正应用它。所以装完系统,我们一般都要把selinux关闭,以免引起不必要的麻烦。临时关闭selinux的方法为:

[root@zlinux ~]# getenforce          //获取当前SELinux状态
Enforcing                                       //开启状态
[root@zlinux ~]# setenforce 0       //临时关闭SELinux
[root@zlinux ~]# getenforce
Permissive                                    //临时关闭状态

这个仅仅是临时关闭,如果要永久关闭则需要修改配置文件/etc/selinux/config, 把SELINUX=Enforce,改为disabled,修改好之后重启:

[root@zlinux ~]# 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                //修改为disabled
# 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

重启之后查看SELinux状态:

[root@zlinux ~]# getenforce
Disabled

2、netfilter

iptables和firewalld都是管理netfilter防火墙的工具,centos7默认使用firewalld来netfilter防火墙。CentOS7默认防火墙是Fierwalld,之前版本使用的netfilter。即使是firewalld,同样也支持之前版本的命令用法,想先兼容。 那么我们先来用下之前的版本,关闭firewalld,开启iptables:

[root@zlinux ~]# systemctl stop firewalld          //关闭firewalld服务
[root@zlinux ~]# 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@zlinux ~]# yum install -y iptables-services   //安装iptables-services,以便使用iptables
[root@zlinux ~]# systemctl enable iptables      //开机启动iptables
Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service.
[root@zlinux ~]# systemctl start  iptables       //启动iptables

完成这些步骤之后,我们就可以使用iptables了。示例如下:

# iptables -nvL

CentOS上默认是设有iptables规则的,这个规则虽然很安全,但是对于我们来说没有用,反而会造成某些影响,所以建议先清除规则,然后把清除后的规则保存一下:

[root@zlinux ~]# iptables -F; service iptables save     //-F清除规则,然后保存
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  确定  ]
[root@zlinux ~]# iptables -nvL
Chain INPUT (policy ACCEPT 8 packets, 508 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 6 packets, 760 bytes)
 pkts bytes target     prot opt in     out     source               destination  

通过上边的命令输出我们也可以看到,防火墙规则保存在了/etc/sysconfig/iptables,可以查看一下这个文件。

1、netfilter的5个表

filter:这个表主要用于过滤包的,是系统预设的表,这个表也是阿铭用的最多的。内建三个链INPUT、OUTPUT以及FORWARD。INPUT作用于进入本机的包;OUTPUT作用于本机送出的包;FORWARD作用于那些跟本机无关的包。 nat:主要用处是网络地址转换,也有三个链。PREROUTING 链的作用是在包刚刚到达防火墙时改变它的目的地址,如果需要的话。OUTPUT链改变本地产生的包的目的地址。POSTROUTING链在包就要离开防火墙之前改变其源地址。该表用的不多,但有时候会用到。 mangleL:这个表主要是用于给数据包打标记,然后根据标记去操作哪些包。这个表几乎不怎么用。除非你想成为一个高级网络工程师,否则你就没有必要花费很多心思在它上面。 raw:一般是为了不再让iptables对数据包进行跟踪,提高性能。 security:这个表用于强制访问控制(MAC)网络规则。

2、netfilter的5个链

PRERPUTING链:数据包进去路由之前,作用是在包刚刚到达防火墙时改变它的目的地址,如果需要的话。 INPUT链:通过路由后目的地为本机,作用于输入本机的数据包。 FORWARD链:通过路由表后,目的地部位本机。作用于与本机无关的包。 OUTPUT链:由本机产生,向外转发。作用与本机输出的数据包。 POSTROUTING链:发送到网卡接口之前。在包离开防火墙之前改变其源地址。

关于netfilter、iptables课参考:http://blog.51cto.com/lizonglun/1770601

3、iptables基本语法

语法:

# iptables [选项] [参数]

选项:

-t<表>:指定要操纵的表; -A/-D :增加删除一条规则; -I :插入一条规则,其实跟-A的效果一样; -p :指定协议,可以是tcp,udp或者icmp; --dport :跟-p一起使用,指定目标端口; --sport :跟-p一起使用,指定源端口; -s :指定源IP(可以是一个ip段); -d :指定目的IP(可以是一个ip段); -j :后跟动作,其中ACCEPT表示允许包,DROP表示丢掉包,REJECT表示拒绝包; -i :指定网卡(不常用,但有时候能用到); -Z:清空规则链中的数据包计算器和字节计数器; -N:创建新的用户自定义规则链; -P:定义规则链中的默认目标; -R:替换规则链中的条目; -L:列出规则; -n:表示不针对IP泛解析主机名; -v:表示列出更加详细的信息。

iptables命令选项输入顺序:

iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作

表包括:

filter表:对包进行过滤 nat表:进行地址转换 mangle表:对数据包进行修改 raw表:一般是为了不再让iptables对数据包进行跟踪,提高性能 security表:这个表用于强制访问控制(MAC)网络规则

规则链名:

INPUT链:处理输入数据包。 OUTPUT链:处理输出数据包。 PORWARD链:处理转发数据包。 PREROUTING链:用于目标地址转换(DNAT)。 POSTOUTING链:用于源地址转换(SNAT)。

动作:

accept:接收数据包。 DROP:丢弃数据包。 REDIRECT:重定向、映射、透明代理。 SNAT:源地址转换。 DNAT:目标地址转换。 MASQUERADE:IP伪装(NAT),用于ADSL。 LOG:日志记录。

实例: 1、查看nat表的规则: 2、增加一条规则:

# iptables -A INPUT -s 192.168.204.2 -p tcp --sport 1314 -d 192.168.204.128 --dport 80 -j drop

这就是增加了一条规则,省略-t所以针对的是filter表。-A 表示增加一条规则,另外还有-I 表示插入一条规则,-D删除一条规则;后面的INPUT即链名称,还可以是OUTPUT或者FORWORD;-s 后跟源地址;-p 协议(tcp, udp, icmp); --sport/--dport 后跟源端口/目标端口;-d 后跟目的IP(主要针对内网或者外网);-j 后跟动作(DROP即把包丢掉,REJECT即包拒绝;ACCEPT即允许包)。 再说几个例子,便于理解: 1)插入一条规则: 2)删除一条规则: 注意要删除一条规则时,必须和插入的规则一致,也就是说,两条iptables命令,除了-I 和-D不一样外,其他地方都一样。 3)把来自1.1.1.2 并且是tcp协议到本机的80端口的数据包丢掉: --dport/--sport 必须要和-p选项一起使用,否则会出错。 4)把发送到2.2.2.3的22端口的数据包丢掉: 有时候你的服务器上iptables过多了,想删除某一条规则时,又不容易掌握当时创建时的规则。其实有一种比较简单的方法:

然后删除某条规则: 还有更多用法课参考:http://blog.csdn.net/u010861514/article/details/51333401,http://man.linuxde.net/iptables