当前位置: > Linux服务器 > iptables >

linux防火墙iptables配置规则详解

时间:2014-12-03 20:02来源:linux.it.net.cn 作者:IT
linux下防火墙iptables的配置规则,相比于freebsd的ipfw centos下的iptables更加便于安装配置,默认情况下iptables是集成在centos发行版本之中的,它集成到linux内核中。

前面说了Freebsd下ipfw的配置,今天再说一下linux及centos下iptables的通用配置。相比于freebsd的ipfw centos下的iptables更加便于安装配置。
默认情况下iptables是集成在centos发行版本之中的,它集成到linux内核中,用户通过iptables,可以对进出你的计算机的数据包进行过滤。

通过iptables命令行设置你的规则,来把保护的计算机网络──允许哪些数据通过,哪些不能通过,哪些通过的数据需要进行记录等。
通过对iptables的设置甚至可以抵御小规模的DDOS攻击。

运行iptables --version来查看系统是否安装了iptables。
iptables --version或者iptables -V
 一般会显示当前iptables版本 如 iptables v1.4.7 等。
 如未显示版本,则表示需要手动安装iptables。
 
 下载地址:http://www.netfilter.org/
 

 

  •  

一,启动iptables
命令行输入:service iptables status 可以查看当前iptables运行状态,显示如下
 

复制代码代码示例:
[root@localhost ~]# service iptables status
表格:filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination        
Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination        
Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

表示当前iptables已经运行,如未启动 可以运行 service iptables start 启动防火墙。

二,配置规则前准备
确认iptables已经启动之后,运行iptables --list查看当前iptables策略规则。
配置规则可以修改/etc/sysconfig/iptables 增加你想要的策略。
iptables未启动的情况下/etc/sysconfig/iptables 可能不存在,这时你就需要手动生成一个文件。
touch /etc/sysconfig/iptables  然后再添加规则。
使其生效的办法是修改好后 运行 service iptables restart   系统会载入你配置的iptables规则。
这里有个提示:如果你是刚接触linux或者对与iptables的配置不是很熟悉的话,建议你谨慎点。虚拟机情况还好,如果是远程登录的配置,很可能会把自己挡在外面无法连接。
这时你就需要添加一个Crontab任务
crontab -e
*/5 * * * * root /etc/init.d/iptables stop
这个任务意思是每5分钟关闭一次防火墙,避免出现远程连接SSH断掉无法登录。(此处借鉴抚琴煮酒大咖的办法,在此表示感谢)
 
三,添加具体规则
先看一个简单的规则
 

Generated by iptables-save v1.3.5 on Sat Nov 10 11:07:00 2012
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -j DROP
-A FORWARD -j DROP
-A OUTPUT -j ACCEPT
COMMIT
# Completed on Sat Nov 10 11:07:00 2012
 

这个规则只允许80 和22端口的连接进入,其余的全部阻止。而对于出去的连接则没有限制。这是针对web服务器进行的一个规则配置,其余的规则可以根据自己的需要添加

根据网上规则总结的一些配置方法,分享给大家。

1,屏蔽指定ip
有时候我们发现某个ip不停的往服务器发包,这时我们可以使用以下命令,将指定ip发来的包丢弃:
Black_IP="x.x.x.x"
 

 
iptables -A INPUT -i eth0 -p tcp -s "$Black_IP" -j DROP


以上命令设置将由x.x.x.x ip发往eth0网口的tcp包丢弃。
 
2,配置服务项
利用iptables,我们可以对日常用到的服务项进行安全管理,比如设定只能通过指定网段、由指定网口通过SSH连接本机:


  iptables -A INPUT -i eth0 -p tcp -s 192.168.0.0/24 --dport 22 -m state --state NEW,ESTABLESHED -j ACCEPT
  iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT


类似的,对于HTTP/HTTPS(80/443)、pop3(110)、rsync(873)、MySQL(3306)等基于tcp连接的服务,也可以参照上述命令配置。
对于基于udp的dns服务,使用以下命令开启端口服务:
 

 
iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT


  
3,网口转发配置
对于用作防火墙或网关的服务器,一个网口连接到公网,其他网口的包转发到该网口实现内网向公网通信,假设eth0连接内网,eth1连接公网,配置规则如下:
 

 
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

4,端口转发配置
  对于端口,我们也可以运用iptables完成转发配置:
iptables -t nat -A PREROUTING -p tcp -d 192.168.0.1 --dport 422 -j DNAT --to 192.168.1.1:22 
以上命令将422端口的包转发到22端口,因而通过422端口也可进行SSH连接,当然对于422端口,我们也需要像以上“4.配置服务项”一节一样,配置其支持连接建立的规则。
  
5,DoS攻击防范
利用扩展模块limit,我们还可以配置iptables规则,实现DoS攻击防范:
  iptables -A INPUT -p -tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT 
--litmit 25/minute 指示每分钟限制最大连接数为25
--litmit-burst 100 指示当总连接数超过100时,启动 litmit/minute 限制
 
6,配置web流量均衡
可以将一台服务器作为前端服务器,利用iptables进行流量分发,配置方法如下:
 

 
iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.1:80
iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.2:80
iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.3:80
 

以上配置规则用到nth扩展模块,将80端口的流量均衡到三台服务器。

 
(责任编辑:IT)
------分隔线----------------------------