linux下iptables防火墙的配置详解

发布时间:2020-07-04编辑:脚本学堂
本文介绍下,在linux下配置iptables防火墙的详细方法,供大家学习参考。

一,iptables指令和相关配置文件
 

复制代码 代码示例:
启动:
service iptables start 
重启:
service iptables restart 
关闭:
service iptables stop 
 

相关配置:/etc/sysconfig/iptables 
vim /etc/sysconfig/iptables 
具体方法: 
只修改/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配置会回滚到上次启动服务的配置。

二,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进行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重启后生效 
 
三,以下操作有一定的危险性,请慎重。 
iptables -P INPUT DROP  
iptables -P OUTPUT DROP  
iptables -P FORWARD DROP 
此步骤是把所有不符合自己配置的规则ACCEPT的连接全部DROP掉,执行完以后如果咱SSH还没掉,那么谢天谢地,安全了,重启下iptables后继续下面的配置! 
 
四,附,自己的机器的配置: 
/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

五,删除iptables规则,最简单的就是在/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 

方法二, -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 
 

对某IP进行全端口开放无限制:
 

复制代码 代码示例:
-A INPUT -s 192.168.2.6/32 -j ACCEPT 
-A OUTPUT -d 192.168.2.6/32 -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保存,然后重启服务即可。