主要内容
Linux网络相关
firewalld和netfilter
netfilter 5表5链
iptables语法
1.Linux网络相关
ifconfig类似与windows的ipconfig,不加任何选项和参数只打印当前网卡的IP相关信息(子网掩码、网关等)。设置ip需要修改配置文件/etc/sysconfig/network-scripts/ifcfg-网卡名,如果Linux上有多个网卡,而只想重启某一个网卡的话,可以使用这个命令:
ifdown ens33 ; ifup ens33
ifdown 即停掉网卡,ifup即启动网卡。如果远程登录服务器,当使用ifdown ens33这个命令的时候,很有可能后面的命令ifup ens33不会被运行,这样导致我们断网而无法连接服务器,所以尽量使用 service network restart 这个命令来重启网卡。或者用ifdown ens33 && ifup ens33
1).给一个网卡设定多个IP
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-eth0 ifcfg-ens33\:1
之所以加反斜杠\,是因为要把冒号:转义,不然在Linux命令行下面无法识别。然后编辑ifcfg-ens33:1 这个配置文件,内容如下,一定要注意 DEVICE 这里要写成 "ens33:1"
其实就是改一下NAME,DEVICE,IPADDR,设置完毕重启网卡,使用命令:
ifdown ens33 && ifup ens33
之后再查看ip:
2).查看网卡连接状态
只要看到 "link ok" 就说明网卡为连接状态,如果显示 "no link" 说明网卡坏掉了或者没有连接网线。
3)更改主机名
当装完系统后,默认主机名为localhost,使用hostname查看linux的主机名是什么。
[root@greg-01 ~]# hostname
greg-01
[root@greg-01 ~]# hostnamectl set-hostname gregory
[root@greg-01 ~]# hostname
gregory
[root@greg-01 ~]# cat /etc/hostname
gregory
[root@greg-01 ~]#
4)设置DNS
DNS是用来解析域名用的,平时访问网站都是直接输入一个网址,而dns把这个网址解析到一个IP。在linux下面设置dns,只要把dns地址写到一个配置文件/etc/resolv.conf中即可。
第一行以#开头的是一个注释,没有实际意义。这个配置文件中的DNS IP地址是由NetworkManager服务生成的。NetworkManager是一个继承的Linux网络管理器。
resolv.conf有它固有的格式,一定要写成 "nameserver IP" 的格式,建议写两个或多个namserver ,默认会用第一个namserver去解析域名,当第一个解析不到时会使用第二个。
如果临时修改DNS IP地址,直接修改/etc/resolv.conf;
如果永久生效的话,修改网卡的配置文件。
在linux下面有一个特殊的文件/etc/hosts也能解析域名,不过是需要我们手动在里面添加IP+域名这些内容,它的作用是临时解析某个域名,非常有用。
用vim 编辑最后一行。
/etc/hosts 的格式很简单,每一行作为一条记录,分成两部分,第一部分是IP,第二部分是域名。关于hosts文件,有几点需要您注意:
1)一个IP后面可以跟多个域名,可以是几十个甚至上百个;
2)每行只能有一个IP,也就是说一个域名不能对应多个IP;
3)如果有多行中出现相同的域名(前面IP不一样),会按最前面出现的记录来解析。
2.firewalld和netfilter
Selinux是Redhat/CentOS系统特有的安全机制。不过因为这个东西限制太多,配置也特别繁琐所以几乎没有人去真正应用它。所以装完系统,我们一般都要把selinux关闭,以免引起不必要的麻烦。关闭selinux的方法为,使 "SELINUX=disabled", 默认为 enforcing。
保存该配置文件后,重启机器方可生效,临时关闭selinux的命令为:setenforce 0
getenforce 命令获得当前selinux的状态:getenforce
默认会输出 "enforcing" , 当使用 setenforce 0 这个命令后,再 getenforce 会输出 "permissive"。
systemctl disable firewalld禁止firewalld服务开机启动
systemctl stop firewalld关闭firewalld服务
yum install -y iptables-services 安装iptables-services,这样就可以使用之前版本的iptables了。
[root@greg-01 ~]# systemctl enable iptables 让它开机启动
Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service.
[root@greg-01 ~]# systemctl start iptables 启动iptables服务
centos默认设置有iptables规则,这个规则很安全,但没什么用,先清楚规则,然后把清除后的规则保存一下。
iptables –nvL,-nvL选项表示查看规则,-F选项表示清除当前规则,但清除知识临时的,重启系统或者重启iptables服务后还会加载已经保存的规则,所以需要使用service iptables save保存一下规则。
3.netfilter 5表5链
Netfilter/iptables 架构
Netfilter是表的容器,表是链的容器,而链又是规则的容器,主要是2个表5个链若干规则组成。
表(tables)提供特定的功能,iptables内置了5个表,即filter表、nat表、mangle表和raw表,security表,分别用于实现包过滤,网络地址转换、包重构(修改)和数据跟踪处理。
链(chains)是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一 条或数条规则。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据 该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定义的默认策略来处理数据包。
1)filter表(主要用于过滤包)三个链:
处理入站信息包的规则被添加到INPUT链中
处理出站信息包的规则被添加到OUTPUT链中
处理正在转发信息包的规则被添加到FORWARD链中
2)Nat表(主要用于网络地址转换)三个链:
SNAT的信息包被添加到POSTROUTIN链
DNAT的信息包被添加到PREROUTING链
直接从本地出站的信息包被添加到OUTPUT链
3).Mangle表——五个链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
作用:修改数据包的服务类型、TTL、并且可以配置路由实现QOS内核模块:iptable_mangle(别看这个表这么麻烦,咱们设置策略时几乎都不会用到它)
4).Raw表——两个链:OUTPUT、PREROUTING
作用:决定数据包是否被状态跟踪机制处理
数据包流向与netfilter的5个链
PREROUTING:数据包进入路由表之前
INPUT:通过路由表后目的地为本机
FORWARD:通过路由表后,目的地不为本机
OUTPUT:由本机产生,向外发出
POSTROUTING:发送到网卡接口之前
4.iptables语法
1)查看规则以及清除规则:
-t 后面跟表名,-nvL 即查看该表的规则,其中-n表示不针对IP反解析主机名;-L表示列出的意思;而-v表示列出的信息更加详细。如果不加-t ,则打印filter表的相关信息:
2)增加/删除一条规则:
iptables -A INPUT -s 192.168.179.1 -p tcp --sport 1234 -d 192.168.179.131 --dport 80 -j DROP
这就是增加了一条规则,省略-t所以针对的是filter表。
-A/-D :增加删除一条规则;
-I :插入一条规则,其实跟-A的效果一样;
-p :指定协议,可以是tcp,udp或者icmp;
--dport :跟-p一起使用,指定目标端口;
--sport :跟-p一起使用,指定源端口;
-s :指定源IP(可以是一个ip段);
-d :指定目的IP(可以是一个ip段);
-j :后跟动作,其中ACCEPT表示允许包,DROP表示丢掉包,REJECT表示拒绝包;
-i :指定网卡(不常用,但有时候能用到);
iptables -I INPUT -s 1.1.1.1 -j DROP表示:插入一条规则,把来自1.1.1.1的所有数据包丢掉。
iptables -D INPUT -s 1.1.1.1 -j DROP删除刚刚插入的规则。注意要删除一条规则时,必须和插入的规则一致,也就是说,两条iptables命令,除了-I 和-D不一样外,其他地方都一样。
iptables -I INPUT -s 2.2.2.2 -p tcp --dport 80 -j DROP
表示把来自2.2.2.2 并且是tcp协议到本机的80端口的数据包丢掉。--dport/--sport 必须要和-p选项一起使用,否则会出错。
iptables -I OUTPUT -p tcp --dport 22 -d 10.0.1.14 -j DROP这条规则表示,把发送到10.0.2.34的22端口的数据包丢掉。
iptables -nvL --line-numbers
iptables -D INPUT 1
-D 后跟链名,然后是规则num,这个num就是查看iptables规则时第一列的值。
iptables -A INPUT -s 192.168.1.0/24 -i ens33 -j ACCEPT
把来自192.168.1.0/24这个网段的并且作用在eth0上的包放行。
iptables -P INPUT DROP-P
后面跟链名,策略内容或者为DROP或者为ACCEPT,默认是ACCEPT
如果正在连接远程服务器,不要随便敲这个命令,因为一旦回车就会断掉。