iptables 封禁 ip 方法
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
linkedin
新手,学习中,多谢啦