Linux 防火墙

Iptable防火墙

1. 安装iptables

  • 很多linux 系统默认安装了iptable防火墙
  • 使用如下命令查看是否安装了防火墙,以及查看现有防火墙规则

    // 命令后面的 line-number 为显示行号(将规则一则一则输出,并显示行号)-n 数字格式显示ip和端口
    iptables -L -n --line-numbers 
    

    像这样:

    [root@localhost ~]# iptables -L -n --line-numbers
    Chain INPUT (policy ACCEPT)
    num  target     prot opt source               destination         
    
    Chain FORWARD (policy ACCEPT)
    num  target     prot opt source               destination         
    1    DOCKER-ISOLATION  all  --  0.0.0.0/0            0.0.0.0/0           
    2    DOCKER     all  --  0.0.0.0/0            0.0.0.0/0           
    3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
    4    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
    5    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
    
    Chain OUTPUT (policy ACCEPT)
    num  target     prot opt source               destination         
    
    Chain DOCKER (1 references)
    num  target     prot opt source               destination         
    
    Chain DOCKER-ISOLATION (1 references)
    num  target     prot opt source               destination         
    1    RETURN     all  --  0.0.0.0/0            0.0.0.0/0 
    

按装命令:

CentOS :

yum install iptables

Ubuntu :

apt-get install iptables

2. iptables 规则

  • iptables -F
-F 是清空所有规则设定,可以加参数删除特定table表里的全部规则
  • iptables -X
-X 是删除使用者自定义的 table 表的规则,可以使用 iptables -X xxx 删除。
  • iptables -N
-N 创建一个新的规则table表,使用 iptables -N xxx 新增自订
  • iptables -A
在规则表中添加一个规则
// xxx 代表存在的规则表
iptabls -A xxx -p tcp --dport 22 -j ACCEPT
  • iptables -I
在规则表中插入一个规则
// xxx 代表存在的规则表
iptabls -I xxx -p tcp --dport 22 -j ACCEPT

注意: -A 和 -I 区别:
1. -A默认是把规则插到结尾
2. -I 默认是把规则插到前边,但是可以加参数指定插入到第几行

// 把下面规则插入 xxx 规则表的第2行
iptables -I xxx 2 -p tcp --dport 222 -j ACCEPT
  • iptables -D
-D 删除规则
//把刚才添加的规则删除
iptables -D xxx -p tcp --dport 222 -j ACCEPT

也可以

// 把第一条规则删除
iptables -D xxx 1 
  • iptables -C
-C 检查规则,例:
iptables -C xxx -p tcp --dport 222 -j ACCEPT

如果什么都不显示,说明存在这个规则,如果报iptables: Bad rule (does a matching rule exist in that chain?). 说明不存在的规则,可以添加

  • iptables -E
-E 修改规则表名称,不改变链本身规则
  • iptables -L
-L 列出规则
  • iptables -R
-R 替换莫个规则
// 把 xxx 中的 第一条规则22端口改成222端口
iptables -R xxx 1 -p tcp --dport 222 -j ACCEPT
  • iptables -p 和 -m
iptables -A xxx -p tcp -m tcp --dport 22 -j ACCEPT

-m tcp 的意思是使用 tcp 扩展模块的功能 (tcp扩展模块提供了 --dport, --tcp-flags, --sync等功能)
其实只用-p tcp 了话, iptables也会默认的使用 -m tcp 来调用 tcp模块提供的功能。但是 -p tcp-m tcp是两个不同层面的东西,一个是说当前规则作用于 tcp 协议包,而后一是说明要使用iptables的tcp模块的功能 (–dport 等)

  • iptables -Z
