如何修改linux iptables

如何修改linux iptables,第1张

1.首先介绍一下指令和相关配置文件

启动指令:service

iptables

start

重启指令:service

iptables

restart

关闭指令:service

iptables

stop

然后是相关配置:/etc/sysconfig/iptables

如何 *** 作该配置呢?

vim

/etc/sysconfig/iptables

然后进去修改即可,修改完了怎么办?这里很多人会想到/etc/rc.d/init.d/iptables

save指令,但是一旦你这么干了你刚才的修改内容就白做了。。。

具体方法是:

只修改/etc/sysconfig/iptables

使其生效的办法是修改好后先service

iptables

restart,然后才调用/etc/rc.d/init.d/iptables

save,

因为/etc/rc.d/init.d/iptables

save会在iptables服务启动时重新加载,要是在重启之前直接先调用了/etc/rc.d/init.d/iptables

save那么你

的/etc/sysconfig/iptables

配置就回滚到上次启动服务的配置了,这点必须注意!!!

2.下面介绍一些指令用法(主要还是man iptables看下相关资料才行)

-A:指定链名

-p:指定协议类型

-d:指定目标地址

--dport:指定目标端口(destination

port

目的端口)

--sport:指定源端口(source

port

源端口)

-j:指定动作类型

3.如果我不像修改文件直接打命令可以吗,当然没问题,步骤如下:

例如我给SSH加放行的语句:

添加input记录:

iptables

-A

INPUT

-p

tcp

--dport

22

-j

ACCEPT

添加output记录:

iptables

-A

OUTPUT

-p

tcp

--sport

22

-j

ACCEPT

最后注意需要再执行一下

/etc/init.d/iptables

save,这样这两条语句就保存到刚才那个/etc/sysconfig/iptables

文件中了。

4.接下来说明一下步骤,如果机器不在我身边,我只能SSH进去做iptables规则,那么我必须注意每一步,千万别搞错了,否则就SSH链接不上都有可能!

首先要做的是给咱的SSH进行ACCEPT配置,以免直接无法连接的情况发生:

1.如果SSH端口是22(这里不建议用默认端口最好改掉SSH端口)

iptables

-A

INPUT

-p

tcp

--dport

22

-j

ACCEPT

iptables

-A

OUTPUT

-p

tcp

--sport

22

-j

ACCEPT

注意要/etc/rc.d/init.d/iptables

save,以下每一步都最好执行一遍此语句,以下不再累述。

2.vim

/etc/sysconfig/iptables确定是否已经加入配置,可以的话执行service

iptables

restart重启后生效

3.下面是很危险的 *** 作,如果你第一步没做就会直接可能导致你连不上SSH,此步骤前切记执行第一步!!!

iptables

-P

INPUT

DROP

iptables

-P

OUTPUT

DROP

iptables

-P

FORWARD

DROP

这个步骤是把所有不符合自己配置的规则ACCEPT的连接全部DROP掉,执行完以后如果咱SSH还没掉,那么谢天谢地,安全了,重启下iptables后继续下面的配置!

4.下面咱就不细说了,具体就是看自己服务器要开放哪些端口或者是要访问哪些端口来做具体的配置,下面是我自己的机器的配置:

/etc/sysconfig/iptables文件配置如下:

#

Generated

by

iptables-save

v1.4.7

on

Fri

Mar

2

19:59:43

2012

*filter

:INPUT

DROP

[0:0]

:FORWARD

DROP

[0:0]

:OUTPUT

DROP

[8:496]

-A

INPUT

-m

state

--state

RELATED,ESTABLISHED

-j

ACCEPT

#ping使用的端口

-A

INPUT

-p

icmp

-j

ACCEPT

-A

INPUT

-i

lo

-j

ACCEPT

-A

INPUT

-s

127.0.0.1/32

-d

127.0.0.1/32

-j

ACCEPT

-A

INPUT

-s

192.168.2.200/32

-d

192.168.2.200/32

-j

ACCEPT

#允许服务器自己的SSH(对外部请求来说服务器是目标所以使用--dport)

-A

INPUT

-p

tcp

-m

tcp

--dport

22

-j

ACCEPT

#80端口不用说了吧,服务器网站访问端口

-A

INPUT

-p

tcp

-m

tcp

--dport

80

-j

ACCEPT

-A

INPUT

-p

tcp

-m

tcp

--dport

3306

-j

ACCEPT

-A

INPUT

-p

tcp

-m

tcp

--dport

11211

-j

ACCEPT

-A

INPUT

-p

tcp

-m

tcp

--dport

11212

-j

ACCEPT

-A

FORWARD

-j

REJECT

--reject-with

icmp-host-prohibited

#53端口是DNS相关,TCP和UDP都要配置

-A

INPUT

-p

tcp

-m

tcp

--dport

53

-j

ACCEPT

-A

INPUT

-p

udp

-m

udp

--dport

53

-j

ACCEPT

#ping使用的端口

-A

OUTPUT

-p

icmp

-j

ACCEPT

-A

OUTPUT

-s

127.0.0.1/32

-d

127.0.0.1/32

-j

ACCEPT

-A

OUTPUT

