关系图

代码调用iptables接口 iptables --to_代码调用iptables接口

四表

filter:包过滤

NAT:ip地址和端口转换

mangle:

raw:

五链

PRE ROUTING:预路由
INPUT:入站
FORWARD:转发
POST ROUTING:已路由
OUTPUT:出站

表应用顺序:RAW>mangle>nat>filter

链应用顺序:入站>转发>出战

基本语法

iptables -t 表名 管理选项[链名][匹配条件][-j 控制类型]

参数

-L :显示表中的所有规则
-n:不要把端口或ip反向解析为名字
-t:指定表,不指定默认是filter表
-A:append追加末尾
-D:delete删除
-I:insert拒绝的规则放在最上面
-p:指定协议,端口,tcp/udp/icmp/all
--dport:目标端口
--sport:源端口
-s:source ip
-d:目标ip
-m:指定模块
-j:满足条件后的动作:DROP/ACCEPT/REJECT
    DROP:丢弃,不返回信息给用户;REJECT:拒绝,会返回数据给用户
-i:input输入从哪个网卡进来
-o:output输出从哪个网卡输出

规则备份

iptables-save > /etc/sysconfig/iptables  # 默认输出到屏幕

规则恢复

重启iptables也会自动读取/etc/sysconfig/iptables内容

iptables-restore < /etc/sysconfig/iptables

如果不指定表,默认是fileter表

ttl:数据包生命周期,避免数据包环路,占用带宽资源

filter表操作

查看规则

[root@master-2 rt]# iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22     # 查看规则

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

删除规则

[root@master-2 rt]# iptables -nL --line-num # 查看规则序列号
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22

再次查看

[root@master-2 rt]# iptables -D INPUT 1
[root@master-2 rt]# iptables -nL --line-num
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

禁止22连接

iptables -I INPUT -s 192.168.64.114  -p TCP --dport 22  -j DROP

只允许10网段访问,其他都拒绝

iptables -I INPUT ! -s 10.0.0.0/24 -j DROP

 修改默认规则

iptables -A INPUT -s 192.168.64.0/24 -j ACCEPT   # 先允许后deny
iptables -P INPUT DROP

屏蔽范围端口,调用模块multiport,连续端口可以不用multiport

iptables -A INPUT -p tcp -m  multiport  --dport 80,25    -j DROP

禁止icmp协议

]# iptables -A INPUT -p icmp -s 192.168.64.110 -j DROP

网络连接状态

NEW:已经或将启动新的连接

ESTABLISHED:已建立的连接

RELATED:正在启动的新连接

INVALD:非法或无法识别的

 指定网卡

iptables -A INPUT -i ens32 -s 192.168.64.114 -j DROP

拒绝任何地址到22端口访问

[root@master-2 ~]# iptables -A INPUT -p tcp --dport 22 -j DROP

禁ping,但是可以ping别的地址

0 应答

8 请求

iptables -A INPUT -i ens32 -p icmp --icmp-type 8 -j REJECT

[root@master-2 ~]# ping www.baidu.com
PING www.a.shifen.com (182.61.200.7) 56(84) bytes of data.
64 bytes from 182.61.200.7 (182.61.200.7): icmp_seq=1 ttl=128 time=49.6 ms
64 bytes from 182.61.200.7 (182.61.200.7): icmp_seq=2 ttl=128 time=48.8 ms
64 bytes from 182.61.200.7 (182.61.200.7): icmp_seq=3 ttl=128 time=48.8 ms

换台机器
[root@node2 ~]# ping 192.168.64.111
PING 192.168.64.111 (192.168.64.111) 56(84) bytes of data.
From 192.168.64.111 icmp_seq=1 Destination Port Unreachable
From 192.168.64.111 icmp_seq=2 Destination Port Unreachable
From 192.168.64.111 icmp_seq=3 Destination Port Unreachable

禁止一个IP范围

iptables -A INPUT -i ens32 -p tcp -m iprange --src-range 192.168.64.200-192.168.64.210 -j DROP

-m state --state

限速

-m limit  --limit   n/{second/min/hour}

-m limit  --limit   10/min  # 每分钟只能有10个数据包,相当于6s一个

解释:指定时间内请求速率n为速率,后面为时间,分别为秒,分,时

--limit-burst

解释:在同一时间允许通过的请求次数n,默认为5。

-m limit  --limit   10/min  --limit-burst  5  # 限制速率
[root@master-2 ~]# iptables -A INPUT -p icmp -m limit --limit 10/minute --limit-burst 5 -j ACCEPT
[root@master-2 ~]# iptables -vnL
Chain INPUT (policy ACCEPT 80 packets, 48958 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0            limit: avg 10/min burst 5

[root@master-2 ~]# iptables -P INPUT DROP

[root@node2 ~]# ping 192.168.64.111
PING 192.168.64.111 (192.168.64.111) 56(84) bytes of data.
64 bytes from 192.168.64.111: icmp_seq=1 ttl=64 time=1.49 ms
64 bytes from 192.168.64.111: icmp_seq=2 ttl=64 time=0.427 ms
64 bytes from 192.168.64.111: icmp_seq=3 ttl=64 time=0.488 ms
64 bytes from 192.168.64.111: icmp_seq=4 ttl=64 time=0.865 ms
64 bytes from 192.168.64.111: icmp_seq=5 ttl=64 time=0.796 ms
64 bytes from 192.168.64.111: icmp_seq=7 ttl=64 time=0.527 ms
64 bytes from 192.168.64.111: icmp_seq=13 ttl=64 time=0.430 ms  # 每6s一个数据包
64 bytes from 192.168.64.111: icmp_seq=19 ttl=64 time=0.509 ms
64 bytes from 192.168.64.111: icmp_seq=25 ttl=64 time=0.897 ms
64 bytes from 192.168.64.111: icmp_seq=31 ttl=64 time=0.712 ms
64 bytes from 192.168.64.111: icmp_seq=37 ttl=64 time=0.637 ms

NAT表

 

代码调用iptables接口 iptables --to_NAT_02

SNAT 在server2服务器,将源IP100.10转换为192.168.200.10访问200.20

iptables -t nat -A POSTROUTING -p tcp -s  192.168.100.0/24 -j SNAT --to-source 192.168.200.10

 MASQUERADE

用于转换后的地址不固定

iptables -t nat -A POSTROUTING -p tcp -s  192.168.100.0/24   -o ens32  -j  MASQUERADE
Chain POSTROUTING (policy ACCEPT 7 packets, 420 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 MASQUERADE  all  --  *      !docker0  172.17.0.0/16        0.0.0.0/0
    0     0 MASQUERADE  all  --  *      !br-67a843cf91b9  10.10.0.0/24         0.0.0.0/0
    0     0 MASQUERADE  tcp  --  *      *       172.17.0.2           172.17.0.2           tcp dpt:80
    0     0 MASQUERADE  tcp  --  *      ens32   192.168.100.0/24     0.0.0.0/0    # 目标地址0.0.0.0

DNAT

将路由器外网地址跟内网地址捆绑,点对点

iptables -t nat -A PREROUTING  -i ens34   -d  192.168.200.10  -p tcp  --dport 22  -j  DNAT --to-destination 192.168.100.10

PNAT 安全加固

iptables -t nat -A PREROUTING  -i ens34   -d  192.168.200.10  -p tcp  --dport 22222  -j  DNAT --to-destination 192.168.100.10:22

远程

ssh root@192.168.200.10 -p22222

 

越学越感到自己的无知