iptables从入门到应用

一、iptables原理

  1. 当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。
  2. 如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出。
  3. 如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出。

    Linux系统的防火墙功能是由内核实现的,包过滤防火墙工作在TCP/IP的网络层

二、iptables四表五链

四表决定了数据报文处理的方式

raw             //确定是否对数据包进行状态跟踪
mangle       //为数据包设置标记
nat              //修改数据包中的源,目标,端口
filter             //确定是否放行该数据包(过滤)

五链决定了数据报文的流经哪些位置

五链是iptables通过netfilter模块的hook point控制网络层
INPUT                         //处理进站的数据包
OUTPUT                     //处理出站的数据包
FORWARD                 //处理转发数据包(主要是将数据转发到本机其他网卡设备)
PREROUTING            //在进行路由选择前处理(判断目标主机)
POSTROUTING         //在进行路由器选择后处理数据包 (判断数据包由哪一接口送往下一跳)

制作防火墙规则通常有两种基本策略。一是黑名单策略;二是白名单策略。
黑名单策略指没有被拒绝的流量都可以通过,这种策略下管理员必须针对每一种新出现的攻击,制定新的规则,因此不推荐。
白名单策略指没有被允许的流量都要拒绝,这种策略比较保守,根据需要,逐渐开放,目前一般都采用白名单策略,推荐。

三、iptables命令用法

# 仅允许来自于10.0.0.0/24网段的用户连接本机的ssh服务
iptables -I INPUT -s 10.0.0.0/24 -p tcp --dport 22 -j ACCEPT    
iptables -A INPUT -p tcp --dport 22 -j REJECT

# 不允许任何主机访问本机的12345端口
iptables -I INPUT -p tcp --dport 12345 -j REJECT
iptables -I INPUT -p udp --dport 12345 -j REJECT

# 拒绝所有主机通过eth0网卡访问本机的http服务
iptables -I INPUT -i eth0 -p tcp --dport 80 -j REJECT

# 删除filter表中INPUT规则的第一条
iptables -D INPUT 1

# 保存iptables配置
/etc/init.d/iptables save

# 放行sshd服务
iptables -t filter -A INPUT -s 192.168.0.0/24 -d 192.168.0.1 -p tcp --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -s 192.168.0.1  -p tcp --sport 22 -j ACCEPT

# 放行httpd/nginx服务
iptables -I OUTPUT -s 192.168.0.1 -p tcp --sport 80 -j ACCEPT
iptables -I INPUT -d 192.168.0.1 -p tcp --dport 80 -j ACCEPT

# 放行本机端的流入流出
iptables -A  INPUT  -s 127.0.0.1 -d 127.0.0.1 -i lo -j ACCEPT
iptables -A  OUTPUT  -s 127.0.0.1 -d 127.0.0.1 -o lo -j ACCEPT

# 删除现有规则
iptables -F

# 配置默认链策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

# 允许远程主机进行SSH连接
iptables -A INPUT -i eth0 -p tcp –dport 22 -m state –state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT

# 允许本地主机进行SSH连接
iptables -A OUTPUT -o eth0 -p tcp –dport 22 -m state –state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT

# 允许HTTP请求
iptables -A INPUT -i eth0 -p tcp –dport 80 -m state –state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp –sport 80 -m state –state ESTABLISHED -j ACCEPT
posted @ 2019-03-27 18:40  reaperhero  阅读(240)  评论(0编辑  收藏  举报