Linux系统下安装nfs并配置iptables

服务端安装

系统环境(Centos6.x)
nfs服务器IP:192.168.137.10
nfs客户端IP:192.168.137.11

1. 安装NFS

yum install -y nfs-utils
vim /etc/exports   ##nfs配置文件,写入如下信息
/home/ 192.168.137.0/24(rw,sync,all_squash,anonuid=501,anongid=501)

注:如上信息分为三部分,第一部分就是本地要共享出去的目录,第二部分为允许访问的主机(可以是一个IP也可以是一个IP段)第三部分就是小括号里面的,为一些权限选项。它表示:共享的目录为/home,信任的主机为192.168.137.0/24这个网段,权限为读写,同步,限定所有使用者,并且限定的uid和gid都为501。

2. NFS相关配置选项

未分类

3. 启动服务

service rpcbind start
service nfs start             ##成功启动的条件是防火墙没有做设置或者未开启。

客户端挂载NFS

yum install -y nfs-utils
#查看服务器端都共享了哪些目录 
showmount -e 192.168.137.10
/home 192.168.137.0/24(rw,sync,all_squash,anonuid=501,anongid=501)
#挂载
mount -t nfs -o nolock 192.168.137.10:/home /mnt
#查看挂载的情况
df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        28G  1.5G   25G   6% /
tmpfs           1.9G     0  1.9G   0% /dev/shm
/dev/sda1       194M   27M  158M  15% /boot
/home           480G   10G  470G  47% /mnt

iptables设置

以上nfs服务端和客户端能正常使用的前提是系统没设置防火墙,或者未开启iptables.
实际在生产环境下,为了系统和业务的安全性我们都有设置防火墙。那么需要添加iptables的端口。

vim /etc/sysconfig/nfs        #指定以下的端口号

RQUOTAD_PORT=10001
LOCKD_TCPPORT=10002
LOCKD_UDPPORT=10003
MOUNTD_PORT=10004
STATD_PORT=10005

查看当前这5个服务的端口并记录下来:

rpcinfo -p    #nfs  2049, portmapper  111, 将剩下的三个服务的端口随便选择一个记录下来

添加iptables设置:

iptables -A INPUT -p tcp --dport 111 -j ACCEPT
iptables -A INPUT -p udp --dport 111 -j ACCEPT
iptables -A INPUT -p tcp --dport 2049 -j ACCEPT
iptables -A INPUT -p udp --dport 2049 -j ACCEPT
iptables -A INPUT -p tcp --dport 10001:10005 -j ACCEPT
iptables -A INPUT -p udp --dport 10001:10005 -j ACCEPT
service iptables save
service iptables restart

重启服务:

service rpcbind restart
service nfs restart

CentOS从firewall切换为iptables防火墙

1、关闭firewall:

service firewalld stop
systemctl disable firewalld.service #禁止firewall开机启动

2、安装iptables防火墙

yum install iptables-services #安装

3、编辑iptables防火墙配置

vi /etc/sysconfig/iptables #编辑防火墙配置文件

下边是一个完整的配置文件:

Firewall configuration written by system-config-firewall

Manual customization of this file is not recommended.

*filter

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

-A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

-A INPUT -p icmp -j ACCEPT

-A INPUT -i lo -j ACCEPT

-A INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT

-A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT

-A INPUT -m state –state NEW -m tcp -p tcp –dport 3306 -j ACCEPT

-A INPUT -j REJECT –reject-with icmp-host-prohibited

-A FORWARD -j REJECT –reject-with icmp-host-prohibited

COMMIT

:wq! #保存退出

service iptables start #开启
systemctl enable iptables.service #设置防火墙开机启动

iptables之state扩展与开启被动模式ftp

1. state扩展

  该扩展至关重要,正是由于state才实现了连接追踪机制。
  连接追踪机制:每一台客户端与本地主机进行通讯时(有可能是通过本地主机去访问其他主机),本地主机都会在内存的一段空间中存储源IP、源端口、目标IP、目标端口的信息(每条记录都有生存时间)。当客户端下次再与本地主机进行通讯时,就可以通过查找之前存储的信息来追踪该客户端是否与本地主机通讯过。
  注意:开启连接追踪功能,需要占用内存的空间,影响系统性能。且前端负载均衡服务器若开启此功能,由于连接追踪模板空间有限制,空间满了之后,会导致后续的连接请求无法得到响应。

