linux之iptables

来源:互联网 发布:android源码 小米商城 编辑:程序博客网 时间:2024/04/30 10:02
1. 查看网络监听的端口:netstat -tunlp2. 查看本机的路由规则:routestack@ubuntu:~$ route -nKernel IP routing tableDestination     Gateway         Genmask         Flags Metric Ref    Use Iface0.0.0.0         10.217.99.1     0.0.0.0         UG    0      0        0 eth010.217.99.0     0.0.0.0         255.255.255.0   U     1      0        0 eth0169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 eth0192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0192.168.56.0    0.0.0.0         255.255.255.0   U     0      0        0 vboxnet0192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0Destination-->networkGenmask-->netmask这两者组成一个完整的网段Gateway如果为0.0.0.0,表示该路由直接由本机传送出去,即通过局域网的MAC直接传送,如果显示IP的话,表示改路由要经过路由器才能传送出去。Flags:有多个标志,代表的意义如下:U (route is up):该路由是启动的;H (target is a host):目标是一部主机 (IP) 而非网域;G (use gateway):需要透过外部的主机 (gateway) 来转递封包;R (reinstate route for dynamic routing):使用动态路由时,恢复路由信息的标志;D (dynamically installed by daemon or redirect):已经由服务或转 port 功能设定为动态路由M (modified from routing daemon or redirect):路由已经被修改了;! (reject route):这个路由将不会被接受(用来抵挡不安全的网域!)Iface这个路由传递封包的接口。路由过程是有顺序的,从小网络传送到大网络,当最后没有合适的路由可以匹配时,就使用default路由,即destination是0.0.0.0的路由3./etc/services文件:port和service的对应关系4.查看本地的网络服务netstat -tunlp  #列出正在监听的网络服务和端口netstat -tunp   #列出已联机的网络联机状态和端口kill -9 PID     #杀掉sshd进程,即可关闭该远程连接5.查看网络上的开放的网络服务:nmap IPnmap localhost6. 如何查阅 rpcbind 这个程序一开机就执行? 如果开机就执行,如何将他改为开机时不要启动? 如何立即关闭这个 rpcbind 服务?1) chkconfig --list | grep rpcbind   runlevel   确认一下你的环境与 rpcbind 是否启动2) 如果有启动,可透过chkconfig --level 35 rpcbind off来设定开机时不要启动;3) 可以透过 /etc/init.d/rpcbind stop 来立即关闭它7.iptables1) 查看防火墙格式化输出iptables [-t tables] [-L] [-nv]选项与参数:-t :后面接 table ,例如 nat 或 filter ,若省略此项目,则使用默认的filter-L :列出目前的 table 的规则-n :不进行 IP 与 HOSTNAME 的反查,显示讯息的速度会快很多!-v :列出更多的信息,包括通过该规则的封包总位数、相关的网络接口等eg:查看filter表的chainstack@ubuntu:~$ sudo iptables -L -nChain INPUT (policy ACCEPT)target     prot opt source               destination         ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:53ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:53ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:67ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:67Chain FORWARD (policy ACCEPT)target     prot opt source               destination         ACCEPT     all  --  0.0.0.0/0            192.168.122.0/24     state RELATED,ESTABLISHEDACCEPT     all  --  192.168.122.0/24     0.0.0.0/0           ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachableREJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachableChain OUTPUT (policy ACCEPT)target     prot opt source               destination  说明:target:代表进行的动作, ACCEPT 是放行,而 REJECT 则是拒绝,此外,尚有 DROP (丢弃) 的项目!prot:代表使用的封包协议,主要有 tcp, udp 及 icmp 三种封包格式;opt:额外的选项说明source :代表此规则是针对哪个『来源 IP』进行限制?destination :代表此规则是针对哪个『目标 IP』进行限制?以上的每个chain中的规则,对封包进行过滤的时候是有顺序的,按从上到下的顺序,只要有一个规则符合,那么就可以通过防火墙,如果一直不符合,就一直向下继续匹配,如果都不符合,那么就执行预设的动作。可以看到FORWORD的最后两个rule的target是REJECT,这说明,如果前面的rule都不符合,那么到这条规则的时候,就拒绝。查看nat表的chainstack@ubuntu:~$ sudo iptables -t nat -L -n2) 查看完整的防火墙规则:查看所有的表的规则stack@ubuntu:~$ sudo iptables-save# Generated by iptables-save v1.4.12 on Fri Jan 18 14:26:06 2013*nat:PREROUTING ACCEPT [512:70935]:INPUT ACCEPT [371:61561]:OUTPUT ACCEPT [2352:148261]:POSTROUTING ACCEPT [2343:147796]-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p tcp -j MASQUERADE --to-ports 1024-65535-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p udp -j MASQUERADE --to-ports 1024-65535-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -j MASQUERADECOMMIT# Completed on Fri Jan 18 14:26:06 2013# Generated by iptables-save v1.4.12 on Fri Jan 18 14:26:06 2013*mangle:PREROUTING ACCEPT [26824:23528990]:INPUT ACCEPT [26682:23519288]:FORWARD ACCEPT [2:656]:OUTPUT ACCEPT [22885:4162471]:POSTROUTING ACCEPT [23023:4179687]-A POSTROUTING -o virbr0 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fillCOMMIT# Completed on Fri Jan 18 14:26:06 2013# Generated by iptables-save v1.4.12 on Fri Jan 18 14:26:06 2013*filter:INPUT ACCEPT [26671:23518302]:FORWARD ACCEPT [2:656]:OUTPUT ACCEPT [22874:4161485]-A INPUT -i virbr0 -p udp -m udp --dport 53 -j ACCEPT-A INPUT -i virbr0 -p tcp -m tcp --dport 53 -j ACCEPT-A INPUT -i virbr0 -p udp -m udp --dport 67 -j ACCEPT-A INPUT -i virbr0 -p tcp -m tcp --dport 67 -j ACCEPT-A FORWARD -d 192.168.122.0/24 -o virbr0 -m state --state RELATED,ESTABLISHED -j ACCEPT-A FORWARD -s 192.168.122.0/24 -i virbr0 -j ACCEPT-A FORWARD -i virbr0 -o virbr0 -j ACCEPT-A FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable-A FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachableCOMMIT# Completed on Fri Jan 18 14:26:06 2013查看某一个表的规则stack@ubuntu:~$ sudo iptables-save -t filter# Generated by iptables-save v1.4.12 on Fri Jan 18 14:29:14 2013*filter:INPUT ACCEPT [26774:23531129]:FORWARD ACCEPT [2:656]:OUTPUT ACCEPT [22956:4173130]-A INPUT -i virbr0 -p udp -m udp --dport 53 -j ACCEPT-A INPUT -i virbr0 -p tcp -m tcp --dport 53 -j ACCEPT-A INPUT -i virbr0 -p udp -m udp --dport 67 -j ACCEPT-A INPUT -i virbr0 -p tcp -m tcp --dport 67 -j ACCEPT-A FORWARD -d 192.168.122.0/24 -o virbr0 -m state --state RELATED,ESTABLISHED -j ACCEPT-A FORWARD -s 192.168.122.0/24 -i virbr0 -j ACCEPT-A FORWARD -i virbr0 -o virbr0 -j ACCEPT-A FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable-A FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachableCOMMIT# Completed on Fri Jan 18 14:29:14 2013对比stack@ubuntu:~$ sudo iptables -L -nChain INPUT (policy ACCEPT)target     prot opt source               destination         ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:53ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:53ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:67ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:67Chain FORWARD (policy ACCEPT)target     prot opt source               destination         ACCEPT     all  --  0.0.0.0/0            192.168.122.0/24     state RELATED,ESTABLISHEDACCEPT     all  --  192.168.122.0/24     0.0.0.0/0           ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachableREJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachableChain OUTPUT (policy ACCEPT)target     prot opt source               destination    3) 清除防火墙iptables [-t tables] [-FXZ]选项与参数:-F :清除所有的已订定的规则;-X :杀掉所有使用者 "自定义" 的 chain (应该说的是 tables )啰;-Z :将所有的 chain 的计数与流量统计都归零4) 定义预设的政策(policy)当你的封包不在你设定的规则之内时,则该封包的通过与否,是以 Policy 的设定为准。即封包不符合你定义的所有规则的话,执行什么操作。有两个可选:ACCEPT, DROP。policy是和chain对应的,一个chain对应一个policy.iptables [-t table] -P [INPUT,OUTPUT,FORWARD] [ACCEPT,DROP]选项与参数:-P : 定义链( chain )。注意,这个 P 为大写!ACCEPT : 该封包可接受。DROP : 该封包直接丢弃,不会让 client 端知道为何被丢弃。eg:iptables -P INPUT DROP  #将filter表的INPUT链的预设政策设置为DROP5) 为某个chain增加规则iptables [-AI 链名] [-io 网络接口] [-p 协议] [-s 来源 IP/网域] [-d 目标 IP/网域] -j [ACCEPT|DROP|REJECT|LOG]选项与参数:-AI 链名:针对某的链进行规则的 "插入" 或 "累加"-A :新增加一条规则,该规则增加在原本规则的最后面。例如原本已经有四条规则,使用 -A 就可以加上第五条规则!-I :插入一条规则。如果没有指定此规则的顺序,默认是插入变成第一条规则。例如原本有四条规则,使用 -I 则该规则变成第一条,而原本四条变成 2~5 号。链 :有 INPUT, OUTPUT, FORWARD 等,-io 网络接口:设定封包进出的接口规范-i :封包所进入的那个网络接口,例如 eth0, lo 等接口。需与 INPUT 链配合;-o :封包所传出的那个网络接口,需与 OUTPUT 链配合;-p 协议:设定此规则适用于哪种封包格式,主要的封包格式有: tcp, udp, icmp 及 all 。-s 来源 IP/网域:设定此规则之封包的来源项目,可指定单纯的 IP 或包括网域,   例如: IP:192.168.0.100,网域:192.168.0.0/24, 192.168.0.0/255.255.255.0 均可。   若规范为『不许』时,则加上 ! 即可,例如:   -s ! 192.168.100.0/24 表示不许 192.168.100.0/24 之封包来源;-d 目标 IP/网域:同 -s ,只不过这里指的是目标的 IP 或网域。-j :后面接动作,主要的动作有接受(ACCEPT)、丢弃(DROP)、拒绝(REJECT)及记录(LOG),    LOG 这个动作仅在进行记录而已,并不会影响到这个封包的其他规则比对的。eg:#1. 给filter表的INPUT链加上一条规则,设定 lo 成为受信任的装置,亦即进出 lo 的封包都予以接受iptables -A INPUT -i lo -j ACCEPT#2. 给filter表的INPUT链加上一条规则,设定来自eth1接口的192.168.100.0/24网段的封包都接受iptables -A INPUT -i eth1 -s 192.168.100.0/24 -j ACCEPT#3. 给filter表的INPUT链加上一条规则,设定来自eth1接口的 192.168.100.230 IP的封包都丢弃iptables -A INPUT -i eth1 -s 192.168.100.230 -j DROP#4. 记录来自192.168.2.200这个IP的请求记录iptables -A INPUT -s 192.168.2.200 -j LOG6) 设定规则具体到端口iptables [-AI 链名] [-io 网络接口] [-p tcp|udp] \         [-s 来源 IP/网域] [--sport 端口范围]  \         [-d 目标 IP/网域] [--dport 端口范围] \      -j [ACCEPT|DROP|REJECT|LOG]因为仅有 tcp 与 udp 封包具有端口,因此你想要使用--dport,--sport 时,得要加上 -p tcp 或 -p udp 的参数才会成功.eg:#1. 只要来自 192.168.1.0/24 的 1024:65535 端口的封包,且想要联机到本机的 ssh port 就予以抵挡iptables -A INPUT -i eth0 -p tcp -s 192.168.1.0/24 --sport 1024:65534 --dport ssh -j DROP#2. 将来自任何地方来源 port 1:1023 的主动联机到本机端的 1:1023 联机丢弃iptables -A INPUT -i eth0 -p tcp --sport 1:1023 --dport 1:1023 --syn -j DROP7) 外挂模块iptables -A INPUT [-m state] [--state 状态]选项与参数:-m :一些 iptables 的外挂模块,主要常见的有:    state :状态模块    mac:网络卡硬件地址 (hardware address)--state :一些封包的状态,主要有:    INVALID:无效的封包,例如数据破损的封包状态    ESTABLISHED:已经联机成功的联机状态;    NEW:想要新建立联机的封包状态;    RELATED:这个最常用!表示这个封包是与我们主机发送出去的封包有关--mac-source :就是来源主机的 MAC 啦!eg:#1. 只要已建立或相关封包就予以通过,只要是不合法封包就丢弃 $ iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT $ iptables -A INPUT -m state --state INVALID -j DROP#2. 针对局域网络内的 aa:bb:cc:dd:ee:ff 主机开放其联机$ iptables -A INPUT -m mac --mac-source aa:bb:cc:dd:ee:ff -j ACCEPT#3. 接受ssh联机$ iptables -A INPUT -m state --state NEW -j ACCEPT8) icmp封包规则iptables -A INPUT [-p icmp] [--icmp-type 类型] -j ACCEPT选项与参数:--icmp-type :后面必须要接 ICMP 的封包类型,也可以使用代号,例如 8 代表 echo request 的意思0Echo Reply (代表一個回應信息)3Destination Unreachable (表示目的地不可到達)4Source Quench (當 router 的負載過高時,此類別碼可用來讓發送端停止發送訊息)5Redirect (用來重新導向路由路徑的資訊)8Echo Request (請求回應訊息)11Time Exceeded for a Datagram (當資料封包在某些路由傳送的現象中造成逾時狀態,此類別碼可告知來源該封包已被忽略的訊息)12Parameter Problem on a Datagram (當一個 ICMP 封包重複之前的錯誤時,會回覆來源主機關於參數錯誤的訊息)13Timestamp Request (要求對方送出時間訊息,用以計算路由時間的差異,以滿足同步性協定的要求)14Timestamp Reply (此訊息純粹是回應 Timestamp Request 用的)15Information Request (在 RARP 協定應用之前,此訊息是用來在開機時取得網路信息)16Information Reply (用以回應 Infromation Request 訊息)17Address Mask Request (這訊息是用來查詢子網路 mask 設定信息)18Address Mask Reply (回應子網路 mask 查詢訊息的)eg:#接受所有的icmp请求$ iptables -A INPUT -p icmp -j ACCEPT9) 删除某一个规则我们可以用两种办法中的任一种删除规则。首先,因为知道这是INPUT链中唯一的规则,我们用编号删除:#删除INPUT链中的编号为1的规则$ iptables -D INPUT 1第二种办法是 -A 命令的映射,不过用-D替换-A。当你的链中规则很复杂,而你不想计算它们的编号的时候这就十分有用了。这样的话,我们可以使用:$ iptables -D INPUT -s 127.0.0.1 -p icmp -j DROP-D的语法必须和-A(或者-I或者-R)一样精确。如果链中有多个相同的规则,只会删除第一个。10) 将iptables规则开机自启动http://www.hjwahjl.net/archives/67


原创粉丝点击