预习内容
10.12 firewalld和netfilter
10.13 netfilter5表5链介绍
10.14 iptables语法
10.15 iptables filter表案例
10.16/10.17/10.18 iptables nat表应用
linux的防火墙
SElinux是linux系统特有的安全机制,因为这种机制的限制很多,配置也特别繁琐。安装完系统,我们一般都要把SElinux关闭,以免引起不必要的麻烦,临时关闭的方法是:
[root@hongwei ~]# setenforce 0
上面的例子,仅仅是临时关闭,想要永久关闭需要更改配置文件/etc/selinux/config,需要把SElinux=enforcing改为SELINUX=disabled,
更改完配置文件后,重启系统才能生效。可以使用getenforce命令获得当前SELinux的状态:
[root@hongwei ~]# getenforce Enforcing
如果关闭了就显示Enforcing,当使用setenforce 0这个命令后,在重启getenforce命令就会输出permissive
10.12 firewalld和netfilte
- 在之前的centos老版本中,比如5、6版本的防火墙为netfilter,centos7的防火墙是firewalld,会有很多人把防火墙叫做iptables,其实这样老说并不是很恰当,iptables其实仅仅是一个工具。首先介绍一下firewalld的用法:
[root@hongwei ~]# systemctl stop firewalld 这是关闭firewalld服务 [root@hongwei ~]# systemctl disable firewalld 这是禁止firewalld服务开机启动
- 没有iptables工具 安装它 yum install -y iptables-services。安装好后,我们就可以使用之前版本的iptables。
[root@hongwei ~]# systemctl enable iptables 设置开机启动 [root@hongwei ~]# systemctl start iptables 启动iptables服务
在centos上默认没有iptables规则,这个规则虽然很安全,但对于我们来说没有用,我们首先清除一下规则,然后在保存一下,如下:
- 删除规则
[root@hongwei ~]# iptables -F
- 清除只是临时的,重启系统或者重启iptables服务后还会加载已经保存的规则,使用下面命令保存一下规则
[root@hongwei ~]# service iptables save iptables: Saving firewall rules to /etc/sysconfig/iptables:[ 确定 ]
- 然后使用 -nvL查看规则
[root@hongwei ~]# iptables -nvL Chain INPUT (policy ACCEPT 0 packets, 0 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 0 packets, 0 bytes) pkts bytes target prot opt in out source destination
10.13 netfilter5表5链介绍
- netfilter的5个表
filter表主要用于过滤,是系统预设的表,这个表也是用得最多的表,该表内建3个链: INPUT、 OUTPUT以及FORWARD。 INPUT链作用于进人本机的包,OUTPUT链作用于本机送出的包,FORWARD链作用于那些跟本机无关的包。
nat表主要用于网络地址转换,它也有3个链。PREROUTING链的作用是在包刚刚到达防火墙时改变 它的目的地址(如果需要的话),OUTPUT链的作用是改变本地产生的包的目的地址,POSTROUTTNG链的 作用是在包即将离开防火墙时改变其源地址。
mangle表主要用于给数据包做标记,然后根据标记去操作相应的包。这个表几乎不怎么用,除非你想成为一个高级网络工程师,否则就不需要太关注。
raw表可以实现不追踪某些数据包,默认系统的数据包都会被追踪,但追踪势必消耗一定的资源, 所以可以用raw表来指定某些端口的包不被追踪。
securlty表在Cenms6中是没有的,它用于强制访问控制(MAC)的网络规则。
- netfilter的5个链
5个链分别为PREROUTING、 INPUT, FORWARD. OUTPUT. POSTROUTING
PREROUTING:数据包进路由表之前
INPUT:通过路由表后目的地为本机
FORWARD:通过路由表后,目的地不为本机
OUTPUT:由本机产生,目的地不为本机
POSTROUTING:发送到网卡接口之前
具体的数据包流向,下图
表和链对应的关系
10.14 iptables语法
iptables是一个非常复杂和功能丰富的工具,介绍几种常用的语法
- 查看规则以及清除规则
[root@hongwei ~]# iptables -t nat -nvL Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination
-t选项后面跟表名,-nvL表示查看该表的规则,其中-n表示不针对IP反解析主机名,-L表示列出 -v表示列出的信息更加详细。如果不加-t选项,则打印filter表相关的信息
[root@hongwei ~]# iptables -nvL Chain INPUT (policy ACCEPT 218 packets, 18625 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 156 packets, 12984 bytes) pkts bytes target prot opt in out source destination
- 清除规则的命令除了上面介绍的-F 还有-Z,-Z表示流量计数器置零
- 增加/删除一条规则
[root@hongwei ~]# iptables -A INPUT -s 192.168.188.1 -p tcp --sport 1234 -d 192.168.188.128 --dport 80 -j DROP
这里没有-t选项,所以针对的是表filter表,这条规则中各个选项的作用如下:
-A/-D:表示增加或者删除一条规则
-I:表示插入一条规则,效果跟-A一样
-P:表示指定协议,可以是tcp udp 或者icmp
--dport:跟-p一起使用,表示指定目标端口
--sport:跟-p一起使用,表示指定源端口
-s:表示指定源IP(可以是一个IP段)
-d:表示指定目的IP(同上)
-j:后面跟动作,其中ACCEPT表示允许包,DROP表示丢掉包,REJECT表示拒绝包
-i:表示指定网卡
- 举例说明:
[root@hongwei ~]# iptables -I INPUT -s 1.1.1.1 -j DROP
上面的例子表示插入一条规则,把来自1.1.1.1的所有的包数据丢掉。下面的例子表示删除刚刚插入的规则:
[root@hongwei ~]# iptables -D INPUT-s 1.1.1.1 -j DROP
注意:删除一条规则时,必须和插入的规则一致。也就是说,两条iptables命令,除了-I和-D不一样,其他都一样
- 下例表示把发送到10.1.1.14的22端口的数据包丢掉
[root@hongwei ~]# iptables -I INPUT -p tcp --dport 22 -d 10.1.1.14 -j DROP
- 下例把来自192.168.1.0/24这个网段且作用在eth0上的包方行:
[root@hongwei ~]# iptables -A INPUT -s 192.168.1.0/24 -i eth0 -j ACCEPT [root@hongwei ~]# iptables -nvL |grep '192.168.1.0/24' 0 0 ACCEPT all -- eth0 * 192.168.1.0/24 0.0.0.0/0
- 有的时候服务器上的iptables过多了,想删除某一条规则,但又不容易掌握创建时的规则,那要删除的时候可以查看iptables的规则,把编号打印出来
[root@hongwei ~]# iptables -nvL --line-number Chain INPUT (policy ACCEPT 135 packets, 10076 bytes) num pkts bytes target prot opt in out source destination 1 0 0 DROP all -- * * 1.1.1.1 0.0.0.0/0 2 0 0 ACCEPT all -- eth0 * 192.168.1.0/24 0.0.0.0/0 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 89 packets, 8124 bytes) num pkts bytes target prot opt in out source destination
然后删除的时候,加上-D
[root@hongwei ~]# iptables -D INPUT 1
然后再次查看
[root@hongwei ~]# iptables -nvL --line-number Chain INPUT (policy ACCEPT 5 packets, 388 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT all -- eth0 * 192.168.1.0/24 0.0.0.0/0 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 4 packets, 480 bytes) num pkts bytes target prot opt in out source destination
- iptables哈有一个选项经常用到,就是-P(大写)选项,他表示预设
[root@hongwei ~]# iptables -P INPUT DROP
-P后面跟链名,策略内容或为DROP 或为ACCEPT 默认是ACCEPT 注意:如果在连接远程服务器,千万不要随便执行这个命令,因为一旦回车,远程连接就会断开。这个策略一旦设定后,只有使用命令iptables -P INPUT ACCEPT 才能恢复成原始状态。下面介绍如何设定iptables规则
需求:只针对filter表,预设策略INPUT链DROP ,其他二个链ACCEPT ,然后针对192.168.188.0/24通22端口,对所有网段开放80端口,对所有网段开放21端口。
cat /usr/local/sbin/iptables.sh ipt="/usr/sbin/iptables" $ipt -F $ipt -P INPUT DROP $ipt -P OUTPUT ACCEPT $ipt -P FORWARD ACCEPT $ipt -A INPUT -s 192.168.188.0/24 -p tcp --dport 22 -j ACCEPT $ipt -A INPUT -p tcp -dport 80 -j ACCEPT $ipt -A INPUT -p tcp -dport 22 -j ACCEPT
完成脚本的编写后,直接运行/bin/sh/usr/local/sbin/iptables.sh即可。如过想要开机启动时初始化防火墙规则,则需要在/etc/rc.d/rc.local中添加一行/bin/sh /usr/local/sbin/iptables.sh
10.16/10.17/10.18 iptables nat表应用
让iptables实现路由器的功能。假设机器上有二块网卡eth0和eth1,其中eth0的IP为10.0.2.68,eth1的IP为192.168.1.1。eth0页连接了因特网,但eth1没有连接。显示有另一台机器192.168.1.2和eth1是互通的,那么如何设置才能让连接eth1的这台机器连接因特网,和10.0.2.68互通?方法如下:
# echo "1" > /proc/sys/net/ipv4/ip_forward # iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
这里,第一个命令设计内核参数相关的配置文件,它的目的是打开路由转发功能,否则无法实现我们的应用,第二个命令则是iptables对nat表做了一个IP转发的操作。-o选项后面跟设备名,表示出口的网卡,MASQUERADE表示伪装。
我们设定好规则后,需要保存一下
service iptables save
他会提示防火墙规则保存在/etc/sysconfig/iptables文件内,这个文件就是iptables的配置文件,所以以后如果遇到备份防火墙规则的任务,只要复制一份这个文件的副本即可。
停止防火墙服务
service iptables stop