《CentOS下配置iptables防火墙》

更新时间:2023-04-24 23:55:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

在Linux 中设置防火墙,以CentOS 为例,打开iptables 的配置文件:1. 2. vi

/etc/sysconfig/iptables

通过/etc/init.d/iptables status 命令查询是否有打开80 端口,如果没有可通过两种方式处理:1.修改1.修改vi /etc/sysconfig/iptables 命令添加使防火墙开放80 端口1. 2. 2.关闭/开启/ 2.关闭/开启/重启防火墙关闭1. 2. 3. 4. 5. 6. /etc/init.d/iptables stop #start 开启#restart 重启-A

RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

3.永久性关闭防火墙3.永久性关闭防火墙1. 2. 3.

4.

5.

6. chkconfig --level 35 iptables off

/etc/init.d/iptables stop iptables -P INPUT DROP

4.打开主动模式4.打开主动模式21 端口1. 2. iptables -A INPUT -p tcp --dport 21 -j ACCEPT

5.打开被动模式49152~65534 5.打开被动模式49152~65534 之间的端口1. 2. 3. 4. 5.

6. iptables -A INPUT -p tcp --dport 49152:65534 -j ACCEPT iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT

注意:一定要给自己留好后路,留VNC 一个管理端口和SSh 的管理端口需要注意的是,你必须根据自己服务器的情况来修改这个文件。全部修改完之后重启iptables: service iptables restart 你可以验证一下是否规则都已经生效:iptables -L

centos IPTables 配置方法如下: 一、需要的命令:需要的命令:查看配置情况iptables -L -n 记得保存/etc/init.d/iptables save 添加input 记录iptables -A INPUT -p tcp –dport 22 -j ACCEPT

添加output 记录iptables -A OUTPUT -p tcp –sport 22 -j ACCEPT 一些软件的默认端口:ftp 用到端口是20 21 ssh 端口是22 http 端口是80 telnet 端口是23 rsync 端口是873 svn 端口3690 pop3 端口110 smtp 端口25 dns 端口53

mysql 端口3306 nfs 端口111 大概常用的就这些,其他的可查看具体软件1、查看本机关于IPTABLES 的设置情况[root@tp ~]# iptables -L -n 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 RH-Firewall-1-INPUT (0 references) target prot opt source destination ACCEPT all — 0.0.0.0/0 0.0.0.0/0 ACCEPT icmp —

0.0.0.0/0 0.0.0.0/0 icmp type 255 ACCEPT esp — 0.0.0.0/0 0.0.0.0/0 ACCEPT ah — 0.0.0.0/0

0.0.0.0/0 ACCEPT udp — 0.0.0.0/0 224.0.0.251 udp dpt:5353 ACCEPT udp — 0.0.0.0/0 0.0.0.0/0 udp dpt:631 ACCEPT all — 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED ACCEPT tcp —

0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80 ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:25 REJECT all — 0.0.0.0/0 0.0.0.0/0

reject-with icmp-host-prohibited

可以看出我在安装linux 时,选择了有防火墙,并且开放了22,80,25 端口. 如果你在安装linux 时没有选择启动防火墙,是这样的[root@tp ~]# iptables -L -n 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 什么规则都没有. 2、清除原有规则. 清除原有规则. 不管你在安装linux 时是否启动了防火墙,如果你想配置属于自己的防火墙,那就清除现在filter 的所有规则. [root@tp ~]# iptables -F 清除预设表filter 中的所有规则链的规则[root@tp ~]# iptables -X 清除预设表filter 中使用者自定链中的规则我们在

来看一下[root@tp ~]# iptables -L -n 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 什么都没有了吧,和我们在安装linux 时没有启动防火墙是一样的.(提前说一句, 这些配置就像用命令配置IP 一样,重起就会失去作用),怎么保存.

