Linux的iptables介绍
iptables介绍: Linux系统下的应用层防火墙工具
iptables攻防实例:
并发请求(压力测试)命令:ab
yum install httpd-tools
#ab -n 1000000 -c 40 http://127.0.0.1/index.php
查看当前多少个访问在监听
netstat -an|grep 80|grep 127.0.0.2 |grep EST -c
防止的策略
iptables -I INPUT -p tcp --dport 80 -s 127.0.0.2 -m connlimit --connlimit-above 10 -j reject
意义:
1、使用iptables搭建一套实际使用的防火墙规则。
2、使用iptales进行防工具;
3、利用iptables进行数据报转发;
Netfilter和iptables
Netfilter是linux系统核心层内部的一个数据包处理模块;
Hook point:数据包通过网卡层后在Netfilter的五个挂载点:pre_routing、input、output、forward、post_routing
他们的关系其实就是:iptables操作netfileter,netfileter操作网卡设备驱动。
iptables数据表流程
iptables组成部分:四张表 + 五条链(hook point) + 规则
四张表:filter表、nat表、mangle表、raw表
五条链:pre_routing、input、output、forward、post_routing
五条链分别装在四张表里面。
filter表:访问控制、规则匹配
nat表:地址转发
数据表通过四张表、五条链的数据流向:
iptables规则组成
数据包访问控制:ACCEPT (接收、允许通过)、DROP(丢弃,无反馈信息)、REJECT(拒绝,有反馈信息)
数据表改写:SNAT(对发起端地址改写)、DNAT(对目标地址改写)
信息记录:LOG (访问记录日志)
iptables配置:
场景一:
目标1:对所有的地址开放本机的tcp(80、22、10-21)端口的访问;
目标2:允许对所有的地址开放本机的基于ICMP协议的数据包访问;(允许ping)
目标3:其他未被允许的端口则禁止访问;
查看当前
#netstat -luntp
#iptables -L -n
#iptables -F //清理之前的规则
允许单个tcp端口访问:
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
允许一段tcp端口访问:
iptables -I INPUT -p tcp --dport 10:21 -j ACCEPT
允许icmp协议(ping):
iptables -I INPUT -p icmp -j ACCEPT
除了已设置的允许的协议,其他的均拒绝:
iptables -A INPUT -j REJECT
禁止某个单独端口:
iptables -A INPUT -p tcp --dport 3333 -j REJECT
端口扫描命令:
nmap -sS -p 0-1000 127.0.0.1
以上的策略存在的问题:
1、本机无法访问本机(远程电脑可以访问);
解决办法:开放lo回环设备
iptables -I INPUT -i lo -j ACCEPT
2、本机无法访问其他主机;
解决办法:
iptables -I INPUT -m state --state ESTABLISH,RELATED -j ACCEPT
设置只有特定IP的主机才能访问:
iptables -D INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp -s 127.0.0.2 --dport 80 -j ACCEPT
场景二:
要求1、ftp主动模式下iptables的规则配置
要求2:ftp被动模式下iptables的规则配置
ftp主动模式与被动模式的介绍与不同
iptables在centos默认配置文件位置:/etc/sysconfig/iptables
配置参考:
# Generated by iptables-save v1.4.7 on Tue Jun 7 11:26:26 2016
*raw
:PREROUTING ACCEPT [568276:834903570]
:OUTPUT ACCEPT [228933:16732536]
COMMIT
# Completed on Tue Jun 7 11:26:26 2016
# Generated by iptables-save v1.4.7 on Tue Jun 7 11:26:26 2016
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1:152]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 3306 -j DROP
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 20 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 20000:30000 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 11211 -j DROP
-A INPUT -p udp -m udp --dport 11211 -j DROP
COMMIT
# Completed on Tue Jun 7 11:26:26 2016
# Generated by iptables-save v1.4.7 on Tue Jun 7 11:26:26 2016
*nat
:PREROUTING ACCEPT [449:26643]
:POSTROUTING ACCEPT [316:20515]
:OUTPUT ACCEPT [316:20515]
COMMIT
# Completed on Tue Jun 7 11:26:26 2016
# Generated by iptables-save v1.4.7 on Tue Jun 7 11:26:26 2016
*mangle
:PREROUTING ACCEPT [568276:834903570]
:INPUT ACCEPT [568276:834903570]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [228933:16732536]
:POSTROUTING ACCEPT [228933:16732536]
COMMIT
# Completed on Tue Jun 7 11:26:26 2016
3、iptables配置——场景三(公司常用简单iptables规则)
要求一:
员工在公司内部(10.10.155.0/24,10.10.188.0/24)能访问服务器上的任何服务;
要求二:
当员工出差,通过VPN链接到公司外网。(员工-》vpn服务器-》内网FTP\SAMBA\NFS\SSH)
要求三:
公司有一个门户网站需要允许公网访问;
常见端口介绍:
网站:(www):
http 80/tcp
http 443/tcp
邮件(mail):
smtp 25/tcp
smtps 465/tcp
pop3 110/tcp
pop3s 995/tcp
imap 143/tcp
iptables -F
iptables -I INPUT -i lo -j ACCEPT
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -s 10.10.155.0/24 -j ACCEPT //允许公司内部的网段访问任何服务
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 1723 -j ACCEPT //开启vpn端口
iptables -I INPUT -p icmp -j ACCEPT
iptables -A INPUT -j REJECT //拒绝没配置的其他数据
/etc/init.d/iptables save
vi /etc/sysconfig/iptables
设置iptables开机启动:
chkconfig iptables on
或者把配置的操作history保存为.sh文件开机执行
加入开机执行:
vim /etc/rc.local
加入执行脚本
/bin/sh /opt/iptables_rules.sh //执行方式
iptables防火墙nat表规则配置
分类 功能 作用链
SNAT 源地址转换 出口,POSTROUTING
DNAT 目标地址转换 进口,PREROUTING
iptables防止CC攻击
使用iptables防止异常的访问和大规模连接数的攻击
connlimit模块:
作用:限制每一个客户端ip的并发连接数。
参数:--connlimit-above n #限制并发个数为n
例:iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 -j REJECT
Limit模块:
作用:限速,控制流量
例:iptables -A INPUT -m limit --limit 3/hoour
例如限制ping的量:
iptables -A INPUT -p icmp -m limit --limit 1/m --limit-burst 10 -j ACCEPT
iptables -A INPUT -p icmp -j DROP
意思是:一个客户初始能ping 10次,之后每分钟1次。