连接追踪机制已经追踪到并记录下来的连接保存在/proc/net/nf_conntrack文件中

ipv4     2 tcp      6 299 ESTABLISHED src=192.168.25.1 dst=192.168.25.128 sport=52832 dport=22 src=192.168.25.128 dst=192.168.25.1 sport=22 dport=52832 [ASSURED] mark=0 zone=0 use=2
以上内容的部分解释
ipv4:基于哪种底层协议
tcp:上层的协议
src sport:源地址 源端口
dst dport:目标地址,目标端口
ESTABLISHED:目前状态

连接追踪功能所能记录的最大连接数量通过该文件定义(可调整):

/proc/sys/net/nf_conntrack_max

调整连接追踪机制所能记录的最大连接数:

sysctl -w net.nf_conntrack_max=300000
echo 300000 > /proc/sys/net/nf_conntrack_max

conntrack所能追踪的连接数量最大值取决于/proc/sys/net/nf_conntrack_max的设定。已经追踪到并记录下来的连接位于/proc/net/nf_conntrack文件中,超时的连接将会被删除。当/proc/net/nf_conntrack满时,后续的新连接可能会超时。
解决办法(通常采用第一种方法):
  
1. 加大nf_conntrack_max的值
2. 降低nf_contrack条目的超时时长
  
不同协议的连接追踪时长记录在/proc/sys/net/netfilter/目录下的各文件中conntrack的子集,用于对报文的状态做连接追踪;

The "state" extension is a subset of the "conntrack" module. "state" allows access to the connection tracking state for this packet.

根据”连接追踪机制“去检查连接的状态;

  conntrack机制:追踪本机上的请求和响应之间的关系;状态有如下几种:
  NEW:新发出请求;连接追踪模板中不存在此连接的相关信息条目,因此,将其识别为第一次发出的请求;与协议无关。
  ESTABLISHED:NEW状态之后,连接追踪模板中为其建立的条目失效之前期间内所进行的通信状态;
   RELATED:相关联的连接;如ftp协议中的数据连接与命令连接之间的关系;
   INVALID:无法识别的连接;
   UNTRACKED:未进行追踪的连接;

例:

~] # iptables -A INPUT -s 172.18.0.0/16 -d 172.18.0.100 -p tcp -m multiport --dport 22,23,80 -m state --state NEW,ESTABLISHED -j ACCEPT
~] # iptables -A OUTPUT -d 172.18.0.0/16 -s 172.18.0.100 -p tcp -m multiport --sport 22,23,80 -m state --state ESTABLISHED -j ACCEPT
~] # iptables -A INPUT -d 172.18.100.6 -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED -j ACCEPT
~] # iptables -A OUTPUT -s 172.18.100.6 -p icmp --icmp-type 0 -m state --state ESTABLISHED -j ACCEPT

以上规则可合并为:

~] # iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
~] # iptables -A INPUT -d 172.18.100.6 -p tcp -m multiport --dports 22,23,80 -m state --state NEW -j ACCEPT
~] # iptables -A INPUT -d 172.18.100.6 -p icmp --icmp-type 8 -m state --state NEW -j ACCEPT
~] # iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT

开启被动模式ftp

~] # modprobe nf_conntrack_ftp   #内核加载nf_conntrack_ftp模块
~] # systemctl start vsftpd.service     #开启vsftpd服务
~] # iptables -A INPUT-d 172.18.100.6 -m state --state ESTABLISTED,RELATED -j ACCEPT    
~] # iptables -A INPUT -d 172.18.100.6 -p tcp -m multiport --dports 21,22,23,80 -m state --state NEW  -j ACCEPT
~] # iptables -A OUTPUT -s 172.18.100.6 -m state --state ESTABLISHED -j ACCEPT

2. 如何开放被动模式的ftp服务?

(1) 装载ftp连接追踪的专用模块:

~]# modproble  nf_conntrack_ftp

(2) 放行命令连接(假设Server地址为172.16.100.67):

~]# iptables -A INPUT -d 172.16.100.67 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
~]# iptables -A OUTPUT -s 172.16.100.67 -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT

(3) 放行数据连接(假设Server地址为172.16.100.67):

