iptables 封禁 ip 方法

iptables是Linux中功能最为强大的防火墙软件之一,使用灵活,可以对流入和流出服务器的数据包进行很精细的控制。

iptables的使用

命令说明

iptables [-t tbl] -COMMAND 链名 匹配条件 相应操作 #[-t tbl]为可选参数,-t用来指定具体操作那张表,不指定的话默认是Filter表

COMMAND 说明

命令选项用于指定iptables的执行方式,包括插入规则,删除规则和添加规则,常用的命令选项如下:

-A:在规则列表的最后增加1条规则 #简写(一个横杠)和全称(两个横杠),敲对了使用那个都可以,推荐使用简写不容易犯错

-D:从规则列表中删除1条规则

-F:删除表中所有规则

-I:在指定的位置插入1条规则

-L:查看iptables规则列表

-P:定义默认策略

-R:替换规则列表中的某条规则

-X:删除自定义链

-Z:将表中数据包计数器和流量计数器归零

匹配条件

匹配条件用来实现更为精细和具体的条件,如网络接口名称,协议名称,源目的端口号等,高频匹配条件如下:

-i:网络接口名称 #指定数据包从哪个网络接口进入

-m:匹配的模块 #指定数据包规则所使用的过滤模块

-o:网络接口名称 #指定数据包从哪个网络接口输出

-p:协议名称 #指定数据包匹配的协议,如TCP、UDP和ICMP等

-s:源地址或子网地址 #指定数据包匹配的源地址

-state:数据包当前状态 #指定ESTABLISHED,RELATED等

-sport:源端口号 #指定数据包匹配的源端口号

-dport:目的端口号 #指定数据包匹配的目的端口号iptables规则的动作

相应操作

对于符合过滤规则或条件的数据包,需要进行相应的操作,如下:

-ACCEPT:接受数据包

-DNAT:目标地址转换,即改变数据包的目的地址。例如:将的广域网IP(222.101.98.54/24) ==> 局域网的IP(.1/24),且在NAT表的PREROUTING链上进行该动作

-DROP:丢弃数据包

-LOG:日志功能,将符合规则的数据包的相关信息记录在日志中,便于分析和排错

-MASQUERADE:IP伪装,改写数据包来源IP为防火墙的IP及端口,和SNAT不同的是,当进行IP伪装时,不需指定要伪装成哪个IP,IP会从网卡直接读取

-EDIRECT:与DROP基本一样,区别在于它除了阻塞包之外,还向发送者返回错误信息

-SNAT:源地址转换,即改变数据包的源地址

iptables命令实例

查看所有规则

sudo iptables -L

常用示例

开始使用iptables之前,需要注意的是,使用iptables时,规则添加的顺序至关重要。

# 1、 允许外部访问指定端口(3306)
sudo iptables -I INPUT -p tcp --dport 3306 -j ACCEPT

# 2、 只允许指定ip(192.168.1.123、192.168.1.124)访问指定端口(50079)
## 第一步:在tcp协议中,禁止所有的ip访问本机的50070端口。
iptables -I INPUT -p tcp --dport 50070 -j DROP
## 第二步:允许192.168.1.123访问本机的50070端口
iptables -I INPUT -s 192.168.1.123 -p tcp --dport 50070 -j ACCEPT
## 第三步:允许192.168.1.124访问本机的50070端口
iptables -I INPUT -s 192.168.1.124 -p tcp --dport 50070 -j ACCEPT
## 注意以上3条命令的顺序不能错。

禁止其他主机Ping 服务器

通常服务器不允许其他主机ping自己,实现方法如下:

sudo iptables -A INPUT -p icmp -j DROP

封杀指定IP

可使用iptables封杀指定IP,关键操作如下:

sudo iptables -I INPUT -s 192.168.1.4 -j DROP  #DROP掉来自192.168.1.4的所有数据包

封杀指定网段

要添加IP段到封停列表中,使用下面的命令:

sudo iptables -I INPUT -s 192.168.1.0/24 -j DROP  #DROP掉所有来自192.168.1.0网段的数据包

