iptables功能

iptables为Linux平台下的包过滤防火墙,是开源的,内核自带的,可以代替成

本较高的企业级硬件防火墙,能够实现如下功能:

数据包过滤,即防火墙

数据包重定向,即转发

网络地址转换,即可NAT

iptables概念

iptables工作依据------规则(rules)

iptables是按照规则(rules)来办事的,而规则就是运维人员所定义的条件

规则一般定义为“如果数据包头符合这样的条件,就这样处理这个数据包”。

规则存储在内核空间的数据包过滤表中,这些规则分别指定了源地址、目的地

址,传输协议(TCP、UDP、ICMP)和服务类型(HTTP、FTP)等。

当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据

包,比如放行(ACCEPT)、拒绝(REJECT)、丢弃(DROP)等

配置防火墙主要工作就是对iptables规则进行添加、修改、删除等

iptables中链的概念

举例说明:

当客户端访问服务器端的web服务时,客户端发送访问请求报文至网卡,而tcp/ip协议栈是属于内核的一部分,所以,客户端的请求报文会通过内核的TCP协议传输到用户空间的web服务,而客户端报文的目标地址为web服务器所监听的套接字(ip:port)上,当web服务器响应客户端请求时,web服务所回应的响应报文的目标地址为客户端地址,我们说过,netfilter才是真正的防火墙,属于内核的一部分,所以,我们要想让netfilter起到作用,我们就需要在内核中设置“关口”,所以进出的数据报文都要通过这些关口,经检查,符合放行条件的准允放行,符合阻拦条件的则被阻止,于是就出现了input和output关口,然而在iptables中我们把关口叫做“链”。

防火墙——iptables_filter

上面的举例中,如果客户端发到本机的报文中包含的服务器地址并不是本机,而是其他服务器,此时本机就应该能够进行转发,那么这个转发就是本机内核所支持的IP_FORWARD功能,此时我们的主机类似于路由器功能,所以我们会看到在iptables中,所谓的关口并只有上面所提到的input及output这两个,应该还有“路由前”,“转发”,“路由后”,它们所对应的英文名称分别为“PREROUTING”,“FORWARD”,“POSTROUTING”,这就是我们说到的5链。

防火墙——iptables_nat_02

通过上图可以看出,当我们在本地启动了防火墙功能时,数据报文需要经过以上关口,根据各报文情况,各报名经常的“链”可能不同,如果报文目标地址是本机,则会经常input链发往本机用户空间,如果报文目标不是本机,则会直接在内核空间中经常forward链和postrouting链转发出去

有的时候我们也经常听到人们在称呼input为“规则链”,这又是怎么回事呢?我们知道,防火墙的作用在于对经过的数据报文进行规则匹配,然后执行对应的“动作”,所以数据包经过这些关口时,必须匹配这个关口规则,但是关口规则可能不止一条,可能会有很多,当我们把众多规则放在一个关口上时,所有的数据包经常都要进行匹配,那么就形成了一个要匹配的规则链条,因此我们也把“链”称作“规则链”。

防火墙——iptables_filter_03

INPUT

OUTPUT

FORWARD()
ipipforwardforwardpostrouting

PREROUTINGIP

POSTROUTINGIP

iptables中表的概念

每个“规则链”上都设置了一串规则,这样的话,我们就可以把不同的“规则链”组合成能够完成某一特定功能集合分类,而这个集合分类我们就称为表,iptables中共有5张表,学习iptables需要搞明白每种表的作用。

filter: iptables_filter

nat: IPiptable_nat

mangle: iptable_mangle

raw: iptables_raw

security:访

iptables中表链之间的关系

我们在应用防火墙时是以表为操作入口的,只要在相应的表中的规则链上添加规则即可实现某一功能。那么我们就应该知道哪张表包括哪些规则链,然后在规则链上操作即可。

filter使INPUT,FORWARD,OUTPUT

nat使PREROUTING,OUTPUT ,POSTROUTING

mangle 使PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

raw使PREROUTING,OUTPUT

防火墙——iptables_nat_04

iptables中表的优先级

raw-mangle-nat-filter(由高至低)

数据包流经iptables流程

防火墙——iptables_iptables_05

iptables规则匹配及动作

规则:根据指定的匹配条件来尝试匹配每个流经此处的数据包,匹配成功,则由规则指定的处理动作进行处理。

规则是由匹配条件和动作组成的,那么规则是什么呢?

举例说明:

两个同学,一个白头发,一个黑头发,同时进教室,而进教室的条件是只有黑头发可以进入,白头发拒绝进入,黑头发和白头发就是匹配条件,而可以进入和拒绝进入就是动作。

