当前位置: 代码迷 >> 综合 >> 日常运维(三):Linux网络相关,netfilter,iptables
  详细解决方案

日常运维(三):Linux网络相关,netfilter,iptables

热度:56   发布时间:2023-12-12 03:17:16.0

主要内容

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

如果正在连接远程服务器,不要随便敲这个命令,因为一旦回车就会断掉。