-s

192.168.2.200/32

-d

192.168.2.200/32

-j

ACCEPT

#允许服务器SSH到其他机器(使用外部端口就使用--dport)

-A

OUTPUT

-p

tcp

-m

tcp

--dport

22

-j

ACCEPT

#允许服务器自己的SSH(自已为源输出就使用--sport)

-A

OUTPUT

-p

tcp

-m

tcp

--sport

22

-j

ACCEPT

#访问外部网站80端口(使用外部端口就使用--dport)

-A

OUTPUT

-p

tcp

-m

tcp

--dport

80

-j

ACCEPT

#如果服务器需要访问外部网站,那么OUTPUT也需要配置53端口(使用外部端口就使用--dport)

-A

OUTPUT

-p

tcp

-m

tcp

--dport

53

-j

ACCEPT

-A

OUTPUT

-p

udp

-m

udp

--dport

53

-j

ACCEPT

#如果有访问外部邮箱,那么打开邮箱相关端口(使用外部端口就使用--dport)

-A

OUTPUT

-p

tcp

-m

tcp

--dport

465

-j

ACCEPT

-A

OUTPUT

-p

tcp

-m

tcp

--dport

25

-j

ACCEPT

-A

OUTPUT

-p

tcp

-m

tcp

--dport

110

-j

ACCEPT

#服务器网站访问端口(自已为源输出就使用--sport)

-A

OUTPUT

-p

tcp

-m

tcp

--sport

80

-j

ACCEPT

-A

OUTPUT

-p

tcp

-m

tcp

--sport

3306

-j

ACCEPT

-A

OUTPUT

-p

tcp

-m

tcp

--sport

11211

-j

ACCEPT

-A

OUTPUT

-p

tcp

-m

tcp

--sport

11212

-j

ACCEPT

COMMIT

#

Completed

on

Fri

Mar

2

19:59:43

2012

5.可能有时候需要删除规则,最简单就是修改一下/etc/sysconfig/iptables然后service iptables restart,最后/etc/rc.d/init.d/iptables save即可。

当然也可以使用指令完成:

在网上找了一下,删除规则的方法:

语法是:

iptables

-D

chain

rulenum

[options]

其中:

chain

是链的意思,就是INPUT

FORWARD

之类的

rulenum

是规则的编号。从1

开始。可以使用

--line-numbers

列出规则的编号

所以,例如上面要删除一个INPUT链的规则的话可以这样:iptables

-D

INPUT

3

意思是删除第3条规则。

还有第二种方法。第二种办法是

-A

命令的映射,不过用-D替换-A。当你的链中规则很复杂,而你不想计算它们的编号的时候这就十分有用了。也就是说,你如何用iptables

-A....

语句定义了一个规则,则删除此规则时就用

-D

来代替-

A

其余的都不变即可。

======================

说一下上面的

--line-numbers

选项,如下面的命令:

iptables

-L

INPUT

--line-numbers

列出INPUT

链所有的规则

num

target

prot

opt

source

destination

1

REJECT

tcp

--

anywhere

anywhere

tcp

dpt:microsoft-ds

reject-with

icmp-port-unreachable

2

REJECT

tcp

--

anywhere

anywhere

tcp

dpt:135

reject-with

icmp-port-unreachable

3

REJECT

tcp

--

anywhere

anywhere

tcp

dpt:netbios-ssn

reject-with

icmp-port-unreachable

...

...

删除指定行规则:

[root@localhost

rc.d]#

iptables

-D

INPUT

4

6.最后补充一下,如果想针对某IP进行单独开放端口可以如下配置:

如果我需要对内网某机器单独开放mysql端口,应该如下配置:

iptables

-A

INPUT

-s

192.168.2.6

-p

tcp

-m

tcp

--dport

3306

-j

ACCEPT

iptables

-A

OUTPUT

-s

192.168.2.6

-p

tcp

-m

tcp

--sport

3306

-j

ACCEPT

7.彻底禁止某IP访问:

#屏蔽单个IP的命令是

iptables

-I

INPUT

-s

123.45.6.7

-j

DROP

#封整个段即从123.0.0.1到123.255.255.254的命令

iptables

-I

INPUT

-s

123.0.0.0/8

-j

DROP

#封IP段即从123.45.0.1到123.45.255.254的命令

iptables

-I

INPUT

-s

124.45.0.0/16

-j

DROP

#封IP段即从123.45.6.1到123.45.6.254的命令是

iptables

-I

INPUT

-s

123.45.6.0/24

-j

DROP

指令I是insert指令

但是该指令会insert在正确位置并不像A指令看你自己的排序位置,因此用屏蔽因为必须在一开始就要加载屏蔽IP,所以必须使用I命令加载,然后注意执行/etc/rc.d/init.d/iptables

save进行保存后重启服务即可

你是在弄防火墙吧,

1,添加filter表

[root@linux ~]# iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT //开放21端口

出口我都是开放的iptables -P OUTPUT ACCEPT,所以出口就没必要在去开放端口了。

2,添加nat表

[root@linux ~]# iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE

将源地址是 192.168.10.0/24 的数据包进行地址伪装,可根据自己实际IP修改