~]# iptables -A INPUT -d 172.16.100.67 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
~]# iptables -I OUTPUT -s 172.16.100.67 -m state --state ESTABLISHED -j ACCEPT

3. 防火墙规则的检查次序

规则在链上的次序即为其检查时的生效次序,因此其优化使用有一定法则

  • 同类规则(访问同一应用),匹配范围小的放前面。用于特殊处理
  • 不同类的规则(访问不同应用),匹配范围大的放前面。
  • 应该将那些可由一条规则描述的多个规则合并为一条规则。(规则越少,检查的次数越少)。
  • 要设置默认策略

规则的有效期限
  iptables命令添加的规则,手动删除前,其生效期限为kernel的生命周期

4. 保存与加载预存的规则

保存规则:

CentOS 6:

#方式一:
~]# service iptables save      
#方式二:
~]# iptables-save > /etc/sysconfig/iptables  
#该目录为默认目录,也可以自定义保存路径
~]# iptables-save > /PATH/TO/SOME_RULE_FILE

CentOS 7:

~]# iptables -S > /PATH/TO/SOME_RULE_FILE
~]# iptables-save > /PATH/TO/SOME_RULE_FILE

从文件中加载预存的规则:

以下命令会自动从/etc/sysconfig/iptables文件中重载规则
通用方法:

~]# iptables-restore < /PATH/FROM/SOME_RULE_FILE

CentOS 6专用命令

service iptables restart

自动生效规则文件中的规则:

  • 把iptables命令放在脚本文件中,让脚本文件开机自动运行。
      把脚本放在/etc/rc.d/rc.local中即可

  • 用规则文件保存规则,开机自动运行重载命令
      在/etc/rc.d/rc.local中
      iptables-restore < /PATH/FROM/SOME_RULE_FILE

iptables+Denyhost抵御暴力破解

1、使用iptables 现在每分钟连接ssh的次数

允许本地环回接口访问

iptables -A INPUT -i lo -j ACCEPT

对已经建立的所有链接都放行

iptables -A INPUT -m state –state ESTABLISHED -j ACCEPT

每分钟对ssh的新连接只允许两个,已建立的连接不限制

iptables -A INPUT -p tcp –dport 22 -m limit –limit 2/minute –limit-burst 2 -m state –state NEW -j ACCEPT

添加默认策略拒绝所有

iptables -P INPUT DROP

2、使用Denyhost 对错误的ssh密码的ip进行拒绝访问

下载denyhost http://sourceforge.net/projects/denyhosts/files/

安装denyhost

tar -zxvf DenyHosts-2.6.tar.gz
cd DenyHosts-2.6
python setup.py install #安装DenyHosts
cd /usr/share/denyhosts/ #默认安装路径
cp denyhosts.cfg-dist denyhosts.cfg #denyhosts.cfg为配置文件
cp daemon-control-dist daemon-control #daemon-control为启动程序
chown root daemon-control #添加root权限
chmod 700 daemon-control #修改为可执行文件
ln -s /usr/share/denyhosts/daemon-control /etc/init.d #对daemon-control进行软连接,方便管理
/etc/init.d/daemon-control start #启动denyhosts
chkconfig daemon-control on #将denghosts设成开机启动

配置denyhost

vim /usr/share/denyhosts/denyhosts.cfg
HOSTS_DENY = /etc/hosts.deny #控制用户登陆的文件
PURGE_DENY = 30m #过多久后清除已经禁止的,设置为30分钟;
BLOCK_SERVICE = sshd #禁止的服务名,当然DenyHost不仅仅用于SSH服务
DENY_THRESHOLD_INVALID = 1 #允许无效用户失败的次数
DENY_THRESHOLD_VALID = 5 #允许普通用户登陆失败的次数
DENY_THRESHOLD_ROOT = 5 #允许root登陆失败的次数
DAEMON_LOG = /var/log/denyhosts #DenyHosts日志文件存放的路径,默认

更改DenyHosts的默认配置之后,重启DenyHosts服务即可生效:

/etc/init.d/daemon-control restart #重启denyhosts

iptables查看、开放、删除端口、保存设置

iptables选项

