七周三次课(1月24日)
10.11 Linux网络相关
10.12 firewalld和netfilter
10.13 netfilter5表5链介绍
10.14 iptables语法
===============================================================================================================================================================================================================================================================================================================================
Linux网络相关
用ifconfig命令查看网卡IP
前面曾用过ip addr这个命令来查看系统的IP地址。其实在centos 7之前,我们使用最多的命令是ifconfig,它类似于Windows的ipconfig命令,后面不加任何选项和参数时,只打印当前网卡的相关信息 (如子网掩码、 网关等)。在Windows下设置IP非常简单,然而在命令窗口下如何设置呢?这就需要修改配置文件/etc/sysconfig/network-scripts/ifcfg-xxx了,这里的xxx指的是网卡的名字,可以使用ip add命令查看所有网卡。如果你的系统里没有ifconfig命令,可以使用yum install –y net-tools安装。
如果有多个网卡,而你只想重启某一个网卡的话,可以使用如下命令:
# ifdown ens33 关闭网卡
# ifup ens33 启动网卡
需要大家注意的是,如果我们远程登录服务器,当使用命令ifdown ens33时,很有可能后面的命令ifup ens33不会运行。这样会导致我们断网而无法连接服务器
可以使用命令systemctl restart network来重启网卡。,可以使用如下命令
给一个网卡设定多个IP
在Linux系统中,网卡是可以设定多重IP的
IP的设置过程如下:
# cd /etc/sysconfig/network-scripts
# cp ifcfg-ens33 ifcfg-ens33\:0
之所以加反斜杠(\),是因为要把:转义,不然在Linux命令行下面无法识别。然后编辑 ifcfg- ens33:0这个配置文件。
修改上述NAME、DEVICE、IPADDR,设置完毕重启网卡
查看网卡连接状态
这里显示link ok,就说明网卡为连接状态。如果显示no link,说明网卡坏了或者没有连接。
还有一个命令也可以查看网卡的状态
这里显示Link detected: yes。如果网卡没有连接,则显示Link detected: no
更改主机名
安装完系统后,主机名默认为localhost. localdomain, 使用hostname命令就可以查看Linux的主机名,
使用hostname命令也可以更改主机名
下次登录时,命令提示符[root@localhost~] 中的localhost就会更改成新的主机名。不过这样修改只是保存在内存中,如果重启,主机名还会变成改动之前的名称。
如要重启后使用新的主机名,要用如下命令
更改主机名 hostnamectl set-hostname aminglinux
主机名的相关配置文件/etc/hostname。
设置DNS
DNS是用来解析域名的。平时我们访问网站都是直接输人一个网址,而DNS把这个网址解析到一个IP
在Linux下设置DNS非常简单,只要把DNS地址写到配置文件/etc/resolv.conf中即可。
如果只是临时修改DNS IP地址,就直接修改/etc/resolv.conf;如果是永久生效的话,还是要修改网卡的配置文件。
在Linux下还有一个特殊文件/etc/hosts也能解析域名,不过需要我们在里面手动添加IP和域名这内容它的作用是临时解析某个域名,非常有用。
/etc/hosts的格式很简单,每一行为一条记录分成两部分,第一部分是IP,第二部分是域名。关于hosts文件,有以下几点需要你注意:
一个IP后面可以跟多个域名,可以是几十个甚至上百个;
每一行只能有一个IP,也就是说一个域名不能对应多个IP;
如果有多行中出现相同的域名(对应的IP不一样),会按最后面出现的记录来解析
10.12 firewalld和netfilter
SELinux是Linux系统特有的安全机制。因为这种机制的限制太多,配置也特别烦琐,所以我们一般都要把SELinux关闭,以免引起不必要的麻烦。
临时关闭SELinux的方法为:
但这仅仅是临时的,要想永久关闭需要更改配置文件/etc/selinux/config需要把SELINUX= enforcing 改成SELINUX=disabled
更改完后重启系统方可生效。
netfilter
centos7之前使用netfilter防火墙。centos7开始使用firewalld防火墙
关闭firewalld开启netfilter方法
禁止firewalld服务开机启动
关闭firewalld服务
安装iptables-services
开机启动iptables
启动iptables服务
查看iptable规则
上例中,-nvL选项表示查看规则,-F选项表示清除当前规则,但清除只是临时的,重启系统或者重启iptables服务后还会加载已经保存的规则,所以需要使用service tables save保存一下规则。通过上面的命令输出,我们也可以看到,防火墙规则保存在/etc/sysconfig/iptables中,你可以查看一下这个文件。
netfilter5表5链介绍
netfilter的5个表
filter表主要用于过滤包,是系统预设的表,这个表也是用得最多的表。该表内建3个链:INPUT、OUTPUT以及FORWARD。 INPUT链作用于进入本机的包,OUTPUT链作用于本机送出的包,FORWARD链作用于那些跟本机无关的包 。
nat表主要用于网络地址转换,它也有3个链。REROUTING链的作用是在包刚刚到达防火墙时改变它的目的地址(如果需要的话),OUTPUT链的作用是改变本地产生的包的目的地址,POSTROUTING链的作用是在包即将离开防火墙时改变其源地址。
mangle表主要用于给数据包做标记,然后根据标记去操作相应的包。这个表几乎不怎么用, 除非你想成为一个高级网络工程师,否则就不需要太关注。
raw表可以实现不追踪某些数据包,默认系统的数据包都会被追踪,但追踪势必消耗一定的资源,所以可以用raw表来指定某些端口的包不被追踪。
security表在centos 6中是没有的,它用于强制访问控制 (MAC)的网络规则。。
2.netfilter的5个链
5个链分别为PREROUTING、 INPUT、 FORWARD、 OUTPUT、 POSTROUTING
REROUTING:数据包进人路由表之前。用于目标地址转换(DNAT)。
INPUT:通过路由表后目的地为本机。处理输入数据包
FORWARDING:通过路由表后,目的地不为本机。处理转发数据包。
OUTPUT:由本机产生,向外转发。处理输出数据包。
POSTROUTIONG:发送到网卡接口之前。用于源地址转换(SNAT)。
iptables和netfilter的关系:
iptables和netfilter的关系是一个很容易让人搞不清的问题。很多的知道iptables却不知道 netfilter。其实iptables只是Linux防火墙的管理工具而已,位于/sbin/iptables。真正实现防火墙功能的是 netfilter,它是Linux内核中实现包过滤的内部结构。
iptables传输数据包的过程
① 当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。 ② 如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出。 ③ 如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出。
iptables的规则表和链:
表(tables)提供特定的功能,iptables内置了4个表,即filter表、nat表、mangle表和raw表,分别用于实现包过滤,网络地址转换、包重构(修改)和数据跟踪处理。
链(chains)是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一 条或数条规则。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据 该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定 义的默认策略来处理数据包。
iptables采用“表”和“链”的分层结构。在REHL4中是三张表五个链。现在REHL5成了四张表五个链了,不过多出来的那个表用的也不太多,所以基本还是和以前一样。下面罗列一下这四张表和五个链。注意一定要明白这些表和链的关系及作用。
10.14 iptables语法
iptables是一个非常复杂和功能丰富的工具,所以它的语法也是很有特点的。下面就给大家介绍几种常用的语法。
查看规则:iptables –nvL。其中-n表示不针对IP反解析主机名,-L表示列出,-v表示列出的信息更加详细。
重启规则:service restart iptables.service
防火墙规则保存在/etc/sysconfig/iptables中
清空规则:iptables -F 。如果不加-t指定表,默认只清楚filter表的规则。iptables文件里还有,重启规则后会恢复。
保存规则:service iptables save
-t指定表 iptables -t nat:如果不加-t选项,则显示的filter表的相关信息。
把计数器清零:iptables -Z。把包以及流量计数器清零。
增加/删除一条规则,其用法如下:
iptables -A INPUT -s 192.168.188.1 -p tcp --sport 1234 -d 192.168.188.128 --dport 80 -j DROP
-A/-D:表示增加/删除一条规则。在指定链的末尾添加(append)一条新的规则
-I:在指定链中插入(insert)一条新的规则。例:iptables -I INPUT 1 --dport 80 -j ACCEPT,默认在第一行添加
-p:表示指定协议,可以是tcp、udp或者icmp。
--dport:跟-p一起使用,表示指定目标端口。
--sport:跟-p一起使用,表示指定源端口。
-s:表示指定源IP(可以是一个IP段)。
-d:表示指定目的IP(可以是一个IP段)。
-j: 后面跟动作,其中ACCEPT表示允许包,DROP表示丢掉包,REJECT表示拒绝包。
-i:表示指定网卡
-v:查看规则表详细信息(verbose)的信息
-L/S:列出指定链或所有链的规则。
-F :删除指定链或所有链的规则
-N :创建用户自定义链。例:iptables -N allowed
-X :删除指定的用户自定义链
-P :为指定链设置默认规则策略,对自定义链不起作用。例:iptables -P OUTPUT DROP
-Z :将指定链或所有链的计数器清零
-E :更改自定义链的名称。例:iptables -E allowed disallowed,不改变链本身
-n :ip地址和端口号以数字方式显示。例:iptables -Ln
iptables -I INPUT -p tcp --dport 80 -j DROP
有时候服务器上的iptables过多了,你想删除某一条规则,但又不容易掌握创建时的规则。其实有一种比较简单的方法,根据编号来删除规则。
打印规则的序列号:iptables -nvL --line-numbers
删除某一条规则
指定网卡规则:
iptables -I INPUT -s 192.168.1.0/24 -i eth0 -j ACCEPT
预设策略:iptables –P INPUT DROP
-P后面跟链名,策略内容或为DROP,或ACCEPT,默认是ACCEPT。注意:如果你在连接远程服务器,千万不要随便执行这个命令,因为一旦输入命令并回车,远程服务器就会被断开。
这个策略一旦设定后,只有使用命令iptables –P INPUT ACCEPT才能恢复成原始状态。
=================================================================================================================================================================================================================================================================================================================================
Last login: Tue Jan 24 23:41:35 2018 from 192.168.183.1
[root@localhost ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.44.128 netmask 255.255.255.0 broadcast 192.168.44.255
inet6 fe80::9d1c:ba9a:850d:5e30 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:f6:5a:ef txqueuelen 1000 (Ethernet)
RX packets 319 bytes 25600 (25.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 133 bytes 11668 (11.3 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.183.128 netmask 255.255.255.0 broadcast 192.168.183.255
inet6 fe80::aea3:cf3e:1eb8:ac2f prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:f6:5a:f9 txqueuelen 1000 (Ethernet)
RX packets 68 bytes 9189 (8.9 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 45 bytes 8741 (8.5 KiB)
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 4 bytes 340 (340.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 4 bytes 340 (340.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@localhost ~]# ifdown ens33; ifup ens33 ^C
[root@localhost ~]# cd /etc/sysconfig//network-scripts/
[root@localhost network-scripts]# ls
ifcfg-ens33 ifdown-ipv6 ifdown-tunnel ifup-isdn ifup-TeamPort
ifcfg-lo ifdown-isdn ifup ifup-plip ifup-tunnel
ifcfg-有线连接_1 ifdown-post ifup-aliases ifup-plusb ifup-wireless
ifdown ifdown-ppp ifup-bnep ifup-post init.ipv6-global
ifdown-bnep ifdown-routes ifup-eth ifup-ppp network-functions
ifdown-eth ifdown-sit ifup-ib ifup-routes network-functions-ipv6
ifdown-ib ifdown-Team ifup-ippp ifup-sit
ifdown-ippp ifdown-TeamPort ifup-ipv6 ifup-Team
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens33\:0
[root@localhost network-scripts]# vi !$
vi ifcfg-ens33\:0
[root@localhost network-scripts]# ifdown ens33 && ifup ens33
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-ens33'
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-ens33'
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-ens33'
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-ens33'
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-ens33'
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-ens33'
ipcalc: bad IPv6 address: :192.168.160.128
ipcalc: bad IPv6 address: :192.168.160.128
ipcalc: bad IPv6 address: :192.168.160.128
arping: :192.168.160.128: 未知的名称或服务
Error: ??? prefix is expected rather than ":192.168.160.128/".
错误 : [/etc/sysconfig/network-scripts/ifup-eth] Error adding address :192.168.160.128 for ens33.
arping: :192.168.160.128: 未知的名称或服务
Error: ??? prefix is expected rather than ":192.168.160.128/".
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-ens33'
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-ens33'
/etc/sysconfig/network-scripts/ifup-aliases:行175: ipseen_:192_168_44_128=ifcfg-ens33:0: 未找到命令
ERROR : [/etc/sysconfig/network-scripts/ifup-aliases] error in ifcfg-ens33:0: already seen ipaddr :192.168.44.128 in :192_168_44_128
[root@localhost network-scripts]# vi ifcfg-ens33\:0
[root@localhost network-scripts]# vi ifcfg-ens33\:0
[root@localhost network-scripts]# vi ifcfg-ens33
[root@localhost network-scripts]# vi ifcfg-ens33\:0
[root@localhost network-scripts]# ifdown ens33 && ifup ens33
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-ens33'
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-ens33'
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-ens33'
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-ens33'
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-ens33'
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-ens33'
ipcalc: bad IPv6 address: :192.168.44.128
ipcalc: bad IPv6 address: :192.168.44.128
ipcalc: bad IPv6 address: :192.168.44.128
arping: :192.168.44.128: 未知的名称或服务
Error: ??? prefix is expected rather than ":192.168.44.128/".
错误 : [/etc/sysconfig/network-scripts/ifup-eth] Error adding address :192.168.44.128 for ens33.
arping: :192.168.44.128: 未知的名称或服务
Error: ??? prefix is expected rather than ":192.168.44.128/".
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-ens33'
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-ens33'
/etc/sysconfig/network-scripts/ifup-aliases:行175: ipseen_:192_168_44_175=ifcfg-ens33:0: 未找到命令
ERROR : [/etc/sysconfig/network-scripts/ifup-aliases] error in ifcfg-ens33:0: already seen ipaddr :192.168.44.175 in :192_168_44_175
[root@localhost network-scripts]# ls
ifcfg-ens33 ifdown-ippp ifdown-TeamPort ifup-ipv6 ifup-Team
ifcfg-ens33:0 ifdown-ipv6 ifdown-tunnel ifup-isdn ifup-TeamPort
ifcfg-lo ifdown-isdn ifup ifup-plip ifup-tunnel
ifcfg-有线连接_1 ifdown-post ifup-aliases ifup-plusb ifup-wireless
ifdown ifdown-ppp ifup-bnep ifup-post init.ipv6-global
ifdown-bnep ifdown-routes ifup-eth ifup-ppp network-functions
ifdown-eth ifdown-sit ifup-ib ifup-routes network-functions-ipv6
ifdown-ib ifdown-Team ifup-ippp ifup-sit
[root@localhost network-scripts]#
[root@localhost ~]# mii-tool ens33
ens33: negotiated 1000baseT-FD flow-control, link ok
[root@localhost ~]# cat /etc/hostname
localhost.localdomain
[root@localhost ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search localdomain
nameserver 119.29.29.29
[root@localhost ~]# ping www.qq123.com
PING www.qq123.com (202.91.250.93) 56(84) bytes of data.
64 bytes from www.qq123.com (202.91.250.93): icmp_seq=1 ttl=128 time=22.5 ms
64 bytes from www.qq123.com (202.91.250.93): icmp_seq=2 ttl=128 time=22.2 ms
64 bytes from www.qq123.com (202.91.250.93): icmp_seq=3 ttl=128 time=22.3 ms
64 bytes from www.qq123.com (202.91.250.93): icmp_seq=4 ttl=128 time=22.1 ms
64 bytes from www.qq123.com (202.91.250.93): icmp_seq=5 ttl=128 time=22.0 ms
64 bytes from www.qq123.com (202.91.250.93): icmp_seq=6 ttl=128 time=22.8 ms
64 bytes from www.qq123.com (202.91.250.93): icmp_seq=7 ttl=128 time=22.5 ms
64 bytes from www.qq123.com (202.91.250.93): icmp_seq=8 ttl=128 time=21.8 ms
64 bytes from www.qq123.com (202.91.250.93): icmp_seq=9 ttl=128 time=22.1 ms
^C
--- www.qq123.com ping statistics ---
9 packets transmitted, 9 received, 0% packet loss, time 8014ms
rtt min/avg/max/mdev = 21.881/22.314/22.886/0.314 ms
[root@localhost ~]# systemctl disable 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
[root@localhost ~]#
[root@localhost ~]# yun install -y iptables-servvices
-bash: yun: 未找到命令
[root@localhost ~]# yum install -y iptables-servvices
已加载插件:fastestmirror
base | 3.6 kB 00:00:00
epel/x86_64/metalink | 6.6 kB 00:00:00
epel | 4.7 kB 00:00:00
extras | 3.4 kB 00:00:00
updates | 3.4 kB 00:00:00
(1/3): epel/x86_64/group_gz | 266 kB 00:00:00
(2/3): epel/x86_64/updateinfo | 877 kB 00:00:00
(3/3): epel/x86_64/primary_db | 6.2 MB 00:00:00
Loading mirror speeds from cached hostfile
* epel: mirrors.tongji.edu.cn
没有可用软件包 iptables-servvices。
错误:无须任何处理
[root@localhost ~]# yum install -y iptables-servvices
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* epel: mirrors.tongji.edu.cn
没有可用软件包 iptables-servvices。
错误:无须任何处理
[root@localhost ~]#