[root@tp ~]# /etc/rc.d/init.d/iptables save 这样就可以写到/etc/sysconfig/iptables 文件里了.写入后记得把防火墙重起一下,才能起作用. [root@tp ~]# service iptables restart 现在IPTABLES 配置表里什么配置都没有了,那我们开始我们的配置吧。3、设定预设规则[root@tp ~]# iptables -p INPUT DROP [root@tp ~]# iptables -p OUTPUT ACCEPT [root@tp ~]# iptables -p FORWARD DROP 上面的意思是,当超出了IPTABLES 里filter 表里的两个链规则(INPUT,FORWARD)时,不在这两个规则里的数据包怎么处理呢,那就是DROP(放弃).应该说这样配置是很安全的.我们要控制流入数据包而对于OUTPUT 链,也就是流出的包我们不用做太多限制,而是采取ACCEPT, 也就是说,不在着个规则里的包怎么办呢,那就是通过. 可以看出INPUT,FORWARD 两个链采用的是允许什么包通过,而OUTPUT 链采用的是不允许什么包通过. 这样设置还是挺合理的,当然你也可以三个链都DROP,但这样做我认为是没有必要的,而且要写的规则就会增加.但如果你只想要有限的几个规则是,如只做WEB 服务器.还是推荐三个链都是DROP. 注:如果你是远程SSH 登陆的话,当你输入第一个命令回车的时候就应该掉了.因为你没有设置任何规则. 怎么办,去本机操作呗! 4、添加规则. 添加规则. 首先添加INPUT 链,INPUT 链的默认规则是DROP,所以我们就写需要ACCETP(通过)的链为了能采用远程SSH 登陆,我们要开启22 端口. [root@tp ~]# iptables -A INPUT -p tcp –dport 22 -j ACCEPT

[root@tp ~]# iptables -A OUTPUT -p tcp –sport 22 -j ACCEPT (注:这个规则,如果你把OUTPUT 设置成DROP 的就要写上这一部,好多人都是望了写这一部规则导致,始终无法SSH. 在远程一下,是不是好了. 其他的端口也一样,如果开启了web 服务器,OUTPUT 设置成DROP 的话,同样也要添加一条链: [root@tp ~]# iptables -A OUTPUT -p tcp –sport 80 -j ACCEPT ,其他同理.) 如果做了WEB 服务器,开启80 端口. [root@tp ~]# iptables -A INPUT -p tcp –dport 80 -j ACCEPT 如果做了邮件服务器,开启25,110 端口. [root@tp ~]# iptables -A INPUT -p tcp –dport 110 -j ACCEPT [root@tp ~]# iptables -A INPUT -p tcp –dport 25 -j ACCEPT 如果做了FTP 服务器,开启21 端口[root@tp ~]# iptables -A INPUT -p tcp –dport 21 -j ACCEPT [root@tp ~]# iptables -A INPUT -p tcp –dport 20 -j ACCEPT 如果做了DNS 服务器,开启53 端口[root@tp ~]# iptables -A INPUT -p tcp –dport 53 -j ACCEPT 如果你还做了其他的服务器,需要开启哪个端口,照写就行了. 上面主要写的都是INPUT 链,凡是不在上面的规则里的,都DROP 允许icmp 包通过,也就是允许ping, [root@tp ~]# iptables -A OUTPUT -p icmp -j ACCEPT (OUTPUT 设置成DROP 的话) [root@tp ~]# iptables -A INPUT -p icmp -j ACCEPT (INPUT 设置成DROP 的话) 允许loopback!(不然会导致DNS 无法正常关闭等问题) IPTABLES -A INPUT -i lo -p all -j ACCEPT (如果是INPUT DROP) IPTABLES -A OUTPUT -o lo -p all -j ACCEPT(如果是OUTPUT DROP) 下面写OUTPUT 链,OUTPUT 链默认规则是ACCEPT,所以我们就写需要DROP(放弃)的链. 二、减少不安全的端口连接

[root@tp ~]# iptables -A OUTPUT -p tcp –sport 31337 -j DROP [root@tp ~]# iptables -A OUTPUT -p tcp –dport 31337 -j DROP 有些些特洛伊木马会扫描端口31337 到31340(即黑客语言中的elite 端口)上的服务。既然合法服务都不使用这些非标准端口来通信,阻塞这些端口能够有效地减少你的网络上可能被感染的机器和它们的远程主服务器进行独立通信的机会还有其他端口也一样,像:31335、27444、27665、20034 NetBus、9704、137-139(smb),2049(NFS) 端口也应被禁止,我在这写的也不全,有兴趣的朋友应该去查一下相关资料. 当然出入更安全的考虑你也可以包OUTPUT 链设置成DROP,那你添加的规则就多一些,就像上边添加允许SSH 登陆一样.照着写就行了. 下面写一下更加细致的规则,就是限制到某台机器如:我们只允许

192.168.0.3 的机器进行SSH 连接[root@tp ~]# iptables -A INPUT -s 192.168.0.3 -p tcp –dport 22 -j ACCEPT 如果要允许,或限制一段IP 地址可用192.168.0.0/24 表示192.168.0.1-255 端