-t<表>:指定要操纵的表;
-A:向规则链中添加条目;
-D:从规则链中删除条目;
-i:向规则链中插入条目;
-R:替换规则链中的条目;
-L:显示规则链中已有的条目;
-F:清楚规则链中已有的条目;
-Z:清空规则链中的数据包计算器和字节计数器;
-N:创建新的用户自定义规则链;
-P:定义规则链中的默认目标;
-h:显示帮助信息;
-p:指定要匹配的数据包协议类型;
-s:指定要匹配的数据包源ip地址;
-j<目标>:指定要跳转的目标;
-i<网络接口>:指定数据包进入本机的网络接口;
-o<网络接口>:指定数据包要离开本机所使用的网络接口。

查看防火墙规则

# iptables -L -n -v

增加防火墙规则:开放指定的端口

iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT               #允许本地回环接口(即运行本机访问本机)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT    #允许已建立的或相关连的通行
iptables -A OUTPUT -j ACCEPT         #允许所有本机向外的访问
iptables -A INPUT -p tcp --dport 22 -j ACCEPT    #允许访问22端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT    #允许访问80端口
iptables -A INPUT -p tcp --dport 21 -j ACCEPT    #允许ftp服务的21端口
iptables -A INPUT -p tcp --dport 20 -j ACCEPT    #允许FTP服务的20端口
iptables -A INPUT -j reject       #禁止其他未允许的规则访问
iptables -A FORWARD -j REJECT     #禁止其他未允许的规则访问

删除已添加的iptables规则

将所有iptables以序号标记显示,执行:
# iptables -L -n --line-numbers

比如要删除INPUT里序号为2的规则,执行:
# iptables -D INPUT 2

屏避IP

# iptables -I INPUT -s 123.45.6.7 -j DROP       #屏蔽单个IP的命令
# iptables -I INPUT -s 123.0.0.0/8 -j DROP      #封整个段即从123.0.0.1到123.255.255.254的命令
# iptables -I INPUT -s 124.45.0.0/16 -j DROP    #封IP段即从123.45.0.1到123.45.255.254的命令
# iptables -I INPUT -s 123.45.6.0/24 -j DROP    #封IP段即从123.45.6.1到123.45.6.254的命令是

保存iptables更改

最后一部最重要,iptables规则全部输入完成后,都要进行一次保存,否则重启后还是原来的规则。

/etc/rc.d/init.d/iptables save

但是现在Kali版本的Linux不知道怎么保存。

IPTABLES 和 FIREWALLD 防火墙简单使用介绍

未分类

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

安装IPTable IPTable-service

使用root用户登录,运行以下命令:

#先检查是否安装了iptables
service iptables status
#安装iptables
yum install -y iptables

#升级iptables
yum update iptables

#安装iptables-services
yum install iptables-services

开启IPTables服务

使用root用户登录,运行以下命令:

#开机自启动iptables服务
systemctl enable iptables.service
#启动服务
systemctl start iptables.service

#重启服务
systemctl restart iptables.service

#查看状态
systemctl status iptables.service

禁用/停止自带的firewalld服务

使用root用户登录,运行以下命令:

#停止firewalld服务
systemctl stop firewalld
#禁用firewalld服务
systemctl mask firewalld

设置IPTables现有规则

使用root用户登录,运行以下命令:

#查看iptables现有规则
iptables -L -n
#先允许所有,不然有可能会杯具
iptables -P INPUT ACCEPT

#清空所有默认规则
iptables -F

#清空所有自定义规则
iptables -X

开放端口

使用root用户登录,运行以下命令:

#开放22端口
iptables -A INPUT -p tcp –dport 22 -j ACCEPT

保存规则设定

使用root用户登录,运行以下命令:

#保存上述规则
service iptables save

centos 7版本以后默认使用firewalld,所以使用firewalld是趋势,要及时跟上脚步。

开启firewalld服务

使用root用户登录,运行以下命令:

#启动
systemctl start firewalld
#查看状态
systemctl status firewalld 或者 firewall-cmd –state

#停止
systemctl disable firewalld

#禁用
systemctl stop firewalld

开放、禁用端口

使用root用户登录,运行以下命令:

#开放端口
firewall-cmd –zone=public –add-port=8080/tcp –permanent

#禁用端口
firewall-cmd –zone=public –remove-port=80/tcp –permanent

设置firewalld

使用root用户登录,运行以下命令:

