设为首页收藏本站

ZMX - IT技术交流论坛 - 无限Perfect,追求梦想 - itzmx.com

 找回密码
 注册论坛

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

用百度帐号登录

只需两步,快速登录

搜索
查看: 2346|回复: 0

转:Linux上iptables防火墙的实例教程

[复制链接]
 成长值: 351

签到天数: 4742 天

[LV.Master]伴坛终老

发表于 2015/12/18 00:56 | 显示全部楼层 |阅读模式 |Google Chrome 47.0.2526.73|Windows 10
天涯海角搜一下: 百度 谷歌 360 搜狗 有道 雅虎 必应 即刻
1、安装iptables防火墙
如果没有安装iptables需要先安装,CentOS执行:
  1. yum install iptables
复制代码

Debian/Ubuntu执行:
  1. apt-get install iptables
复制代码

2、清除已有iptables规则
  1. iptables -F
  2. iptables -X
  3. iptables -Z
复制代码

3、开放指定的端口
-A和-I参数分别为添加到规则末尾和规则最前面。
  1. #允许本地回环接口(即运行本机访问本机)
  2. iptables -A INPUT -i lo -j ACCEPT
  3. # 允许已建立的或相关连的通行
  4. iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  5. #允许所有本机向外的访问
  6. iptables -A OUTPUT -j ACCEPT
  7. # 允许访问22端口
  8. iptables -A INPUT -p tcp --dport 22 -j ACCEPT
  9. #允许访问80端口
  10. iptables -A INPUT -p tcp --dport 80 -j ACCEPT
  11. #允许FTP服务的21和20端口
  12. iptables -A INPUT -p tcp --dport 21 -j ACCEPT
  13. iptables -A INPUT -p tcp --dport 20 -j ACCEPT
  14. #如果有其他端口的话,规则也类似,稍微修改上述语句就行
  15. #允许ping
  16. iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
  17. #禁止其他未允许的规则访问
  18. iptables -A INPUT -j REJECT  #(注意:如果22端口未加入允许规则,SSH链接会直接断开。)
  19. iptables -A FORWARD -j REJECT
复制代码


4、屏蔽IP
如果只是想屏蔽IP的话“3、开放指定的端口”可以直接跳过。
  1. #屏蔽单个IP的命令是
  2. iptables -I INPUT -s 123.45.6.7 -j DROP
  3. #封整个段即从123.0.0.1到123.255.255.254的命令
  4. iptables -I INPUT -s 123.0.0.0/8 -j DROP
  5. #封IP段即从123.45.0.1到123.45.255.254的命令
  6. iptables -I INPUT -s 124.45.0.0/16 -j DROP
  7. #封IP段即从123.45.6.1到123.45.6.254的命令是
  8. iptables -I INPUT -s 123.45.6.0/24 -j DROP
复制代码


5、添加IP至白名单
  1. #将IP为8.8.8.8对本机所有端口的所有方式的连接添加进白名单
  2. iptables -A INPUT -s 8.8.8.8 -j ACCEPT
  3. #将IP为43.241.50.200对本机80端口的TCP方式的连接添加进白名单
  4. iptables -A INPUT -s 43.241.50.200 -p tcp  --dport 80 -j ACCEPT
复制代码


6、防御各类攻击
  1. #防御SYN轻量级攻击
  2. iptables -N syn-flood
  3. iptables -A INPUT -p tcp --syn -j syn-flood
  4. iptables -I syn-flood -p tcp -m limit --limit 3/s --limit-burst 6 -j RETURN
  5. iptables -A syn-flood -j REJECT
  6. #防止DOS太多连接进来,可以允许外网网卡每个IP最多15个初始连接,超过的丢弃
  7. iptables -A INPUT -i eth0 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP
  8. iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
  9. #用Iptables抵御DDOS (参数与上相同)
  10. iptables -A INPUT  -p tcp --syn -m limit --limit 12/s --limit-burst 24 -j ACCEPT
  11. iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT

  12. #通过另一种想法防御syn,ddos攻击
  13. iptables -A FORWARD -p tcp --syn -m limit --limit 1/s --limit-burst 5 -j ACCEPT
  14. iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
  15. iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

  16. #防御CC
  17. #控制单个IP的最大并发连接数
  18. #允许单个IP的最大连接数为 30
  19. iptables -I INPUT -p tcp --dport 80 -m connlimit  --connlimit-above 50 -j REJECT #默认iptables模块不包含connlimit,需要自己单独编译加载
  20. #控制单个IP在一定的时间(比如60秒)内允许新建立的连接数
  21. #单个IP在60秒内只允许最多新建30个连接
  22. 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模块,使用下面这两条规则即可解决问题
  1. #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
  2. #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模块可以防止端口扫描。
  1. #iptables -A INPUT -m recent --update --seconds 60 --hitcount 20 --name PORTSCAN --rsource -j DROP
  2. #iptables -A INPUT -m recent --set --name PORTSCAN --rsource -j DROP
复制代码

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

7、查看已添加的iptables规则
  1. #iptables -L -n
复制代码

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

8、删除已添加的iptables规则

将所有iptables以序号标记显示,执行:
  1. #iptables -L -n --line-numbers
复制代码


比如要删除INPUT里序号为8的规则,执行:
  1. #iptables -D INPUT 8
复制代码

9、iptables的开机启动及规则保存
CentOS上可能会存在安装好iptables后,iptables并不开机自启动,可以执行一下:
  1. #chkconfig iptables on
复制代码

将其加入开机启动。

CentOS上可以执行:
  1. #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参数的说明。

原文来自:http://www.vigofen.com/linux/iptables.html
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册论坛 新浪微博账号登陆用百度帐号登录

本版积分规则

手机版|Archiver|Mail me|网站地图|IT技术交流论坛 ( 闽ICP备13013206号-7 )

GMT+8, 2024/12/28 19:39 , Processed in 0.111495 second(s), 22 queries , MemCache On.

Powered by itzmx! X3.4

© 2011- sakura

快速回复 返回顶部 返回列表