iptables规则示例之只允许本地访问特定端口

发布时间 2023-06-15 23:19:57作者: wangzy-Zj

一、背景说明

Iptables 指的是用来管理Linux防火墙的命令程序,通常位于/sbin/iptables,属于“用户态”(UserSpace,又称用户空间)的防火墙管理体系;   IPtables 是工作在用户空间中,定义规则的工具,本身并不算是防火墙。我们可以理解为一个客户端工具,用户通过ipatbles这个客户端,将用户的安全设定执行到对应的"安全框架"中,这个"安全框架"才是真正的防火墙,位于内核空间中,这个框架的名字叫netfilter。

小结:

  • iptables 本身不是防火墙,只是一个命令行工具,位于用户空间,通过这个命令行工具来操作netfilter。

  • netfilter 才是防火墙真正的安全框架,位于内核空间。

二、常用命令

说明: iptables 防火墙的策略匹配顺序为从上向下,当有多条相互排斥的策略在一起时,上面的策略先匹配,并且一旦策略匹配数据包就放行或阻止掉了,下面的策略不会再生效。 

# 查看 iptables 现有规则
iptables -L -n
    
# 查看每个规则chain的序列号。
iptables -L -n --line-number
    
# 根据序列号删除指定一条防火墙规则,如:删除INPUT 表的第三条已添加规则,这里3代表第几行规则
iptables -D INPUT 3 
    
# 清空所有默认规则
iptables -F
    
# 清空所有自定义规则
iptables -X
    
# 所有计数器归 0
iptables -Z
    
# 允许来自于 lo 接口的数据包(本地访问)
iptables -A INPUT -i lo -j ACCEPT
    
# 开放22端口(-A 将规则追加在原有规则的最后一条 -I 将新添加的规则加在原有规则的第一条)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    
# 禁止访问80端口
iptables -A INPUT -p tcp --dport 80 -j DROP
      
# 允许ping
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
    
# 允许接受本机请求之后的返回数据 RELATED ,是为 FTP 设置的
iptables -A INPUT -m state --state  RELATED,ESTABLISHED -j ACCEPT
      
# 同时开放22和80端口
 iptables -I INPUT -p tcp -m multiport --dport 22,80 -j ACCEPT 
    
# 开放5000-6000端口
iptables -I INPUT -p tcp --dport 5000:6000 -j ACCEPT 
    
# 允许某个网段的ip访问
ptables -I INPUT -p all -s 0.0.0.0/0 -j ACCEPT 
    
# 允许某个ip的8080端口访问
iptables -I INPUT -s 0.0.0.0 -p tcp --dport 8080 -j ACCEPT 
    
# 禁止某台主机的tcp访问访问
iptables -I INPUT -p tcp -s 0.0.0.0 -j DROP 
    
# iptables 禁止指定 IP 段访问
iptables -I INPUT -s 117.41.187.0/24 -j DROP
    
# 只允许访问本机80端口(其他端口都禁止访问
iptables -A INPUT -p tcp ! --dport 80 -j DROP
    
    
# 禁止服务器访问此IP地址
iptables -I OUTNPUT -d 114.232.9.171 -j DROP
    

删除规则:
iptables -t filter -D INPUT 2 //删除filter表中INPUT链中的第二条规则
iptables -D INPUT -s 192.168.1.100 -j ACCEPT //删除源地址为192.168.1.100,动作为ACCEPT的规则
iptables -F INPUT //删除filter表中INPUT链
iptables -F //删除所有的规则(慎用)
    

 

三、实例演示

3.1 演示目的

限制只允许 本机ip 和 127.0.0.1访问,禁止其他IP访问本机的服务,以redis为例。

3.2 演示环境

服务器IP备注
测试服务器 192.168.101.26 centos7.4
加固服务器 192.168.108.103 centos7.4

3.2 效果演示

加固前

测试服务器 上进行远程连接,发现可以直接连接 加固服务器

[root@wangzy redis-7.0.11]# ./src/redis-cli -h 192.168.108.103 -p 6379
192.168.108.103:6379>

加固后

测试服务器 上进行远程连接,发现不可以直接连接 加固服务器 ,但是加固服务身份可以正常连接

测试服务器远程 拒绝连接 展示

 加固服务器本身可以 正常连接 展示

 3.3 加固过程

3.2.1 安装服务并添加开机自启动

# 查看iptables.service是否安装,若未安装则进行安装
systemctl status  iptables.service

# 安装 iptables-services
yum -y install iptables-services

# 启动iptables
systemctl start iptables.service

# 查看iptables.service是否启动
systemctl status  iptables.service

# 加入开机自启动
systemctl enable iptables.service

3.2.2 添加策略

实现的效果为:只有本地加固服务器可以访问,远程服务器禁止访问6379端口。

# 注意前后顺序不能换,ip根据实际IP进行修改
## 注:iptables匹配规则:匹配即停止(-I插入到最前面,-A追加到追后面)
iptables -I INPUT -p tcp --dport 6379 -j DROP
iptables -I INPUT -s 192.168.108.103 -p tcp --dport 6379 -j ACCEPT
iptables -I INPUT -s 127.0.0.1 -p tcp --dport 6379 -j ACCEPT

# 查看规则

# 查看 iptables 现有规则

  iptables -L -n

# 保存上述规则
service iptables save

# 查看配置文件,看是否把临时文件加载进来
cat /etc/sysconfig/iptables

添加前

 添加后

  保存规则后看配置文件是否生效,防止开机后失效

 

结语:此次为临时文稿,更多详细内容后续更新或查看我的今日头条号。