iptables规则匹配条件分类

基本匹配条件:

源地址,目标地址,源端口,目标端口等

基本匹配使用选项及功能

-p tcp udp icmp all 
-s ip hostname
-d
-i
-o
!

基本匹配的特点是:无需加载扩展模块,匹配规则生效

扩展匹配条件:

扩展匹配又分为显示匹配和隐式匹配。

扩展匹配的特点是:需要加载扩展模块,匹配规则方可生效。

隐式匹配的特点:使用-p选项指明协议时,无需再同时使用-m选项指明扩展模块以及不需要手动加载扩展模块;

显示匹配的特点:必须使用-m选项指明要调用的扩展模块的扩展机制以及需要手动加载扩展模块。

隐式匹配选项及功能

-p tcp 
--sport
--dport
--tcp-flags mask comp tcp
-p udp
--sport
--dport
--icmp-type
0/0echo reply ping
8/0echo request ping

显式匹配使用选项及功能

multiport

多端口

iptables -I INPUT -d 192.168.2.10 -p tcp -m multiport --dports 22,80 -j ACCEPT 
#在INPUT链中开放本机tcp 22,tcp80端口

iptables -I OUTPUT -s 192.168.2.10 -p tcp -m multiport --sports 22,80 -j ACCEPT
#在OUTPUT链中开发源端口tcp 22,tcp80

iprange

多ip地址

iptables -A INPUT -d 192.168.2.10 -p tcp --dport 23 -m iprange --src-range 192.168.2.11-192.168.2.21 -j ACCEPT 

iptables -A OUTPUT -s 192.168.2.10 -p tcp --sport 23 -m iprange --dst-range 192.168.2.11-192.168.2.21 -j ACCEPT

time

指定访问时间范围

iptables -A INPUT -d 192.168.2.10 -p tcp --dport 901 -m time --weekdays Mon,Tus,Wed,Thu,Fri --timestart 08:00:00 --time-stop 18:00:00 -j ACCEPT 

iptables -A OUTPUT -s 192.168.2.10 -p tcp --sport 901 -j ACCEPT

string

字符串,对报文中的应用层数据做字符串模式匹配检测(通过算法实现)

--algo {bm|kmp}使 
--string "STRING":
--hex-string HEX-STRING: 16

connlimit

连接限制,根据每个客户端IP作并发连接数量限制

--connlimit-upto n n 
--connlimit-above n n

limit

报文速率限制

state

追踪本机上的请求和响应之间的数据报文的状态。

状态有五种:INVALID, ESTABLISHED, NEW, RELATED,UNTRACKED

--state state 
NEW
ESTABLISHED
INVALID
RELATED
UNTRACKED


1ESTABLISHED
2ESTABLISHED
3NEW
4INVALIED

iptables规则中动作

iptables规则中的动作常称为target,也分为基本动作和扩展动作。

ACCEPT:

DROP:

REJECT:

SNAT:
1IPIPIP
2使IPIP使

iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth1 -j SNAT --to-source 202.12.10.100

MASQUERADE:SNATip使IPIPIP使

DNAT:
1IP访ADNAT访AIPB,访B
2IPIP

iptables -t nat -A PREROUTING -d 202.12.10.100 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.1

REDIRECT:

LOG:/var/log/message

路由是按照目的地址进行路由选择的,因此,DNAT是在PREROUTING链上进行的,SNAT是在数据包发出的时候进行的,因此是在POSTROUTING链上进行的。

制定iptables规则策略

黑名单

没有被拒绝的流量都可以通过,这种策略下管理员必须针对每一种新出现的入侵,制定新的规则,因此不推荐

白名单

没有被允许的流量都要拒绝,这种策略比较保守,根据需要,主机主机逐渐开放,目前一般都采用白名单策略,推荐。

制定iptables规则思路

1. 
2.
3.
4.

iptables基础语法结构

iptables [-t ]  [] [] [-j ]

不指定表名时,默认表示filter表,不指定链名时,默认表示该表内所有链,除非设置规则链的默认策略,否则需要指定匹配条件。

防火墙——iptables_filter_06

iptables链管理方法

-N, --new-chain chain 
-X, --delete-chain [chain]0
-F, --flush [chain]
-E, --rename-chain old-chain new-chain
-Z, --zero [chain [rulenum]]

packets
bytes
-P, --policy chain target (ACCEPT|DROP)

iptables规则管理

-A, --append chain rule-specification 
-I, --insert chain [rulenum] rule-specification
-R, --replace chain rulenum rule-specification
-D, --delete chain rulenum
-D, --delete chain rule-specification

