一、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