日常运维【2】

  • firewalld和netfilter
  • netfilter5表5链介绍
  • iptables语法
  • iptables filter表小案例
  • iptables nat表应用

一,firewalld和netfilter

SELinux防火墙

  • selinux临时关闭 setenforce 0
  •  永久关闭selinux,可以编辑vi /etc/selinux/config。将SELINUX=enforceing,更改为SELINUX=disabled,重启后即可生效永久关闭。

  • centos7之前使用netfilter防火墙
  •  centos7开始使用firewalld防火墙
  •  关闭firewalld开启netfilter方法
  •  systemctl stop firewalld 服务关掉
  •  systemctl disable firewalled 关闭firewalled 不让开机启动
  • 命令yum install -y iptables-services ,安装netfilter,系统默认是未安装的。
  • 开机启动iptables:systemctl enable iptables
  • 启用iptables:systemctl start iptables
  • 查看iptables规则:iptables -nvL

二,netfilter的5表5链接

netfilter的5个表:

  • filter:包过滤,用于防火墙规则。
  • ilter:该表主要用于过滤包,是系统预设的表。该表内建3个链:INPUT、OUTPUT、FORWARD。INPUT链作用于进入本机的包,OUTPUT链作用于本机送出的包,FORWARD作用于那些跟本机无关的包。
  • nat:地址转换,用于网关路由器。
  • nat:该表主要用于网络地址转换,它也有三个链。PREROUTING链的作用是在包刚刚到达防火墙时改变它的地址(如果需要的话),OUTPUT的链作用是改变本地产生的包的目的地,POSTROUTING链的作用是在包即将离开防火墙时改变其源地址。(该表使用率较低)
  • mangle:用于给数据包打标记,然后根据标记去操作那些表。(不常用)
  • 还有两个不常用的表:raw和security,在此不多讲述。
  • mangle:该表主要用于给数据包做标记,然后根据标记去操作相应的包。(使用率很低的一个表,网络相关的会使用较多)
    raw:该表可以实现不追踪某些数据包,默认系统的数据包都会被追踪,但追踪势必消耗一定的资源,所以可以使用raw表来指定某些端口的包不被追踪。(也是使用率很低的一个表)
    security:该表在CentOS6中时没有的,它用于强制访问控制(MAC)的网络规则。(很少会用到的一个表)
     

规则链名

filter的三种链:

  • INPUT链:作用于输入本机的数据包【通过路由表目的地为本机】。
  • OUTPUT链:作用于本机输出的数据包。【由本机产生,向外转发】
  • FORWARD链:作用于与本机无关的包。【通过路由表后,目的地不为本机】


nat的三种链:

  • PREROUTING链:作用是在包刚刚到达防火墙时改变它的目的地址,如果需要的话,【数据包进入路由表之前】
  • OUTPUT链:改变本地产生的包的目的地址。【由本机产生,向外转发】
  • POSTROUTING链:在包离开防火墙之前改变其源地址。【发送到网卡接口之前】

数据包流向图:

  • 非本机:PREROUTING----------FORWARD-----------POSTROUTING
  • 本机:PREROUTING----------INPUT------------OUTPUT--------------POSTROUTING

三,netfiltre——iptables的基本语法

