iptables防火墙规则基础

Linux:网络防火墙

netfilter:Frame

iptables:数据报文过滤,NAT,mangle等生成工具;

 

网络:IP报文首部,TCP报文首部

 

防火墙:硬件,软件:规则(匹配标准,处理办法)

 

Framework:

默认规则:

开放:堵

关闭:通

 

规则:匹配标准

IP:SIP,DIP

TCP:SPORT,DPORT, SYN=1, FIN=0,RST=0,ACK=0; SYN=1,ACK=1,FIN=0,RST=0; ACK=1,SYN=0RST=0,FIN=0(ESTABLISHED)

UDP:SPORT,DPORT

ICMP:icmp-type

 

数据报文过滤:

 

Linux2.0

ipfw/firewall

Linux2.2

ipchain/firewall

Linux2.4

iptables/netfilter

 

hook function:钩子函数

prerouting

input

output

forward

postrouting

 

规则链:

PREROUTING

INPUT

FORWARD

OUTPUT

POSTROUTING

 

filter(过滤) 表

INPUT

OUTPUT

FORWARD

 

nat(地址转换) 表

PREROUTING

OUTPUT

POSTROUTING

 

mangle(拆开、修改、封装):表

PREROUTING

INPUT

FORWARD

OUTPUT

POSTROUTING

 

raw():

PREROUTING

OUTPUT

 

iptables:

 

500条规则

能否使用自定义链?

    可以使用自定链,但只在被调用时才能发挥作用,而且如果没有自定义链中的任何规则匹配,还应该有返回机制;

 

用可以删除自定义的空链

默认链无法删除

 

每个规则都有两个内置的计数器:

被匹配的报文个数

被匹配的报文大小之和

 

规则:匹配标准,处理动作

 

iptables [-t TABLE] COMMAND CHAIN [num] 匹配标准 -j 处理办法

 

匹配标准:

通用匹配

-s,--src:指定源地址

-d,--dst:指定目标地址

-p,{tcp|udp|icmp}:指定协议

-i,INITERFACE:指定数据报文流入的接口

    可用于标准定义的链:OUTPUT,POSTROUTING,FORWARD

-o,INTERFACE:指定数据报文流出的接口

可用于标准定义的链:OUTPUT,POSTROUTING,FORWARD

 

扩展匹配

隐含扩展:不用特别指明有那个模块进行的扩展,因为此时使用-p {tcp|udp|icmp}

-p tcp

--dport目标端口,支持连续

--sport源端口,支持连续

--tcp-flags mask comp:只检查mask指定的标志位,是逗号分隔的标志位列表;

comp:此列表中出现的标记位必须为1,comp中没出现,而mask中出现的,必须为0;

--tcp-falgs SYN,FIN,ACK,RST SYN=--syn

--syn专门用来匹配tcp三次握手中的第一

 

-p icmp

--icmp-type

0:echo-reply

8:echo-request

 

-p udp

--sport

--dport

显示扩展:必须指明有哪个模块进行的扩展,在iptables中使用-m 选项可完成此功能

-m EXTESTION --spe-opt

 

state:状态扩展

结合ip_conntrack追踪会话的状态

NEW:新连接请求

ESTABLISHED:已建立的连接

INVALID:非法连接

RELATED:相关联的

- m state --state NEW,ESTABLISHED -j ACCEPT

首先要装载ip_conntrack_ftp和ip_nat_ftp模块,编辑/etc/sysconfig/iptables-config

 

例:iptables  -A INPUT -d 192.168.100.100 -p tcp -m state --state ESTABLISHED.RELATED -j ACCEPT

 

multiport:离散的多端口匹配扩展

--source-ports

--destination-ports

--ports

例:-m multiport --destion-ports 21,22,80 -j ACCEPT

 

-m iprange

--src-range

--dst-range

 

-s,-d

-s IP,NET

192.168.0.0/16,192.168.100.3-192.168.100.100

 

例:iptables -A INPUT -p tcp -m iprange --src-range 192.168.100.3-192.168.100.100 --dport 22 -m state --state NEW ,ESTABLISHED -j ACCEPT

-m connlimit:连接数限制

! --connlimit-above 数字

 

例:iptables -A INPUT -d 192.168.100.7 -p tcp --dport 80 -m connlimit --connlimit-above 2 -j ACCEPT

 

-m limit

--limit [RATE]数字/时间

--limit-burst 一批放行多少

例:iptables -A INPUT -d 192.168.100.150 -p icmp --icmp-type 8 -m limit --limit 5/minute -j ACCEPT

   iptables -A INPUT -d 192.168.100.150 -p icmp --icmp-type 8 -m limit --limit 5/minute --limit-burst 6 -j ACCEPT

 

-m string 字符串

--algo {bm|kmp}这是两种算法指定哪一种都行

--string "STRING"

例:iptables -I INPUT -d 192.168.100.150 -m string --algo kmp --string "法轮功" -j REJECT

   iptables -I OUTPUT -s 192.168.100.150 -m string --algo kmp --string "法轮功" -j REJECT

 

