Netfilter\iptables

A9bot 121 0

名词

容器:Netfilter\iptables

Netfilter\iptables是表的容器,包含filter、NAT、MANGLE、RAW

表(TABLE)是链(CHAINS)的容器,包含INPUT、OUTPUT、FORWORD、PREROUTING、POSTROUTING

链是规则(POLICY)的容器,规则是一条条过滤的语句

Netfilter\iptables

filter表

默认表 : 包含INPUT、OUTPUT、FORWARD链

iptables -L -n     显示默认表filter的规则信息

-L (list) -n(number 以数字形式显示)

NAT表

地址转换表:包含OUTPUT、PREROUTING、POSTROUTING链

公网IP配置在防火墙上

内到外:POSTROUTING链,源地址转换,连接互联网

外到内:PREROUTING链,目标地址转换,连接内网

链(CHAINS)

规则链名包括(也被称为五个钩子函数(hook functions)):

  • INPUT链 :处理输入数据包。
  • OUTPUT链 :处理输出数据包。
  • FORWARD链 :处理转发数据包。
  • PREROUTING链 :用于目标地址转换(DNAT)。
  • POSTOUTING链 :用于源地址转换(SNAT)。

流程

包过滤,根据规则一条一条来匹配,通过则接受,不通过则丢弃

默认规则:都匹配不上,按默认规则来操作,最后匹配的规则

Netfilter\iptables
Netfilter\iptables

指令

加载模块

modprobe ip_tablesmodprobe iptable_filtermodprobe iptable_natmodprobe ip_conntrackmodprobe ip_conntrack_ftpmodprobe ip_nat_ftpmodprobe ipt_state

lsmod     #显示内核的模块

iptables常用指令

参数 作用
-P 设置默认策略:iptables -P INPUT (DROP
-F 清空规则链
-L 查看规则链
-A 在规则链的末尾加入新规则
-I num 在规则链的头部加入新规则
-D num 删除某一条规则
-s 匹配来源地址IP/MASK,加叹号"!"表示除这个IP外。
-d 匹配目标地址
-i 网卡名称 匹配从这块网卡流入的数据
-o 网卡名称 匹配从这块网卡流出的数据
-p 匹配协议,如tcp,udp,icmp
--dport num 匹配目标端口号
--sport num 匹配来源端口号
-j operation 执行某一操作
-j SNAT 源地址转换
-j DNAT 目的地址转换

命令选项输入顺序

iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作

示例

查看特定表的规则

iptables -L -n -v -t <表名>

允许192.168.1.0/24网段访问自己的ssh服务

iptables -t filter -A INPUT -p ssh -s 192.168.1.0/24 -dport 22 -j ACCEPT

允许本地回环地址正常使用

iptables -A INPUT -i lo -j ACCEPT

iptables -A OUTPUT -o lo -j ACCEPT

设置默认规则

iptables -P INPUT DROP

iptables -P OUTPUT ACCEPT

iptables -P FORWARD DROP

配置IP白名单

iptables -A INPUT -p all -s 192.168.1.0/24 -j ACCEPT    允许192.168.1.0/24的所有机器访问

iptables -A INPUT -p tcp -s 114.114.114.114 --dport 80 -j ACCEPT    允许114.114.114.114访问80端口

放行icmp

iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

允许已建立的连接和与它相关的连接的数据包进入防火墙

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

将以写入的规则保存到配置文件中,防止重启清除

cp /etc/iptables/rules.v4 /etc/iptables/rules.v4.bak    备份

iptables-save > /etc/iptables/rules.v4    写入

cat /etc/iptables/rules.v4    查看

将规则用序号标记

iptables -L -n --line-numbers

删除规则

iptables -D INPUT <序号>

允许本地回环端口

iptables -t filter -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT

封禁IP

iptables -t filter -I INPUT -s 114.114.114.0/24 -j DROP

内网访问互联网的地址转换

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to 114.114.114.114

端口转发

iptables -t nat -A PREROUTING -p tcp -d 114.114.114.114 --dport 80 -j DNAT --to 192.168.0.1:80

将访问公网ip80端口的tcp报文转发到内网ip的80端口

场景

注意事项:规则需要保存到配置文件 /etc/iptables/rules.v4

场景1

开放 tcp 10-22/80 端口 开放 icmp 其他未被允许的端口禁止访问

iptables -t filter -A INPUT -p tcp --dport 10:22 -j ACCEPT

iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT

iptables -t filter -A INPUT -p icmp -j ACCEPT

iptables -t filter -P INPUT DROP

存在的问题: 本机无法访问本机; 本机无法访问其他主机

优化:

iptables -A INPUT -i lo -j ACCEPT    允许本机访问

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT    允许已建立连接的服务相关的数据进入

场景2

允许外网访问: web http -> 80/tcp; https -> 443/tcp mail smtp -> 25/tcp; smtps -> 465/tcp pop3 -> 110/tcp; pop3s -> 995/tcp imap -> 143/tcp

内部使用: file nfs -> 123/udp samba -> 137/138/139/445/tcp ftp -> 20/21/tcp remote ssh -> 22/tcp sql mysql -> 3306/tcp oracle -> 1521/tcp

iptables -I INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -p tcp -m multiport --dport 80,443,25,465,110,995,143 -j ACCEPT

iptables -A INPUT -p all -m multiport --dport 123,137,138,139,445,20,21,22,3306,1521 -j ACCEPT

iptables -A INPUT -i lo -j ACCEPT

iptables -P INPUT DROP

0 0 投票数
文章评分
订阅评论
提醒
0 评论
内联反馈
查看所有评论
分享
0
希望看到您的想法,请您发表评论x