iptables规则显示

-L, --list [chain]
-v, --verbose
-vv
-n, --numeric
-x, --exact
--line-numbers
-S, --list-rules [chain]

iptables应用

环境 centos7

iptables-services安装

[root@localhost ~]# yum -y install iptables-services

centos7系统中默认存在iptables命令,此命令仅为简单查询及操作命令,不包含配置文件安装iptables-services后,将直接生成配置文件,便于配置保存。包含ipv4及ipv6。

设置服务开启

[root@localhost ~]# systemctl start iptables.service

设置开机自启动

[root@localhost ~]# systemctl enable iptables.services

查看配置文件

[root@localhost ~]# rpm -ql iptables-services

保存规则

[root@localhost ~]# iptables-save > /etc/sysconfig/iptables

重载

[root@localhost ~]#iptables-restore < /etc/sysconfig/iptables

基本配置

iptables -F 
#删除现有规则

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

iptables -D INPUT -p tcp --dport 80 -j ACCEPT
#删除具体规则

表和链的查看

[root@CentOS7 ~]# iptables -t filter -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@CentOS7 ~]#
[root@CentOS7 ~]# iptables -t nat -nL
Chain PREROUTING (policy ACCEPT)
target prot opt source destination

Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
RETURN all -- 192.168.122.0/24 224.0.0.0/24
RETURN all -- 192.168.122.0/24 255.255.255.255
MASQUERADE tcp -- 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535
MASQUERADE udp -- 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535
MASQUERADE all -- 192.168.122.0/24 !192.168.122.0/24
[root@CentOS7 ~]#
[root@CentOS7 ~]#
[root@CentOS7 ~]# iptables -t mangle -nL
Chain PREROUTING (policy ACCEPT)
target prot opt source destination

Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
CHECKSUM udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:68 CHECKSUM fill
[root@CentOS7 ~]#
[root@CentOS7 ~]#
[root@CentOS7 ~]# iptables -t raw -nL
Chain PREROUTING (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@CentOS7 ~]#
[root@CentOS7 ~]#
[root@CentOS7 ~]# iptables -t security -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

案例准备

1 apacheftp
[root@CentOS7 ~]# yum -y install httpd vsftpd
[root@CentOS7 html]# echo 123 >> /var/www/html/index.html
[root@CentOS7 html]# systemctl start httpd
[root@CentOS7 html]# ss -an|grep ':80'
tcp LISTEN 0 128 [::]:80 [::]:*
tcp TIME-WAIT 0 0 [::1]:58624 [::1]:80
[root@CentOS7 html]# curl http://localhost
123


2访apache
[root@bobi ~]# curl http://192.168.192.144
curl: (7) Failed connect to 192.168.192.144:80; No route to host


1iptables
[root@CentOS7 html]# iptables -t filter -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target prot opt source destination


1使2访1apache
[root@CentOS7 html]# iptables -t filter -I INPUT -p tcp --dport 80 -j ACCEPT
[root@CentOS7 html]# iptables -t filter -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target prot opt source destination


2访
[root@bobi ~]# curl http://192.168.192.144
123


2访1apache

2访
[root@CentOS7 html]# iptables -t filter -I INPUT -s 192.168.192.145 -p tcp --dport 80 -j DROP
[root@CentOS7 html]# iptables -t filter -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP tcp -- 192.168.192.145 0.0.0.0/0 tcp dpt:80
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target prot opt source destination


2访
[root@bobi ~]# curl http://192.168.192.144
^C

案例:白名单

[root@CentOS7 ~]# iptables -t filter -F
[root@CentOS7 ~]# iptables -t filter -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@CentOS7 ~]#
[root@CentOS7 ~]# iptables -t filter -I INPUT -p tcp --dport 80 -j ACCEPT
[root@CentOS7 ~]# iptables -t filter -I INPUT -p tcp --dport 22 -j ACCEPT
[root@CentOS7 ~]# iptables -P INPUT DROP
[root@CentOS7 ~]# iptables -t filter -nL
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination


2访
[root@bobi ~]# curl http://192.168.192.144
123

案例:黑名单

[root@CentOS7 ~]# iptables -P INPUT ACCEPT
[root@CentOS7 ~]# iptables -t filter -F
[root@CentOS7 ~]# iptables -t filter -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@CentOS7 ~]#
[root@CentOS7 ~]# iptables -t filter -A INPUT -s 192.168.192.145 -p tcp --dport 80 -j DROP
[root@CentOS7 ~]# iptables -t filter -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP tcp -- 192.168.192.145 0.0.0.0/0 tcp dpt:80

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination


