Los

×

导入中国IP地址集,屏蔽国外IP访问服务器指定端口(443端口)

环境:Centos 7

注意事项:

  • 安装和配置这些服务可能会影响到现有的网络连接和防火墙规则,请在进行操作前做好相应的备份和规划。

安装ipset、iptables

yum update
yum install -y iptables iptables-services ipset

禁用firewalld

防止和iptables冲突

sudo systemctl stop firewalld
sudo systemctl disable firewalld

启用iptables并开机启动

sudo systemctl enable iptables
sudo systemctl start iptables

检查状态

sudo systemctl status iptables
sudo ipset list
#第一个命令会显示iptables服务的状态,第二个命令会列出当前所有的ipset集合及其内容(如果有的话)。

准备好中国IP地址段

https://www.ip2location.com/free/visitor-blocker

创建中国IP集并导入下载好的IP段

ipset create china_ips hash:net
while read -r line; do sudo ipset add china_ips $line; done < china_ip_list.txt

创建iptables规则并关联ipset,并添加日志

# 允许来自中国IP地址集的流量访问443端口
#--log-prefix 指定日志前缀
#--log-level 指定日志级别
sudo iptables -A INPUT -p tcp --dport 443  -m set --match-set china_ips src -j LOG --log-prefix Iptables-china_ips-ACCEPT --log-level info
sudo iptables -A INPUT -p tcp --dport 443 -m set --match-set china_ips src -j ACCEPT

#允许所有内网ip地址
sudo iptables -A INPUT -p tcp -s 192.168.0.0/16 --dport 443 -j LOG --log-prefix Iptables-Internal-ACCEPT --log-level info
sudo iptables -A INPUT -p tcp -s 192.168.0.0/16 --dport 443 -j ACCEPT
sudo iptables -A INPUT -p tcp -s 10.0.0.0/8 --dport 443 -j LOG --log-prefix Iptables-Internal-ACCEPT --log-level info
sudo iptables -A INPUT -p tcp -s 10.0.0.0/8 --dport 443 -j ACCEPT
sudo iptables -A INPUT -p tcp -s 172.16.0.0/12 --dport 443 -j LOG --log-prefix Iptables-Internal-ACCEPT --log-level info
sudo iptables -A INPUT -p tcp -s 172.16.0.0/12 --dport 443 -j ACCEPT

# 添加拒绝规则,拒绝除已允许IP外的所有公网IP访问443端口
sudo iptables -A INPUT -p tcp --dport 443 -j LOG --log-prefix Iptables-DROP --log-level info
sudo iptables -A INPUT -p tcp --dport 443 -j DROP

#保存规则
iptables-save > /etc/sysconfig/iptables

配置rsyslog

修改iptables日志存放路径

#/etc/rsyslog.conf
:msg, contains, "Iptables-" -/var/log/iptables.log
& ~

•第一行表示将所有包含 “Iptables-” 的日志记录到 /var/log/iptables.log 文件。

•第二行 & ~ 用于阻止这些日志再被记录到其他日志文件中。

配置logrotate

/etc/logrotate.d/ 目录下创建或编辑一个配置文件,例如 iptables。如果该目录不存在,你可能需要创建它

在配置文件中,添加以下内容来定义日志文件的轮转策略:

/var/log/iptables.log {
    daily          # 每天轮转一次
    rotate 60      # 保留60份旧的日志文件
    create		   #自动创建新的日志文件,新的日志文件具有和原来的文件相同的权限;因为日志被改名,因此要创建一个新的来继续存储之前的日志
    missingok      # 如果日志文件丢失,则不报错
    notifempty     # 如果日志文件为空,不发送通知
    create 640 root root    # 创建新日志文件时的权限和所属用户/组
    postrotate	#日志轮转后重启rsyslog,不重启的话日志会继续往刚刚备份的文件里写入。
		/usr/bin/systemctl restart rsyslog.service
    endscript
}

重启 logrotate 服务

logrotate -d /etc/logrotate.d/iptables
#这个命令会显示 logrotate 将要执行的操作,但不会真正执行它们。

logrotate -f /etc/logrotate.d/iptables
#强制轮转日志文件

ipset常用命令

1. 创建IP集
  ipset create china_ips hash:net
2. 清空集合
  sudo ipset flush SET_NAME
3. 删除集合
  sudo ipset destroy SET_NAME
4. 删除CIDR或IP地址
  sudo ipset del SET_NAME CIDR_RANGE
5. 通过文件导入IP集
  ipset.txt格式
  add china_ips 223.255.236.0/22
  add china_ips 223.255.252.0/23
命令
  ipset restore < /etc/ipset/ipset.txt
或
  ipset.txt格式
  223.255.236.0/22
  223.255.252.0/23
  while read -r line; do sudo ipset add china_ips $line; done < ipset.txt
6. 增加一条ip或CIDR
  ipset add SET_NAME CIDR_RANGE

iptable常用命令

# 允许来自中国IP地址集的流量访问80端口
sudo iptables -A INPUT -p tcp --dport 80 -m set --match-set china_ips src -j ACCEPT

#允许所有内网ip地址
sudo iptables -A INPUT -p tcp -s 192.168.0.0/16 --dport 443 -j ACCEPT
sudo iptables -A INPUT -p tcp -s 10.0.0.0/8 --dport 443 -j ACCEPT
sudo iptables -A INPUT -p tcp -s 172.16.0.0/12 --dport 443 -j ACCEPT


#查看规则IP 端口
sudo iptables -nL --line-numbers

#删除规则
iptables -D INPUT 规则编号

#保存规则
iptables-save > /etc/sysconfig/iptables

#临时保存,重启服务时效
iptables-save

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

作者

marcelinozarillahni44@gmail.com