在
导入中国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地址段
创建中国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