2访
[root@bobi ~]# curl http://192.168.192.144
^C

案例:允许通过lo访问本机数据

[root@localhost ~]# iptables -I INPUT -d 127.0.0.1 -p tcp --dport=9000 -i lo -j ACCEPT 

[root@localhost ~]# iptables -I INPUT -i lo -j ACCEPT
#允许通过本地回环网卡访问本机

案例:允许连接态产生的衍生态

防火墙——iptables_iptables_07

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

iptables filter表应用案例

案例1:

[root@localhost ~]# yum -y install httpd vsftpd sshd 
[root@localhost ~]# systemctl start httpd vsftpd sshd
[root@localhost ~]# iptables -t filter -F
[root@localhost ~]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
[root@localhost ~]# iptables -I INPUT -p tcp --dport 22 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -j REJECT



访
ping 127.0.0.1

[root@localhost ~]# iptables -I INPUT -i lo -j ACCEPT


ssh访
ssh remote_host

[root@localhost ~]# iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


FTP访
[root@bobi ~]# yum -y install ftp
[root@bobi ~]# ftp 192.168.192.144
ftp: connect: Connection refused
ftp>
ftp> bye
1
[root@localhost ~]# iptables -I INPUT -p tcp --dport 20:21 -j ACCEPT
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
pasv_min_port=50000
pasv_max_port=60000
[root@localhost ~]# iptables -I INPUT -p tcp --dport 50000:60000 -j ACCEPT
2
使
[root@localhost ~]# iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@localhost ~]# iptables -I INPUT -p tcp --dport 20:21 -j ACCEPT
[root@localhost ~]# modprobe nf_conntrack_ftp #临时方法,添加连接追踪模块
[root@localhost ~]# vim /etc/sysconfig/iptables-config
IPTABLES_MODULES="nf_conntrack_ftp" #启动服务时加载
#针对数据端口连接时,将三次握手第一次状态由NEW识别为RELATED

案例2:iptables标准流程


[root@localhost ~]# iptables -F
[root@localhost ~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@localhost ~]# iptables -A INPUT -i lo -j ACCEPT
[root@localhost ~]# iptables -A INPUT -s 192.168.2.0/24 -j ACCEPT #允许内网任何访问
[root@localhost ~]# iptables -A INPUT -p tcp --syn --dport 80 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p tcp --syn --dport 22 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p tcp --syn --dport 21 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -j REJECT
[root@localhost ~]# modprobe nf_conntrack_ftp 123456789

[root@localhost ~]# iptables-save > /etc/sysconfig/iptables
[root@localhost ~]# vim /etc/sysconfig/iptables-config
IPTABLES_MODULES="nf_conntrack_ftp"

常见协议的端口号

服务

协议

端口

sshd

ssh

tcp22

httpd

http

tcp80


https

tcp443

dns

domain

tcp53,udp53

mail

smtp

tcp25


pop3

tcp110

dhcp

boopts

udp67,udp68

ftp

ftp

tcp21


ftp-data

tcp20

tftp

tftp

udp69

ntp

ntp

udp123

syslog

syslog

udp514

案例3:扩展匹配

-m icmp  (ping)

pingping

[root@localhost ~]# iptables -F
[root@localhost ~]# iptables -t filter -I INPUT -p icmp -m icmp --icmp-type echo-reply -j ACCEPT
[root@localhost ~]# iptables -A INPUT -j REJECT

-m iprange  (地址范围)

IP192.168.2.10- 192.168.2.100访

[root@localhost ~]# iptables -t filter -I INPUT -m iprange --src-range 192.168.2.10- 192.168.2.100 -j REJECT

-m multiport  (多端口)

[root@localhost ~]# iptables -t filter -I INPUT -p tcp -m multiport --dports 20,21,22,25,80,110 -j ACCEPT

-m tos

根据ip协议头部 type of service 进行过滤

[root@localhost ~]# iptables -F 
[root@localhost ~]# tcpdump -i eth0 -nn port 22 -vvv #抓取远程主机访问本机的ssh数据包,观察TOS值
[root@localhost ~]# tcpdump -i eth0 -nn port 22 -vvv #抓取远程从本机rsync或scp复制文件,观察TOS值
使 tcp22IPTOS
#ssh: tos 0x0 0x10
#scp: tos 0x0 0x8
#rsync: tos 0x0 0x8
[root@localhost ~]# iptables -t filter -A INPUT -p tcp --dport 22 -m tos --tos 0x10 -j ACCEPT
[root@localhost ~]# iptables -t filter -A INPUT -j REJECT