3,以下实例 :-A默认是插入到尾部的,可以-I来插入到指定位置

[root@linux ~]# iptables -I INPUT 3 -p tcp -m tcp --dport 20 -j ACCEPT

[root@linux ~]# iptables -L -n --line-number

三,查下iptable规则

1,查看filter表

[root@linux ~]# iptables -L -n --line-number |grep 21 //--line-number可以显示规则序号,在删除的时候比较方便

5ACCEPT tcp -- 192.168.1.0/24 0.0.0.0/0 tcp dpt:21

如果不加-t的话,默认就是filter表,查看,添加,删除都是的

2,查看nat表

[root@linux ~]# iptables -t nat -vnL POSTROUTING --line-number

四,修改规则

[root@linux ~]# iptables -R INPUT 3 -j DROP//将规则3改成DROP

五,删除iptables规则

[root@linux ~]# iptables -D INPUT 3 //删除input的第3条规则

[root@linux ~]# iptables -t nat -D POSTROUTING 1 //删除nat表中postrouting的第一条规则

[root@linux ~]# iptables -F INPUT //清空 filter表INPUT所有规则

[root@linux ~]# iptables -F//清空所有规则

[root@linux ~]# iptables -t nat -F POSTROUTING //清空nat表POSTROUTING所有规则

六,设置默认规则

[root@linux ~]# iptables -P INPUT DROP //设置filter表INPUT默认规则是 DROP

        mangle表的主要功能是根据规则修改数据包的一些标志位,以便其他规则或程序可以利用这种标志对数据包进行过滤或策略路由。

         定义允许或者不允许的

        iptables -t filter -A INPUT -j DROP -p tcp --dport 8081

         过滤发往本机的8081端口的所有包被丢弃

         用途:网络地址转换;修改目的端口或目的地址以及原地址

         iptables -t nat -A PREROUTING -p tcp --dport 7788 -j DNAT --to 192.168.0.11:7799

         iptables -t nat -A POSTROUTE -p tcp -d 192.168.0.11 --dport 7799 -j SNAT --to 192.168.0.12

1. “四表” 是指,iptables的功能——filter, nat, mangle, raw.

filter, 控制数据包是否允许进出及转发(INPUT、OUTPUT、FORWARD),可以控制的链路有input, forward, output

nat, 控制数据包中地址转换,可以控制的链路有prerouting, input, output, postrouting

mangle,修改数据包中的原数据,可以控制的链路有prerouting, input, forward, output, postrouting

raw,控制nat表中连接追踪机制的启用状况,可以控制的链路有prerouting, output

注:在centos7中,还有security表,不过这里不作介绍

2. “五链” 是指内核中控制网络的NetFilter定义的五个规则链,分别为

PREROUTING, 路由前

INPUT, 数据包流入口

FORWARD, 转发管卡

OUTPUT, 数据包出口

POSTROUTING, 路由后

3 .堵通策略 是指对数据包所做的 *** 作,一般有两种 *** 作——“通(ACCEPT)”、“堵(DROP)”,还有一种 *** 作很常见REJECT.

谈谈REJECT和DROP之间的区别,Ming写了一封信,向Rose示爱。Rose如果不愿意接受,她可以不回应Ming,这个时候Ming不确定Rose是否接到了信;Rose也可以同样写一封信,在信中明确地拒绝Ming。前一种 *** 作就如同执行了DROP *** 作,而后一种 *** 作就如同REJECT *** 作。

4.iptables命令的语法规则

iptables [-t table] COMMAND [chain] CRETIRIA -j ACTION

-t table,是指 *** 作的表,filter、nat、mangle或raw, 默认使用filter

COMMAND,子命令,定义对规则的管理

chain, 指明链路

CRETIRIA, 匹配的条件或标准

ACTION, *** 作动作

例如,不允许10.8.0.0/16网络对80/tcp端口进行访问,

                iptables -t filter -A INPUT -s 10.8.0.0/16 -d 172.16.55.7 -p tcp --dport 80 -j DROP

查看iptables列表

               iptables -nL

5.链管理

-N, --new-chain chain:新建一个自定义的规则链;

-X, --delete-chain [chain]:删除用户自定义的引用计数为0的空链;

-F, --flush [chain]:清空指定的规则链上的规则;

-E, --rename-chain old-chain new-chain:重命名链;

-Z, --zero [chain [rulenum]]:置零计数器;

-P, --policy chain target, 设置链路的默认策略

6.规则管理

-A, --append chain rule-specification:追加新规则于指定链的尾部;

-I, --insert chain [rulenum] rule-specification:插入新规则于指定链的指定位置,默认为首部;

-R, --replace chain rulenum rule-specification:替换指定的规则为新的规则;

-D, --delete chain rulenum:根据规则编号删除规则;

7.查看规则

-L, --list [chain]:列出规则;

-v, --verbose:详细信息;

                      -vv, -vvv  更加详细的信息

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

-x, --exact:显示计数器的精确值;

--line-numbers:列出规则时,显示其在链上的相应的编号;

-S, --list-rules [chain]:显示指定链的所有规则;

查看规则的一般内容:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/7872820.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存