沐光

记录在前端之路的点点滴滴

Linux 防火墙的使用和配置(转载)

前言

文章转载自 linux 防火墙使用以及配置,使用方法大同小异,在此转载一篇做个笔记。

Centos 7 firewall :

1. firewalld 的基本使用
  • 启动: systemctl start firewalld
  • 关闭: systemctl stop firewalld
  • 查看状态: systemctl status firewalld
  • 开机禁用 : systemctl disable firewalld
  • 开机启用 : systemctl enable firewalld
2. systemctl 是 CentOS7 的服务管理工具中主要的工具,它融合之前 service 和 chkconfig 的功能于一体。
  • 启动一个服务:systemctl start firewalld.service
  • 关闭一个服务:systemctl stop firewalld.service
  • 重启一个服务:systemctl restart firewalld.service
  • 显示一个服务的状态:systemctl status firewalld.service
  • 在开机时启用一个服务:systemctl enable firewalld.service
  • 在开机时禁用一个服务:systemctl disable firewalld.service
  • 查看服务是否开机启动:systemctl is-enabled firewalld.service
  • 查看已启动的服务列表:systemctl list-unit-files|grep enabled
  • 查看启动失败的服务列表:systemctl --failed
3. 配置 firewalld-cmd
  • 查看版本:firewall-cmd --version
  • 查看帮助:firewall-cmd --help
  • 显示状态:firewall-cmd --state
  • 查看所有打开的端口:firewall-cmd --zone=public --list-ports
  • 更新防火墙规则:firewall-cmd --reload
  • 查看区域信息: firewall-cmd --get-active-zones
  • 查看指定接口所属区域:firewall-cmd --get-zone-of-interface=eth0
  • 拒绝所有包:firewall-cmd --panic-on
  • 取消拒绝状态:firewall-cmd --panic-off
  • 查看是否拒绝:firewall-cmd --query-panic

那怎么开启一个端口呢?

  • 添加: firewall-cmd --zone=public --add-port=80/tcp --permanent (–permanent 永久生效,没有此参数重启后失效)
  • 重新载入:firewall-cmd --reload
  • 查看:firewall-cmd --zone= public --query-port=80/tcp
  • 删除:firewall-cmd --zone= public --remove-port=80/tcp --permanent

  • 调整默认策略(默认拒绝所有访问,改成允许所有访问):

1
2
firewall-cmd --permanent --zone=public --set-target=ACCEPT
firewall-cmd --reload
  • 对某个 IP 开放多个端口:
1
2
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.159.60.29" port protocol="tcp" port="1:65535" accept"
firewall-cmd --reload

Centos 6 iptables:

1. iptables 的基本使用
  • 启动:service iptables start
  • 关闭:service iptables stop
  • 查看状态:service iptables status
  • 开机禁用:chkconfig iptables off
  • 开机启用:chkconfig iptables on
2. 开放指定的端口

-A-I 参数分别为添加到规则末尾和规则最前面。

  • 允许本地回环接口(即运行本机访问本机):iptables -A INPUT -i lo -j ACCEPT
  • 允许已建立的或相关连的通行:iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  • 允许所有本机向外的访问:
1
2
iptables -P INPUT ACCEPT
iptables -A OUTPUT -j ACCEPT
  • 允许访问 22 端口:
1
2
3
# -s 后可以跟 IP 段或指定 IP 地址
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -s 10.159.1.0/24 --dport 22 -j ACCEPT
  • 允许访问 80 端口:iptables -A INPUT -p tcp --dport 80 -j ACCEPT
  • 允许 FTP 服务的 21 和 20 端口:
1
2
3
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -j ACCEPT
# 如果有其他端口的话,规则也类似,稍微修改上述语句就行
  • 允许 ping:iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
  • 禁止其他未允许的规则访问:
1
2
3
# 注:如果 22 端口未加入允许规则,SSH 链接会直接断开。
iptables -A INPUT -j REJECT
iptables -A FORWARD -j REJECT
3. 屏蔽 IP

注:如果只是想屏蔽 IP 的话,上述 “2. 开放指定的端口” 可以直接跳过。

  • 屏蔽单个 IP 的命令是:iptables -I INPUT -s 123.45.6.7 -j DROP
  • 封整个段(即从 123.0.0.1 到 123.255.255.254)的命令:iptables -I INPUT -s 123.0.0.0/8 -j DROP
  • 封 IP 段(即从 123.45.0.1 到 123.45.255.254)的命令:iptables -I INPUT -s 124.45.0.0/16 -j DROP
  • 封 IP 段(即从 123.45.6.1 到 123.45.6.254)的命令是:iptables -I INPUT -s 123.45.6.0/24 -j DROP
4. iptables 的规则
查看已添加的规则

iptables -L -n

只显示 IP 地址和端口号,不将 IP 解析为域名

删除已添加的 iptables 的规则

将所有 iptables 以序号标记显示,执行:

iptables -L -n --line-numbers

比如要删除 INPUT 里序号为 8 的规则,执行:

iptables -D INPUT 8

5. 可以直接编辑配置文件,添加 iptables 防火墙规则:

iptables 的配置文件为 /etc/sysconfig/iptables

编辑配置文件:

vi /etc/sysconfig/iptables

文件中的配置规则与通过的 iptables 命令配置,语法相似:

如,通过 iptables 的命令配置,允许访问 80 端口:

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

那么,在文件中配置,只需要去掉句首的 iptables,添加如下内容:

-A INPUT -p tcp --dport 80 -j ACCEPT

保存退出。

有两种方式添加规则

iptables -A 和iptables -I

iptables -A 添加的规则是添加在最后面。如针对 INPUT 链增加一条规则,接收从 eth0 口进入且源地址为 192.168.0.0/16 网段发往本机的数据。

iptables -A INPUT -i eth0 -s 192.168.0.0/16 -j ACCEPT

iptables -I 添加的规则默认添加至第一条。

如果要指定插入规则的位置,则使用 iptables -I 时指定位置序号即可。

删除规则

如果删除指定则,使用 iptables -D 命令,命令后可接序号。效果请对比上图。

iptables -D 接详细定义;

如果想把所有规则都清除掉,可使用 iptables -F

备份 iptabes rules

使用 iptables-save 命令,如:

iptables-save > /etc/sysconfig/iptables.save

恢复 iptables rules

使用 iptables 命令,如:

iptables-restore < /etc/sysconfig/iptables.save

iptables 配置保存

以上做的配置修改,在设备重启后,配置将丢失。可使用 service iptables save 进行保存。

重启 iptables 的服务使其生效:

service iptables save

添加规则后保存重启生效。

service iptables restart

后记

关于更多的 iptables 的使用方法可以执行:

iptables --help