的所有IP. 24 表示子网掩码数.但要记得把/etc/sysconfig/iptables 里的这一行删了. -A INPUT -p tcp -m tcp –dport 22 -j ACCEPT 因为它表示所有地址都可以登陆. 或采用命令方式: [root@tp ~]# iptables -D INPUT -p tcp –dport 22 -j ACCEPT 然后保存,我再说一边,反是采用命令的方式,只在当时生效,如果想要重起后也起作用,那就要保存.写入到/etc/sysconfig/iptables 文件里. [root@tp ~]# /etc/rc.d/init.d/iptables save 这样写!192.168.0.3 表示除了192.168.0.3 的ip 地址其他的规则连接也一样这么设置. 在下面就是FORWARD 链,FORWARD 链的默认规则是DROP,所以我们就写需要ACCETP(通过)的链,对正在转发链的监控. 开启转发功能,(在做NAT 时,FORWARD 默认规则是DROP 时,必须做)

[root@tp ~]# iptables -A FORWARD -i eth0 -o eth1 -m state –state RELATED,ESTABLISHED -j ACCEPT [root@tp ~]# iptables -A FORWARD -i eth1 -o eh0 -j ACCEPT 丢弃坏的TCP 包[root@tp ~]#iptables -A FORWARD -p TCP ! –syn -m state –state NEW -j DROP 处理IP 碎片数量,防止攻击,允许每秒100 个[root@tp ~]#iptables -A FORWARD -f -m limit –limit 100/s

–limit-burst 100 -j ACCEPT 设置ICMP 包过滤,允许每秒1 个包,限制触发条件是10 个包. [root@tp ~]#iptables -A FORWARD -p icmp -m limit –limit 1/s –limit-burst 10 -j ACCEPT 我在前面只所以允许ICMP 包通过,就是因为我在这里有限制。三、配置一个NAT 表放火墙1、查看本机关于NAT 的设置情况[root@tp rc.d]# iptables -t nat -L Chain PREROUTING (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination SNAT all — 192.168.0.0/24 anywhere to:211.101.46.235 Chain OUTPUT (policy ACCEPT) target prot opt source destination 我的NAT 已经配置好了的(只是提供最简单的代理上网功能,还没有添加防火墙规则).关于怎么配置NAT,参考我的另一篇文章当然你如果还没有配置NAT 的话,你也不用清除规则,因为NAT 在默认情况下是什么都没有的

如果你想清除,命令是[root@tp ~]# iptables -F -t nat [root@tp ~]# iptables -X -t nat [root@tp ~]# iptables -Z -t nat 2、添加规则添加基本的NAT 地址转换,(关于如何配置NAT 可以看我的另一篇文章), 添加规则,我们只添加DROP 链.因为默认链全是ACCEPT. 防止外网用内网IP 欺骗[root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 10.0.0.0/8 -j DROP [root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP [root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP 如果我们想,比如阻止

MSN,QQ,BT 等的话,需要找到它们所用的端口或者IP, (个人认为没有太大必要) 例:禁止与211.101.46.253 的所有连接[root@tp ~]# iptables -t nat -A PREROUTING -d 211.101.46.253 -j DROP 禁用FTP(21)端口[root@tp ~]# iptables -t nat -A PREROUTING -p tcp –dport 21 -j DROP 这样写范围太大了,我们可以更精确的定义. [root@tp ~]# iptables -t nat -A PREROUTING -p tcp –dport 21 -d 211.101.46.253 -j DROP 这样只禁用211.101.46.253 地址的FTP 连接,其他连接还可以.如web(80 端口)连接. 按照我写的,你只要找到QQ,MSN 等其他软件的IP 地址,和端口,以及基于什么协议,只要照着写就行了. 最后:

drop 非法连接[root@tp ~]# iptables -A INPUT -m state –state INVALID -j DROP [root@tp ~]# iptables -A OUTPUT -m state –state INVALID -j DROP [root@tp ~]# iptables-A FORWARD -m state –state INVALID -j DROP 允许所有已经建立的和相关的连接[root@tp ~]# iptables-A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT [root@tp ~]# iptables-A OUTPUT -m state –state ESTABLISHED,RELATED -j ACCEPT [root@tp ~]# /etc/rc.d/init.d/iptables save 这样就可以写到/etc/sysconfig/iptables 文件里了.写入后记得把防火墙重起一下,才能起作用. [root@tp ~]# service iptables restart 别忘了保存,不行就写一部保存一次。你可以一边保存,一边做实验,看看是否达到你的要求,

