Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
603
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
24
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. An iptables guide & tutorial - iptablesrocks.org home | syntax & structure | examples | faq | contact | links Welcome to Iptablesrocks.orgWelcome to iptablesrocks.org! Iptablesrocks was created to provide a publicly available, easy to understand guide and tutorial for the installation andconfiguration of iptables. Iptables is a linux package for managing IPv4 (and optionally IPv6) packet filtering and NAT (Network Address Translation).Iptables can be configured to function as a firewall, a NAT mechanism, a packet filter or all 3 at once. The diversity of capabilities possible with iptablesmakes it a secure, stable and economical alterative to hardware based firewalls and routers or costly 3rd party firewall software. Iptables can alsoserve as a rendundant firewall in conjunction with a hardware firewall, providing you with an extra layer of security. Iptablesrocks.org covers theinstallation of iptables in a Redhat environment, the syntax and structure associated with iptables and a collection a pre-configured iptablesconfigurations for a variety of applications. This site is currently under development. Enjoy! The iptablesrocks.org iptables firewall setup guide Quick links to need specific iptables configurationsAn overview of the iptablesrocks firewall general web server firewallStep 1: System requirements & Pre-configuration linux gateway w/DSL connectionStep 2: Deploying a safety net. linux gateway w/Cable connectionStep 3: The iptables firewall ruleset sever to server trusted connectionsStep 4: Testing functionalityStep 5: Installing Iptables Log AnalyzerStep 6: Maintaining & modifying your firewall and starting it on bootStep 7: FeedbackA word of advise: Before you make any changes to your iptables configuration, you should read about pre-configuration precautions! 2666 home | syntax & structure | examples | faq | contact | links Site last modified: February 13, 2004 15:27:51 http://www.iptablesrocks.org/ [2/13/2004 8:04:42 PM]
  • 2. Iptablesrocks.org - Syntax & Structure home | syntax & structure | examples | faq | contact | links Syntax & StructureThe iptables manual page is the best resource for learning all of the possible syntax options for iptables:iptables man page An iptables syntax quick referenceTaking a look at what you haveiptables -L [chain] - Lists your current iptables configurationMaking modificationsiptables -A [chain] - Append a rule to a desired chain in the current configurationiptables -D [chain] - Delete a rule from a desired chain in the current configurationiptables -R [chain] - Replace an existing rule from a desired chain in the current configurationiptables - I [chain] - (thats a capital I as in Insert) Insert a new rule into a desired chain of the current configurationiptables -N [chain] - Create a new chainiptables -X [chain] - Delete a chainGetting rid of all rules and starting overiptable -X - Delete all chainsiptables -F - Flush the table of all contentsImporting & Exportingiptables-save > filename - exports the current iptables configuration to a flat file.iptables-restore < filename - imports an iptables configuration from a flat file and overwrites the current configuration.More syntax & structure information coming soon! home | syntax & structure | examples | faq | contact | links http://www.iptablesrocks.org/syntax/ (1 of 2) [2/13/2004 8:04:43 PM]
  • 3. Iptablesrocks.org - Syntax & Structure Site last modified: February 13, 2004 15:27:51http://www.iptablesrocks.org/syntax/ (2 of 2) [2/13/2004 8:04:43 PM]
  • 4. Iptablesrocks.org - Examples home | syntax & structure | examples | faq | contact | links Iptables Ruleset ExamplesThis page contains already configured examples of several types of iptables configurations for a variety of different purposes. Feel free to use them asis or make any needed adjustments to suit your particular needs.A word of caution: Before you make any changes to your iptables configuration, you should read about pre-configuration precautions!Example 1 - iptables setup for a full service web serverSummary: A hearty iptables configuration geared for web servers running web services (http and https), mail services, mysql, ftp servicesand dns services.When running a typical web server, you need a firewall that is secure and offers protection, but you also need one that allows all needed traffic to beable to enter and leave the server so that your servers day to day operations can carry on unimpeded. This particular iptables configuration does thefollowing:1. Uses the "mangle" portion of the table to effectively block and/or confuse most port scans. These rules deal address FIN,SYN,RST,PSH,ACK,URGFIN,PSH and URG methods.2. Establishes a locked down and secure foundation by initially blocking all incoming, outgoing and forwarded packets COMPLETELY.3. With all incoming packets dropped by default, it then grants incoming access to a select number of ports. These ports are ports that a typical webserver might allow.Open inbound ports include: 20 & 21 (ftp), 22 (ssh), 25 (smtp), 53 (dns), 80 (http), 110 (pop), 143 (imap), 443 (https), 993 (imaps)4. With all outbound packets dropped by default, it then grants outbound access to a select number of ports. These ports are posts that a typical webserver might allow.Open outbound ports include: 20 & 21 (ftp), 22 (ssh), 25 (smtp), 43 (whois), 53 (dns), 80 (http), 110 (pop), 143 (imap), 443 (https), 993 (imaps)5. Both inbound and outbound connections are required to be in a "related and established" state. The "related and established" state requirement willrequire you to add the "ip_conntrack_ftp" module into your servers configuration. This is typically done with the following command:insmod ip_conntrack_ftp6. ICMP packet types 3, 8 and 11 are dropped by default for all inbound traffic. This makes your server unpingable and reduces the chance of pingICMP based attacks. Pings are allowed for all outbound traffic.7. Unauthorized inbound and outbound traffic is logged.Example 2 - iptables setup for linux gateway on DSL connectionExample 3- iptables setup for linux gateway on a cable internet connection home | syntax & structure | examples | faq | contact | links Site last modified: February 13, 2004 15:27:51 http://www.iptablesrocks.org/examples/ (1 of 2) [2/13/2004 8:04:44 PM]
  • 5. Iptablesrocks.org - Exampleshttp://www.iptablesrocks.org/examples/ (2 of 2) [2/13/2004 8:04:44 PM]
  • 6. iptablesrocks.org - FAQ home | syntax & structure | examples | faq | contact | links Frequently Asked Questions q How can I view my current iptables ruleset? q How do I import an iptables script into my servers iptables ruleset? q How do I export my servers iptables rulset to flat iptables script? q How can I open up a port on my firewall? q How can I close a port on my firewall? q How can I completely block a host from reaching my server? q How can I block a host from a specific port on my server, while allowing access to all other ports? q How can I make mty firewall start up automatically when my server is booted? q Ive installed the iptablesrocks.org firewall and its working, but now I cannot telnet to my server! Whats wrong? q Ive already installed the Qmailrocks.org qmail install on my server. How should my iptables firewall config look?Q: How can I view my current iptables ruleset?A: The command "iptables -L" will display your servers current iptables ruleset.Q: How do I import an iptables script into my servers iptables ruleset?A: The command "iptables-restore < /path/to/firewall_script" will import a flat file iptables script into the servers ruleset.Q: How do I export my servers iptables rulset to flat iptables script?A: The command "iptables-save > /path/to/firewall_script" will export the current iptables ruleset to a flat file called "firewall_script".Q: Ive installed the iptablesrocks.org firewall and its working, but now I cannot telnet to my server! Whats wrong?A: The iptablesrocks.org firewall does not allow telnet connections on port 23 by default. Whty? Simple. Telnet is dumb and totally insecure. Dont useit. If youve been using telnet in the past to connect to your server, its time to grow up and start using SSH instead. However, if you insist on usingtelnet, you can simply add a rule to your firewall script to allow connections on port 23 (telnet).Q: Ive already installed the Qmailrocks.org qmail install on my server. How should my iptables firewall config look?A: If youve installed qmail according to qmailrocks.org, the default iptablesrocks firewall configuration should work just fine with one exception. Youwill want to add a rule to open port 783 both on the INPUT and OUTPUT chains so that Spamassassin can work. home | syntax & structure | examples | faq | contact | links Site last modified: February 13, 2004 15:27:51 http://www.iptablesrocks.org/faq/ [2/13/2004 8:04:44 PM]
  • 7. Iptablesrocks.org - Contact home | syntax & structure | examples | faq | contact | links Contact Iptablesrocks.org If you would like to contact me, please fill out the form below and then click "Send It!". Your name: Your e-mail: Comments/Questions: Send It! home | syntax & structure | examples | faq | contact | links Site last modified: February 13, 2004 15:27:51http://www.iptablesrocks.org/contact/ [2/13/2004 8:04:45 PM]
  • 8. Iptablesrocks.org - Links home | syntax & structure | examples | faq | contact | links LinksA collection of useful links.The Netfilter/Iptables Project - http://www.netfilter.org/Linuxguruz Iptables Tutorial - http://www.linuxguruz.com/iptables/howto/iptables-HOWTO.htmlQmailrocks.org - My qmail installation guideDjbdnsrocks.org - My djbdns installation guide home | syntax & structure | examples | faq | contact | links Site last modified: February 13, 2004 15:27:51 http://www.iptablesrocks.org/links/ [2/13/2004 8:04:45 PM]
  • 9. iptablesrocks.org - Maintaining, modifying and more... home | syntax & structure | examples | faq | contact | links The iptablesrocks.org iptables firewall setup guideMaintaining & modifying your firewall and starting it on boot:MaintenanceMaintaining your iptables firewall is pretty easy. The only thing you will want to keep an eye on is the logs at /var/log/firewall. The logs can let you knowwhen your server is being probed or when an attack is being attempted, this allowing you to take appropriate action. Once you start viewing your logs,you are going to notice that almost every hour of every day someone is going to be trying to gain access to your server, find an exploit on your serveror attack your server. This is normal. Attackers simply scan entire networks for vulnerable servers, so dont take scans and attempted intrusionspersonally. Every publicly available server out there gets probed and scanned all the time, so dont think you are special and that you need to call theFBI or something rash like that. The fact is that anytime your see unsuccessful attempts to break into your server or attack it, thats a good thingbecause it means that the attackers were not able to succeed. It means your server is secure and your firewall is working. In other words, failures thatare logged are a sign of a secure server.You may also want to make sure that you have a log rotation schedule set up for the firewall logs. The logs can get quite large, so you will want tokeep them in check by rotating them out on a regular basis.ModificationsOK, so youve got your firewall up and running. But what if you need to make a change to the rules? What if you need to open up another port? What ifyou want to close a certain unused port? What if you want to block someone from your server? Get the answers right here.What if I want to open another port?While it is possible to append rules to your live iptables configuration, I find that the best way to make changes is to change the firewall script itself andthen re-import the script back into the iptables configuration. In terms of this sites setup, this means that you will want to edit the /root/primary_firewallfile. Within this config file you can add rules or remove rules and then import the new firewall into the iptables ruleset.So, lets take an exampleExample: I want to allow inbound "tcp" traffic to port 139To do this you would add the following line to the "INPUT" section of the /root/primary_firewall script:-A INPUT -p tcp -m tcp --dport 139 -j ACCEPTLets go over what this line does...-A - this tells iptables to "append" the new rule to the current iptables ruleset.INPUT - The new rule will be appended to the "INPUT" portion of the ruleset, which controls inbound server traffic.-p - Indicates what protocol the rule applies to. Popular protocols are "tcp", "udp", "icmp" and several others.-m - Indicates a matching protocal value. Usually, this is set to the same value as the -p flag.--dport - Specifies the destination port to which the traffic will be directed. In this case, its port 139.-j - Instructs the firewall to "jump" to specified state. In this case, request to TCP port 139 "jump" to "ACCEPT" and are threfore accepted and allowedto pass through the firewall.ACCEPT - As denoted above, this is the state that the rule "jumps" to. In the example above, any inbound traffic to TCP port 139 will "jump" to an"ACCEPT" state, and thus will be able to pass through the firewall.So the breakdown above should tell you that the rule we are adding is going to allow all inbound traffic to TCP port 139. Once you add that line to the http://www.iptablesrocks.org/guide/maintain.php (1 of 3) [2/13/2004 8:04:47 PM]
  • 10. iptablesrocks.org - Maintaining, modifying and more..."INPUT" section of the firewall script, you can then import the new firewall with the following command:iptables-restore < /root/primary_firewallWow, now wasnt that easy?What if I want to close a port?The answer to this is similar to the previous question. However, you need to remember that your firewall, as it stands now, automatically blocks ALLinbound, outbound and fowarded traffic by default. The only way that a port gets opened is if there is a rule telling the firewall to open that port.Lets take an example...Example: I was to close TCP port 143 inbound.In the firewall script that comes with this guide, you will notice the following entry that open up inbound traffic to TCP port 143 (For IMAP). That rulelooks like this:-A INPUT -p tcp -m tcp --dport 143 -j ACCEPTWell, if you wanted to close port 143, all you would have to do is edit the firewall script at /root/primary_firewall and remove that line. Once the line isgone and youve saved the changes, you would activate the change by re-importing the firewall script back into the iptables ruleset like so:iptables-restore < /root/primary_firewallNow wasnt that easy?Now, lets take another example so that I can demonstrate something that you DONT need to worry about.Example: I want to block all inbound traffic to TCP port 3389.Again, lets take the firewall that comes with this guide. All of the sudden you get it in your head that you need to close TCP port 3389. What to do?Well, if you take a look at the firewall script you will notice that TCP port 3389 is not mentioned anywhere in the script and, to be more specific, it is notmentioned in the "INPUT" portion of the script. Well, since our firewall is configured to block ALL traffic by default and only open ports on request, 3389is ALREADY CLOSED. In other words, you dont need to worry about that port because it has been automatically closed by the firewall. The only wayit would be open is if you created a specific rule that rquested that the port be open. Get it?What if I want to completely block someone from my server?The procedure for this is just the same as the ones above. Basically, all youre going to do is edit the firewall script, add a rule to block whoever, savethe changes and then re-import the firewall script back into the servers ruleset. Easy as hell.So lets take an example:Example: I want to block anyone from the host 1.2.3.4 from accessing my server.Open the /root/primary_firewall script and add the following line to the INPUT section of the script:-A INPUT -s 1.2.3.4 -j DROPNow lets break that down to see what this rule is doing..-A - this tells iptables to "append" the new rule to the current iptables ruleset.INPUT - The new rule will be appended to the "INPUT" portion of the ruleset, which controls inbound server traffic.-s - Specifies the source address of the request. In this case we are specifying 1.2.3.4 as the source.-j - Instructs the firewall to "jump" to specified state. In this case, request coming from source 1.2.3.4 "jump" to a DENY state, thus blocking anyonefrom that addresss from accessing your server at all. http://www.iptablesrocks.org/guide/maintain.php (2 of 3) [2/13/2004 8:04:47 PM]
  • 11. iptablesrocks.org - Maintaining, modifying and more...DROP - As denoted above, this is the state that the rule "jumps" to. In the example above, any traffic to coming from 1.2.3.4 will "jump" to an "DROP"state, and thus will be blocked.What if I only want to block someone from accessing a certain port, while allowing them to access all others?This would just be a more specific version of the above rule. In this case, you would specify the destination port and the protocal type with the "-p", "-m" and "--dport" flags. If you wanted to block anyone from 1.2.3.4 from accessing port 25 on your server, it would look like this:-A INPUT -s 1.2.3.4 -p tcp -m tcp --dport 25 -j DROPEasy enough, right?The previous questions are only a sampling of the many, many modifications and customizations that can be made to your firewall. Check out theiptables man page (man iptables) for the whole gamut.As I said before, always make sure you enable your iptables "safetynet" before you start playing with your firewall setup. You dont want to accdientallylock yourself out of your server!Starting your fiewall on bootThe final part of this setup guide will cover the integration of your firewall into the servers boot process. If you would like your firewall to start on bootand work correctly, you will want to do the following:cp /root/primary_firewall /etc/sysconfig/iptablesThis will cause your iptables config script to be loaded at boot time.The last step is to make sure that the "ip_conntrack_ftp" kernel moduleloads on boot as well to ensure correct FTP functionality.vi /etc/rc.localadd the following line:/sbin/insmod ip_conntrack_ftpSave and exit the file.Thats it! Youre all done. Enjoy your new firewall! Please take a moment to go to the next page and provide me with some feedback and/orcommentary. Proceed to the next step home | syntax & structure | examples | faq | contact | links Site last modified: February 13, 2004 15:27:51 http://www.iptablesrocks.org/guide/maintain.php (3 of 3) [2/13/2004 8:04:47 PM]
  • 12. iptablesrocks.org - Feedback home | syntax & structure | examples | faq | contact | links The iptablesrocks.org iptables firewall setup guideFeedback: Now that youve finished the iptablesrocks.org iptables setup guide, please provide me with some feedback. What do you think of the setup guide? It stinks! Not very good It was ok Very helpful Excellent Your Name: (required) Your E-mail: (required) Any comments/suggestions? May we post your comments on this website? Yes No (your name & e-mail address will not be posted) Submit Feedback A note on privacy: Some people worry about providing their e-mail address on the form. You dont need to worry. The only reason I require your e-mail address is so that I can personally reply to any questions or comments you may have. I wont put your e-mail address on any list or anything like that. Im hate spam just as much as you do. :) home | syntax & structure | examples | faq | contact | links Site last modified: February 13, 2004 15:27:51 http://www.iptablesrocks.org/guide/feedback.php [2/13/2004 8:04:47 PM]
  • 13. iptablesrocks.org - safety precautions home | syntax & structure | examples | faq | contact | links iptables pre-configuration safety precautionsMaking changes to your servers firewall/routing configuration can be very tricky. One simple mistake can result in your being completely locked out ofyour server. If the server you are working on is remotely hosted, this can cause prolonged downtime and a tech support nightmare. In short, it can be amajor pain in the ass.For this reason, anytime you are making changes to your servers firewall or routing config via iptables, you should first take a few minutes toimplement some "disaster recovery" measures that can be automatically triggered should you accidentally lock yourself out of your server.Whenver Im making any major changes to my firewall, I like to implement a "disaster recovery" measure by means of a crontab entry. I do this bycreating a simple crontab entry that runs every 15 minutes or so. This crontab entry runs a command which simply resets my servers iptablesconfiguration to a completely open setting. That is, it sets my iptables configuration so that the server will accept all incoming, outgoing and forwardrequests. In this way, should I screw up at some point and lock myself out of my server, I will only need to wait a maximum of 10 minutes before thebad firewall rules will be dropped and Ill be able to shell into my server again. If you are a newbie at iptables, or even a seasoned pro, this little safetymeasure can be a lifesaver. Everyone makes mistakes every now and then, and this measure will ensure that a mistake made in your firewallconfiguration doesnt turn into a nightmare!So heres how you do it....Log into your server as the root user.First, create a iptables import script that, when imported, will reset the iptables configuration to a default "accept all" state:vi /root/iptables.open*filter:INPUT ACCEPT [164:15203]:FORWARD ACCEPT [0:0]:OUTPUT ACCEPT [147:63028]COMMIT*mangle:PREROUTING ACCEPT [164:15203]:INPUT ACCEPT [164:15203]:FORWARD ACCEPT [0:0]:OUTPUT ACCEPT [147:63028]:POSTROUTING ACCEPT [147:63028]COMMIT*nat:PREROUTING ACCEPT [14:672]:POSTROUTING ACCEPT [9:684]:OUTPUT ACCEPT [9:684]COMMITNow save and exit.Now lets set up a crontab entry that will import the reset configuration every 15 minutes...crontab -e*/15 * * * * /sbin/iptables-restore < /root/iptables.openSave and exit from the crontab editorOk. All done.Now lets review what this is going to do to your server...Once you enable the crontab, your server is going to reset its iptables configuration every 15 minutes. This means that every 15 minutes you will lose http://www.iptablesrocks.org/precautions.php (1 of 2) [2/13/2004 8:04:48 PM]
  • 14. iptablesrocks.org - safety precautionsany previous settings and you server will be in a "accept all" state where it accepts any incoming, outgoing and forward packet requests. You certainlydo not want to leave this crontab running if you are not actively working on your iptables configuration. The sole of this crontab is to provide a safetynet should you accidentally screw up and lock yourself out of your server while you are implementing or testing new iptables configurations. With thiscrontab running, should you lock yourself out you will only have to wait a maximum of 15 minutes before the iptables configuration resets and you areable to log into your server again.You should always disable this crontab entry once you are finished modifying your iptables configuration. home | syntax & structure | examples | faq | contact | links Site last modified: February 13, 2004 15:27:51 http://www.iptablesrocks.org/precautions.php (2 of 2) [2/13/2004 8:04:48 PM]
  • 15. http://www.iptablesrocks.org/examples/scripts/web_server.config# import this saved configuration into your iptables configuration with the following command:# iptables-restore < web_server.config*nat:PREROUTING ACCEPT [127173:7033011]:POSTROUTING ACCEPT [31583:2332178]:OUTPUT ACCEPT [32021:2375633]COMMIT*mangle:PREROUTING ACCEPT [444:43563]:INPUT ACCEPT [444:43563] :FORWARD ACCEPT [0:0]:OUTPUT ACCEPT [402:144198]:POSTROUTING ACCEPT [402:144198]-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP-A PREROUTING -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP-A PREROUTING -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP-A PREROUTING -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP-A PREROUTING -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROPCOMMIT*filter:INPUT DROP [1:242]:FORWARD DROP [0:0]:OUTPUT DROP [0:0]:icmp_packets - [0:0]-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT-A INPUT -p tcp -m tcp --dport 20 -j ACCEPT-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT-A INPUT -p tcp -m tcp --dport 25 -j ACCEPT-A INPUT -p tcp -m tcp --dport 43 -j ACCEPT-A INPUT -p udp -m udp --dport 53 -j ACCEPT-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT-A INPUT -p tcp -m tcp --dport 110 -j ACCEPT-A INPUT -p udp -m udp --dport 123 -j ACCEPT-A INPUT -p tcp -m tcp --dport 143 -j ACCEPT-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT-A INPUT -p tcp -m tcp --dport 783 -j ACCEPT-A INPUT -p tcp -m tcp --dport 993 -j ACCEPT-A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT-A INPUT -p tcp -m tcp --dport 12000 -j ACCEPT-A INPUT -p tcp -m tcp --dport 15000 -j ACCEPT-A INPUT -s 127.0.0.1 -j ACCEPT-A INPUT -p icmp -j icmp_packets-A INPUT -j LOG --log-prefix "IPTABLES-IN Default Drop: " --log-level 7-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT-A OUTPUT -p tcp -m tcp --dport 20 -j ACCEPT http://www.iptablesrocks.org/examples/scripts/web_server.config (1 of 2) [2/13/2004 8:04:48 PM]
  • 16. http://www.iptablesrocks.org/examples/scripts/web_server.config-A OUTPUT -p tcp -m tcp --dport 21 -j ACCEPT-A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT-A OUTPUT -p tcp -m tcp --dport 23 -j ACCEPT-A OUTPUT -p tcp -m tcp --dport 25 -j ACCEPT-A OUTPUT -p tcp -m tcp --dport 43 -j ACCEPT-A OUTPUT -p udp -m udp --dport 53 -j ACCEPT-A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT-A OUTPUT -p tcp -m tcp --dport 110 -j ACCEPT-A OUTPUT -p udp -m udp --dport 123 -j ACCEPT-A OUTPUT -p tcp -m tcp --dport 143 -j ACCEPT-A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT-A OUTPUT -p tcp -m tcp --dport 783 -j ACCEPT-A OUTPUT -p tcp -m tcp --dport 993 -j ACCEPT-A OUTPUT -p tcp -m tcp --dport 3306 -j ACCEPT-A OUTPUT -p tcp -m tcp --dport 12000 -j ACCEPT-A OUTPUT -p tcp -m tcp --dport 15000 -j ACCEPT-A OUTPUT -p tcp -m tcp --dport 2210 -j ACCEPT-A OUTPUT -d 127.0.0.1 -j ACCEPT-A OUTPUT -p icmp -j icmp_packets-A OUTPUT -j LOG --log-prefix "IPTABLES-OUT Default Drop: " --log-level 7-A icmp_packets -p icmp -m icmp --icmp-type 0 -j ACCEPT-A icmp_packets -s 127.0.0.1 -p icmp -m icmp --icmp-type 8 -j ACCEPT-A icmp_packets -p icmp -m icmp --icmp-type 8 -j DROP-A icmp_packets -p icmp -m icmp --icmp-type 3 -j ACCEPT-A icmp_packets -p icmp -m icmp --icmp-type 11 -j ACCEPTCOMMIT http://www.iptablesrocks.org/examples/scripts/web_server.config (2 of 2) [2/13/2004 8:04:48 PM]
  • 17. Manpage of IPTABLESContent-type: text/htmlIPTABLESSection: (8)Updated: Mar 09, 2002Index Return to Main ContentsNAMEiptables - administration tool for IPv4 packet filtering and NATSYNOPSISiptables [-t table] -[ADC] chain rule-specification [options]iptables [-t table] -I chain [rulenum] rule-specification [options]iptables [-t table] -R chain rulenum rule-specification [options]iptables [-t table] -D chain rulenum [options]iptables [-t table] -[LFZ] [chain] [options]iptables [-t table] -N chainiptables [-t table] -X [chain]iptables [-t table] -P chain target [options]iptables [-t table] -E old-chain-name new-chain-nameDESCRIPTIONIptables is used to set up, maintain, and inspect the tables of IP packet filter rules in the Linux kernel.Several different tables may be defined. Each table contains a number of built-in chains and may alsocontain user-defined chains.Each chain is a list of rules which can match a set of packets. Each rule specifies what to do with a packetthat matches. This is called a `target, which may be a jump to a user-defined chain in the same table.TARGETS http://www.iptablesrocks.org/syntax/man_iptables.htm (1 of 20) [2/13/2004 8:04:51 PM]
  • 18. Manpage of IPTABLESA firewall rule specifies criteria for a packet, and a target. If the packet does not match, the next rule inthe chain is the examined; if it does match, then the next rule is specified by the value of the target, whichcan be the name of a user-defined chain or one of the special values ACCEPT, DROP, QUEUE, orRETURN.ACCEPT means to let the packet through. DROP means to drop the packet on the floor. QUEUE meansto pass the packet to userspace (if supported by the kernel). RETURN means stop traversing this chainand resume at the next rule in the previous (calling) chain. If the end of a built-in chain is reached or arule in a built-in chain with target RETURN is matched, the target specified by the chain policydetermines the fate of the packet.TABLESThere are currently three independent tables (which tables are present at any time depends on the kernelconfiguration options and which modules are present).-t, --table table This option specifies the packet matching table which the command should operate on. If the kernel is configured with automatic module loading, an attempt will be made to load the appropriate module for that table if it is not already there. The tables are as follows:filter This is the default table (if no -t option is passed). It contains the built-in chains INPUT (for packets coming into the box itself), FORWARD (for packets being routed through the box), and OUTPUT (for locally-generated packets).nat This table is consulted when a packet that creates a new connection is encountered. It consists of three built-ins: PREROUTING (for altering packets as soon as they come in), OUTPUT (for altering locally-generated packets before routing), and POSTROUTING (for altering packets as they are about to go out).mangle This table is used for specialized packet alteration. Until kernel 2.4.17 it had two built-in chains: PREROUTING (for altering incoming packets before routing) and OUTPUT (for altering locally- generated packets before routing). Since kernel 2.4.18, three other built-in chains are also supported: INPUT (for packets coming into the box itself), FORWARD (for altering packets being routed through the box), and POSTROUTING (for altering packets as they are about to go out). http://www.iptablesrocks.org/syntax/man_iptables.htm (2 of 20) [2/13/2004 8:04:51 PM]
  • 19. Manpage of IPTABLESOPTIONSThe options that are recognized by iptables can be divided into several different groups.COMMANDSThese options specify the specific action to perform. Only one of them can be specified on the commandline unless otherwise specified below. For all the long versions of the command and option names, youneed to use only enough letters to ensure that iptables can differentiate it from all other options.-A, --append chain rule-specification Append one or more rules to the end of the selected chain. When the source and/or destination names resolve to more than one address, a rule will be added for each possible address combination.-D, --delete chain rule-specification-D, --delete chain rulenum Delete one or more rules from the selected chain. There are two versions of this command: the rule can be specified as a number in the chain (starting at 1 for the first rule) or a rule to match.-I, --insert chain [rulenum] rule-specification Insert one or more rules in the selected chain as the given rule number. So, if the rule number is 1, the rule or rules are inserted at the head of the chain. This is also the default if no rule number is specified.-R, --replace chain rulenum rule-specification Replace a rule in the selected chain. If the source and/or destination names resolve to multiple addresses, the command will fail. Rules are numbered starting at 1.-L, --list [chain] List all rules in the selected chain. If no chain is selected, all chains are listed. As every other iptables command, it applies to the specified table (filter is the default), so NAT rules get listed by iptables -t nat -n -L Please note that it is often used with the -n option, in order to avoid long reverse DNS lookups. It is legal to specify the -Z (zero) option as well, in which case the chain(s) will be atomically listed and zeroed. The exact output is affected by the other arguments given. The exact rules are suppressed until you use iptables -L -v-F, --flush [chain] Flush the selected chain (all the chains in the table if none is given). This is equivalent to deleting all the rules one by one.-Z, --zero [chain] Zero the packet and byte counters in all chains. It is legal to specify the -L, --list (list) option as well, to see the counters immediately before they are cleared. (See above.) http://www.iptablesrocks.org/syntax/man_iptables.htm (3 of 20) [2/13/2004 8:04:51 PM]
  • 20. Manpage of IPTABLES-N, --new-chain chain Create a new user-defined chain by the given name. There must be no target of that name already.-X, --delete-chain [chain] Delete the optional user-defined chain specified. There must be no references to the chain. If there are, you must delete or replace the referring rules before the chain can be deleted. If no argument is given, it will attempt to delete every non-builtin chain in the table.-P, --policy chain target Set the policy for the chain to the given target. See the section TARGETS for the legal targets. Only built-in (non-user-defined) chains can have policies, and neither built-in nor user-defined chains can be policy targets.-E, --rename-chain old-chain new-chain Rename the user specified chain to the user supplied name. This is cosmetic, and has no effect on the structure of the table.-h Help. Give a (currently very brief) description of the command syntax.PARAMETERSThe following parameters make up a rule specification (as used in the add, delete, insert, replace andappend commands).-p, --protocol [!] protocol The protocol of the rule or of the packet to check. The specified protocol can be one of tcp, udp, icmp, or all, or it can be a numeric value, representing one of these protocols or a different one. A protocol name from /etc/protocols is also allowed. A "!" argument before the protocol inverts the test. The number zero is equivalent to all. Protocol all will match with all protocols and is taken as default when this option is omitted.-s, --source [!] address[/mask] Source specification. Address can be either a network name, a hostname (please note that specifying any name to be resolved with a remote query such as DNS is a really bad idea), a network IP address (with /mask), or a plain IP address. The mask can be either a network mask or a plain number, specifying the number of 1s at the left side of the network mask. Thus, a mask of 24 is equivalent to 255.255.255.0. A "!" argument before the address specification inverts the sense of the address. The flag --src is an alias for this option.-d, --destination [!] address[/mask] Destination specification. See the description of the -s (source) flag for a detailed description of the syntax. The flag --dst is an alias for this option.-j, --jump target This specifies the target of the rule; i.e., what to do if the packet matches it. The target can be a user-defined chain (other than the one this rule is in), one of the special builtin targets which decide the fate of the packet immediately, or an extension (see EXTENSIONS below). If this http://www.iptablesrocks.org/syntax/man_iptables.htm (4 of 20) [2/13/2004 8:04:51 PM]
  • 21. Manpage of IPTABLES option is omitted in a rule, then matching the rule will have no effect on the packets fate, but the counters on the rule will be incremented.-i, --in-interface [!] name Name of an interface via which a packet is going to be received (only for packets entering the INPUT, FORWARD and PREROUTING chains). When the "!" argument is used before the interface name, the sense is inverted. If the interface name ends in a "+", then any interface which begins with this name will match. If this option is omitted, any interface name will match.-o, --out-interface [!] name Name of an interface via which a packet is going to be sent (for packets entering the FORWARD, OUTPUT and POSTROUTING chains). When the "!" argument is used before the interface name, the sense is inverted. If the interface name ends in a "+", then any interface which begins with this name will match. If this option is omitted, any interface name will match.[!] -f, --fragment This means that the rule only refers to second and further fragments of fragmented packets. Since there is no way to tell the source or destination ports of such a packet (or ICMP type), such a packet will not match any rules which specify them. When the "!" argument precedes the "-f" flag, the rule will only match head fragments, or unfragmented packets.-c, --set-counters PKTS BYTES This enables the administrator to initialize the packet and byte counters of a rule (during INSERT, APPEND, REPLACE operations).OTHER OPTIONSThe following additional options can be specified:-v, --verbose Verbose output. This option makes the list command show the interface name, the rule options (if any), and the TOS masks. The packet and byte counters are also listed, with the suffix K, M or G for 1000, 1,000,000 and 1,000,000,000 multipliers respectively (but see the -x flag to change this). For appending, insertion, deletion and replacement, this causes detailed information on the rule or rules to be printed.-n, --numeric Numeric output. IP addresses and port numbers will be printed in numeric format. By default, the program will try to display them as host names, network names, or services (whenever applicable).-x, --exact Expand numbers. Display the exact value of the packet and byte counters, instead of only the rounded number in Ks (multiples of 1000) Ms (multiples of 1000K) or Gs (multiples of 1000M). This option is only relevant for the -L command.--line-numbers When listing rules, add line numbers to the beginning of each rule, corresponding to that rules http://www.iptablesrocks.org/syntax/man_iptables.htm (5 of 20) [2/13/2004 8:04:51 PM]
  • 22. Manpage of IPTABLES position in the chain.--modprobe=command When adding or inserting rules into a chain, use command to load any necessary modules (targets, match extensions, etc).MATCH EXTENSIONSiptables can use extended packet matching modules. These are loaded in two ways: implicitly, when -p or--protocol is specified, or with the -m or --match options, followed by the matching module name; afterthese, various extra command line options become available, depending on the specific module. You canspecify multiple extended match modules in one line, and you can use the -h or --help options after themodule has been specified to receive help specific to that module.The following are included in the base package, and most of these can be preceded by a ! to invert thesense of the match.tcpThese extensions are loaded if `--protocol tcp is specified. It provides the following options:--source-port [!] port[:port] Source port or port range specification. This can either be a service name or a port number. An inclusive range can also be specified, using the format port:port. If the first port is omitted, "0" is assumed; if the last is omitted, "65535" is assumed. If the second port greater then the first they will be swapped. The flag --sport is a convenient alias for this option.--destination-port [!] port[:port] Destination port or port range specification. The flag --dport is a convenient alias for this option.--tcp-flags [!] mask comp Match when the TCP flags are as specified. The first argument is the flags which we should examine, written as a comma-separated list, and the second argument is a comma-separated list of flags which must be set. Flags are: SYN ACK FIN RST URG PSH ALL NONE. Hence the command iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST SYN will only match packets with the SYN flag set, and the ACK, FIN and RST flags unset.[!] --syn Only match TCP packets with the SYN bit set and the ACK and FIN bits cleared. Such packets are used to request TCP connection initiation; for example, blocking such packets coming in an interface will prevent incoming TCP connections, but outgoing TCP connections will be unaffected. It is equivalent to --tcp-flags SYN,RST,ACK SYN. If the "!" flag precedes the "-- http://www.iptablesrocks.org/syntax/man_iptables.htm (6 of 20) [2/13/2004 8:04:51 PM]
  • 23. Manpage of IPTABLES syn", the sense of the option is inverted.--tcp-option [!] number Match if TCP option set.--mss value[:value] Match TCP SYN or SYN/ACK packets with the specified MSS value (or range), which control the maximum packet size for that connection.udpThese extensions are loaded if `--protocol udp is specified. It provides the following options:--source-port [!] port[:port] Source port or port range specification. See the description of the --source-port option of the TCP extension for details.--destination-port [!] port[:port] Destination port or port range specification. See the description of the --destination-port option of the TCP extension for details.icmpThis extension is loaded if `--protocol icmp is specified. It provides the following option:--icmp-type [!] typename This allows specification of the ICMP type, which can be a numeric ICMP type, or one of the ICMP type names shown by the command iptables -p icmp -hmac--mac-source [!] address Match source MAC address. It must be of the form XX:XX:XX:XX:XX:XX. Note that this only makes sense for packets coming from an Ethernet device and entering the PREROUTING, FORWARD or INPUT chains. http://www.iptablesrocks.org/syntax/man_iptables.htm (7 of 20) [2/13/2004 8:04:51 PM]
  • 24. Manpage of IPTABLESlimitThis module matches at a limited rate using a token bucket filter. A rule using this extension will matchuntil this limit is reached (unless the `! flag is used). It can be used in combination with the LOG targetto give limited logging, for example.--limit rate Maximum average matching rate: specified as a number, with an optional `/second, `/minute, `/hour, or `/day suffix; the default is 3/hour.--limit-burst number Maximum initial number of packets to match: this number gets recharged by one every time the limit specified above is not reached, up to this number; the default is 5.multiportThis module matches a set of source or destination ports. Up to 15 ports can be specified. It can only beused in conjunction with -p tcp or -p udp.--source-ports port[,port[,port...]] Match if the source port is one of the given ports. The flag --sports is a convenient alias for this option.--destination-ports port[,port[,port...]] Match if the destination port is one of the given ports. The flag --dports is a convenient alias for this option.--ports port[,port[,port...]] Match if the both the source and destination ports are equal to each other and to one of the given ports.markThis module matches the netfilter mark field associated with a packet (which can be set using the MARKtarget below).--mark value[/mask] Matches packets with the given unsigned mark value (if a mask is specified, this is logically http://www.iptablesrocks.org/syntax/man_iptables.htm (8 of 20) [2/13/2004 8:04:51 PM]
  • 25. Manpage of IPTABLES ANDed with the mask before the comparison).ownerThis module attempts to match various characteristics of the packet creator, for locally-generated packets.It is only valid in the OUTPUT chain, and even this some packets (such as ICMP ping responses) mayhave no owner, and hence never match.--uid-owner userid Matches if the packet was created by a process with the given effective user id.--gid-owner groupid Matches if the packet was created by a process with the given effective group id.--pid-owner processid Matches if the packet was created by a process with the given process id.--sid-owner sessionid Matches if the packet was created by a process in the given session group.--cmd-owner name Matches if the packet was created by a process with the given command name. (this option is present only if iptables was compiled under a kernel supporting this feature)stateThis module, when combined with connection tracking, allows access to the connection tracking state forthis packet.--state state Where state is a comma separated list of the connection states to match. Possible states are INVALID meaning that the packet is associated with no known connection, ESTABLISHED meaning that the packet is associated with a connection which has seen packets in both directions, NEW meaning that the packet has started a new connection, or otherwise associated with a connection which has not seen packets in both directions, and RELATED meaning that the packet is starting a new connection, but is associated with an existing connection, such as an FTP data transfer, or an ICMP error.conntrack http://www.iptablesrocks.org/syntax/man_iptables.htm (9 of 20) [2/13/2004 8:04:51 PM]
  • 26. Manpage of IPTABLESThis module, when combined with connection tracking, allows access to more connection trackinginformation than the "state" match. (this module is present only if iptables was compiled under a kernelsupporting this feature)--ctstate state Where state is a comma separated list of the connection states to match. Possible states are INVALID meaning that the packet is associated with no known connection, ESTABLISHED meaning that the packet is associated with a connection which has seen packets in both directions, NEW meaning that the packet has started a new connection, or otherwise associated with a connection which has not seen packets in both directions, and RELATED meaning that the packet is starting a new connection, but is associated with an existing connection, such as an FTP data transfer, or an ICMP error. SNAT A virtual state, matching if the original source address differs from the reply destination. DNAT A virtual state, matching if the original destination differs from the reply source.--ctproto proto Protocol to match (by number or name)--ctorigsrc [!] address[/mask] Match against original source address--ctorigdst [!] address[/mask] Match against original destination address--ctreplsrc [!] address[/mask] Match against reply source address--ctrepldst [!] address[/mask] Match against reply destination address--ctstatus [NONE|EXPECTED|SEEN_REPLY|ASSURED][,...] Match against internal conntrack states--ctexpire time[:time] Match remaining lifetime in seconds against given value or range of values (inclusive)dscpThis module matches the 6 bit DSCP field within the TOS field in the IP header. DSCP has supersededTOS within the IETF.--dscp value Match against a numeric (decimal or hex) value [0-32].--dscp-class DiffServ Class Match the DiffServ class. This value may be any of the BE, EF, AFxx or CSx classes. It will then be converted into its according numeric value. http://www.iptablesrocks.org/syntax/man_iptables.htm (10 of 20) [2/13/2004 8:04:51 PM]
  • 27. Manpage of IPTABLESpkttypeThis module matches the link-layer packet type.--pkt-type [unicast|broadcast|multicast]tosThis module matches the 8 bits of Type of Service field in the IP header (ie. including the precedencebits).--tos tos The argument is either a standard name, (use iptables -m tos -h to see the list), or a numeric value to match.ahThis module matches the SPIs in AH header of IPSec packets.--ahspi [!] spi[:spi]espThis module matches the SPIs in ESP header of IPSec packets.--espspi [!] spi[:spi]length http://www.iptablesrocks.org/syntax/man_iptables.htm (11 of 20) [2/13/2004 8:04:51 PM]
  • 28. Manpage of IPTABLESThis module matches the length of a packet against a specific value or range of values.--length length[:length]ttlThis module matches the time to live field in the IP header.--ttl ttl Matches the given TTL value.uncleanThis module takes no options, but attempts to match packets which seem malformed or unusual. This isregarded as experimental.TARGET EXTENSIONSiptables can use extended target modules: the following are included in the standard distribution.LOGTurn on kernel logging of matching packets. When this option is set for a rule, the Linux kernel will printsome information on all matching packets (like most IP header fields) via the kernel log (where it can beread with dmesg or syslogd(8)). This is a "non-terminating target", i.e. rule traversal continues at the nextrule. So if you want to LOG the packets you refuse, use two separate rules with the same matchingcriteria, first using target LOG then DROP (or REJECT).--log-level level Level of logging (numeric or see syslog.conf(5)).--log-prefix prefix Prefix log messages with the specified prefix; up to 29 letters long, and useful for distinguishing messages in the logs.--log-tcp-sequence Log TCP sequence numbers. This is a security risk if the log is readable by users. http://www.iptablesrocks.org/syntax/man_iptables.htm (12 of 20) [2/13/2004 8:04:51 PM]
  • 29. Manpage of IPTABLES--log-tcp-options Log options from the TCP packet header.--log-ip-options Log options from the IP packet header.MARKThis is used to set the netfilter mark value associated with the packet. It is only valid in the mangle table.It can for example be used in conjunction with iproute2.--set-mark markREJECTThis is used to send back an error packet in response to the matched packet: otherwise it is equivalent toDROP so it is a terminating TARGET, ending rule traversal. This target is only valid in the INPUT,FORWARD and OUTPUT chains, and user-defined chains which are only called from those chains. Thefollowing option controls the nature of the error packet returned:--reject-with type The type given can be icmp-net-unreachable, icmp-host-unreachable, icmp-port-unreachable, icmp-proto-unreachable, icmp-net-prohibited or icmp-host-prohibited, which return the appropriate ICMP error message (port-unreachable is the default). The option tcp-reset can be used on rules which only match the TCP protocol: this causes a TCP RST packet to be sent back. This is mainly useful for blocking ident (113/tcp) probes which frequently occur when sending mail to broken mail hosts (which wont accept your mail otherwise).TOSThis is used to set the 8-bit Type of Service field in the IP header. It is only valid in the mangle table.--set-tos tos You can use a numeric TOS values, or use iptables -j TOS -h http://www.iptablesrocks.org/syntax/man_iptables.htm (13 of 20) [2/13/2004 8:04:51 PM]
  • 30. Manpage of IPTABLES to see the list of valid TOS names.MIRRORThis is an experimental demonstration target which inverts the source and destination fields in the IPheader and retransmits the packet. It is only valid in the INPUT, FORWARD and PREROUTINGchains, and user-defined chains which are only called from those chains. Note that the outgoing packetsare NOT seen by any packet filtering chains, connection tracking or NAT, to avoid loops and otherproblems.SNATThis target is only valid in the nat table, in the POSTROUTING chain. It specifies that the sourceaddress of the packet should be modified (and all future packets in this connection will also be mangled),and rules should cease being examined. It takes one type of option:--to-source ipaddr[-ipaddr][:port-port] which can specify a single new source IP address, an inclusive range of IP addresses, and optionally, a port range (which is only valid if the rule also specifies -p tcp or -p udp). If no port range is specified, then source ports below 512 will be mapped to other ports below 512: those between 512 and 1023 inclusive will be mapped to ports below 1024, and other ports will be mapped to 1024 or above. Where possible, no port alteration will occur.You can add several --to-source options. If you specify more than one source address, either via an address range or multiple --to-source options, a simple round- robin (one after another in cycle) takes place between these adresses.DNATThis target is only valid in the nat table, in the PREROUTING and OUTPUT chains, and user-definedchains which are only called from those chains. It specifies that the destination address of the packetshould be modified (and all future packets in this connection will also be mangled), and rules shouldcease being examined. It takes one type of option:--to-destination ipaddr[-ipaddr][:port-port] which can specify a single new destination IP address, an inclusive range of IP addresses, and optionally, a port range (which is only valid if the rule also specifies -p tcp or -p udp). If no port range is specified, then the destination port will never be modified. http://www.iptablesrocks.org/syntax/man_iptables.htm (14 of 20) [2/13/2004 8:04:51 PM]
  • 31. Manpage of IPTABLESYou can add several --to-destination options. If you specify more than one destination address, either via an address range or multiple --to-destination options, a simple round-robin (one after another in cycle) load balancing takes place between these adresses.MASQUERADEThis target is only valid in the nat table, in the POSTROUTING chain. It should only be used withdynamically assigned IP (dialup) connections: if you have a static IP address, you should use the SNATtarget. Masquerading is equivalent to specifying a mapping to the IP address of the interface the packet isgoing out, but also has the effect that connections are forgotten when the interface goes down. This is thecorrect behavior when the next dialup is unlikely to have the same interface address (and hence anyestablished connections are lost anyway). It takes one option:--to-ports port[-port] This specifies a range of source ports to use, overriding the default SNAT source port-selection heuristics (see above). This is only valid if the rule also specifies -p tcp or -p udp.REDIRECTThis target is only valid in the nat table, in the PREROUTING and OUTPUT chains, and user-definedchains which are only called from those chains. It alters the destination IP address to send the packet tothe machine itself (locally-generated packets are mapped to the 127.0.0.1 address). It takes one option:--to-ports port[-port] This specifies a destination port or range of ports to use: without this, the destination port is never altered. This is only valid if the rule also specifies -p tcp or -p udp.ULOGThis target provides userspace logging of matching packets. When this target is set for a rule, the Linuxkernel will multicast this packet through a netlink socket. One or more userspace processes may thensubscribe to various multicast groups and receive the packets. Like LOG, this is a "non-terminatingtarget", i.e. rule traversal continues at the next rule.--ulog-nlgroup nlgroup http://www.iptablesrocks.org/syntax/man_iptables.htm (15 of 20) [2/13/2004 8:04:51 PM]
  • 32. Manpage of IPTABLES This specifies the netlink group (1-32) to which the packet is sent. Default value is 1.--ulog-prefix prefix Prefix log messages with the specified prefix; up to 32 characters long, and useful for distinguishing messages in the logs.--ulog-cprange size Number of bytes to be copied to userspace. A value of 0 always copies the entire packet, regardless of its size. Default is 0.--ulog-qthreshold size Number of packet to queue inside kernel. Setting this value to, e.g. 10 accumulates ten packets inside the kernel and transmits them as one netlink multipart message to userspace. Default is 1 (for backwards compatibility).TCPMSSThis target allows to alter the MSS value of TCP SYN packets, to control the maximum size for thatconnection (usually limiting it to your outgoing interfaces MTU minus 40). Of course, it can only be usedin conjunction with -p tcp.This target is used to overcome criminally braindead ISPs or servers which block ICMP FragmentationNeeded packets. The symptoms of this problem are that everything works fine from your Linuxfirewall/router, but machines behind it can never exchange large packets:1) Web browsers connect, then hang with no data received.2) Small mail works fine, but large emails hang.3) ssh works fine, but scp hangs after initial handshaking.Workaround: activate this option and add a rule to your firewall configuration like:iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu--set-mss value Explicitly set MSS option to specified value.--clamp-mss-to-pmtu Automatically clamp MSS value to (path_MTU - 40).These options are mutually exclusive.DSCP http://www.iptablesrocks.org/syntax/man_iptables.htm (16 of 20) [2/13/2004 8:04:51 PM]
  • 33. Manpage of IPTABLESThis target allows to alter the value of the DSCP bits within the TOS header of the IPv4 packet. As thismanipulates a packet, it can only be used in the mangle table.--set-dscp value Set the DSCP field to a numerical value (can be decimal or hex)--set-dscp-class class Set the DSCP field to a DiffServ class.ECNThis target allows to selectively work around known ECN blackholes. It can only be used in the mangletable.--ecn-tcp-remove Remove all ECN bits from the TCP header. Of course, it can only be used in conjunction with -p tcp.DIAGNOSTICSVarious error messages are printed to standard error. The exit code is 0 for correct functioning. Errorswhich appear to be caused by invalid or abused command line parameters cause an exit code of 2, andother errors cause an exit code of 1.BUGSBugs? Whats this? ;-) Well... the counters are not reliable on sparc64.COMPATIBILITY WITH IPCHAINSThis iptables is very similar to ipchains by Rusty Russell. The main difference is that the chains INPUTand OUTPUT are only traversed for packets coming into the local host and originating from the localhost respectively. Hence every packet only passes through one of the three chains; previously a forwardedpacket would pass through all three. http://www.iptablesrocks.org/syntax/man_iptables.htm (17 of 20) [2/13/2004 8:04:51 PM]
  • 34. Manpage of IPTABLESThe other main difference is that -i refers to the input interface; -o refers to the output interface, and bothare available for packets entering the FORWARD chain.iptables is a pure packet filter when using the default `filter table, with optional extension modules. Thisshould simplify much of the previous confusion over the combination of IP masquerading and packetfiltering seen previously. So the following options are handled differently:-j MASQ-M -S-M -LThere are several other changes in iptables.SEE ALSOiptables-save(8), iptables-restore(8), ip6tables(8), ip6tables-save(8), ip6tables-restore(8). The packet-filtering-HOWTO details iptables usage for packet filtering, the NAT-HOWTO details NAT, the netfilter-extensions-HOWTO details the extensions that are not in the standard distribution, and the netfilter-hacking-HOWTO details the netfilter internals.See http://www.netfilter.org/.AUTHORSRusty Russell wrote iptables, in early consultation with Michael Neuling.Marc Boucher made Rusty abandon ipnatctl by lobbying for a generic packet selection framework iniptables, then wrote the mangle table, the owner match, the mark stuff, and ran around doing cool stuffeverywhere.James Morris wrote the TOS target, and tos match.Jozsef Kadlecsik wrote the REJECT target.Harald Welte wrote the ULOG target, TTL, DSCP, ECN matches and targets.The Netfilter Core Team is: Marc Boucher, Jozsef Kadlecsik, James Morris, Harald Welte and RustyRussell.Man page written by Herve Eychenne <rv@wallfire.org>. http://www.iptablesrocks.org/syntax/man_iptables.htm (18 of 20) [2/13/2004 8:04:51 PM]
  • 35. Manpage of IPTABLESIndexNAMESYNOPSISDESCRIPTIONTARGETSTABLESOPTIONS COMMANDS PARAMETERS OTHER OPTIONSMATCH EXTENSIONS tcp udp icmp mac limit multiport mark owner state conntrack dscp pkttype tos ah esp length ttl uncleanTARGET EXTENSIONS LOG MARK REJECT TOShttp://www.iptablesrocks.org/syntax/man_iptables.htm (19 of 20) [2/13/2004 8:04:51 PM]
  • 36. Manpage of IPTABLES MIRROR SNAT DNAT MASQUERADE REDIRECT ULOG TCPMSS DSCP ECNDIAGNOSTICSBUGSCOMPATIBILITY WITH IPCHAINSSEE ALSOAUTHORSThis document was created by man2html, using the manual pages.Time: 05:21:18 GMT, January 07, 2004 http://www.iptablesrocks.org/syntax/man_iptables.htm (20 of 20) [2/13/2004 8:04:51 PM]
  • 37. http://www.iptablesrocks.org/guide/ home | syntax & structure | examples | faq | contact | links The iptablesrocks.org iptables firewall setup guideAn overview:The iptablesrocks.org iptables firewall is geared for a typical webserver running the following services:SSHHTTP and HTTPSFTPDNSSMTPPOP3IMAP and IMAPSMySQLWhen running a typical web server, you need a firewall that is secure and offers protection, but you also need one that allows all needed traffic to beable to enter and leave the server so that your servers day to day operations can carry on unimpeded. This particular iptables configuration does thefollowing:1. Uses the "mangle" portion of the table to effectively block and/or confuse most port scans. These rules deal with FIN,SYN,RST,PSH,ACK,URGFIN,PSH and URG packets.2. Establishes a secure foundation by initially blocking all incoming, outgoing and forwarded packets COMPLETELY.3. With all incoming packets dropped by default, it then grants incoming access to a select number of ports. These ports are ports that a typical webserver might allow.Open inbound ports include: 20 & 21 (ftp), 22 (ssh), 25 (smtp), 53 (dns), 80 (http), 110 (pop), 143 (imap), 443 (https), 993 (imaps)4. With all outbound packets dropped by default, it then grants outbound access to a select number of ports. These ports are posts that a typical webserver might allow.Open outbound ports include: 20 & 21 (ftp), 22 (ssh), 25 (smtp), 43 (whois), 53 (dns), 80 (http), 110 (pop), 143 (imap), 443 (https), 993 (imaps)5. All requests to prohibited ports are logged to a custom log file. Additional logging is also possible.6. An installation of "Iptables Log Analyzer", which you provides a web based tool to monitor the firewall logs. Start the installation here home | syntax & structure | examples | faq | contact | links Site last modified: February 13, 2004 15:27:51 http://www.iptablesrocks.org/guide/ [2/13/2004 8:04:52 PM]
  • 38. iptablesrocks.org - Preparation home | syntax & structure | examples | faq | contact | links The iptablesrocks.org iptables firewall setup guideSystem Requirements/Installation:Iptables is geared for Linux type operating systems. This setup guide is geared for Redhat Linux and Redhat Enterprise Linux. However you canprobably apply this to any other Linux distro that Iptables will run on. In order to run this setup, you will obviously need to have iptables installed onyour server.On a Redhat server, you can usually find out if you have the iptables RPM package installed by running the following commnand:rpm -q iptablesIf iptables is installed, you should get an output like this:iptables-1.2.8-12If iptables is not installed on your server, you can either download the RPM from Redhats site or, if your server is registered with Redhat Networksupdate service, you can install iptables directly from Redhat with the following command:up2date -i iptablesPre-configuration:As part of the preparation for our new iptables firewall, were going to adjust the kernel logging configuration so that the firewall will log its activites to acustom logfile. Heres how you do it...vi /etc/syslog.confAdd the following to the syslog.conf file:#IPTables logging# kernel messages.kern.debug;kern.info /var/log/firewallSave and exit the file.Now lets activate the changes.../etc/rc.d/init.d/syslog restartYour kernel should now log the activity of the soon to be firewall to /var/log/firewall. Once we start up the iptables firewall, the /var/log/firewall file will bethe location of the logging output of the firewall. This output will, in turn, be analyzed by the "Iptables Log Analyzer" tool and put in to a web accesibleand user friendly format. Woohoo!The last thing you will want to do is to add a module to your kernel. The "ip_conntrack_ftp" module will need to be added so that FTP sessions canfunction correctly. If you dont add this module, the firewall will prevent proper FTP sessions. Fortunately, adding the module is easy. Jus run thefollowing command:insmod ip_conntrack_ftpViola! The module is added. You may want to add that line to your servers /etc/rc.local file to ensure that the module loads on boot. Well cover thatlater in the guide. http://www.iptablesrocks.org/guide/preparation.php (1 of 2) [2/13/2004 8:04:52 PM]
  • 39. iptablesrocks.org - Preparation Proceed to the next step home | syntax & structure | examples | faq | contact | links Site last modified: February 13, 2004 15:27:51http://www.iptablesrocks.org/guide/preparation.php (2 of 2) [2/13/2004 8:04:52 PM]
  • 40. iptablesrocks.org - Deploying a Safetynet home | syntax & structure | examples | faq | contact | links The iptablesrocks.org iptables firewall setup guideDeploying a Safetynet:This next step is of critical importance. Whenever you start toying around with the firewall settings of any server, you will want to deploy a means foryou to regain access to the server should you accidentally lock yourself out. This may sound silly at first, but it can be very easy to lock yourself out ofyour server when making firewall adjustments, no matter how skilled you are. It only takes a tiny syntax error or a missed flag somewhere in thefirewall script to lock your server down to a point where you cannot access it. While locking yourself out of a server that you have physical access to isnot that big of a deal, it can be a nightmare if you lock yourself out of a server that you dont have physical access to. This is certainly the case if yourserver is being hosted somewhere. If you dont believe me, try skipping this step and you may end up learning your lesson the hard way.Fortunately, safeguarding against an accidental server lock down is not difficult. The procedure only takes a couple of minutes and can be a lifesaver.So heres how you do it:Our safety net is simply going to be a firewall reset script that runs of our servers crontab. We will set the script to run at regular intervals. In the way,should you lock yourself out of your server, all youll have to do is sit back and wait for the script to execute and for the firewall to reset.So lets create the reset script...vi /root/firewall_reset# Iptables firewall reset script*filter:INPUT ACCEPT [164:15203]:FORWARD ACCEPT [0:0]:OUTPUT ACCEPT [147:63028]COMMIT*mangle:PREROUTING ACCEPT [164:15203]:INPUT ACCEPT [164:15203]:FORWARD ACCEPT [0:0]:OUTPUT ACCEPT [147:63028]:POSTROUTING ACCEPT [147:63028]COMMIT*nat:PREROUTING ACCEPT [14:672]:POSTROUTING ACCEPT [9:684]:OUTPUT ACCEPT [9:684]COMMITSave and exit the fileNow lets test the reset script. The following command will utilize the "iptables-import" tool, which is used to import an iptables config script directly intothe iptables ruleset. When we import the above iptables configuration into the ruleset, it will completely reset your firewall and put your server is atotally "open" state where all packets are allowed to freely move in and out of your server. If youve locked yourself out of your server, this will drop anymistakes and let you back in.iptables-restore < /root/firewall_resetIf you dont get an error, the script worked. The last thing you will want to do is to actually look at the iptables status just to make sure that your serveris completely open as it should be. The following command will display your current iptables status:iptables -LAn open firewall should look similar to this: http://www.iptablesrocks.org/guide/safetynet.php (1 of 2) [2/13/2004 8:04:53 PM]
  • 41. iptablesrocks.org - Deploying a SafetynetChain INPUT (policy ACCEPT)target prot opt source destinationChain FORWARD (policy ACCEPT)target prot opt source destinationChain OUTPUT (policy ACCEPT)target prot opt source destinationAs you can see, the INPUT, OUTPUT and FORWARD chains of your firewall are now set to a default "ACCEPT" state. This means that your serverwill accept any packets, be they OUTBOUDN, INBOUND or FORWARDED. In other words, you have no firewall at this point. So now that we know thescript works, lets put it into the servers crontab. Well create a crontab entry that resets the firewall every 15 minutes.crontab -e0,15,30,45 * * * * /sbin/iptables-restore < /root/firewall_resetThats it. Now save and exit out of the crontab editor.Thats it. Until the crontab is disabled, your servers iptables ruleset will reset every 15 minutes. This means that if you lock yourself out later on in thissetup guide, youll only have to wait a maximum of 15 minutes before the firewall resets and the erroneous rules are dropped.Note: Obviously, once you finally get your firewall safely configured you will want to disable this crontab entry. ;)So now lets get down to business and deploy the firewall script! Proceed to the next step home | syntax & structure | examples | faq | contact | links Site last modified: February 13, 2004 15:27:51 http://www.iptablesrocks.org/guide/safetynet.php (2 of 2) [2/13/2004 8:04:53 PM]
  • 42. iptablesrocks.org - Deploying the firewall home | syntax & structure | examples | faq | contact | links The iptablesrocks.org iptables firewall setup guideDeploying the firewall:Well, its finally time to create the main firewall ruleset script. We will simply create an importable iptables ruleset script and then import it into theiptables ruleset on your server. As soon as we import it, it instantly becomes active. So lets get started.Create the firewall script...vi /root/primary_firewall#The NAT portion of the ruleset. Used for Network Address Transalation.#Usually not needed on a typical web server, but its there if you need it.*nat:PREROUTING ACCEPT [127173:7033011]:POSTROUTING ACCEPT [31583:2332178]:OUTPUT ACCEPT [32021:2375633]COMMIT#The Mangle portion of the ruleset. Here is where unwanted packet types get dropped.#This helps in making port scans against your server a bit more time consuming and difficult, but not impossible.*mangle:PREROUTING ACCEPT [444:43563]:INPUT ACCEPT [444:43563]:FORWARD ACCEPT [0:0]:OUTPUT ACCEPT [402:144198]:POSTROUTING ACCEPT [402:144198]-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP-A PREROUTING -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP-A PREROUTING -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP-A PREROUTING -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP-A PREROUTING -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROPCOMMIT#The FILTER section of the ruleset is where we initially drop all packets and then selectively open certain ports.#We will also enable logging of all dropped requests.*filter:INPUT DROP [1:242]:FORWARD DROP [0:0]:OUTPUT DROP [0:0]:LOG_DROP - [0:0]:LOG_ACCEPT - [0:0]:icmp_packets - [0:0]#First, we cover the INPUT rules, or the rules for incoming requests.#Note how at the end we log any incoming packets that are not accepted.-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT-A INPUT -p tcp -m tcp --dport 20 -j ACCEPT-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT http://www.iptablesrocks.org/guide/ruleset.php (1 of 4) [2/13/2004 8:04:54 PM]
  • 43. iptablesrocks.org - Deploying the firewall-A INPUT -p tcp -m tcp --dport 22 -j LOG_ACCEPT-A INPUT -p tcp -m tcp --dport 25 -j LOG_ACCEPT-A INPUT -p tcp -m tcp --dport 43 -j ACCEPT-A INPUT -p udp -m udp --dport 53 -j ACCEPT-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT-A INPUT -p tcp -m tcp --dport 110 -j ACCEPT-A INPUT -p tcp -m tcp --dport 143 -j ACCEPT-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT#uncomment the next line if you are running Spamassassin on your server#-A INPUT -p tcp -m tcp --dport 783 -j ACCEPT-A INPUT -p tcp -m tcp --dport 993 -j ACCEPT-A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT-A INPUT -s 127.0.0.1 -j ACCEPT-A INPUT -p icmp -j icmp_packets-A INPUT -j LOG_DROP#Next, we cover the OUTPUT rules, or the rules for all outgoing traffic.#Note how at the end we log any outbound packets that are not accepted.-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT-A OUTPUT -p tcp -m tcp --dport 20 -j ACCEPT-A OUTPUT -p tcp -m tcp --dport 21 -j ACCEPT-A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT-A OUTPUT -p tcp -m tcp --dport 23 -j ACCEPT-A OUTPUT -p tcp -m tcp --dport 25 -j ACCEPT-A OUTPUT -p tcp -m tcp --dport 43 -j ACCEPT-A OUTPUT -p udp -m udp --dport 53 -j ACCEPT-A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT-A OUTPUT -p tcp -m tcp --dport 110 -j ACCEPT-A OUTPUT -p tcp -m tcp --dport 143 -j ACCEPT-A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT#uncomment the next line if you are running Spamassassin on your server#-A OUTPUT -p tcp -m tcp --dport 783 -j ACCEPT-A OUTPUT -p tcp -m tcp --dport 993 -j ACCEPT-A OUTPUT -p tcp -m tcp --dport 3306 -j ACCEPT-A OUTPUT -d 127.0.0.1 -j ACCEPT-A OUTPUT -p icmp -j icmp_packets-A OUTPUT -j LOG_DROP#Here we have 2 sets of logging rules. One for dropped packets to log all dropped requests and one for accepted packets, should we wishto log any accepted requesets.-A LOG_DROP -j LOG --log-prefix "[IPTABLES DROP] : " --log-tcp-options --log-ip-options-A LOG_DROP -j DROP-A LOG_ACCEPT -j LOG --log-prefix "[IPTABLES ACCEPT] : " --log-tcp-options --log-ip-options-A LOG_ACCEPT -j ACCEPT#And finally, a rule to deal with ICMP requests. We drop all ping requests except from our own server.# Make sure you replace 1.2.3.4 with the IP address of your server.-A icmp_packets -p icmp -m icmp --icmp-type 0 -j ACCEPT-A icmp_packets -s 1.2.3.4 -p icmp -m icmp --icmp-type 8 -j ACCEPT-A icmp_packets -p icmp -m icmp --icmp-type 8 -j DROP-A icmp_packets -p icmp -m icmp --icmp-type 3 -j ACCEPT-A icmp_packets -p icmp -m icmp --icmp-type 11 -j ACCEPTCOMMITSave and exit the file.Now import the firewall into your servers iptables ruleset...iptables-restore < /root/primary_firewallIf you dont get any errors, your firewall should now be active. So lets take a look at the iptables status and see what it looks like.iptables -L http://www.iptablesrocks.org/guide/ruleset.php (2 of 4) [2/13/2004 8:04:54 PM]
  • 44. iptablesrocks.org - Deploying the firewallYou should see an output like this:Chain INPUT (policy DROP)target prot opt source destinationACCEPT all -- anywhere anywhere state RELATED,ESTABLISHEDACCEPT tcp -- anywhere anywhere tcp dpt:ftp-dataACCEPT tcp -- anywhere anywhere tcp dpt:ftpLOG_ACCEPT tcp -- anywhere anywhere tcp dpt:sshLOG_ACCEPT tcp -- anywhere anywhere tcp dpt:smtpACCEPT tcp -- anywhere anywhere tcp dpt:nicnameACCEPT udp -- anywhere anywhere udp dpt:domainACCEPT tcp -- anywhere anywhere tcp dpt:httpACCEPT tcp -- anywhere anywhere tcp dpt:pop3ACCEPT tcp -- anywhere anywhere tcp dpt:imapACCEPT tcp -- anywhere anywhere tcp dpt:httpsACCEPT tcp -- anywhere anywhere tcp dpt:imapsACCEPT tcp -- anywhere anywhere tcp dpt:mysqlACCEPT all -- localhost.localdomain anywhereicmp_packets icmp -- anywhere anywhereLOG_DROP all -- anywhere anywhereChain FORWARD (policy DROP)target prot opt source destinationChain OUTPUT (policy DROP)target prot opt source destinationACCEPT all -- anywhere anywhere state RELATED,ESTABLISHEDACCEPT tcp -- anywhere anywhere tcp dpt:ftp-dataACCEPT tcp -- anywhere anywhere tcp dpt:ftpACCEPT tcp -- anywhere anywhere tcp dpt:sshACCEPT tcp -- anywhere anywhere tcp dpt:telnetACCEPT tcp -- anywhere anywhere tcp dpt:smtpACCEPT tcp -- anywhere anywhere tcp dpt:nicnameACCEPT udp -- anywhere anywhere udp dpt:domainACCEPT tcp -- anywhere anywhere tcp dpt:httpACCEPT tcp -- anywhere anywhere tcp dpt:pop3ACCEPT tcp -- anywhere anywhere tcp dpt:imapACCEPT tcp -- anywhere anywhere tcp dpt:httpsACCEPT tcp -- anywhere anywhere tcp dpt:imapsACCEPT tcp -- anywhere anywhere tcp dpt:mysqlACCEPT all -- anywhere localhost.localdomainicmp_packets icmp -- anywhere anywhereLOG_DROP all -- anywhere anywhereChain LOG_ACCEPT (2 references)target prot opt source destinationLOG all -- anywhere anywhere LOG level warning tcp-options ip-options prefix `[IPTABLES ACCEPT] : ACCEPT all -- anywhere anywhereChain LOG_DROP (2 references)target prot opt source destinationLOG all -- anywhere anywhere LOG level warning tcp-options ip-options prefix `[IPTABLES DROP] : DROP all -- anywhere anywhereChain icmp_packets (2 references)target prot opt source destinationACCEPT icmp -- anywhere anywhere icmp echo-replyACCEPT icmp -- yourhostname anywhere icmp echo-requestDROP icmp -- anywhere anywhere icmp echo-requestACCEPT icmp -- anywhere anywhere icmp destination-unreachableACCEPT icmp -- anywhere anywhere icmp time-exceededCongratulations. Your server now has an active firewall. Technically speaking, you can stop here and you should have a decent firewall set up for yourweb server. In the next few steps we will test the functionality of the firewall and we will also install a log analyzer that will provide us with a web basedlog monitor. Additionally, Ill show you how to ensure that your new firewall starts up on boot. http://www.iptablesrocks.org/guide/ruleset.php (3 of 4) [2/13/2004 8:04:54 PM]
  • 45. iptablesrocks.org - Deploying the firewallImportant Note: Now that your firewall is up and running, you will want to disable the "safetynet" crontab so that your firewall will remain upand running. Proceed to the next step home | syntax & structure | examples | faq | contact | links Site last modified: February 13, 2004 15:27:51 http://www.iptablesrocks.org/guide/ruleset.php (4 of 4) [2/13/2004 8:04:54 PM]
  • 46. iptablesrocks.org - Testing your new firewall home | syntax & structure | examples | faq | contact | links The iptablesrocks.org iptables firewall setup guideTesting your new firewall:With you firewall now up and running, its time to run a few simple tests on it to make sure its doing its job.From a remote server, try the following:1. SSH to your server. A successful connection will be logged in the firewall logs at /var/log/firewall. This will ensure that the ACCEPT logging functionsare working correctly.2. Run the "nmap" utility against your server (nmap 1.2.3.4, where 1.2.3.4 is your servers IP). The default namp attempt will probably fail. This is good.You can add other flags to the nmap probe to further test the server. While your firewall wont be albo to block ALL portscans, it should block many andmake the others a bit more time consuming and troublesome. A portion nmap probes activities should be logged in the /var/log/firewall logfile. The logentries will confirm that the servers DROP logging functions are working correctly.3. Try to ping your server. This should fail, since all ping requests are being dropped by the firewall.4. FTP to your server and test for full FTP functionality. If you cant get directly listings, you will need to add the "ip_conntrack_ftp" module with thecommand "insmod ip_conntrack_ftp".OK, assuming all your tests went smoothly your firewall should be in good shape. In the next step, well install the "Iptables Log Analyzer" packagewhich will allow you to view your log entries in a nice web based environment. Proceed to the next step home | syntax & structure | examples | faq | contact | links Site last modified: February 13, 2004 15:27:51 http://www.iptablesrocks.org/guide/test.php [2/13/2004 8:04:54 PM]
  • 47. iptablesrocks.org - Iptables Log Analyzer home | syntax & structure | examples | faq | contact | links The iptablesrocks.org iptables firewall setup guideInstalling Iptables Log Analyzer:Iptables Log Analyzer is a package that analyzes the log output from your iptables firewall, stores the info in a database and then produces a nice userfriendly web interface from where you can monitor your firewall log output at any time. The interface even lets you sort throught the logs and grouplogs by category. The official site for Iptables Log Analyzer can be found at http://www.gege.org/iptables/.So lets install it...The first thing you will need to do is to download the Iptables Log Analyzer package. You can download the latest copy of the package right here:http://www.iptablesrocks.org/downloads/iptables_logger_v0.4.tar.gzNow unpack it...tar zxvf iptables_logger_v0.4.tar.gzAnd now lets start the installation...cd iptablesLog into mysql and do the database work...mysql -u root -pcreate a database called "iptables"...mysql> create database iptables;Now create an admin user for the database...mysql> grant all privileges on iptables.* to iptables_admin@localhost identified by xxxxx;And a database user for the php interface...mysql> grant all privileges on iptables.* to iptables_user@localhost identified by xxxxx;All done. Lets exit out.mysql> quitNow import the "iptables" database information into the database...cat db.sql | mysql -u iptables_admin -p iptablesOK, the database should be ready now. Next well Install the web interface.cp -R web /path/to/webdocs/directory/firewall (Example: cp -R web /var/www/html/firewall)Now you will need to configure the web interface. This is done via the "config.php" file within the interface files.vi /path/to/webdocs/directory/firewall/config.php (Example: vi /var/www/html/firewall/config.php)Make sure your configuration data is as follows: http://www.iptablesrocks.org/guide/analyze.php (1 of 3) [2/13/2004 8:04:55 PM]
  • 48. iptablesrocks.org - Iptables Log Analyzer# Host of the MySQL database$db_host="localhost";# User of the MySQL database$db_user="iptables_user";# Password of the MySQL database#Make sure you enter your "iptables_user" password in place of the red xs below$db_password="xxxxxx";# Name of the database$db_name="iptables";# URL Path to your installation$url_base="/firewall/";#debug mode$debug=1;#The default number of record displayed$default_number=20;#The default chain displayed$default_chain="ALL";#The default date for packets (10000 means any)$default_date=10000;#The default ignored ports$default_ignored_ports= array();Save and exit the file.Now we will configure and install the database feeder script.vi scripts/feed_db.plMake sure the following configuration section is set properly. Make sure you enter the "iptables_user" mysql password where the xs are.my $dsn = DBI:mysql:iptables:localhost;my $db_user_name = iptables_admin;my $db_password = xxxxx;my $log_file = /var/log/syslog;my $pid_file = "/var/run/iptablelog.pid";Save and exit the file.Now we will copy the database feeder script to a location from which it can be easily called:cp feed_db.pl /usr/local/bin/Next, copy the init.d script called "iptablelog" to your servers init.d directory..cp scripts/iptablelog /etc/rc.d/init.d/Note: Ive already pre-configured the "iptableslog" init.d script, but you may want to customize it further depending on your needs.So, lets start it up!/etc/init.d/iptablelog start http://www.iptablesrocks.org/guide/analyze.php (2 of 3) [2/13/2004 8:04:55 PM]
  • 49. iptablesrocks.org - Iptables Log AnalyzerAlright! That should be it. Iptables Log Analyzer should now be running! So, lets take a look at the web interface.Open a browser and go to: http://www.yourdomain.com/firewallYou should get the Iptables Log Analyzer screen. Its pretty self explanatory, so just play around with it for a while and youll figure it out. If you dontsee any logs yet, you can trigger a test by logging out of your server and then logging in again via SSH. The SSH connection will be recorded in theiptables logs and this will appear on the Iptables Log Analyzer screen. If you need more help with Iptables Log Analyzer, check out the homepage athttp://www.gege.org/iptables/.In the next step, well cover firewall maintenence as well as step to modify your firewall when needed. Well also go over how to ensure that yourfirewall starts up on boot. Proceed to the next step home | syntax & structure | examples | faq | contact | links Site last modified: February 13, 2004 15:27:51 http://www.iptablesrocks.org/guide/analyze.php (3 of 3) [2/13/2004 8:04:55 PM]