一、iptables 简介

Linux - iptables_iptables

二、iptables规则原理和组成

1、netfilter和iptables

Linux - iptables_主动模式 被动模式_02

Linux - iptables_NAT_03

2、iptables的4张表和5条链

iptables规则组成:

组成部分:四张表+五条连(Hook point)+规则

mangle表:修改数据包,改变包头中内容(TTL、TOS、MARK)

raw表:数据包状态的跟踪和分析

filter表:访问控制、规则匹配

nat表:地址转发

Linux - iptables_主动模式 被动模式_04

Linux - iptables_Linux_05

3、iptables规则组成

语法:

iptables(选项)(参数)

数据包访问控制:ACCEPT, DROP(不有信息返回), REJECT(有拒绝信息)

数据包改写:SNAT(来源改写), DNAT(到目标改写)

信息记录:LOG(记入日志)

Linux - iptables_NAT_06

选项:

-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实践场景二

Linux - iptables_防攻击及企业场景应用_07

Linux - iptables_Linux_08

1、主动模式

Linux - iptables_防攻击及企业场景应用_09

Linux - iptables_NAT_10

Linux - iptables_NAT_11

2、被动模式

Linux - iptables_主动模式 被动模式_12

Linux - iptables_iptables_13

Ps:解释

ftp 10.10.188.233 进入ftp模式

passive 关闭被动模式,自动转成主动模式

ls 显示目录/文件


五、iptables实践场景三

Linux - iptables_主动模式 被动模式_14

Linux - iptables_防攻击及企业场景应用_15

Linux - iptables_NAT_16

Linux - iptables_iptables_17

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规则设置

Linux - iptables_iptables_18

Linux - iptables_主动模式 被动模式_19

步骤:

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规则设置

Linux - iptables_Linux_20

配置:

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攻击

Linux - iptables_主动模式 被动模式_21

Linux - iptables_主动模式 被动模式_22