Iptables 简介对于那些不知道或不清楚iptables 的人来说,这个Linux 工具可以控制网络数据包,允许你借助于一套规则来对网络相关的事项执行精细控制,此工具本身已经出道有一段

时间了。在你用iptables 命令开始创建规则之前,你还需要知道如果服务器重启的话,你创建的规则会丢失。由于这个原因,多数服务器管理员将其所用的iptables 命令运用于一个服务器每次重启时运行的命令过程。对于某些Linux 版本,你还可以像下面这样来运行一个命令:service(服务) iptables save(保存) 这就保证可以保存你的配置,并且在启动时自动加载。开始工作要使用iptables,你应当将规则运用于进入或发出的网络数据包,或者通过你的服务器转发的数据包。要查看目前运用于服务器的数据包,键入命令:

iptables -L iptables 基础构建可正常发挥功能的防火墙规则依赖于你对服务器是如何运行的一些知识。对于一个安全的服务器而言,最好先建立一个可以禁止所有进入通信的规则。一旦你这样做了,那么你可以建立一些明晰的规则,使其只允许如80 号端口等例外端口的请求。这样做比你设法过滤想阻止的内容更加容易理解,也更容易配置,因为那样的话你可能会遗漏一些重要或者危险的东西,例如一个开放的可被用于攻击你的服务器的端口。此外,将iptables 与一个硬件防火墙结合使用也是很有益的,因为这会提供多层安全,并会减少你在配置中遗漏某些东西的可能性。记住,你可以用命令man iptables 得到所有的语法信息。使用防火墙规则下面让我们看三个示例性的规则及其核心部分。不过,需要注意,我们文章中的一些较长的命令有自动换行,因此你要确保键入了一个完整的命令,而不是仅仅一行命令。iptables -P INPUT DROP 这个命令很容易,并且很安全。它对iptables 工具进行了初始化,然后对所有进入(input) 的数据包设置了一个策略(Policy(-P))。这个策略就是丢弃所有的数据包。非常安全。注意,你只能将策略用于iptables 的内建命令。iptables -A INPUT -i lo -j ACCEPT 这条规则比较实用,因为它允许发生在你的本地接口上的网络通信。注意添加的(-A)选项,因为这不是内建于策略中的一部分。这条新的规则被添加到所有进入的将要到达本地接口(interface:-i)的数据包上。这条规则要准许所有这些数据包(-j ACCEPT)。通常情况下,如果你碰到配置和安装应用程序方面的问题,这将开始于你准许本地主机的连接性,如下所示:iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT 这个命令还将一条规则添加(-A)到所有通过以太网接口(-i eth0)进入(INPUT)的数据包中。不过它只应用于使用TCP 协议(-p tcp)的数据包。此规则特别针对进入指定的80 号端口(--dport 80)的数据包,而且设置为允许这些数据包通过(-j ACCEPT)。

的心得,给大家拿出来来晒晒!本文是我自己的一些学习iptables 的心得,给大家拿出来来晒晒!filter #用于过滤

nat #做NAT input =>filter #目的ip 是本机的数据包forward =>filter #穿过本机的数据包prerouting =>nat #修改目的地址(DNAT) postrouting =>nat #修改源地址(SNAT) iptables -t 要操作的表操作命令要操作的链规则号码匹配条件-j 匹配到以后的命令iptables -I INPUT -j DROP #-t 默认为filter iptables -I INPUT 3 -j DROP #链接里插入一条规则(插入第三条) iptables -D INPUT 3 #按号码匹配删除iptables -D INPUT -s 192.168.0.1 -j DROP #按内容匹配删除iptables -R INPUT 3 -j ACCEPT #将原来3 的规则改为-j ACCEPT iptables -P INPUT DROP #设置默认规则iptables -F INPUT #清空filter 表INPUT 链中的所有规则iptables -t nat -F PREROUTING iptables -t nat vxnL PREROUTING --# v: 显示详细信息--# x: 在v 的基础上,禁止自动单位换算--# n: 只显示IP 地址和端口号码,不显示域名和服务名称========匹配条件-i -i eth0 #流入接口(是否从网口eth0 进来) -o #流出接口-s -s 192.168.1.0/24 #来源地址-d #目的地址

-p -p icmp --icmp-type #协议类型--sport --sport 1000:3000 #来源的端口--dport --dport

1000: :3000 #目的的端口1000:(1000 端口以上) :3000(3000 端口以下) -s 192.168.0.1 -d