-j TARGET

LOG

--log-prefix "STRING"

例:iptables -A INPUT -d 192.168.100.150 -p icmp --icmp-type 8 -j LOG --log-prefix "STRING"

 

保存规则:

# service iptables save

/etc/sysconfig/iptables

# iptables-save > /etc/sysconfig/iptables.2018052901

# iptables-restore < /etc/sysconfig/iptables.2018052901

 

 

    命令:

管理规则:

-A:附加一条规则,添加在链的尾部

-I:CHAIN [num]:插入一条规则,插入为对应的CHAIN上的第num条;

-D:CHAIN [num]:删除指定链中的第num条规则;

-R:CHAIN [num]:替换指定规则;

管理链:

-F [CHAIN]:flush,清空指定规则链,如果省略CHAIN,则可以实现删除对应表中的所所有链

-P CHAIN:设定指定链的默认策略;

-N 自定义一个新的空链

-X 删除一个自定义的空链

-Z 置零指定链中所有规则的计数器;

-E 重命名自定义的链

查看类:

-L:显示指定表中的规则;

-n:以数字格式显示的主机地址和端口号;

-v:显示链及规则的详细信息

-vv:

-x“显示计数器的精确值

--line-numbers:显示规则号码

 

动作(target):

ACCEPT:放行

DROP:丢弃

REJECT:拒绝

DNAT:目标地址转换

SNAT:源地址转换

REDIRECT:端口重定向

MASQUERADE:地址伪装

LOG:日志

MARK:打标记

 

 

iptables不是服务,但有服务脚本;服务脚本的主要作用在于管理保存的规则

装载及移除iptables/netfilter相关的内核模块;

iptables_nat,iptables_filter,iptables_mangle,iptables_raw,ip_nat,ip_conntrack

 

练习:规则的意义

   #iptables -N clean_in       #引用自定义链:#iptables -A INPUT -j calean_in

   创建条新的链(名字)

   #iptables -A clean_in -d 255.255.255.255 -p icmp -j DROP

   #iptables -A clean_in -d 192.168.255.255 -p icmp -j DROP

   

   #iptables -A clean_in -p tcp ! --syn -m state --state NEW -j DROP

   #iptables -A clean_in -p tcp --tcp-flags ALL ALL -j DROP

   #iptables -A clean_in -p tcp --tcp-flags ALL NONE -j DROP

   #iptables -A clean_in -d 192.168.100.7 -j RETURN

   

   #iptables -A INPUT -d 192.168.100.7 -j clean_in

   

   #iptables -A INPUT -i lo -j ACCEPT

   #iptables -A OUTPUT -o lo -j ACCEPT

   

   #iptables -A INPUT -i eth0 -m multiport -p tcp --dport 53,113,135,137,139,445 -j DROP

   #iptables -A INPUT -i eth0 -m multiport -p udp --dport 53,113,135,137,139,445 -j DROP

   #iptables -A INPUT -i eth0 -p udp --dport 1026 -j DROP

   #iptables -A INPUT -i eth0 -m multiport -p tcp --dport 1433,4899 -j DROP

   

   #iptables -A INPUT -p icmp -m limit --limit 10/second -j ACCEPT

   

   利用iptables的recent模块来抵御DOS攻击

   

   ssh:远程连接

   

   iptables -I INPUT -p tcp -dport 22 -m connlimit --connlimit-above 3 -j DROP

   利用connlimit模块将单IP 的并发设置为3 :会误杀使用NAT上网的用户,可以根据实际情况增大该值

   

   iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH

    记录访问tcp 22端口的新链接,记录名为SSH

 

   iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP

   利用recent和state模块限制单IP在300s内只能与本机建立3个新连接。被限制5分钟后即可恢复访问。

   --update 是指每次建立连接都更新列表

   --seconds 必须与--rcheck或者--update同时使用

   --hitcount必须与--rcheck或者--uodate同时使用

   

   iptables的记录:/proc/net/ipt_recent/SSH

   

   也可以使用下面这句话记录日志:

   iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --name SSH --second 300 --hitcount 3 -j LOG --log-prefix "SSH Attack"

   

   

  NAT:Network Address Translation

  

  DNAT:目标地址转换,(PREROUTING)

  SNAT:源地址转换(POSTROUTING,OUTPUT)

 

 

-j SNAT

--to-source

 

ADSL:123.2.3.2  公网地址

 

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j SNAT --to-source 123.2.3.2

   

    -j DNAT  需要指定对什么服务进行转发

   --to-destination IP[:port]  端口映射

   例:iptables -t nat -A PREROUTING -d 192.168.100.100 -p tcp --dport 80 -j DNAT --to-destination 192.168.100.150

  监在8080端口的话改为

  iptables -t nat -A PREROUTING -d 192.168.100.100 -p tcp --dport 80 -j DNAT --to-destination 192.168.100.150:8080

   

   PNAT:port NAT 端口转换

猜你喜欢

转载自blog.csdn.net/Richardlygo/article/details/82118932