iptables命令是Linux上常用的防火墙软件,是netfilter项目的一部分。可以直接配置,也可以通过许多前端和图形界面配置

  • 重启iptables:service iptables restart 。
  • 查看默认规则:iptables -nvL  ,其中-n表示不针对IP反解析主机名,-L表示列出,-v表示列出的信息更加详细
  • 清空规则:iptables -F  该命令只会临时清空规则,重启后会被/etc/sysconfig/iptables(iptables的配置文件)中的内容覆盖。
  • 覆盖并保存:service iptables save 会保存修改的规则到配置文件中(永久生效)。
  • 指定查看某一个表:iptables -t nat -nvL ,不使用-t选项时默认查看的表就是filter表。
  • 计数器清理:iptables -Z  ,清空pkts(数据包)和bytes(多少大小)的数据。
  • iptables命令选项输入顺序:
  • iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作
  • 添加规则举例:iptables -A INPUT -s 192.168.188.1 -p tcp --sport 1234 -d 192.168.188.128 --dport 80 -j DROP  
  • 说明: 增加一条规则,当IP~192.168.188.1、协议为tcp、端口为‘1234’的向IP~192.168.188.128、端口为80的机器发送包时执行操作:drop(丢掉包)。
    注: 该命令也可以把-A换成-I,两者的区别类似于排队和插队,两种方法插入的规则优先级不同。
  • 语法: iptables [options] [参数]
    Options:
    -n:不针对IP反解析主机名
    -v:显示更详细的信息
    -t:指定表(iptables命令默认作用于filter表)
    -L:显示信息
    -F:清空所有规则
    -A/D:=add/delete,添加/删除一条规则
    -I:插入一条规则
    -p:指定协议,可以是tcp,udp或icmp
    --sport:跟-p一起使用,指定源端口
    --dport:跟-p一起使用,指定目标端口
    -s:指定源IP(可以是一个IP段)
    -d:指定目的IP(可以是一个IP段)
    -j:后面跟动作(ACCEPT表示允许包;DROP表示丢掉包;REJECT表示拒绝包)
    -i:指定网卡
    -Z:把包以及流量计数器清零
    -P:=pre,预设策略

  • 插入一条规则:iptables -I INPUT  -p tcp --dport 80 -j DROP
  •    选项-I为将这条规则插入到最前面。(排序在前的规则优先匹配)
  • 显示规则的序列号:iptables -nvL --line-number。可以根据序列号删除对应的规则,例:iptables -D INPUT 1

四,iptables filter表小案例

需求:只针对filter表,预设策略INPUT链DROP,其他两个链ACCEPT,然后针对192.168.188.0/24开通22端口,所有网段开放80端口,对所有网段开放21端口。

操作:因为规则较多,使用脚本的形式达成最方便。步骤如下:

[root@gaodehua33 ~]# vim /usr/local/sbin/iptables.sh

#!/bin/bash
ipt="/usr/sbin/iptables" #定义一个变量
$ipt -F #清空之前的规则
$ipt -P INPUT DROP #默认策略
$ipt -P OUTPUT ACCEPT #默认策略
$ipt -P FORWARD ACCEPT #默认策略
$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT    #规则,让相关的数据包
更顺利的链接。
$ipt -A INPUT -s 192.168.133.0/24 -p tcp --dport 22 -j ACCEPT  #133网段的22端口放行
$ipt -A INPUT -p tcp --dport 80 -j ACCEPT #把80端口的数据包放行
$ipt -A INPUT -p tcp --dport 21 -j ACCEPT  #把21端口的数据包放行

运行该脚本:sh /usr/local/sbin/iptables.sh
关于icmp包的一个常见的应用:iptables -I INPUT -p icmp --icmp-type 8 -j DROP  ,这里--icmp-type选项和-p icmp要一起使用,后面指定类型编号。这个8指的时本机ping通其他机器,而其他机器不能ping本机。

五,netfilter——iptables nat表应用

A机器两块网卡ens33(192.168.229.128)、ens37(192.168.100.1),ens33可以上外网,ens37仅仅是内部网络,B机器只有ens37(192.168.100.100),和A机器ens33可以通信互联。

需求1:可以让B机器连接外网。

操作步骤如下:

在虚拟机上操作两台机器时,需在设置处添加一个新的网卡,并将两台机器新设置的网卡,均设置到同一个lan段,其中第一台机器的ens33不做更改,第二台机器的网卡ens33网卡断开链接。如图:


使用命令为A机器网卡ens33设置IP:ifconfig ens37 192.168.100.1/24 (临时设定,重启后会被配置文件的内容覆盖),再为B机器网卡ens37设置网卡:ifconfig ens37 192.168.100.100/24。
A机器上打开路由转发   echo "1" > /proc/sys/net/ipv4/ip_forward    (默认为关闭0,更改为1后即打开)
设置转发规则:iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE
B机器设置网关:route add default gw 192.168.100.1
设置dns:vi /etc/resolv.conf
需求2:C机器只能和A通信,让C机器可以直接连通B机器的22端口

操作步骤如下:

A机器上打开路由转发   echo "1" > /proc/sys/net/ipv4/ip_forward    (默认为关闭0,更改为1后即打开)

在A机器上添加规则:iptables -t nat -A PREROUTING -d 192.168.133.130 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22 (将进来的数据包由192.168.133.130转发到B机器192.168.100.100:22)
继续在A机器上添加规则:iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.133.130   (将发回来的数据包目标改为A机器的192.168.133.130)
在B机器设置网关:route add default wg 192.168.100.1


 

猜你喜欢

转载自blog.csdn.net/weixin_42604768/article/details/84805199