#查看所有打开的端口
firewall-cmd –zone=public –list-all

#更新防火墙规则
firewall-cmd –reload

Centos 6设置iptables防火墙,简单防护DDOS和CC攻击

这个教程将向您展示如何在Centos内设置一个简单的防火墙。您可以自定义那个端口开放,那个端口关闭。同时还会展示如何防御一些较为简单的攻击。
当然这个教程只是简单的向您展示防火墙的基本用法 比如 开放Apache,SSH,Email的使用端口
iptables 是一个简单的防火墙,它被安装在大多数的Linux发行版上。iptables官方手册说它仅仅是个ipv4的封包过滤,NAT工具

防御攻击

我们添加几个简单的防御规则来阻止比较简单的攻击,如果我们的服务器收到大规模的攻击,这个防御规则也可以减少大部分的垃圾数据。

iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

这条代码就是如果收到的数据包没有tcp标示的那么就丢弃它们。

iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

这条代码就是如果收到的SYN数据包长时间占用服务器资源,就会自动结束掉他。

iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

同样,添加一个XMAS数据包。

开放端口

仅需开放我们需要开放的端口即可(一定要开放SSH连接端口,否则修改完成之后可能无法连接你的linux)

iptables -A INPUT -p tcp -m tcp --dport 需要开放的端口 -j ACCEPT

完成之后,我们仅需输入命令保存即可

iptables -L -n
iptables-save | sudo tee /etc/sysconfig/iptables

然后再输入命令启动服务即可

service iptables restart

centos iptables只允许某一ip访问某端口设置方法

首先,清除所有预设置

iptables -F

其次,设置只允许指定ip地址访问指定端口

1、在tcp协议中,禁止所有的ip访问本机的8080端口。

iptables -I INPUT -p tcp --dport 8080 -j DROP

2、允许192.168.1.123访问本机的1521端口

iptables -I INPUT -s 211.211.211.211 -p tcp --dport 8080 -j ACCEPT

最后,保存当前规则

/etc/rc.d/init.d/iptables save 
service iptables restart

添加后打开iptables后如图所示,

-A INPUT -s 192.168.1.123/32 -p tcp -m tcp --dport 1521 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 1521 -j DROP

未分类

centos7下部署iptables环境纪录(关闭默认的firewalle)

CentOS7默认的防火墙不是iptables,而是firewall.
由于习惯了用iptables作为防火墙,所以在安装好centos7系统后,会将默认的firewall关闭,并另安装iptables进行防火墙规则设定

下面介绍centos7关闭firewall安装iptables,并且开启80端口、3306端口的操作记录:

[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)

1、关闭firewall:

[root@localhost ~]# systemctl stop firewalld.service            //停止firewall
[root@localhost ~]# systemctl disable firewalld.service        //禁止firewall开机启动

2、安装iptables防火墙

[root@localhost ~]# yum install iptables-services            //安装
[root@localhost ~]# vim /etc/sysconfig/iptables              //编辑防火墙配置文件
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
[root@localhost ~]# systemctl restart iptables.service                  //最后重启防火墙使配置生效
[root@localhost ~]# systemctl enable iptables.service                  //设置防火墙开机启动
[root@localhost ~]# iptables -L                 //查看防火墙规则,默认的是-t filter,如果是nat表查看,即iptables -t nat -L

3、关闭SELINUX

[root@localhost ~]# vim /etc/selinux/config
#SELINUX=enforcing           //注释掉
#SELINUXTYPE=targeted           //注释掉
SELINUX=disabled              //增加
[root@localhost ~]# setenforce 0       //使配置立即生效

Ubuntu 的ufw 和iptables 的关系

ufw

Uncomplicated FireWall,不是 Ubuntu FireWall 哦,是 debian 系发行版中为了轻量化配置 iptables 而开发的一款工具。

UFW 和 iptables 一样都是匹配原则,匹配到了则忽略剩下的规则,这点就不废话了。

iptables

我们习惯性的会把 iptables 认为是 Linux 上的防火墙,自从 Linux 内核 2.4 之后就集成进主线内核。实际上准确是说,iptables 是一个通过控制 Linux 内核的 netfilter 模块来管理网络数据包的流动与转送的应用软件,其功能包括不仅仅包括防火墙的控制出入流量,还有端口转发等等。