sudo iptables -I INPUT -s 123.0.0.0/8 -j DROP      #封整个段即从123.0.0.1到123.255.255.254的数据包
sudo iptables -I INPUT -s 124.45.0.0/16 -j DROP    #封IP段即从123.45.0.1到123.45.255.254的数据包
sudo iptables -I INPUT -s 123.45.6.0/24 -j DROP    #封IP段即从123.45.6.1到123.45.6.254的数据包

封杀指定端口

可使用iptables封杀指定IP端口,关键操作如下:

sudo iptables -I INPUT -p tcp --dport 1234 -j DROP  #封杀1234端口

如果要放行某些IP的1234端口,可以进行如下操作:

sudo iptables -I INPUT -s 192.168.1.0/24 -p tcp --dport 1234 -j ACCEPT  #放行源地址来自192.168.1.0网段1234端口的所有数据包

允许SSH服务

服务器大多需要SSH服务,iptables需要开启SSH端口,具体操作如下:

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

允许Web服务

服务器大多需要访问Web服务的,可用如下规则打开Web服务访问:

sudo iptables -A INPUT  -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT  -p tcp --dport 443 -j ACCEPT

允许Email服务

对于电子邮件的发送和接收比较麻烦,这里采用默认和安全两种方式,关键操作如下:

SMTP
sudo iptables -A INPUT -i ens33 -p tcp --dport 25 -j ACCEPT
sudo iptables -A INPUT -i ens33 -p tcp --dport 465 -j ACCEPT

POP3
sudo iptables -A INPUT -i ens33 -p tcp --dport 110 -j ACCEPT
sudo iptables -A INPUT -i ens33 -p tcp --dport 995 -j ACCEPT

IMAP
sudo iptables -A INPUT -i ens33 -p tcp --dport 143 -j ACCEPT
sudo iptables -A INPUT -i ens33 -p tcp --dport 993 -j ACCEPT

如果是上述之外的服务,如MySQL或Postgre等,请用相应端口替换即可。

拒绝其它数据包

需要的端口和协议都开启了,最后就需要iptables绝对拒绝上面规则之外的数据包内容,参考操作如下:

sudo iptables -A INPUT -j REJECT
sudo iptables -A FORWARD -j REJECT
sudo iptables -A OUTPUT -j REJECT

iptables 解封ip

# 展示带编号的所有iptables规则
sudo iptables -L -n --line-number

# 对指定编号规则进行删除

sudo iptables -D INPUT {num}

# 比如要删除INPUT里序号为8的规则,执行:

sudo iptables -D INPUT 8

或直接

iptables -D INPUT -s ***.***.***.*** -j DROP

永久有效设置, iptables命令保存为规则文件

iptables命令保存为规则文件的必要性

  • iptables 的命令仅当前会话有效,如果不保存的话,重启后防火墙规则全部丢失。
  • iptables 配置繁琐,实际应用中,如果总是一条条的键入iptables规则,很容易出错。

对于Ubuntu系统,可以通过创建iptables规则文件来实现,并且规则文件可以保存,重启服务器后可以直接调用,比通过命令行的方式便捷得多,关键操作如下:

sudo su
iptables-save > /etc/iptables.rules

前面保存了iptables的规则,如何恢复呢?只需运行如下命令即可导入保存号的iptables规则文件:

iptables-restore < /etc/iptables.rules

需要强调的是,通过手动或规则文件添加的iptables规则都不是永久的。如果重启服务器,这些规则都将被清空,需要重新添加或从文件导入。

对此可以新建一个bash脚本,并保存到 /etc/network/if-pre-up.d/目录下:

sudo su

cd /etc/network/if-pre-up.d/

vim iptables

# 添加以下内容
#!/bin/bash 
iptables-restore < /etc/iptables.rules

# 配置可执行权限
chmod 755 iptables

这样,每次系统重启后iptables规则都会被自动加载。

注意:不要尝试在.bashrc或者.profile中执行以上命令,因为用户通常不是root,而且这只能在登录时加载iptables规则。

对于CentOS, RedHat系统操作方法如下:

yum install iptables-services

systemctl enable iptables.service //设置开机启动

# 保存iptables规则 
service iptables save
# 重启iptables服务
service iptables stop
service iptables start
# 查看当前规则:
cat  /etc/sysconfig/iptables

 

版权声明:
作者:Leapteam
链接:https://blog.xwyue.com/1050.html
来源:星跃博客
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
< <上一篇
下一篇>>