一、iptables 简介
二、iptables规则原理和组成
1、netfilter和iptables
2、iptables的4张表和5条链
iptables规则组成:
组成部分:四张表+五条连(Hook point)+规则
mangle表:修改数据包,改变包头中内容(TTL、TOS、MARK)
raw表:数据包状态的跟踪和分析
filter表:访问控制、规则匹配
nat表:地址转发
3、iptables规则组成
语法:
iptables(选项)(参数)
数据包访问控制:ACCEPT, DROP(不有信息返回), REJECT(有拒绝信息)
数据包改写:SNAT(来源改写), DNAT(到目标改写)
信息记录:LOG(记入日志)
选项:
-t<表>:指定要操纵的表;
-A:新追加一个规则(在规则链尾);
-I:新追加一个规则(在规则链头);
-D:从规则链中删除条目;
-L:显示规则链中已有的条目;
-F:把iptables现有的规则进行一个清理;
-n: 常与-L连起来使用,目的是hostname一些相关的不让其显示出来
-P:设置一个默认的iptables的规则。
规则链名包括:
INPUT链:处理输入数据包。
OUTPUT链:处理输出数据包。
PORWARD链:处理转发数据包。
PREROUTING链:用于目标地址转换(DNAT)。
POSTOUTING链:用于源地址转换(SNAT)。
具体的一些参数:
-p tcp 表示它的协议有哪些
-s 它的发起源有哪些
-d 它的目标地址
--sport 发起的源端口
--dport 目标的端口
--dports 端口段
-m tcp
state
multiport 在原有规则上的补充
动作包括:
-j ACCEPT:接收数据包。
DROP:丢弃数据包。
REDIRECT:重定向、映射、透明代理。
SNAT:源地址转换。
DNAT:目标地址转换。
LOG:日志记录。
iptables命令选项输入顺序:
iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作
三、iptables实践场景一
1、允许其他机子访问本机
iptables -I INPUT -p tcp --dport 80 -j ACCEPT外面的机子访问我的80端口是允许的
iptables -I INPUT -P tcp --dport 10:22 -j ACCEPT访问10-22端口是允许的
iptables -I INPUT -p icmp -j ACCEPT访问icmp协议所有的端口都是允许的
iptables -L列出所有的规则
iptables -A INPUT -j REJECT在现有规则的后面增加一条规则对默认没有允许的规则进行禁止
iptables -D INPUT -p tcp --dport 80 -j ACCEPT 删除这条80规则
iptables -I INPUT -p tcp --dport 80 -j REJECT 不允许访问我的80规则
Ps:检测目标服务器端口开启情况:nmap -sS -p 0-1000 192.168.5.123
2、访问其他机子和本机
iptables -I INPUT -i lo -j ACCEPT 允许对lo过来的数据包,对本地的网卡设备允许访问
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 对外访问时,如果ftp的状态为established和related时允许访问
Ps:看能否访问22端口:telnet 10.10.188.232 22
3、允许指定机子访问本机
iptables -I INPUT -p tcp -s 10.10.188.233 --dport 80 -j ACCEPT 只允许10.10.188.233通过http请求访问本机,-s指定源主机
Ps:返回请求信息:curl -I http://10.10.188.232/
四、iptables实践场景二
1、主动模式
2、被动模式
Ps:解释
ftp 10.10.188.233 进入ftp模式
passive 关闭被动模式,自动转成主动模式
ls 显示目录/文件
五、iptables实践场景三
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.188.0/24 -j ACCEPT(允许该IP访问所有)
iptables -A INPUT -s 10.10.140.0/24 -j ACCEPT(自己使用ssh连接电脑的网段)(允许该IP访问所有)
iptabels -A INPUT -p tcp --dport 80 -j ACCEPT(允许所有主机访问80端口)
iptabels -A INPUT -p tcp --dport 1723 -j ACCEPT(允许VPN访问)
iptabels -I INPUT -p icmp -j ACCEPT
接下来拒绝掉所有的未设置的规则
iptables -A INPUT -j REJECT
永久保存:
第一种方法:
/etc/init.d/iptables save
vim /etc/sysconfig/iptables
chkconfig iptables save
第二种方法:
history,复制粘贴,保存成一个shell文件
vim /etc/rc.local 中加入以下代码:wq即可
/bin/sh /opt/iptable_ssh.sh
六、iptables中NAT模式设置
1、iptables规则中SNAT规则设置
步骤:
netstat -luntp | grep 80
ip addr #查看网关服务器上的两张网卡,在这台服务器上做NAT;
vim /etc/sysctl.conf #数据包转发需打开内核的参数;
net.ipv4.ip_forward = 0 改为1;
sysctl -p #让配置全部执行;
sysctl -a | grep ip_forward #查看是生效;
iptables -t nat -A POSTROUTING -s 10.10.177.0/24 -j SNAT --to 10.10.188.232 #制定转发规则;
iptables -t nat -L #查看nat表内容
netstat -rn #在客户端pc上查看当前路由表;
route add 0.0.0.0 gw 10.10.177.232 #在客户端pc上加入路由;
curl http://101.101.101.101/xxxxx/ #进行测试
2、iptables规则中DNAT规则设置
配置:
iptable -t nat -F 规则清零
iptable -t nat -nL 查看规则
转发端口(10.10.188.232:80 <==> 10.10.177.233:80):iptables -t nat -A INPUT PREROUTING -d 10.10.188.232 -p tcp --dport 80 -j DNAT --to 10.10.177.233:80
转发端口(local_allip:80 <==> 10.10.177.233:8081):iptables -t nat -A INPUT PREROUTING -p tcp --dport -j DNAT --to 10.10.177.233:8081
七、iptables防攻击及企业场景应用
1、iptables防止CC攻击