无论如何,iptables是一个需要特别谨慎设置的东西,万一服务器不在你身边,而你贸然设置导致无法SSH,那就等着被老板骂吧,呵呵。。。

以下内容是为了防止这种情况发生而写的,当然很初级,不过一般服务器也够用了:

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进行保存后重启服务即可

Linux中iptables设置详细(转)的更多相关文章

  1. Linux中iptables设置详细

    无论如何,iptables是一个需要特别谨慎设置的东西,万一服务器不在你身边,而你贸然设置导致无法SSH,那就等着被老板骂吧,呵呵... 一下内容是为了防止这种情况发生而写的,当然很初级,不过一般服务 ...

  2. LINUX中IPTABLES防火墙使用

    对于有公网IP的生产环境VPS,仅仅开放需要的端口,即采用ACL来控制IP和端口(Access Control List). 这里可以使用Linux防火墙netfilter的用户态工具 iptable ...

  3. Linux中systemctl命令详细介绍

    Linux Systemctl是一个系统管理守护进程.工具和库的集合,用于取代System V.service和chkconfig命令,初始进程主要负责控制systemd系统和服务管理器.通过Syst ...

  4. Linux中如何设置服务自启动?

    转自:Linux中如何设置服务自启动? 有时候我们需要Linux系统在开机的时候自动加载某些脚本或系统服务,主要用三种方式进行这一操作: ln -s             在/etc/rc.d/rc ...

  5. linux中怎样设置dhcpd

    linux中怎样设置DHCP  在 linux 以下设置 DHCP一点也不复杂﹐您全部要做的仅仅有一个文件﹕/etc/dhcpd.conf . 以下﹐我用我自己的设置文件来说说怎么改动这个文件﹕  d ...

  6. linux中iptables配置文件及命令详解详解

    iptables配置文件 直接改iptables配置就可以了:vim /etc/sysconfig/iptables. 1.关闭所有的 INPUT FORWARD OUTPUT 只对某些端口开放. 下 ...

  7. linux中iptables配置文件及命令详解

    转自:https://www.cnblogs.com/itxiongwei/p/5871075.html iptables配置文件 直接改iptables配置就可以了:vim /etc/sysconf ...

  8. linux中iptables的用法

    iptables基本操作笔记 一.基本操作 #启动防火墙 service iptables start #停止防火墙 service iptables stop #重启防火墙 service ipta ...

  9. Linux中安装JDK详细步骤

    一.下载Linux版本的JDK 进入官网下载对应的JDK,下载之前需要先登录 官网地址 -> https://www.oracle.com/ 登录成功后,找到对应的下载位置 根据自己电脑下载对应 ...

随机推荐

  1. Gruntjs: task之文件映射

    由于大多数的任务执行文件操作,Grunt提供了一个强大的抽象声明说明任务应该操作哪些文件.这里总结了几种src-dest(源文件-目标文件)文件映射的方式,提供了不同程度的描述和控制操作方式. 1. ...

  2. Lenovo GTX960M 配置CUDA

    文章是出自我的原创,是写在新浪博客里面的:http://blog.sina.com.cn/s/blog_13b7eb5b20102wvxw.html 首先,软件的版本你选择很重要,我们配置了两天才成功 ...

  3. 基于.Net FrameWork的 RestFul Service

    关于本文 这篇文章的目的就是向大家阐述如何在.net framework 4.0中创建RestFul Service并且使用它. 什么是web Services,什么是WCF 首先讲到的是web Se ...

  4. Java NIO框架Mina、Netty、Grizzly介绍与对比(zz)

    Mina:Mina(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用 ...

  5. [MetaHook] R_SparkEffect

    By hzqst void R_SparkEffect(float *pos, int count, int velocityMin, int velocityMax) { efx.R_SparkSt ...

  6. 20145215《Java程序设计》第10周学习总结

    20145215<Java程序设计>第十周学习总结 教材学习内容总结 网络编程 网络概述 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据发送到指定 ...

  7. java之hashCode

    package com.simope.myTest; import java.util.HashMap; import java.util.Map; public class Test20151022 ...

  8. Grunt-cli的执行过程以及Grunt加载原理

    通过本篇你可以了解到: 1 grunt-cli的执行原理 2 nodeJS中模块的加载过程 Grunt-cli原理 grunt-cli其实也是Node模块,它可以帮助我们在控制台中直接运行grunt命 ...

  9. F12调试打开时,出现很多多余内容问题解决

    关闭vs2013的browserlink功能即可: <appSettings> <add key="vs:EnableBrowserLink" value=&qu ...

  10. HOW TO REMOTELY DEBUG APPLICATION RUNNING ON TOMCAT FROM WITHIN INTELLIJ IDEA

    This post would look into how to tackle and debug issues in scenarios where they only occur in produ ...