-Z 清空链,及链中默认规则的计数器的(有两个计数器,被匹配到多少个数据包,多少个字节
iptables -Z :清空

firewalld防火墙

1. firewalld简介

  • firewalld是centos7的一大特性,最大的好处有两个:支持动态更新,不用重启服务;第二个就是加入了防火墙的“zone”概念
  • firewalld有图形界面和工具界面
  • firewalld的字符界面管理工具是 firewall-cmd
  • firewalld默认配置文件有两个:/usr/lib/firewalld/ (系统配置,尽量不要修改)和 /etc/firewalld/ (用户配置地址)

zone概念:

硬件防火墙默认一般有三个区,firewalld引入这一概念系统默认存在以下区域
drop:默认丢弃所有包
block:拒绝所有外部连接,允许内部发起的连接
internal:信任所有连接
public:指定外部连接可以进入
external:这个不太明白,功能上和上面相同,允许指定的外部连接
dmz:和硬件防火墙一样,受限制的公共连接可以进入
work:工作区,概念和workgoup一样,也是指定的外部连接允许
home:类似家庭组

2. 安装 firewalld

root 执行

yum install firewalld firewall-config

3. 运行、重启、停止、状态firewalld

systemctl start/restart/stop/status firewalld 
// 或者
service iptables start/restart/stop/status
//查看状态也可用
firewall-cmd --state

4. firewall-cmd

  • 显示状态
firewall-cmd --state
  • 查看区域信息
firewall-cmd --get-active-zones
  • 拒绝所有包
firewall-cmd --panic-on
  • 取消拒绝状态
firewall-cmd --panic-off
  • 查看是否拒绝
firewall-cmd --query-panic
  • 更新防火墙
firewall-cmd --reload
firewall-cmd --complete-reload

注:两者的区别就是第一个无需断开连接,就是firewalld特性之一动态添加规则,第二个需要断开连接,类似重启服务

  • 将接口添加到区域,默认接口都在public
firewall-cmd --zone=public --add-interface=eth0

注:永久生效再加上–permanent然后reload防火墙

  • 设置默认接口区域
firewall-cmd --set-default-zone=public

注: 立即生效无需重启

  • 查看所有打开端口
firewall-cmd --zone=dmz --list-ports
  • 加入一个端口到区域
firewall-cmd --zone=dmz --add-port=8080/tcp

注:永久生效再加上–permanent然后reload防火墙

  • 打开一个服务,类似于将端口可视化,服务需要在配置文件中添加,/etc/firewalld 目录下有services文件夹
firewall-cmd --zone=work --add-service=smtp
  • 移除服务
firewall-cmd --zone=work --remove-service=smtp
  • 列出全部启用的区域的特性
firewall-cmd --list-all-zones

Firewall 比较详细的用法

ufw防火墙

1. ufw

一向以简单易用著称Ubuntu在它的发行版中,附带了一个相对iptables简单很多的防火墙配置工具:ufw
ufw默认是没有启用的。 也就是说ubuntu中端口都是默认开放的。

ufw防火墙是一个主机端的iptables类防火墙配置工具。这个工具的目的是提供给用户一个可以轻松驾驭的界面,就像包集成和动态检测开放的端口一样

  • 安装ufw
sudo apt-get install ufw
  • 通过这条命令,我们设置阻止所有外部对本机的访问(默认的规则为allow), 这样除非指明打开的端口, 否则所有端口默认都是关闭的。
sudo ufw default deny
  • 启动ufw。如果下次重新启动机器, ufw也会自动启动。
sudo ufw enable
  • 对于大部分防火墙操作来说, 其实无非就是的打开关闭端口。如果要打开SSH服务器的22端口, 我们可以这样:
sudo ufw allow 22
或者
sudo ufw allow ssh

注意:由于在/etc/services中, 22端口对应的服务名是ssh,所以命令是一样。

  • 查看防火墙状态
sudo ufw status
  • 删除规则
sudo ufw delete allow 22
  • 只打开使用tcp/ip协议的22端口
sudo ufw allow 22/tcp
  • 打开来自192.168.0.1的tcp请求的80端口
sudo ufw allow proto tcp from 192.168.0.1 to any port 22
  • 关闭防火墙
sudu ufw disable
  • 打开或关闭日志
ufw logging on|off

你可能感兴趣的:(Linux)