常见的linux系统防火墙有:UFW、firewall、iptables,其中,UFW是Debian系列的默认防火墙,

firewall 是红帽系列7及以上的防火墙(如CentOS7.x),iptables是红帽系列6及以下(如CentOS6.x)的防火墙。

废话不多说,直接上示例:

ufw防火墙配置示例:

#!/bin/bash
# Check if user is root
if [ $(id -u) != "0" ]; then
    echo "Error: You must be root to run this script, please su to root user"
    exit 1
fi
echo "检测防火墙UFW 服务是否安装..."
if ! type ufw >/dev/null 2>&1; then
    echo "ufw服务未安装,正在安装ufw..."
     apt-get install ufw -y
fi

#设置默认策略,即拒绝传入并允许传出连接
ufw default deny incoming
ufw default allow outgoing
#允许SSH连接
ufw allow ssh
#如果将SSH守护程序配置为使用其他端口,则必须指定相应的端口
#ufw allow 22

echo "允许IP访问本机的22端口:"
#允许IP段访问本机的22端口
ufw allow from 192.168.1.0/24 to any port 22
#允许IP访问本机的22端口
ufw allow from 192.168.2.5 to any port 22

#其它的端口
# 如果要控制协议,只要加入“/协议”在端口后面就行了。例如: ufw allow 53/tcp或udp

#开放http服务80端口,以下任意一条命令均可
ufw allow http
#ufw allow 80
#开放https服务443端口,以下任意一条命令均可
ufw allow https
#ufw allow 443


# 允许IP段访问数据库端口
ufw allow from 192.168.31.0/24 to any port 5432
# 允许IP访问数据库端口
ufw allow from 192.168.2.5 to any port 5432

#允许特定的IP地址
ufw allow from 192.168.2.6

#允许特定子网
ufw allow from 192.168.1.0/24

#允许特定端口范围,必须指定规则应适用的协议( tcp或udp )
ufw allow 52013:52020/tcp
ufw allow 52013:52020/udp

#绑定特定网卡,如:希望PgSQL数据库服务器(端口5432 )监听专用网络接口eth1上的连接
ufw allow in on eth1 to any port 5432

#拒绝某个IP
# ufw deny from 192.168.1.1
#拒绝某个服务或端口
# ufw deny http

#删除规则
#1.按规则编号
#ufw status numbered
#2.根据编号删除
# ufw delete 3

#或者直接删除
# ufw delete allow http
# ufw delete allow 80

#禁止ping
#编辑/etc/ufw/before.rules
#将 -A ufw-before-input -p icmp-tyoe echo-request -j ACCEPT 中-j ACCEPT 换成 -j DROP

echo "UFW规则配置完毕..."

#重新加载防火墙规则
#启用UFW...
ufw enable

#重启加载
#ufw reload

#检测状态
ufw status verbose

firewall 防火墙配置示例:

#!/bin/bash
# Check if user is root
if [ $(id -u) != "0" ]; then
    echo "Error: You must be root to run this script, please su to root user"
    exit 1
fi
echo "查看 firewalld 服务状态"
systemctl status firewalld
echo "删除防火墙开放的22端口规则"
firewall-cmd --permanent --zone=public --remove-service=ssh
#firewall-cmd --zone=public --remove-port=22/tcp --permanent
#添加服务
#firewall-cmd --permanent --zone=public --add-service=ssh
echo "允许IP访问本机的22端口:"
#允许IP段访问本机的22端口
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 port protocol=tcp port=22 accept'
#允许IP访问本机的22端口
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.2.5/32 port protocol=tcp port=22 accept'
#允许icmp包通过,也就是允许ping
firewall-cmd --permanent --add-rich-rule='rule protocol value="icmp" accept' 
#删除防火墙开放的5432端口规则
firewall-cmd --zone=public --remove-port=5432/tcp --permanent
# 允许IP段访问数据库端口
firewall-cmd --permanent --zone=public --add-rich-rule="rule family='ipv4' source address='192.168.1.0/24' port port='5432' protocol='tcp' accept"
# 允许IP访问数据库端口
firewall-cmd --permanent --zone=public --add-rich-rule="rule family='ipv4' source address='192.168.1.99' port port='5432' protocol='tcp' accept"

#开放http,https端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
#删除规则(需要删除的规则请用firewall-cmd --list-all 查询)
#firewall-cmd --permanent --zone=public --remove-rich-rule="rule protocol value="icmp" accept"

echo "firewall规则配置完毕..."

#重新加载防火墙规则
echo "firewall规则重新加载中..."
firewall-cmd --reload

#查看规则
firewall-cmd --list-all

iptables防火墙配置示例:

#!/bin/bash
# Check if user is root
if [ $(id -u) != "0" ]; then
    echo "Error: You must be root to run this script, please su to root user"
    exit 1
fi

#这个一定要先做,不然清空后可能会悲剧
iptables -P INPUT ACCEPT
#清空默认所有规则
iptables -F
#清空自定义的所有规则
iptables -X
#计数器置0
iptables -Z
#允许来自于lo接口的数据包
iptables -A INPUT -i lo -j ACCEPT
#开放80端口
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
#在tcp协议中,禁止所有的ip访问本机的22端口。
iptables -I INPUT -p tcp --dport 22 -j DROP 
#允许IP段访问本机的22端口
iptables -I INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT 
#允许IP访问本机的22端口
iptables -I INPUT -s 192.168.2.5 -p tcp --dport 22 -j ACCEPT 
#允许icmp包通过,也就是允许ping
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
#本机对外请求相当于OUTPUT,对于返回数据包必须接收啊,这相当于INPUT了
iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT

#过滤所有非以上规则的请求
iptables -P INPUT DROP
#保存iptables
service iptables save
#重启防火墙
service iptables restart