845786c28bd63186bcebbc9f -p tcp -dport 80 ================================ iptables -A INPUT -j ACCEPT #允许所有访问本机IP 的数据包通过iptables -A FORWARD -s 192.168.0.1 -j DROP #阻止来源地址为192.168.80.39 的数据包通过本机-j DNAT #目的地址转换,DNAT 支持转换

为单IP,也支持转换到IP 址池iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to 192.168.0.3:80 #把从ppp0 进来的要访问tcp/80 的数据包的地址改为192.168.0.3 -j SNAT #源地址转换iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1 #将内网192.168.0.0/24 的源地址改为1.1.1.1,用于nat 表iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1-1.1.1.10 #修改成为一个地址池-j MASQUERADE #动态源地址转换iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE #将源地址为192.168.0.0/24 的数据包进行地址伪装===================附加模块state #按包状态匹配mac #按来源mac 匹配limit #按包速率匹配

multiport #多端口匹配--state -m state #new,related,established,invalid iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT #包状态RELATED(衍生态),ESTABLISHED(连接态),NEW(有别于tcp 的syn),INVALID(不被识别的) iptables -A FORWARD -m mac

--mac-source XX:XX:XX:XX:XX:XX -j DROP #阻断来自某MAC 地址的数据包通过本机iptables -A FORWARD -d 192.168.0.1 -m limit --limit 50/s -j ACCEPT #用一定速率去匹配数据包iptables -A INPUT -p tcp -m multiport --dports 21,22,25,80,110 -j ACCEPT #一次匹配多个端口

=======================================实例分析

=================================== 单服务器的防护: iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -p tcp -m multiport --dport 22,80 -j ACCEPT iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -P INPUT DROP 制作网关: echo "1" > /proc/sys/net/ipv4/ip_forward #启用路由转发iptables -t nat -A POSTROUTING -s

192.168.1.0/24 -o ppp0 -j MASQUERADE 限制内网用户:filter->forward iptables -A FORWARD -s 192.168.0.3 -j DROP iptables -A FORWARD -m mac --mac-source 11:22:33:44:55:66 -j DROP iptables -A FORWARD -d 845786c28bd63186bcebbc9f -j DROP 内网做对外服务器: iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to 192.168.1.1 iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 81 -j DNAT --to 192.168.1.2:80

========================================连接追踪模块

================================= 主动模式(ACTIVE) 使用连接追踪模块(打开

tcp/20,防火墙打开高范围端口,配置ftp,减小被动模式端口范围) modprobe ip_nat_ftp iptables -A INPUT -p tcp --dport 21 -j ACCEPT iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -P INPUT DROP 被动模式(PASSIVE) =============================网关策略================================= echo "1" > /proc/sys/net/ipv4/ip_forward echo "1" > /proc/sys/net/ipv4/tcp_syncookies echo "1" >

/proc/sys/net/ipv4/icmp_ignore_bogus_error_responses modprobe ip_nat_ftp 堵: iptables -A FORWARD -p tcp --dport 80 -j DROP iptables -A FORWARD -p tcp --dport yyy:zzz -j DROP 通: iptables -A FORWARD -p tcp --dport xxx -j ACCEPT iptables -A FORWARD -p tcp --dport yyy:zzz -j ACCEPT

iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -P FORWARD DROP ==========================三大纪律五项注意

============================= 3: filter nat mangle 5:

prerouting,input,forward,output,postrouting ==========================注意事项

============================== #养成好的习惯iptables -vnL iptables -t nat -vnL iptables-save #注意逻辑顺序iptables -A INPUT -p tcp --dport xxx -j ACCEPT iptables -I INPUT -p tcp --dport yyy -j ACCEPT

==========================FAQ====================================== iptables -m 模块名-h /lib/modules/`uname -r`/kernel/net/ipv4/netfilter #模块存放的路径modprobe ip_nat_ftp #加载模块=========================实战

====================================== iptables -A INPUT -i lo -j ACCEPT iptables -A

INPUT -i eth1 -p tcp --dport 22 -j ACCEPT iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -P INPUT DROP iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 j SNAT --to 202.106.0.254

iptables -t nat -A POSTROUTING -d 202.106.0.254 -p tcp --dport 80 -j DNAT --to 172.17.0.1 iptables -A FORWARD -i eth2 -p eth1 -m state --state NEW -j DROP

本文来源:https://www.bwwdw.com/article/2boq.html

Top