标签 防火墙 下的文章

某些 VPS 带宽长时间超速,容易引发厂商主动 QOS 甚至被短时间的断网。
使用 iptables 防火墙对端口进行适当程度的限速。

需要安装 iptables,注意限速规则 Rule ,不要受到其他 Rule 规则的影响!

iptables 8080端口限速命令:

iptables -A OUTPUT -p tcp --sport 8080-m limit --limit 1000/s --limit-burst=10 -j ACCEPT
iptables -A OUTPUT -p udp --sport 8080-m limit --limit 1000/s --limit-burst=10 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 8080-j DROP
iptables -A OUTPUT -p udp --sport 8080-j DROP

上面的命令意思是:8080的上行带宽,每秒产生 1000 的数据包,初始的数据包数量是10个,对超过带宽的数据包进行阻止(不会导致丢包或者端口)。

带宽粗略计算方法: 1000/s x MTU(默认1500字节) = 1000 x 1500 = 1500000 Bytes
折算成网速则为:1.43M/s

一、修改 /etc/default/ufw

vi /etc/default/ufw

将 DEFAULT_FORWARD_POLICY="DROP" 的 DROP 改为 ACCEPT

二、修改 /etc/ufw/sysctl.conf

vi /etc/ufw/sysctl.conf

添加 net/ipv4/ip_forward=1 ,注意不要重复添加。

三、修改 /etc/ufw/before.rules

将以下内容添加到过滤器规则(*filter)之前
( 示例:将本机 33.11.11.11:6677 转发到 88.66.66.66:8899 端口)
不适用于专有网络内网vps,例如阿里云;

*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]

-A PREROUTING -p tcp --dport 3344 -j DNAT --to-destination 88.66.66.66:8899
-A PREROUTING -p udp --dport 3344  -j DNAT --to-destination 88.66.66.66:8899
-A POSTROUTING -p tcp -d 88.66.66.66 --dport 8899 -j SNAT --to-source 33.11.11.11
-A POSTROUTING -p udp -d 88.66.66.66 --dport 8899 -j SNAT --to-source 33.11.11.11

COMMIT

最后重启 reboot ;

查看指定规则表状态:

iptables -t nat -vnL POSTROUTING
iptables -t nat -vnL PREROUTING

其他命令:

#查看 nat 表中所有链的规则
iptables -t filter  -L
#查看 nat 表中所有链的规则及地址、端口信息
iptables -t filter  -nL

定时获取域名所解析的 IP ,并将 IP 添加至 UFW 防火墙规则;

仅适用于 IPv4 网络的机器!

# 新建脚本
vi /usr/ufwip.sh

Shell 脚本内容如下,请自行替换 google.com 为自己的域名:

#!/bin/bash

# crontab 任务:每20分钟执行一次
# */20 * * * * bash /usr/ufwip.sh > /dev/null

if [ -e /var/ip.log ]
then
   echo "file exist"
else
   echo "1.1.1.1" >> /var/ip.log
fi

OLDIP=$(cat /var/ip.log)
if [ $OLDIP ]
then
    echo "not null"
else
    echo "init ip 1.1.1.1"
    OLDIP="1.1.1.1"
fi

TMPSTR=`ping google.com -c 1 | sed '1{s/.*(\([^ ]*\)) 56.*/\1/;q}'`

if [ $TMPSTR != $OLDIP ]
then
    ufw allow from $TMPSTR
    ufw reload
    echo "ufw add ip succeed"
    echo $TMPSTR > /var/ip.log
else
    echo "IP not change."
fi

UFW,或称Uncomplicated Firewall,是iptables的一个接口,为不熟悉防火墙概念的初学者提供了易于使用的界面,同时支持IPv4和IPv6,广受欢迎。

使用UFW来管理防火墙规则,十分方便好用。

安装UFW

# Ubuntu & Debian使用以下命令
apt-get install ufw -y

# CentOS使用以下命令
yum install epel-release -y
yum install --enablerepo="epel" ufw -y

UFW安装后,可以通过以下命令来启动UFW服务并使其在启动时启动(一般在完成默认配置后再重启):

ufw enable

使用以下命令检查UFW的状态:

ufw status 

禁用UFW防火墙:

ufw disable

如果你决定要重新开始,则可以使用reset命令:

ufw reset

这将禁用UFW并删除之前定义的任何规则。

UFW配置文件目录:

  • /etc/default/ufw

UFW常用命令

默认情况下,UFW默认策略设置为阻止所有传入流量并允许所有传出流量。

一般的,我们先设置放行的端口和IP,最后设置入、出规则。

ufw reset
ufw allow 22 # SSH 端口
ufw allow 80
ufw allow 443
ufw allow 15566
ufw allow from 123.123.123.123  # 放行的白名单IP
ufw allow from 106.106.106.0/24  # 放行的白名单IP段
# 阻止所有传入流量并允许所有传出流量
ufw default deny incoming
ufw default allow outgoing
ufw enable

UFW可以基于TCP或UDP协议来过滤数据包,命令如下:

ufw allow 80/tcp
ufw allow 21/udp

最后,使用以下命令查看已添加规则的状态:

ufw status verbose

应该可以看到如下输出:

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip
To                         Action      From
80/tcp                     ALLOW IN    Anywhere
21/udp                     ALLOW IN    Anywhere
80/tcp (v6)                ALLOW IN    Anywhere (v6)
21/udp (v6)                ALLOW IN    Anywhere (v6)

还可以使用以下命令随时拒绝指定端口任何传入和传出的流量:

ufw deny 80
ufw deny 21

如果要删除规则,只需在原始规则前加上delete即可,如下所示:

ufw delete deny 80
ufw delete deny 21

也可以按编号删除规则,使用以下命令查看规则及其编号:

ufw status numbered

输出:

OutputStatus: active
     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     ALLOW IN    Anywhere
[ 2] 443/tcp                    ALLOW IN    Anywhere
[ 3] 22/tcp (v6)                ALLOW IN    Anywhere (v6)
[ 4] 443/tcp (v6)               ALLOW IN    Anywhere (v6)

删除编号为3的规则:

ufw delete 3

要允许某个IP地址连接特定的某个端口,可以运行以下命令:

ufw allow from 62.13.209.36 to any port 8080

进一步的,可以指定特定的IP段和TCP/UDP协议:

ufw deny from 62.13.209.33 to any port 22
ufw allow from 62.13.209.0/24 to any port 8080 proto tcp

查看UFW防火墙的日志:

tail -f /var/log/ufw.log

更多姿势请查看UFW官方文档:

https://wiki.ubuntu.org.cn/Ufw%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97

CentOS 7卸载删除firewalld防火墙,安装iptables防火墙。

一、CentOS 7卸载firewalld防火墙命令

关闭开机启动,停用firewalld,卸载firewalld防火墙;

systemctl disable firewalld
systemctl stop firewalld
systemctl mask firewalld
systemctl disable firewalld.service

经过以上命令后,firewalld防火墙就完全卸载了,可以安装熟悉的iptables防火墙了。

二、CentOS 7安装iptables防火墙

yum install iptables -y
yum install iptables-services -y
systemctl enable iptables
systemctl enable iptables.service

三、CentOS 7下iptables防火墙常见命令

列下CentOS 7下iptables防火墙的常见命令,包括重启iptables、iptables防火墙状态等命令;

#启动服务
systemctl start iptables.service
#运行状态查询
systemctl status iptables.service
#重启服务
systemctl restart iptables.service
#保存防火墙规则
service iptables save