WenRou's Blog

新浪微薄腾讯微薄

最新碎语:测试图片碎语哦

您的位置:WenRou's Blog >lnamp> Linux上iptables防火墙的实例教程

Linux上iptables防火墙的实例教程

1、安装iptables防火墙
如果没有安装iptables需要先安装,CentOS执行:

yum install iptables 

Debian/Ubuntu执行:

apt-get install iptables 

2、清除已有iptables规则

iptables -F
iptables -X
iptables -Z 

3、开放指定的端口
-A和-I参数分别为添加到规则末尾和规则最前面。

#允许本地回环接口(即运行本机访问本机)
iptables -A INPUT -i lo -j ACCEPT

# 允许已建立的或相关连的通行
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#允许所有本机向外的访问
iptables -A OUTPUT -j ACCEPT

# 允许访问22端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

#允许访问80端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

#允许FTP服务的21和20端口
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -j ACCEPT
#如果有其他端口的话,规则也类似,稍微修改上述语句就行

#允许ping
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

#禁止其他未允许的规则访问
iptables -A INPUT -j REJECT  #(注意:如果22端口未加入允许规则,SSH链接会直接断开。)
iptables -A FORWARD -j REJECT 

4、屏蔽IP
如果只是想屏蔽IP的话“3、开放指定的端口”可以直接跳过。

#屏蔽单个IP的命令是
iptables -I INPUT -s 123.45.6.7 -j DROP

#封整个段即从123.0.0.1到123.255.255.254的命令
iptables -I INPUT -s 123.0.0.0/8 -j DROP

#封IP段即从123.45.0.1到123.45.255.254的命令
iptables -I INPUT -s 124.45.0.0/16 -j DROP

#封IP段即从123.45.6.1到123.45.6.254的命令是
iptables -I INPUT -s 123.45.6.0/24 -j DROP 

5、添加IP至白名单

#将IP为8.8.8.8对本机所有端口的所有方式的连接添加进白名单
iptables -A INPUT -s 8.8.8.8 -j ACCEPT

#将IP为43.241.50.200对本机80端口的TCP方式的连接添加进白名单
iptables -A INPUT -s 43.241.50.200 -p tcp  --dport 80 -j ACCEPT 

6、防御各类攻击

#防御SYN轻量级攻击
iptables -N syn-flood
iptables -A INPUT -p tcp --syn -j syn-flood
iptables -I syn-flood -p tcp -m limit --limit 3/s --limit-burst 6 -j RETURN
iptables -A syn-flood -j REJECT

#防止DOS太多连接进来,可以允许外网网卡每个IP最多15个初始连接,超过的丢弃
iptables -A INPUT -i eth0 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT

#用Iptables抵御DDOS (参数与上相同)
iptables -A INPUT  -p tcp --syn -m limit --limit 12/s --limit-burst 24 -j ACCEPT
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT

#通过另一种想法防御syn,ddos攻击
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s --limit-burst 5 -j ACCEPT
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
 
#防御CC
#控制单个IP的最大并发连接数
#允许单个IP的最大连接数为 30
iptables -I INPUT -p tcp --dport 80 -m connlimit  --connlimit-above 50 -j REJECT 
#默认iptables模块不包含connlimit,需要自己单独编译加载

#控制单个IP在一定的时间(比如60秒)内允许新建立的连接数
#单个IP在60秒内只允许最多新建30个连接
iptables -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --update --seconds 60 --hitcount 30 -j REJECT iptables -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --set -j ACCEPT 

巧用Recent模块加固Linux安全
(1)通过recent模块可以防止穷举猜测Linux主机用户口令,通常可以通过iptables限制只允许某些网段和主机连接Linux机器的22/TCP端口,如果管理员IP地址经常变化,此时iptables就很难适用这样的环境了。通过使用recent模块,使用下面这两条规则即可解决问题

#iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --name SSH --rsource -j DROP
#iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name SSH --rsource -j ACCEPT 

应用该规则后,如果某IP地址在一分钟之内对Linux主机22/TCP端口新发起的连接超过4次,之后的新发起的连接将被丢弃。

(2)通过recent模块可以防止端口扫。

#iptables -A INPUT -m recent --update --seconds 60 --hitcount 20 --name PORTSCAN --rsource -j DROP
#iptables -A INPUT -m recent --set --name PORTSCAN --rsource -j DROP 

应用该规则后,如果某个IP地址对非Linux主机允许的端口发起连接,并且一分钟内超过20次,则系统将中断该主机与本机的连接。

7、查看已添加的iptables规则

 #iptables -L -n 

v:显示详细信息,包括每条规则的匹配包数量和匹配字节数
x:在 v 的基础上,禁止自动单位换算(K、M)
n:只显示IP地址和端口号,不将ip解析为域名

8、删除已添加的iptables规则

将所有iptables以序号标记显示,执行:

 #iptables -L -n --line-numbers 

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

#iptables -D INPUT 8 

9、iptables的开机启动及规则保存
CentOS上可能会存在安装好iptables后,iptables并不开机自启动,可以执行一下:

 #chkconfig iptables on 

将其加入开机启动。

CentOS上可以执行:

 #service iptables save 

保存规则。

另外更需要注意的是Debian/Ubuntu上iptables是不会保存规则的。
需要按如下步骤进行,让网卡关闭是保存iptables规则,启动时加载iptables规则:
创建/etc/network/if-post-down.d/iptables 文件,添加如下内容:

#!/bin/bash 

iptables-save > /etc/iptables.rules
执行:chmod +x /etc/network/if-post-down.d/iptables 添加执行权限。
创建/etc/network/if-pre-up.d/iptables 文件,添加如下内容:

#!/bin/bash
iptables-restore < /etc/iptables.rules 

执行:chmod +x /etc/network/if-pre-up.d/iptables 添加执行权限。

关于更多的iptables的使用方法可以执行:iptables --help或网上搜索一下iptables参数的说明。

---

转载请注明本文标题和链接:《Linux上iptables防火墙的实例教程

发表评论

12 + 7 =
路人甲 表情
看不清楚?点图切换 Ctrl+Enter快速提交