-m tcp

按TCP标志位进行匹配

Flags:SYN ACK FIN RST URG PSH ALL NONE

[root@localhost ~]# iptables -t filter -A INPUT -p tcp -m tcp --tcp-flags SYN,ACK,FIN,RST SYN --dport 80 -j ACCEPT    
[root@localhost ~]# iptables -t filter -A INPUT -p tcp --syn --dport 80 -j ACCEPT

--tcp-flags SYN,ACK,FIN,RST SYN SYN
--syn

-m comment

对规则进行备注说明

[root@localhost ~]# iptables -A INPUT -s 192.168.2.250 -m comment --comment "cloud host" -j REJECT

-m mark

使用mangle表的标记方法,配合mangle表使用

[root@localhost ~]# iptables -t filter -A INPUT -m mark 2 -j REJECT

案例4:扩展动作

-j LOG  



[root@localhost ~]# grep 'kern.*' /etc/rsyslog.conf
kern.* /var/log/kernel.log
[root@localhost ~]# systemctl restart rsyslog
[root@localhost ~]# iptables -j LOG -h
[root@localhost ~]# iptables -t filter -A INPUT -p tcp --syn --dport 22 -j LOG --log-prefix " localhost_ssh "
[root@localhost ~]# iptables -t filter -A INPUT -p tcp --syn --dport 22 -j ACCEPT
[root@localhost ~]# iptables -t filter -A INPUT -j REJECT

-j REJECT 

访TCPRST
访UDPport xxx unreachable
访TCPREJECTport xxx unreachable

[root@localhost ~]# iptables -j REJECT -h
[root@localhost ~]# iptables -t filter -A INPUT -p tcp --dport 22 -j REJECT --reject- with tcp-reset //返回一个自定义消息类型

-j MARK

LVS

[root@localhost ~]# iptables -t mangle -L
[root@localhost ~]# iptables -j MARK -h
[root@localhost ~]# iptables -t mangle -A PREROUTING -s 192.168.2.110 -j MARK --set- mark 1
[root@localhost ~]# iptables -t mangle -A PREROUTING -s 192.168.2.25 -j MARK --set- mark 2
[root@localhost ~]# iptables -t filter -A INPUT -m mark --mark 1 -j ACCEPT //按照标记匹 配
[root@localhost ~]# iptables -t filter -A INPUT -m mark --mark 2 -j REJECT

iptables nat表应用案例

nat表规则动作所对应的链:

SNAT  POSTROUTING
MASQUERADE POSTROUTING
DNAT PREROUTING
REDIRECT PREROUTING

开启路由转发功能(实现SNAT和DNAT)

[root@bobi ~]# tail -1 /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@bobi ~]# sysctl -p
net.ipv4.ip_forward = 1
#以上为开启

#以下为关闭
[root@bobi ~]# tail -1 /etc/sysctl.conf
#net.ipv4.ip_forward = 1
[root@bobi ~]# sysctl -p
[root@bobi ~]#

SNAT,MASQUERAED 源地址转换案例

案例:实现内网主机上网功能

网络连接拓扑

防火墙——iptables_nat_08

配置命令

Linux 网关服务器

查看 nat 表

iptables -t nat -nvL

防火墙——iptables_nat_09

写入规则

iptables -t nat -A POSTROUTING -p tcp -o eth1 -s 192.168.1.0/24 -j SNAT --to-source 12.34.56.78

写入成功

防火墙——iptables_iptables_10

配置 FORWARD

清空 FORWARD 即可

iptables -F FORWARD

PC 访问成功

防火墙——iptables_filter_11

如果 Linux 网关服务器 ip 地址变换,

这里我们可以看到 PC 无法访问

防火墙——iptables_filter_12

写入新的规则

iptables -t nat -A POSTROUTING -p tcp -o eth1 -s 192.168.1.0/24 -j MASQUERADE

写入成功

防火墙——iptables_filter_13

可以看到这里的-A 没有生效

删除它上面的规则,使其生效

iptables -t nat -D POSTROUTING 1

PC 可以成功访问了

防火墙——iptables_iptables_14


DNAT 目标地址转换(端口映射)案例

案例:实现内网服务器对外提供访问

网络连接拓扑

防火墙——iptables_filter_15

配置命令

Linux 网关服务器

设定路由前规则

iptables -t nat -A PREROUTONG -i eth1 -d 12.34.56.80 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.1:8080

配置 FORWARD

清空 FORWARD 即可

iptables -F FORWARD

外网 PC 通过 80 端口成功访问内网服务器的 8080 端口

防火墙——iptables_iptables_16