iptables 内部有表 tables、链 chains、规则 rules 这三种概念。

iptables 的每一个 “表” 都和不同的数据包处理有关、决定数据包是否可以穿越的是 “链”、而一条 “规则” 在链里面则可以决定是否送往下一条链(或其它的动作)

那一个包到达网卡的时候,Linux 的如何处理的呢?

我们提到了 iptables 是可以控制 netfilter 模块的,netfilter 内部分为三个表,分别是 filter, nat, mangle,每个表又有不同的链(Chains),每个链下可以有不同的规则(rules)。

filter

在 filter(过滤)表中,也就是防火墙功能的表,定义了三个链。分别是 INPUT, FORWARD, OUTPUT。也就是对包的入、转发、出进行定义的三个过滤链。对于这个 filter 表的操作和控制也是我们实现防火墙功能的一个重要手段;

nat

在 nat(网络地址转换) 表中,也就是我们用以实现地址转换和端口转发功能的这个表,定义了 PREROUTING, POSTROUTING,OUTPUT 三个链;

mangle

netfilter 的 mangle 表则是一个自定义表,里面包括上面 的 filter 以及 nat 表中的各种 chains,它可以让我们进行一些自定义的操作,同时这个 mangle 表中的 chains 在 netfilter 对包 的处理流程中比较优先。

包在 Linux 中的前世今生

未分类

我们大致可以看出:包首先要由 bridge check 来判断属于链路层还是网络层,之后包都会遇到 NAT 或者 mangle 表的 PREROUTING 链,从这 pre 前缀咱能才出来,这是要在路由之前要过的链。

接着当包通过了 PREROUTING 之后,便到了 decision 这个分支点,这里有一个对目的地址的判断,如果包的目的地是本地, 那么包向上走,走入 INPUT 链处理,然后进入 LOCAL PROCESS,之后再进入对应的 OUTPUT、POSTROUTING;

如果非本地,那么就进入 FORWARD 链进行转发,之后再走 POSTROUTING,我们在这里就不说 FORWARD 链的事了。

我们可以看到,filter 表在包的处理流程中,处于中间的位置,这部分也就是防火墙的主要功能所在。

ufw 怎么和 iptables 一起合作的

在稍微理解了包是怎么走的之后,回到我们iptables -L的时候,我们看 filter 表,可以看到,ufw 在 INPUT、FORWARD、OUTPUT 添加了好些自定义规则,并且添加了好些自己的链和链的规则,还把把 INPUT、FORWARD 默认策略设置成 DROP
当你有这些 ufw 定义的链的时候,是能够匹配到 ufw 链和规则,也就是正常入网的。

当我们执行iptables -F的时候,会发生什么呢?

所有链的规则都被清空了!包括 ufw 的链!并且 INPUT、FORWARD 依旧是 DROP

再想想包的前世今生,OUTPUT 我们发出了 ping,但是却因为 INPUT 的 DROP 而永远无法收到 ICMP echo,只能往出发包而不能接收任何类型的包,毫无疑问自然就断网了。

此时ufw status还会告诉你在运行,但是当你使用ufw disable关闭 ufw 时,INPUT 会被设置成 ACCEPT,自然就恢复网络通信了;

当你使用ufw default allow把默认出网规则设置成 allow 时,INPUT 也会被设置成 ACCEPT,当然网络通信恢复了。

所以童鞋们自此应该理解了刚开始理解动图能够 ping 通和不通的原因吧!

使用 ufw 和 iptables 的警告

最后给大家一个警告,当你使用了 ufw 这类前端时,就最好不要再碰 iptables 了,尤其要慎重使用 iptables – 来清空所有链的规则。在不了解 iptables 的表、链、规则之前,盲目的清空 iptables”规则” 就是耍流氓!

试想,假如你在服务器上ufw enable,那么 INPUT 和 FORWARD 就是 DROP,那么当你iptables -F时,不仅仅是 SSH 的例外规则没了,所有出网的包也都出不去了!此时唯一能做的事情就是去 VNC、或者去机房插鼠标键盘显示器。

假如你是买的服务器,为了安全考虑使用密钥认证,并且把用户名设置成了从 openssl 生成的随机密码,并且你是由 Windows 重装成的 Linux,那么控制台也是没有用的…… 重装或者快照吧。